Doğrulama Yöntemi

Bu sayfada, Pixel cihazınızda Pixel görüntüsünün yasal bir sürümünü çalıştırabileceğinizden emin olmanızı sağlayacak bir yöntem (en yüksek güvenilirlik derecesiyle) açıklanmaktadır. Bu işlemde, bilgisayarınıza bir fabrika görüntüsü indirmek ve cihazınıza yüklemeden önce indirilen yapıda günlük dahil etme kanıtı oluşturmak yer alır.

Pixel Fabrika Görüntünüzü Doğrulama

Doğrulama Ön Koşulları

Yapıtın (cihaz yazılımı veya APK) hak talebine uygun olduğunu doğrulamaya geçmeden önce, ağa bağlı bir bilgisayarda aşağıdaki araçların bulunduğundan emin olun. Doğrulama hedefine bağlı olarak bunların hepsine ihtiyacınız olmayabilir.

Golang

Doğrulama aracı Go ile yazılmıştır. Aracı oluşturmak için Go sitesinden Go 1.24 veya sonraki bir sürümü yükleyin.

Android Debug Bridge (ADB)

ADB, Android SDK Platform Araçları web sitesinde bulunan, resmi incelemek veya APK'ları çıkarmak için bir Android cihazla iletişim kuran bir araçtır.

Inclusion Proof doğrulayıcı

Dahil etme kanıtı doğrulayıcı, şeffaflık günlüğünü sorgulayan ve bir yapının günlüğe dahil edilip edilmediğini belirten bir Go modülüdür. Bu kitaplık, android-binary-transparency GitHub deposunda yayınlanmıştır: https://github.com/android/android-binary-transparency/tree/main

AOSP avb deposunu klonlamak için:

computer:~$ git clone https://android.googlesource.com/platform/external/avb

android-binary-transparency GitHub deposunu klonlamak için:

computer:~$ git clone https://github.com/android/android-binary-transparency

AAPT2

AAPT2 (Android Asset Packaging Tool), Android uygulamalarının kaynaklarını derlemek ve paketlemek için kullanılan bir derleme aracıdır. Bu araç, Android SDK Derleme Araçları'nın 26.0.2 ve sonraki sürümlerinde bağımsız bir araç olarak bulunur.

bundletool

bundletool, Android App Bundle (AAB) oluşturmak için kullanılan bir araçtır. APK kodu imzalarını doğrulamak için de kullanılabilir. Bu araç GitHub'dan indirilebilir.

wget veya curl

wget ve curl İnternet'ten dosya almak veya indirmek için kullanılabilen araçlardır. Doğrulama komut dosyaları bu araçlara bağlı olabileceğinden, bu araçlardan birinin yüklü olduğundan emin olun.

Avbtool

avbtool, fabrika görüntülerinin VBMeta özetini hesaplamak ve ikili dosyaları doğrulamak için kullanılır. avb deposu klonlandıktan sonra (dahil etme kanıtı doğrulayıcı bölümünde gösterildiği gibi) avbtool.py, klonlanan avb dizininde bulunabilir. Bu dizini $PATH ortam değişkeninize eklemeniz gerekir.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool, Pixel'in bootloader.img içindeki tek tek bileşenleri açmak için kullanılan bir Python komut dosyasıdır. APK'ları doğruluyorsanız bu bilgiye ihtiyacınız yoktur. Bu araç, avbtool.py'nın doğrulama için gerekli resimleri bulmasını sağladığı için önemlidir.

Bu aracı kullanmak için aşağıdaki üç Python komut dosyasını avbtool.py dosyanızın bulunduğu dizine indirmeniz, fbpacktool.py dosyasını yürütülebilir hale getirmeniz ve kolaylık sağlamak için fbpacktool adlı bir sembolik bağlantı oluşturarak fbpacktool.py dosyasına bağlamanız gerekir.

wget kullanıyorsanız:

computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

curl kullanıyorsanız:

computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

OpenSSL

openssl, doğrulama iş akışında terminali kullanarak çeşitli kriptografik işlemlerin gerçekleştirilmesine yardımcı olur. Sisteminize yüklendiğinden emin olun. Aşağıdaki komutu çalıştırıp döndürülen sonucun boş olmadığından emin olarak terminalinizde kontrol edebilirsiniz:

