Halaman Detail Teknis Transparansi Biner Pixel

Log Transparansi Biner Pixel memanfaatkan teknologi log transparansi.

Kegunaan log transparansi telah terbukti dengan Transparansi Sertifikat, sebuah protokol Internet yang mewajibkan Otoritas Sertifikat memublikasikan sertifikat yang mereka terbitkan ke log Transparansi Sertifikat publik. Proses ini telah sangat mengurangi kesalahan penerbitan sertifikat, sehingga meningkatkan keamanan Internet. Banyak operator log Transparansi Sertifikat mengandalkan penerapan log transparansi yang ditemukan di transparency.dev.

Log transparansi diimplementasikan dengan pohon Merkle. Halaman ini mengasumsikan pengetahuan umum tentang pohon Merkle dan transparansi biner. Lihat Struktur Data yang Dapat Diverifikasi untuk mengetahui ringkasan pohon Merkle dan halaman landing untuk mengetahui ringkasan transparansi biner.

Implementasi Log

Log Transparansi Biner Pixel diterapkan sebagai pohon Merkle berbasis petak. Root konten kartu ditayangkan di https://developers.google.com/android/binary_transparency/tile. Catatan: ini bukan halaman web biasa; entri log yang ada di subdirektorinya harus dibaca secara terprogram dengan library TLog Golang SumDB, bukan melalui browser.

Lihat Log Konten untuk mengetahui deskripsi isi entri.

Hash root pohon Merkle dari log, yang terdapat dalam titik pemeriksaan, ditayangkan di https://developers.google.com/android/binary_transparency/checkpoint.txt. Checkpoint ini disajikan dalam format checkpoint. Leaf Merkle tree ini ditayangkan di https://developers.google.com/android/binary_transparency/image_info.txt. Tanda tangan titik pemeriksaan dapat diverifikasi dengan kunci publik berikut:

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

Proses verifikasi membaca checkpoint dan petak yang berisi entri log dari log.

Proses Verifikasi

Log transparansi diimplementasikan dengan pohon Merkle yang terdiri dari hash. Node daun berisi data, dan node induk berisi hash turunannya.

Dua komputasi dilakukan pada pohon Merkle untuk memverifikasi properti anti-manipulasi log transparansi: bukti penyertaan dan bukti konsistensi. Yang pertama membuktikan bahwa log menyertakan entri yang sesuai dengan versi gambar, yaitu. Entri log menyertakan ringkasan VBMeta, hash yang merepresentasikan image OS, yang dapat ditampilkan dari perangkat. Yang terakhir membuktikan bahwa saat entri baru ditambahkan ke pohon, titik pemeriksaan baru konsisten dengan versi pohon sebelumnya.

Untuk memverifikasi image Pixel Anda, lakukan bukti penyertaan. Melakukan komputasi bukti konsistensi bersifat opsional, karena pihak ketiga terus melakukannya.

Jika ingin memahami konsep verifikasi dalam transparansi Biner Pixel, Anda dapat mengikuti petunjuk di bawah untuk menggunakan gambar yang berjalan di perangkat Pixel Anda. Jika Anda ingin menjalankan firmware Pixel dengan tingkat keyakinan tertinggi, lihat proses verifikasi di Verifikasi Penuh Transparansi Biner Pixel.

Prasyarat Verifikasi

Sebelum melanjutkan untuk memverifikasi bahwa artefak (firmware atau APK) sesuai dengan klaim, pastikan alat berikut tersedia di komputer yang terhubung ke jaringan. Bergantung pada target verifikasi, Anda mungkin tidak memerlukan semuanya.

Golang

Alat verifikasi ditulis dalam Go. Untuk mem-build-nya, instal Go 1.24 atau yang lebih baru dari situs Go.

Android Debug Bridge (ADB)

ADB adalah alat yang berkomunikasi dengan perangkat Android untuk memeriksa gambar atau mengekstrak APK, yang tersedia di situs Android SDK Platform Tools.

Pemverifikasi Bukti Penyertaan

Pemverifikasi bukti penyertaan adalah modul Go yang mengkueri log transparansi dan menghasilkan output apakah artefak disertakan dalam log. File ini dipublikasikan di repositori GitHub android-binary-transparency di https://github.com/android/android-binary-transparency/tree/main

Untuk meng-clone repositori AOSP avb:

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

