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 Şeffaflığı ile kanıtlanmıştır. Sertifika Şeffaflığı, sertifika yetkililerinin yayınladıkları sertifikaları herkese açık Sertifika Şeffaflığı günlüklerinde yayınlamalarını gerektiren bir internet protokolüdür. Bu işlem, sertifikaların yanlış verilmesini büyük ölçüde azaltarak internetin güvenliğini artırmıştır. Birçok Sertifika Şeffaflığı günlük operatörü, transparency.dev adresinde bulunan şeffaflık günlüklerinin uygulanmasına güvenir.

Ş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ılı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üğü, döşemeye dayalı Merkle ağacı olarak uygulanır. Kutucuk 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 yer alan günlük girişleri, tarayıcı üzerinden değil, Golang SumDB TLog kitaplığı ile programatik olarak okunmalıdır.

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

Bir kontrol noktasında bulunan bir 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, kontrol noktasını ve günlük girişlerini içeren kutucukları okur.

Doğrulama süreci

Şeffaflık günlüğü, karma değerlerden oluşan bir Merkle ağacıyla uygulanır. Bir yaprak düğüm veri içerir ve bir ü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ı. İlk yöntem, günlükte bir resim sürümüne karşılık gelen bir giriş olduğunu kanıtlar. Günlük girişinde, cihazdan döndürülebilen işletim sistemi resimlerini temsil eden bir karma olan VBMeta özeti bulunur. İ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ı yapmanız isteğe bağlıdır.

Pixel Binary Transparency'deki doğrulama kavramları hakkında bilgi edinmek istiyorsanız Pixel cihazınızda çalışan görüntüyü kullanmak için aşağıdaki talimatları uygulayabilirsiniz. Pixel donanım yazılımını en yüksek güvenilirlik derecesiyle çalıştırmak istiyorsanız Pixel Binary Transparency Full Verification (Pixel İkili Şeffaflık Tam Doğrulama) sayfasındaki doğrulama sürecine bakın.

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. 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.py dosyasına fbpacktool adlı bir sembolik bağlantı oluşturmanı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

Dahil Etme Kanıtı

Pixel sahibi, önce ilgili meta verileri çıkarıp yeniden hesaplanan kök karmasını yayınlanan kontrol noktasında bulunan kök karmasıyla karşılaştırarak görüntüsünün 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

İlk kıta, meta verileri bir günlük girişi biçiminde Pixel cihazdan alır ve /tmp/log_payload.txt konumuna kaydeder.

İkinci kıta, Android Doğrulanmış Başlatma deposunda yayınlanan dahil etme kanıtı doğrulayıcısını ç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 çıktısı stdout'a yazılır:

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

Tutarlılık kanıtı (isteğe bağlı)

Google, Pixel fabrika 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ümektedir. Tanık, ağacın önceki yapraklarıyla tutarlı bir şekilde büyüdüğünü kontrol eder. Tanık, ağaç kökü karma değerini takip eder ve ağaçtan yeni yaprak karma değerlerini isteyerek sonraki aday kök karma değerini hesaplar. Bir şeffaflık günlüğünün kurcalanmaya karşı korumalı olması için tutarlılık açısından sürekli olarak kontrol edilmesi gerekir.

Şeffaflık günlüğünün yalnızca ekleme davranışı üçüncü taraflarca aktif olarak kontrol edildiğinden çoğu kullanıcının bunu kendisi yapması gerekmez ancak herkes günlüğün tutarlılığını izleyebilir. Google, bu GitHub deposunda tanıkla ilgili açık kaynaklı bir uygulama yayınladı. Pixel Binary Transparency (PixelBT) günlüğüne özel yapılandırmanın kullanılması gerekir.