Pixel İkili Program Şeffaflığı Teknik Ayrıntılar Sayfası

Pixel İkili Şeffaflık Günlüğü, şeffaflık günlüğü teknolojisinden yararlanır.

Şeffaflık günlüklerinin faydası, Sertifika Yetkililerinin verdikleri sertifikaları herkese açık Sertifika Şeffaflığı günlüklerinde yayınlamasını gerektiren bir internet protokolü olan Sertifika Şeffaflığı ile kanıtlanmıştır. Bu süreç, sertifikaların yanlış verilme oranını büyük ölçüde azaltarak internetin güvenliğini artırdı. Birçok Sertifika Şeffaflığı günlüğü operatörü, transparency.dev adresinde bulunan şeffaflık günlüklerinin bir uygulamasını kullanır.

Şeffaflık günlükleri, Merkle ağaçlarıyla uygulanır. Bu sayfada, Merkle ağaçları ve ikili şeffaflık hakkında genel bilgi sahibi olduğunuz varsayılmaktadır. Merkle ağaçlarına genel bakış için Doğrulanabilir Veri Yapıları'nı, ikili şeffaflığa genel bakış için ise açılış sayfasını inceleyin.

Günlük Uygulaması

Pixel İkili Şeffaflık Günlüğü, karoya dayalı Merkle ağacı olarak uygulanır. Döşeme içeriklerinin kökü https://developers.google.com/android/binary_transparency/tile adresinde yayınlanır. Not: Bu, normal bir web sayfası değildir. Alt dizinlerinde bulunan günlük girişleri, tarayıcı üzerinden değil, Golang SumDB TLog kitaplığı ile programatik olarak okunmalıdır.

Girişlerin neleri içerdiğine dair açıklama için Günlük İçeriği bölümüne bakın.

Bir kontrol noktasında bulunan günlüğün Merkle ağacı kök karması, https://developers.google.com/android/binary_transparency/checkpoint.txt adresinde sunulur. Kontrol noktası biçiminde sunulur. Bu Merkle ağacının yaprakları https://developers.google.com/android/binary_transparency/image_info.txt adresinde sunulur. Kontrol noktasının imzası aşağıdaki ortak anahtarla doğrulanabilir:

-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----

Doğrulama süreci, günlükteki günlük girişlerini içeren kontrol noktasını ve parçaları okur.

Doğrulama Süreci

Şeffaflık günlüğü, karma değerlerden oluşan bir Merkle ağacı ile uygulanır. Bir yaprak düğüm veri içerir ve üst düğüm, alt öğelerinin karma değerini içerir.

Şeffaflık günlüklerinin kurcalamaya karşı korumalı özelliğini doğrulamak için Merkle ağacında iki hesaplama yapılır: dahil etme kanıtı ve tutarlılık kanıtı. İlki, günlüğün bir resimli sürümle ilgili giriş içerdiğini kanıtlar. Günlük girişi, cihazdan döndürülebilen ve OS görüntülerini temsil eden bir karma olan VBMeta özetini içerir. İkincisi, ağaca yeni girişler eklendiğinde yeni kontrol noktasının ağacın önceki sürümüyle tutarlı olduğunu kanıtlar.

Pixel resminizi doğrulamak için dahil etme kanıtını gerçekleştirin. Üçüncü taraflar sürekli olarak tutarlılık kanıtı hesaplaması yaptığından bu hesaplamayı yapmak isteğe bağlıdır.

Pixel ikili şeffaflığında doğrulama kavramlarını öğrenmek istiyorsanız Pixel cihazınızda çalışan imajı kullanmak için aşağıdaki talimatları uygulayabilirsiniz. Pixel donanım yazılımını en yüksek güven düzeyinde çalıştırmak istiyorsanız Pixel İkili Şeffaflık Tam Doğrulaması sayfasındaki doğrulama sürecine bakın.

Doğrulama Ön Koşulları

Yapının (donanım yazılımı veya APK) iddiaya 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 dilinde yazılmıştır. Aracı derlemek 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, görüntüyü incelemek veya APK'ları ayıklamak için 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. https://github.com/android/android-binary-transparency/tree/main adresindeki android-binary-transparency GitHub deposunda yayınlanır.

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 uygulamasının kaynaklarını derlemek ve paketlemek için kullanılan bir derleme aracıdır. Android SDK Derleme Araçları'nın 26.0.2 ve sonraki sürümlerinde bağımsız bir araç olarak bulunabilir.