computer:~$ which openssl
/usr/bin/openssl

Doğrulama için Yükü Oluşturma

Cihazınızdaki görüntüyü veya Pixel Factory Image web sitesinden indirilen bir dosyayı doğrulamak için öncelikle Build Fingerprint ve VBMeta Digest'ten bu görüntüye karşılık gelen yükü oluşturmanız gerekir. Aşağıda açıklandığı gibi iki seçenek vardır: manuel veya otomatik.

  • Derleme parmak izi: Fabrika görüntüsünün dize tanımlayıcısı
    • Örnek: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
  • VBMeta Özeti: Fabrika görüntülerinin farklı parçalarını birbirine bağlayan bir SHA-256 şifreleme özeti
    • Örnek: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

Manuel Yük Oluşturma

Doğrulama için yükü manuel olarak oluşturmak üzere, bir satırda derleme parmak izini, bir sonraki satırda ise VBMeta özetini içeren bir metin dosyası payload.txt oluşturmanız gerekir. Satırlar arasında boş bir yeni satır olmalıdır (Lütfen tam biçim için Günlük İçeriği bölümüne bakın).

Fabrika İmajı web sitesindeki adımları uyguladıktan sonra payload.txt dosyasının içeriği şu şekilde görünmelidir:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
VBMeta Digest ve Build Fingerprint'i Pixel Factory Image web sitesinden çıkarma

Pixel Fabrika Görüntüsü web sitesinden fabrika görüntüsü indirdiğinizde, indirilen dosyayı zip'ten çıkarmanız gerekir. Bu işlem, yerinde başka bir klasör oluşturur. Yeni oluşturulan klasöre gidin ve ilişkili image-*.zip dosyasının sıkıştırmasını açarak tek tek *.img dosyalarını elde edin. Bu ikili dosyalar bölüm görüntüleri. img dosyaları arasında bir vbmeta.img dosyasının bulunduğundan emin olun. Aşağıdakine benzer bir tablo görürsünüz:

computer:oriole-sd1a.210817.015.a4$ unzip image-oriole-sd1a.210817.015.a4.zip
Archive:  image-oriole-sd1a.210817.015.a4.zip
  inflating: android-info.txt
  inflating: boot.img
  inflating: vendor_boot.img
  inflating: system.img
  inflating: vendor.img
  inflating: product.img
  inflating: system_ext.img
  inflating: system_other.img
  inflating: dtbo.img
  inflating: vbmeta_system.img
  inflating: vbmeta.img
  inflating: super_empty.img

Derleme parmak izini çıkarabilir ve indirilen tüm dosyalardan VBMeta özetini hesaplayabilirsiniz.

avbtool.py, $PATH için kullanıma sunulduktan sonra, derleme parmak izini ayıklamak ve yeni indirdiğiniz fabrika görüntüsünün VBMeta özetini hesaplamak için terminalinizden aşağıdaki komutları verebilirsiniz:

computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\..*build\.fingerprint=google/.*/release-keys' system.img | cut -f2 -d'='
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
computer:dir_containing_unzipped_factory_image$ avbtool.py calculate_vbmeta_digest --image vbmeta.img
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
İndirilen fabrika görüntüsünün manuel olarak doğrulanması

İndirilen fabrika görüntüsünü doğru şekilde doğrulamak için bootloader.img içindeki bileşenleri açmak üzere fbpacktool.py ve bağlı olduğu diğer iki Python dosyasını (fbpack.py ve packedstruct.py) indirmeniz gerekir. Bu dosyalar, VBMeta yapısında ayrı ayrı açıklanmıştır. Açma aracını edindikten sonra, bootloader görüntüsünü açmak için fbpacktool.py komutunu kullanabilirsiniz. Örneğin:

computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img

Bu dizinde ek .img dosyaları görmeniz gerekir. Artık avbtool.py kullanarak çeşitli bölümlerin imzalarının eşleştiğini manuel olarak doğrulayabilirsiniz.

