Pixel 二進位檔透明度技術詳細資料頁面

Pixel 二進位檔透明度記錄檔採用透明度記錄檔技術。

憑證透明化 (Certificate Transparency) 是一項網際網路通訊協定,要求憑證授權單位將核發的憑證發布至公開的憑證透明化記錄中,這項通訊協定已證明透明化記錄的實用性。這項程序大幅減少了憑證誤發情形,進而提升網際網路的安全性。許多憑證透明化記錄檔運算子都依賴 transparency.dev 上的透明化記錄檔實作項目。

透明度記錄檔是透過默克爾樹實作。本頁面假設您對 Merkle 樹狀結構和二進位透明度有一般瞭解。如要瞭解 Merkle 樹狀結構,請參閱「可驗證的資料結構」;如要瞭解二進位透明度,請參閱到達網頁

代碼導入

Pixel 二進位檔透明度記錄檔是以圖塊為基礎的默克爾樹實作而成。資訊方塊內容的根目錄位於 https://developers.google.com/android/binary_transparency/tile。注意:這不是一般網頁,子目錄中包含的記錄項目應透過 Golang SumDB TLog 程式庫以程式輔助方式讀取,而非透過瀏覽器讀取。

如要瞭解記錄項目包含的內容,請參閱「記錄內容」。

記錄的 Merkle 樹狀結構根雜湊 (包含在檢查點中) 會在 https://developers.google.com/android/binary_transparency/checkpoint.txt 提供。 並以檢查點格式呈現。這個 Merkle 樹狀結構的葉節點位於 https://developers.google.com/android/binary_transparency/image_info.txt。 您可以使用下列公開金鑰驗證檢查點的簽章:

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

驗證程序會從記錄檔讀取查核點和包含記錄項目的圖塊。

驗證程序

透明度記錄是透過由雜湊組成的默克爾樹實作。葉節點包含資料,父項節點則包含子項的雜湊值。

系統會在 Merkle 樹狀結構上執行兩項運算,以驗證透明度記錄的防竄改特性:納入證明和一致性證明。前者證明記錄包含與映像檔版本對應的項目。記錄項目包含 VBMeta 摘要,這是代表 OS 映像檔的雜湊,可從裝置傳回。後者證明在樹狀結構中新增項目時,新的檢查點會與樹狀結構的先前版本保持一致。

如要驗證 Pixel 圖片,請執行納入證明。執行一致性證明計算是選用步驟,因為第三方會持續執行這項作業。

如要熟悉 Pixel 二進位檔透明度中的驗證概念,請按照下列指示操作,在 Pixel 裝置上使用映像檔。如要以最高程度的信心執行 Pixel 韌體,請參閱「Pixel 二進位檔透明度完整驗證」一文中的驗證程序。

通過認證的必要條件

在驗證構件 (韌體或 APK) 是否符合聲明之前,請先確認連網電腦上是否備妥下列工具:視驗證目標而定,您可能不必提供所有資訊。

Golang

驗證工具是以 Go 語言編寫。如要建構該工具,請從 Go 網站安裝 Go 1.24 以上版本。

Android Debug Bridge (ADB)

ADB 工具可與 Android 裝置通訊,檢查映像檔或擷取 APK,可從 Android SDK 平台工具網站取得。

Inclusion Proof 驗證器

納入證明驗證器是 Go 模組,可查詢透明度記錄,並輸出構件是否納入記錄。這項資訊發布在 android-binary-transparency GitHub 存放區,網址為: https://github.com/android/android-binary-transparency/tree/main

如要複製 AOSP avb 存放區,請執行下列指令:

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

如要複製 android-binary-transparency GitHub 存放區,請按照下列步驟操作:

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

AAPT2

AAPT2 (Android 資產封裝工具) 是一種建構工具,用於編譯及封裝 Android 應用程式的資源。在 Android SDK Build Tools 26.0.2 以上版本中,AAPT2 是獨立工具。

bundletool

bundletool 是用於建構 Android App Bundle (AAB) 的工具。這個工具也可用於驗證 APK 程式碼簽章。可從 GitHub 下載。

wget 或 curl

wgetcurl 是可用來從網際網路擷取或下載檔案的工具。請務必安裝其中一項工具,因為驗證指令碼可能會用到。

Avbtool

avbtool 用於計算工廠映像檔的 VBMeta 摘要,以及驗證二進位檔。複製 avb 存放區後 (如「納入證明驗證器」一節所示),您可以在複製的 avb 目錄中找到 avbtool.py。您應將這個目錄新增至 $PATH 環境變數。

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool 是用來解壓縮 Pixel bootloader.img 中個別元件的 Python 指令碼。如果您要驗證 APK,則不需要這個檔案。 這項工具非常重要,因為可讓 avbtool.py 找出驗證所需的圖片。

如要使用這項工具,請將下列三個 Python 指令碼下載到 avbtool.py 所在的目錄中,將 fbpacktool.py 設為可執行,並建立名為 fbpacktool 的符號連結到 fbpacktool.py,方便使用。

如果使用 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

如果使用 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 可協助您在驗證工作流程中,透過終端機執行各種加密作業。請確認系統已安裝這項工具。 如要在終端機中檢查,請執行下列指令,並確認傳回的結果不是空白:

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

收錄證明

Pixel 手機擁有者可以先擷取相關中繼資料,然後將重新計算的根雜湊值與已發布檢查點中包含的根雜湊值進行比較,確認圖片是否在記錄中。如果相符,Pixel 手機擁有者就能享有威脅模型中列舉的保護措施。

如要確認 Pixel 裝置上的圖片是否已記錄在透明度記錄中,請使用 adb 連線至裝置,然後執行下列指令:

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

第一個詩節會以記錄項目的格式從 Pixel 裝置擷取中繼資料,並儲存至 /tmp/log_payload.txt

第二節會執行在 Android 驗證開機程序存放區中發布的納入證明驗證器。這項工具會計算候選記錄項目的雜湊值,擷取重新計算記錄檢查點所需的其他雜湊值,並與記錄發布的檢查點進行比較。

指令輸出內容會寫入 stdout:

  • OK 如果圖片包含在記錄中,
  • FAILURE (如果不是)。

一致性證明 (選填)

Google 會定期發布新版 Pixel 工廠映像檔,因此透明度記錄會持續擴增。見證人會檢查樹木的生長方式是否與先前的葉子一致。見證人會追蹤樹狀結構根雜湊,並從樹狀結構要求新的葉節點雜湊,藉此計算下一個候選根雜湊。為確保透明化記錄不易遭到竄改,必須持續檢查一致性。

透明度記錄的僅附加行為會由第三方主動檢查,因此大多數使用者不需要自行檢查,但任何人都可以監控記錄的一致性。Google 已在這個 Github 存放區中,發布開放原始碼的見證實作項目。您必須使用 Pixel Binary Transparency (PixelBT) 記錄專用的設定