bundletool

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

wget veya curl

wget ve curl internet üzerinden 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 ayarı görüntülerinin VBMeta özetini hesaplamak ve ikili programları doğrulamak için kullanılır. avb deposunu klonladıktan sonra (Dahil Edilme 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 dosyasındaki bağımsız bileşenleri açmak için kullanılan bir Python komut dosyasıdır. APK'ları doğruluyorsanız buna ihtiyacınız yoktur. Bu araç, avbtool.py'nın doğrulama için gerekli resimleri bulmasını sağladığı için önemlidir.

fbpacktool, Python 3.6 veya sonraki bir sürümü ve PyYAML paketini gerektirir (ör. python3 -m pip install pyyaml).

Bu araçtan yararlanmak için aşağıdaki altı 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.py dosyasına fbpacktool adlı bir sembolik bağlantı oluşturmanız gerekir.

wget kullanıyorsanız:

computer:dir_to_avbtool$ wget https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

curl varsa:

computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.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şlemler yapmanıza yardımcı olur. Sisteminizde yüklü olduğundan emin olun. Aşağıdaki komutu çalıştırıp döndürülen sonucun boş olmadığından emin olarak terminalinizi kontrol edebilirsiniz:

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

Dahil etme kanıtı

Pixel sahipleri, önce ilgili meta verileri ayıklayıp ardından yeniden hesaplanan kök karmalarını yayınlanan kontrol noktasında bulunan kök karmasıyla karşılaştırarak görüntülerinin günlükte olup olmadığını kontrol edebilir. Eşleşme varsa Pixel sahibi, Tehdit Modeli'nde örneklenen bazı korumalardan yararlanabilir.

Pixel cihazdaki görüntünün şeffaflık günlüğünde olup olmadığını kontrol etmek için adb ile cihaza bağlanın ve aşağıdaki komutları çalıştırın:

FINGERPRINT=$(adb shell getprop ro.build.fingerprint)
VBMETA_DIGEST=$(adb shell getprop ro.boot.vbmeta.digest)
LOG_ENTRY="${FINGERPRINT}\n${VBMETA_DIGEST}\n"
PAYLOAD_PATH="/tmp/log_payload.txt"
echo -e $LOG_ENTRY > $PAYLOAD_PATH

cd avb/tools/transparency/verify/
go build cmd/verifier/verifier.go
./verifier --payload_path=$PAYLOAD_PATH --log_type=pixel

İlk bölüm, Pixel cihazdan meta verileri günlük girişi biçiminde alır ve /tmp/log_payload.txt dosyasına kaydeder.

İkinci bölüm, Android Doğrulanmış Başlatma deposunda yayınlanan dahil etme kanıtı doğrulayıcıyı çalıştırır. Bu araç, aday günlük girişinin karma değerini hesaplar, kontrol noktasını günlükten yeniden hesaplamak için gereken diğer karma değerleri alır ve bunları günlüğün yayınladığı kontrol noktasıyla karşılaştırır.

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

  • Resim günlüğe dahil edilmişse OK,
  • Değilse FAILURE.

Tutarlılık Kanıtı (İsteğe bağlı)

Google, Pixel fabrika ayarı görüntüsünün yeni sürümlerini düzenli olarak yayınladığından şeffaflık günlüğü sürekli olarak büyür. Bir tanık, ağacın önceki yapraklarıyla tutarlı bir şekilde büyüdüğünü kontrol eder. Tanık, ağaç kök karmasını takip eder ve ağaçtan yeni yaprak karmalarını isteyerek bir sonraki aday kök karmasını hesaplar. Şeffaflık günlüğünün kurcalanmaya karşı korumalı olması için tutarlılık açısından sürekli kontrol edilmesi gerekir.

Şeffaflık günlüğünün yalnızca ekleme davranışını üçüncü taraflar aktif olarak kontrol eder. Bu nedenle, çoğu kullanıcının bunu kendisi yapması gerekmez ancak günlüğün tutarlılığını herkes izleyebilir. Google, bu GitHub deposunda bir tanığın açık kaynaklı uygulamasını yayınlamıştır. Pixel İkili Şeffaflık (PixelBT) günlüğüne özel yapılandırmanın kullanılması gerekir.