Doğrulama Yöntemi

Bu sayfada, Pixel cihazınızda Pixel görüntüsünün meşru bir sürümünü çalıştırabilmenizi sağlayacak bir yöntem (en yüksek güven düzeyine sahip) açıklanmaktadır. Bu işlem, bilgisayarınıza bir fabrika görüntüsünü indirmeyi ve indirilen yapıyı cihazınıza yüklemeden önce günlük dahil etme kanıtı gerçekleştirmeyi içerir.

Pixel Fabrika Resminizi Doğrulama

Doğrulama Ön Koşulları

Az önce indirdiğiniz fabrika görüntüsünün iddiamızla tutarlı olduğunu doğrulamaya başlamadan önce, ağa bağlı bir bilgisayardan aşağıdakileri yapmanız gerekir.

Golang

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

wget veya curl

wget ve curl, internetten dosya almak veya indirmek için kullanılabilecek araçlardır. Bu kılavuzun geri kalanı ve sunduğumuz komut dosyası, bu araçlardan birinin sisteminizde yüklü olmasını gerektirir.

Avbtool

avbtool, fabrika resimlerinin VBMeta özetini hesaplamak ve ikili dosyaların doğrulanması için kullanılır.

Aşağıdaki komutu kullanarak AOSP deposundan indirebilir ve bağlı dokümanlar bölümünde daha fazla bilgi edinebilirsiniz.

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

Bu depo klonlandıktan sonra avbtool.py, klonlanan avb depo dizininde bulunabilir. Ayrıca bu dizini $PATH ortam değişkeninize eklemeniz gerekir.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Dahiliyet Kanıtı doğrulayıcısı

Dahiliyet kanıtı doğrulayıcı, Pixel Fabrikası resim şeffaflık günlüğünü sorgulayan ve bir resmin günlüğe dahil edilip edilmediğini gösteren bir Go modülüdür.

Yukarıdaki AVB deposu klonlandıktan sonra doğrulayıcının kaynak kodu tools/transparency/verify/

Fbpacktool

fbpacktool, Pixel'in bootloader.img dosyasında bileşenleri tek tek açmak için kullanılan bir Python komut dosyasıdır. Bu araç, avbtool.py'ün doğrulama için gerekli resimleri keşfetmesine olanak tanır.

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

wget'niz varsa üç komut dosyasını indirmek için aşağıdaki komutu verebilirsiniz:

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'niz varsa üç komut dosyasını indirmek için aşağıdaki komutları verebilirsiniz:

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

Doğrulama iş akışında terminali kullanarak çeşitli kriptografik işlemleri gerçekleştirmenize yardımcı olması için openssl adlı bir araca da ihtiyacınız vardır. Sisteminize yüklü olduğundan emin olun. Aşağıdaki komutu vererek terminalinizde kontrol yapabilir ve döndürülen sonucun boş olmadığından emin olabilirsiniz. Örneğin:

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

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

Cihazınızdaki veya Pixel Factory Image web sitesinden indirdiğiniz resmi doğrulamak için önce derleme parmak izi ve VBMeta özetinden bu resme karşılık gelen yükü oluşturmanız gerekir. Aşağıda açıklandığı gibi manuel veya otomatik olmak üzere iki seçenek vardır.

  • Derleme Parmak İzi: 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 resimlerinin farklı parçalarını birbirine bağlayan SHA-256 kriptografik özeti
    • Örnek: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe

Manuel Yük Oluşturma

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

Fabrika Görüntüsü web sitesindeki adımları uyguladıktan sonra payload.txt dosyasının içeriği aşağıdaki gibi görünmelidir:

google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Pixel Fabrika Görüntüsü web sitesinden VBMeta Özeti ve Derleme Parmak İzi'ni ayıklama

Pixel Fabrika Görüntüsü web sitesinden bir fabrika görüntüsü indirdiğinizde, indirilen dosyanın sıkıştırmasını açmanız gerekir. Bu işlem, dosyanın bulunduğu yerde başka bir klasör oluşturur. Yeni oluşturulan klasöre gidin ve ilişkili image-*.zip dosyasını açarak *.img dosyalarını tek tek elde edin. Bu ikili dosyalar bölüm resimleridir. img dosyaları arasında bir vbmeta.img dosyası 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

İndirilen tüm dosyalardan derleme parmak izini ayıklayabilir ve VBMeta özetini hesaplayabilirsiniz.

avbtool.py, $PATH cihazınıza 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 Doğrulaması

İndirilen fabrika görüntüsünü doğru şekilde doğrulamak için bootloader.img içindeki bileşenleri VBMeta yapısında ayrı ayrı açıklandığı gibi açmak amacıyla fbpacktool.py ve bu dosyanın bağımlı olduğu diğer iki python dosyasını (fbpack.py ve packedstruct.py) indirmeniz gerekir. Ayıklayıcıyı edindikten sonra, bootloader görüntüsünü açmak için fbpacktool.py'ten yararlanabilirsiniz. Örneğin:

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

Bu dizinde başka .img dosyaları görebilirsiniz. Artık çeşitli bölümlerin imzalarının eşleştiğini manuel olarak doğrulamak için avbtool.py kullanmaya devam edebilirsiniz.

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

Hata veya başarısızlık mesajı görmüyorsanız indirilen resmin 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ç sayesinde, dosyaları manuel olarak almak ve sıkıştırmasını açmak yerine yalnızca fabrika görüntüsünün URL'sini belirtmeniz yeterlidir.

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 görüntü paketini indirir, paketin sıkıştırmasını açar ve imzalanmış bölümlerin imzalarını doğrular. Doğrulama başarılı olduğunda payload.txt adlı yeni bir dosya oluşturulur. Dosyanın içeriği aşağıdakine benzer şekilde 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 dahil etme doğrulama adımlarını başlatabilirsiniz.

Resim Dahil Etmeyi Doğrulama (Dahil Etme Kanıtı)

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

Android Açık Kaynak Projesi'ndeki avb deposunda dahiliyet 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çeriğini (karton liste dizininde bulunur) kullanır.

Komutun çıkışı stdout'a yazılır:

  • OK. inclusion check success! resim günlükte yer alıyorsa,
  • FAILURE ise