Google Pixel のバイナリ透明性ログは、透明性ログ技術を活用しています。
透明性ログの有用性は、 Certificate Transparency で証明されています。Certificate Transparency は、認証局が発行した証明書を Certificate Transparency 公開ログに公開することを義務付けるインターネット プロトコルです。このプロセスにより、証明書の誤発行が大幅に減少し、インターネットのセキュリティが向上しました。多くの Certificate Transparency ログ オペレーターは、実装 transparency.devにある透明性ログに依存しています。
透明性ログは Merkle ツリーで実装されています。このページでは、Merkle ツリーとバイナリ透明性に関する一般的な知識があることを前提としています。Merkle ツリーの概要については、 検証可能なデータ構造 をご覧ください。バイナリ 透明性の概要については、 ランディング ページをご覧ください。
ログの実装
Google Pixel のバイナリ透明性ログは、
タイルベースの Merkle ツリーとして実装されています。タイルのコンテンツのルートは、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 ツリーで実装されます。リーフノードにはデータが含まれ、親ノードには子ノードのハッシュが含まれます。
Merkle ツリーでは、透明性ログの改ざん防止プロパティを検証するために、包含証明と整合性証明の 2 つの計算が行われます。前者は、ログにイメージバージョンに対応するエントリが含まれていることを証明します。つまり、ログエントリには、デバイスから返される OS イメージを表すハッシュである VBMeta ダイジェストが含まれます。後者は、新しいエントリがツリーに追加されたときに、新しいチェックポイントがツリーの以前のバージョンと整合していることを証明します。
Google Pixel イメージを検証するには、包含証明を行います。整合性証明の計算は、サードパーティが継続的に行っているため、省略可能です。
Google Pixel のバイナリ透明性の検証の概念に慣れるには、以下の手順に沿って Google Pixel デバイスで実行されているイメージを使用します。Google Pixel ファームウェアを高い信頼性で実行する場合は、Google Pixel のバイナリ透明性の完全な検証の検証プロセスをご覧ください。
検証の前提条件
アーティファクト(ファームウェアまたは APK)がクレームに準拠していることを検証する前に、ネットワークに接続されたパソコンで次のツールが使用可能であることを確認してください。 検証対象によっては、すべてが必要ない場合があります。
Golang
検証ツール は Go で記述されています。ビルドするには、Go サイトから Go 1.24 以降をインストールします。 Go サイトからインストールします。
Android Debug Bridge(ADB)
ADB は、Android デバイスと通信してイメージを検査したり、
APK を抽出したりするツールで、Android SDK Platform Tools ウェブサイトで入手できます。
包含証明検証ツール
包含証明検証ツールは、透明性ログにクエリを実行し、アーティファクトがログに含まれているかどうかを出力する 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 Asset Packaging Tool)は、Android アプリのリソースのコンパイルとパッケージ化に使用されるビルドツールです。 これは、Android SDK Build Tools バージョン 26.0.2 以降でスタンドアロン ツールとして提供されています。
bundletool
bundletool は、Android App Bundle(AAB)のビルドに使用されるツールです。APK
コード署名の検証にも使用できます。
GitHub からダウンロードできます。
wget または curl
wget と curl は、インターネットからファイルを取得またはダウンロードするために使用できるツールです。 検証スクリプトでこれらのツールが使用される可能性があるため、いずれかのツールがインストールされていることを確認してください。
Avbtool
avbtool
は、ファクトリー イメージの VBMeta ダイジェストの計算と
バイナリの検証に使用されます。
包含証明検証ツールのセクションで説明したように、avbリポジトリのクローンを作成すると、クローンされた avb ディレクトリ内に avbtool.py があります。このディレクトリを $PATH 環境変数に追加する必要があります。
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
は、Google Pixel の
`bootloader.img` 内の個々のコンポーネントを解凍するために使用される Python スクリプトです。
bootloader.imgAPK を検証する場合は必要ありません。
このツールは、avbtool.py
が検証に必要なイメージを検出できるようにするため、重要です。
このツールを使用するには、次の 3 つの 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
包含証明
Google Pixel の所有者は、まず関連する メタデータを抽出し、再計算したルートハッシュを公開されたチェックポイント に含まれるルートハッシュ と比較することで、イメージがログに含まれていることを確認できます。一致する場合、Google Pixel の所有者は脅威モデルに示されている保護を確信できます。
Google 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
最初のスタンザは、ログエントリの形式で Google Pixel デバイスからメタデータを取得し、/tmp/log_payload.txt に保存します。
2 番目のスタンザは、 Android Verified Boot リポジトリで公開されている包含証明検証ツールを実行します。 このツールは、候補のログエントリのハッシュを計算し、チェックポイントを再計算するために必要な他のハッシュをログから取得して、ログによって公開されたチェックポイントと比較します。
コマンドの出力は stdout に書き込まれます。
- イメージがログに含まれている場合は
OK - 含まれていない場合は
FAILURE
整合性証明(省略可)
Google は Google Pixel ファクトリー イメージの新しいバージョンを定期的にリリースするため、透明性ログは継続的に増加しています。 ウィットネス は、ツリーが以前のリーフと整合した方法で増加していることを確認します。ウィットネスはツリーのルートハッシュを追跡し、ツリーから新しいリーフハッシュをリクエストして、次の候補のルートハッシュを計算します。透明性ログが改ざん防止されるためには、整合性を継続的に確認する必要があります。
透明性ログの追加専用の動作はサードパーティによって積極的にチェックされるため、ほとんどのユーザーは自分でこれを行う必要はありませんが、誰でもログの整合性をモニタリングできます。Google は、この Github リポジトリでウィットネスのオープンソース 実装を公開しています。Google Pixel のバイナリ透明性(PixelBT)ログに固有の構成を使用する必要があります。