Pixel 바이너리 투명성 기술 세부정보 페이지

Pixel 바이너리 투명성 로그는 투명성 로그 기술을 활용합니다.

투명성 로그의 유용성은 인증 기관이 발급한 인증서를 공개 인증서 투명성 로그에 게시하도록 요구하는 인터넷 프로토콜인 인증서 투명성을 통해 입증되었습니다. 이 프로세스를 통해 인증서 잘못 발급이 크게 줄어들어 인터넷 보안이 향상되었습니다. 많은 인증서 투명성 로그 운영자는 transparency.dev에 있는 투명성 로그 구현을 사용합니다.

투명성 로그는 Merkle 트리로 구현됩니다. 이 페이지에서는 Merkle 트리와 바이너리 투명성에 대한 일반적인 지식이 있다고 가정합니다. Merkle 트리에 관한 개요는 검증 가능한 데이터 구조를, 바이너리 투명성에 관한 개요는 방문 페이지를 참고하세요.

로그 구현

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 트리에서 두 가지 계산이 실행됩니다. 포함 증명과 일관성 증명입니다. 전자는 로그에 이미지 버전에 해당하는 항목이 포함되어 있음을 증명합니다. 즉, 로그 항목에는 기기에서 반환할 수 있는 OS 이미지를 나타내는 해시인 VBMeta 다이제스트가 포함됩니다. 후자는 새 항목이 트리에 추가될 때 새 체크포인트가 이전 버전의 트리와 일치함을 증명합니다.

Pixel 이미지를 확인하려면 포함 증명을 실행합니다. 서드 파티가 지속적으로 일관성 증명 계산을 수행하므로 일관성 증명 계산을 수행하는 것은 선택사항입니다.

Pixel 바이너리 투명성의 인증 개념을 숙지하려면 아래 안내에 따라 Pixel 기기에서 실행되는 이미지를 사용하면 됩니다. 가장 높은 신뢰도로 Pixel 펌웨어를 실행하려면 Pixel 바이너리 투명성 전체 확인의 확인 프로세스를 참고하세요.

인증 전제 조건

아티팩트 (펌웨어 또는 APK)가 클레임과 일치하는지 확인하기 전에 네트워크에 연결된 컴퓨터에서 다음 도구를 사용할 수 있는지 확인하세요. 인증 대상에 따라 일부 정보는 필요하지 않을 수 있습니다.

Golang

확인 도구는 Go로 작성됩니다. 이를 빌드하려면 Go 사이트에서 Go 1.24 이상을 설치하세요.

Android 디버그 브리지(ADB)

ADB는 Android 기기와 통신하여 이미지를 검사하거나 APK를 추출하는 도구로, Android SDK 플랫폼 도구 웹사이트에서 사용할 수 있습니다.

포함 증명 검증 도구

포함 증명 검증기는 투명성 로그를 쿼리하고 아티팩트가 로그에 포함되어 있는지 출력하는 Go 모듈입니다. https://github.com/android/android-binary-transparency/tree/mainandroid-binary-transparency GitHub 저장소에 게시됩니다.

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 빌드 도구 버전 26.0.2 이상에서 독립형 도구로 찾을 수 있습니다.

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.py에 대한 fbpacktool라는 심볼릭 링크를 만들어야 합니다.

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 바이너리 투명성 (PixelBT) 로그에 맞는 구성을 사용해야 합니다.