Das Pixel Binary Transparency Log nutzt die Technologie von Transparenzlogs.
Die Nützlichkeit von Transparenzprotokollen hat sich mit Certificate Transparency erwiesen, einem Internetprotokoll, das Zertifizierungsstellen dazu verpflichtet, die von ihnen ausgestellten Zertifikate in öffentlichen Certificate Transparency-Protokollen zu veröffentlichen. Durch diesen Prozess wurde die fälschliche Ausstellung von Zertifikaten erheblich reduziert, wodurch die Sicherheit des Internets erhöht wurde. Viele Betreiber von Certificate Transparency-Logs verwenden eine Implementierung von Transparenzlogs, die unter transparency.dev zu finden ist.
Transparenz-Logs werden mit Merkle-Bäumen implementiert. Auf dieser Seite wird davon ausgegangen, dass Sie mit Merkle-Bäumen und binärer Transparenz vertraut sind. Einen Überblick über Merkle-Bäume finden Sie unter Verifiable Data Structures und einen Überblick über die binäre Transparenz auf der Landingpage.
Log-Implementierung
Das Pixel Binary Transparency Log wird als kachelbasiertes Merkle-Baum implementiert. Das Stammverzeichnis der Kachelinhalte wird unter https://developers.google.com/android/binary_transparency/tile bereitgestellt. Hinweis: Dies ist keine normale Webseite. Die Logeinträge in den Unterverzeichnissen sollten programmatisch mit der Golang SumDB TLog-Bibliothek und nicht über einen Browser gelesen werden.
Eine Beschreibung des Inhalts der Einträge finden Sie unter Log-Inhalte.
Der Merkle-Baum-Root-Hash eines Logs, der in einem Checkpoint enthalten ist, wird unter https://developers.google.com/android/binary_transparency/checkpoint.txt bereitgestellt. Sie wird im Checkpoint-Format dargestellt. Die Blätter dieses Merkle-Baums werden unter https://developers.google.com/android/binary_transparency/image_info.txt bereitgestellt. Die Signatur des Checkpoints kann mit dem folgenden öffentlichen Schlüssel verifiziert werden:
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
Beim Bestätigungsprozess werden der Prüfpunkt und die Kacheln mit den Logeinträgen aus dem Log gelesen.
Überprüfungsverfahren
Ein Transparenzprotokoll wird mit einem Merkle-Baum aus Hashes implementiert. Ein Blattknoten enthält Daten und ein übergeordneter Knoten den Hash seiner untergeordneten Knoten.
Es werden zwei Berechnungen am Merkle-Baum durchgeführt, um die Manipulationssicherheit von Transparenz-Logs zu überprüfen: der Einschlussnachweis und der Konsistenznachweis. Ersteres beweist, dass das Protokoll einen Eintrag für eine Bildversion enthält. Der Protokolleintrag enthält den VBMeta-Digest, einen Hash, der die Betriebssystem-Images darstellt, die von einem Gerät zurückgegeben werden können. Letzteres beweist, dass der neue Prüfpunkt mit der vorherigen Version des Baums übereinstimmt, wenn dem Baum neue Einträge hinzugefügt werden.
Um Ihr Pixel-Bild zu bestätigen, führen Sie den Einbeziehungsnachweis durch. Die Berechnung des Konsistenznachweises ist optional, da dies fortlaufend von Dritten erfolgt.
Wenn Sie sich mit den Konzepten der Bestätigung in der binären Transparenz von Pixel vertraut machen möchten, können Sie der Anleitung unten folgen, um das auf Ihrem Pixel-Gerät ausgeführte Image zu verwenden. Wenn Sie die Pixel-Firmware mit dem höchsten Grad an Vertrauen ausführen möchten, lesen Sie den Bestätigungsprozess unter Vollständige Bestätigung der binären Transparenz von Pixel.
Bestätigungsgrundlagen
Bevor Sie überprüfen, ob das Artefakt (Firmware oder APK) dem Anspruch entspricht, müssen Sie dafür sorgen, dass die folgenden Tools auf einem mit dem Netzwerk verbundenen Computer verfügbar sind. Je nach Bestätigungsziel benötigen Sie möglicherweise nicht alle.
GoLang
Das Bestätigungstool ist in Go geschrieben. Installieren Sie Go 1.24 oder höher von der Go-Website, um es zu erstellen.
Android Debug Bridge (ADB)
ADB ist ein Tool, das mit einem Android-Gerät kommuniziert, um das Image zu prüfen oder APKs zu extrahieren. Es ist auf der Website der Android SDK Platform Tools verfügbar.
Inclusion Proof-Prüfung
Der Inclusion Proof Verifier ist ein Go-Modul, das das Transparenzlog abfragt und ausgibt, ob ein Artefakt im Log enthalten ist.
Es wird im android-binary-transparency-GitHub-Repository unter https://github.com/android/android-binary-transparency/tree/main veröffentlicht.
So klonen Sie das AOSP-Repository avb:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
So klonen Sie das GitHub-Repository android-binary-transparency:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) ist ein Build-Tool, mit dem die Ressourcen einer Android-App kompiliert und verpackt werden. Es ist als eigenständiges Tool in Android SDK Build Tools ab Version 26.0.2 verfügbar.
bundletool
bundletool ist ein Tool zum Erstellen eines Android App Bundles (AAB). Sie kann auch zum Überprüfen von APK-Codesignaturen verwendet werden.
Sie können es von GitHub herunterladen.
wget oder curl
wget und curl sind Tools, mit denen Dateien aus dem Internet abgerufen oder heruntergeladen werden können. Achten Sie darauf, dass eines dieser Tools installiert ist, da die Bestätigungsskripts darauf angewiesen sein können.
Avbtool
Mit avbtool wird der VBMeta-Digest der Werks-Images berechnet und Binärdateien werden überprüft.
Nach dem Klonen des avb-Repositorys (wie im Abschnitt „Inclusion Proof verifier“ gezeigt) finden Sie avbtool.py im geklonten avb-Verzeichnis.
Fügen Sie dieses Verzeichnis Ihrer Umgebungsvariablen $PATH hinzu.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool ist ein Python-Script, mit dem einzelne Komponenten im bootloader.img von Pixel entpackt werden.
Das ist nicht erforderlich, wenn Sie APKs überprüfen.
Dieses Tool ist wichtig, weil avbtool.py damit die für die Überprüfung erforderlichen Bilder finden kann.
Damit Sie dieses Tool verwenden können, müssen Sie die folgenden drei Python-Skripts in das Verzeichnis herunterladen, in dem sich avbtool.py befindet, fbpacktool.py ausführbar machen und zur Vereinfachung einen Symlink mit dem Namen fbpacktool zu fbpacktool.py erstellen.
Wenn Sie wget haben:
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
Wenn Sie curl haben:
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
Mit openssl können verschiedene kryptografische Vorgänge über das Terminal im Bestätigungsprozess ausgeführt werden. Prüfen Sie, ob es auf Ihrem System installiert ist. Sie können dies in Ihrem Terminal prüfen, indem Sie den folgenden Befehl ausführen und darauf achten, dass das zurückgegebene Ergebnis nicht leer ist:
computer:~$ which openssl
/usr/bin/openssl
Nachweis der Aufnahme
Ein Pixel-Inhaber kann prüfen, ob sein Bild im Log enthalten ist, indem er zuerst die relevanten Metadaten extrahiert und dann den neu berechneten Root-Hash mit dem Root-Hash im veröffentlichten Prüfpunkt vergleicht. Wenn sie übereinstimmen, kann sich der Pixel-Nutzer auf einige Schutzmaßnahmen verlassen, die im Bedrohungsmodell beschrieben sind.
So prüfen Sie, ob sich das Bild auf einem Pixel Smartphone im Transparenzlog befindet: Stellen Sie mit ADB eine Verbindung zum Gerät her und führen Sie dann die folgenden Befehle aus:
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
Im ersten Abschnitt werden die Metadaten von einem Pixel-Gerät im Format eines Logeintrags abgerufen und in /tmp/log_payload.txt gespeichert.
Im zweiten Abschnitt wird der im Android Verified Boot-Repository veröffentlichte Inklusionsprüfer ausgeführt. Dieses Tool berechnet den Hash des infrage kommenden Logeintrags, ruft die anderen Hashes ab, die zum Neuberechnen des Prüfpunkts aus dem Log erforderlich sind, und vergleicht ihn mit dem vom Log veröffentlichten Prüfpunkt.
Die Ausgabe des Befehls wird in stdout geschrieben:
OK, wenn das Bild im Log enthalten ist,FAILURE, wenn das nicht der Fall ist.
Konsistenznachweis (optional)
Da Google regelmäßig neue Versionen des Pixel-Werks-Images veröffentlicht, wächst das Transparenzlogbuch kontinuierlich. Ein Zeuge prüft, ob der Baum in einer Weise wächst, die mit seinen vorherigen Blättern übereinstimmt. Der Zeuge verfolgt den Hash des Stammverzeichnisses und berechnet den nächsten Kandidaten-Root-Hash, indem er die neuen Blatt-Hashes aus dem Baum anfordert. Damit ein Transparenzprotokoll manipulationssicher ist, muss es kontinuierlich auf Konsistenz geprüft werden.
Das Append-only-Verhalten des Transparenzlogs wird aktiv von Dritten überprüft. Die meisten Nutzer müssen dies also nicht selbst tun. Es ist jedoch für jeden möglich, die Konsistenz des Logs zu überwachen. Google hat eine Open-Source-Implementierung eines Zeugen in diesem Github-Repository veröffentlicht. Es ist erforderlich, die Konfiguration zu verwenden, die für das Pixel Binary Transparency-Log (PixelBT) spezifisch ist.