computer:dir_containing_unzipped_images$ avbtool.py verify_image --image vbmeta.img --follow_chain_partitions
Verifying image vbmeta.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta.img
vbmeta_system: Chained but ROLLBACK_SLOT (which is 1) and KEY (which has sha1 df529646b7225015196a714006346f0768b87fcf) not specified
--
Verifying image vbmeta_system.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_system.img
product: Successfully verified sha256 hashtree of product.img for image of 2700468224 bytes
system: Successfully verified sha256 hashtree of system.img for image of 878493696 bytes
system_ext: Successfully verified sha256 hashtree of system_ext.img for image of 251334656 bytes
vbmeta_vendor: Chained but ROLLBACK_SLOT (which is 3) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image vbmeta_vendor.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_vendor.img
vendor: Successfully verified sha256 hashtree of vendor.img for image of 472940544 bytes
boot: Chained but ROLLBACK_SLOT (which is 2) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image boot.img using embedded public key
vbmeta: Successfully verified footer and SHA256_RSA4096 vbmeta struct in boot.img
boot: Successfully verified sha256 hash of boot.img for image of 24481792 bytes
abl: Successfully verified sha256 hash of abl.img for image of 1744896 bytes
bl1: Successfully verified sha256 hash of bl1.img for image of 12288 bytes
bl2: Successfully verified sha256 hash of bl2.img for image of 544768 bytes
bl31: Successfully verified sha256 hash of bl31.img for image of 86016 bytes
dtbo: Successfully verified sha256 hash of dtbo.img for image of 2152234 bytes
gsa: Successfully verified sha256 hash of gsa.img for image of 262144 bytes
ldfw: Successfully verified sha256 hash of ldfw.img for image of 4096000 bytes
pbl: Successfully verified sha256 hash of pbl.img for image of 49152 bytes
tzsw: Successfully verified sha256 hash of tzsw.img for image of 4304896 bytes
vendor_boot: Successfully verified sha256 hash of vendor_boot.img for image of 25718784 bytes
vendor_dlkm: Successfully verified sha256 hashtree of vendor_dlkm.img for image of 54505472 bytes

Herhangi bir hata veya başarısızlık mesajı görmüyorsanız indirilen görüntünün VBMeta'sı başarıyla doğrulanmış demektir.

Otomatik Yük Oluşturma

Size kolaylık sağlamak için kullanabileceğiniz bir Python komut dosyası da sağladık. Bu araçla, dosyaları manuel olarak getirip sıkıştırmayı açmak yerine yalnızca fabrika görüntüsünün URL'sini belirtmeniz gerekir.

computer:dir_to_avb_repo/tools/transparency$ python3 ./pixel_factory_image_verify.py https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Fetching file from: https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Successfully downloaded file.
Successfully unpacked factory image.
Successfully unpacked factory image partitions.
Successfully unpacked bootloader image.
Successfully verified VBmeta.
Successfully extracted build fingerprint.
Successfully calculated VBMeta Digest.
The build fingerprint for factory image is: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
The VBMeta Digest for factory image is: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

A corresponding "payload.txt" file has been created.

Yukarıdaki komutu yürütmek, fabrika resmi paketini indirir, paketi açar ve imzalı bölümlerin imzalarını doğrular. Doğrulama işlemi başarıyla tamamlandıktan sonra payload.txt adlı yeni bir dosya oluşturulur ve içeriği aşağıdaki gibi görünür:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

payload.txt dosyanız başarıyla oluşturulduktan sonra resim ekleme doğrulama adımlarını başlatabilirsiniz.

Resim dahil etme işlemini doğrulama (dahil etme kanıtı)

Yükünüzü oluşturduktan sonra, yükün yolunu gösterecek bir kabuk değişkeni (ör. $PAYLOAD_PATH) ayarlayın.

Android Açık Kaynak Projesi'ndeki avb deposunda bir dahil etme kanıtı aracı yayınlandı. Çalıştırmak için:

computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=../payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=pixel

Doğrulayıcı, resim yükünüzün şeffaflık günlüğünde olup olmadığını (yani Google tarafından yayınlanıp yayınlanmadığını) kontrol etmek için kontrol noktasını ve günlük içeriklerini (tile dizininde bulunur) kullanır.

Komutun çıktısı stdout'a yazılır:

  • OK. inclusion check success! Resim günlükte yer alıyorsa,
  • FAILURE değilse.