Untuk meng-clone repositori GitHub android-binary-transparency:

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

AAPT2

AAPT2 (Android Asset Packaging Tool) adalah alat build yang digunakan untuk mengompilasi dan memaketkan resource aplikasi Android. AAPT2 dapat ditemukan sebagai alat mandiri di Android SDK Build Tools versi 26.0.2 dan yang lebih tinggi.

bundletool

bundletool adalah alat yang digunakan untuk membuat Android App Bundle (AAB). Alat ini juga dapat digunakan untuk memverifikasi tanda tangan kode APK. Library ini dapat didownload dari GitHub.

wget atau curl

wget dan curl adalah alat yang dapat digunakan untuk mengambil atau mendownload file dari Internet. Pastikan Anda telah menginstal salah satu alat ini, karena skrip verifikasi mungkin bergantung padanya.

Avbtool

avbtool digunakan untuk menghitung ringkasan VBMeta image pabrikan dan verifikasi biner. Setelah meng-clone repositori avb (seperti yang ditunjukkan di bagian verifier Bukti Penyertaan), avbtool.py dapat ditemukan dalam direktori avb yang di-clone. Anda harus menambahkan direktori ini ke variabel lingkungan $PATH.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool adalah skrip Python yang digunakan untuk mengekstrak komponen individual di bootloader.img Pixel. Anda tidak memerlukan ini jika Anda memverifikasi APK. Alat ini penting karena memungkinkan avbtool.py menemukan gambar yang diperlukan untuk verifikasi.

Untuk menggunakan alat ini, Anda harus mendownload tiga skrip python berikut ke direktori tempat avbtool.py berada, menjadikan fbpacktool.py dapat dieksekusi, dan membuat symlink bernama fbpacktool ke fbpacktool.py untuk mempermudah.

Jika Anda memiliki wget:

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

Jika Anda memiliki curl:

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 membantu melakukan berbagai operasi kriptografi menggunakan terminal dalam alur kerja verifikasi. Pastikan sudah terinstal di sistem Anda. Anda dapat memeriksa di terminal dengan menjalankan perintah berikut dan memastikan hasil yang ditampilkan tidak kosong:

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

Bukti Penyertaan

Pemilik Pixel dapat memeriksa apakah gambarnya ada di log dengan terlebih dahulu mengekstrak metadata yang relevan, lalu membandingkan hash root yang dihitung ulang dengan hash root yang ada dalam titik pemeriksaan yang dipublikasikan. Jika cocok, pemilik Pixel dapat diyakinkan bahwa beberapa perlindungan yang dicontohkan dalam Model Ancaman akan diberikan.

Untuk memeriksa apakah gambar di perangkat Pixel ada dalam log transparansi, hubungkan ke perangkat dengan adb, lalu jalankan perintah berikut:

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

Stanza pertama mengambil metadata dari perangkat Pixel dalam format entri log, dan menyimpannya ke /tmp/log_payload.txt.

Stanza kedua menjalankan verifier bukti penyertaan yang dipublikasikan di repositori Booting Terverifikasi Android. Alat ini menghitung hash entri log kandidat, mengambil hash lain yang diperlukan untuk menghitung ulang checkpoint dari log, dan membandingkannya dengan checkpoint yang dipublikasikan oleh log.

Output perintah ditulis ke stdout:

  • OK jika gambar disertakan dalam log,
  • FAILURE jika tidak.

Bukti Konsistensi (Opsional)

Karena Google secara berkala merilis versi baru image pabrikan Pixel, log transparansi terus bertambah. Saksi memeriksa apakah pohon tumbuh dengan cara yang konsisten dengan daun sebelumnya. Saksi melacak hash root hierarki, dan menghitung hash root kandidat berikutnya dengan meminta hash leaf baru dari hierarki. Agar log transparansi tahan terhadap gangguan, log tersebut harus terus-menerus diperiksa konsistensinya.

Perilaku hanya menambahkan log transparansi diperiksa secara aktif oleh pihak ketiga, sehingga sebagian besar pengguna tidak perlu melakukannya sendiri, tetapi siapa pun dapat memantau konsistensi log. Google telah memublikasikan penerapan saksi open source di repositori GitHub ini. Anda harus menggunakan konfigurasi yang khusus untuk log Transparansi Biner Pixel (PixelBT).