หน้ารายละเอียดทางเทคนิคของความโปร่งใสแบบไบนารีของพิกเซล

บันทึกความโปร่งใสแบบไบนารีของ Pixel ใช้ประโยชน์จากเทคโนโลยีบันทึกความโปร่งใส

ประโยชน์ของบันทึกความโปร่งใสได้รับการพิสูจน์แล้วด้วย ความโปร่งใสของใบรับรอง ซึ่งเป็นโปรโตคอลอินเทอร์เน็ต ที่กำหนดให้ผู้ออกใบรับรองต้องเผยแพร่ใบรับรองที่ออกไปยังบันทึกความโปร่งใสของใบรับรองสาธารณะ กระบวนการนี้ช่วยลดการออกใบรับรองที่ไม่ถูกต้องลงอย่างมาก ซึ่งเป็นการเพิ่มความปลอดภัยของอินเทอร์เน็ต ผู้ให้บริการบันทึกความโปร่งใสของใบรับรองหลายรายใช้การติดตั้งใช้งาน บันทึกความโปร่งใสที่พบได้ใน transparency.dev

ระบบจะติดตั้งใช้งานบันทึกความโปร่งใสด้วย Merkle Tree หน้านี้ถือว่าคุณมีความรู้ทั่วไปเกี่ยวกับ Merkle Tree และความโปร่งใสแบบไบนารี ดูภาพรวมของ Merkle Tree ได้ที่ โครงสร้างข้อมูลที่ตรวจสอบได้ และดูภาพรวมของความโปร่งใสแบบไบนารีได้ที่ หน้า Landing Page

การติดตั้งใช้งานบันทึก

ระบบจะติดตั้งใช้งานบันทึกความโปร่งใสแบบไบนารีของ Pixel เป็น Merkle Tree แบบอิงตามไทล์ โดยจะแสดงผลรูทของเนื้อหาไทล์ที่ https://developers.google.com/android/binary_transparency/tile หมายเหตุ: นี่ไม่ใช่หน้าเว็บปกติ คุณควรอ่านรายการบันทึกที่อยู่ในไดเรกทอรีย่อยแบบเป็นโปรแกรมด้วยไลบรารี Golang SumDB TLog ไม่ใช่ผ่านเบราว์เซอร์

ดูคำอธิบายเกี่ยวกับสิ่งที่รายการมีได้ที่ เนื้อหาบันทึก

ระบบจะแสดงผลแฮชรูทของ Merkle Tree ของบันทึก ซึ่งอยู่ใน จุดตรวจสอบ ที่ https://developers.google.com/android/binary_transparency/checkpoint.txt โดยจะแสดงในรูปแบบ จุดตรวจสอบ ระบบจะแสดงผลลีฟของ Merkle Tree นี้ที่ 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 Tree ที่ประกอบด้วยแฮช โหนดลีฟจะมีข้อมูล และโหนดระดับบนจะมีแฮชของโหนดระดับล่าง

ระบบจะทำการคำนวณ 2 รายการใน Merkle Tree เพื่อยืนยันคุณสมบัติการป้องกันการแก้ไขของบันทึกความโปร่งใส ได้แก่ การยืนยันการรวมและการยืนยันความสอดคล้อง The former proves that the log includes an entry corresponding to an image version, that is. The log entry includes the VBMeta digest, a hash that represents the OS images, which can be returned from a device. การยืนยันความสอดคล้องจะพิสูจน์ว่าเมื่อมีการเพิ่มรายการใหม่ลงใน Tree จุดตรวจสอบใหม่จะสอดคล้องกับ Tree เวอร์ชันก่อนหน้า

หากต้องการยืนยันอิมเมจ Pixel ให้ทำการยืนยันการรวม การคำนวณการยืนยันความสอดคล้องเป็นตัวเลือก เนื่องจากบุคคลที่สามดำเนินการนี้อย่างต่อเนื่อง

หากต้องการทำความคุ้นเคยกับแนวคิดของการยืนยันในความโปร่งใสแบบไบนารีของ Pixel ให้ทำตามวิธีการด้านล่างเพื่อใช้อิมเมจที่ทำงานในอุปกรณ์ Pixel หากต้องการเรียกใช้เฟิร์มแวร์ Pixel ด้วยความมั่นใจสูงสุด โปรดดูขั้นตอนการยืนยันใน ความโปร่งใสแบบไบนารีของ Pixel - การยืนยันแบบเต็ม

ข้อกำหนดเบื้องต้นในการยืนยัน

ก่อนดำเนินการยืนยันว่าอาร์ติแฟกต์ (เฟิร์มแวร์หรือ APK) เป็นไปตามการอ้างสิทธิ์ ให้ตรวจสอบว่าคุณมีเครื่องมือต่อไปนี้ในคอมพิวเตอร์ที่เชื่อมต่อกับเครือข่าย คุณอาจไม่จำเป็นต้องใช้เครื่องมือทั้งหมด ทั้งนี้ขึ้นอยู่กับเป้าหมายการยืนยัน

Golang

เครื่องมือยืนยัน เขียนด้วยภาษา Go หากต้องการสร้างเครื่องมือนี้ ให้ติดตั้ง Go 1.24 ขึ้นไป จากเว็บไซต์ Go

Android Debug Bridge (ADB)

ADB เป็นเครื่องมือที่สื่อสารกับอุปกรณ์ Android เพื่อตรวจสอบอิมเมจหรือ แยก APK ซึ่งมีให้ใช้งานใน Android SDK Platform Tools เว็บไซต์

เครื่องมือยืนยันการรวม

เครื่องมือยืนยันการรวมเป็นโมดูล Go ที่ค้นหาบันทึกความโปร่งใสและแสดงผลว่ามีการรวมอาร์ติแฟกต์ไว้ในบันทึกหรือไม่ โดยเผยแพร่ในที่เก็บ GitHub ที่ android-binary-transparency https://github.com/android/android-binary-transparency/tree/main

วิธีโคลนที่เก็บ avb ของ AOSP

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

wget และ curl เป็นเครื่องมือที่ใช้ดึงหรือดาวน์โหลดไฟล์จากอินเทอร์เน็ตได้ โปรดตรวจสอบว่าคุณได้ติดตั้งเครื่องมืออย่างใดอย่างหนึ่งไว้ เนื่องจากสคริปต์การยืนยันอาจต้องใช้เครื่องมือเหล่านี้

Avbtool

avbtool ใช้เพื่อคำนวณ VBMeta Digest ของอิมเมจจากโรงงานและการยืนยัน ไบนารี หลังจากโคลนที่เก็บ avb (ตามที่แสดงในส่วนเครื่องมือยืนยันการรวม ) คุณจะพบ avbtool.py ภายในไดเรกทอรี avb ที่โคลน คุณควรเพิ่มไดเรกทอรีนี้ลงในตัวแปรสภาพแวดล้อม $PATH

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool เป็นสคริปต์ Python ที่ใช้แยกคอมโพเนนต์แต่ละรายการใน bootloader.img ของ Pixel คุณไม่จำเป็นต้องใช้เครื่องมือนี้หากกำลังยืนยัน APK เครื่องมือนี้มีความสำคัญเนื่องจากช่วยให้ avbtool.py ค้นพบอิมเมจที่จำเป็นสำหรับการยืนยัน

หากต้องการใช้เครื่องมือนี้ คุณควรดาวน์โหลดสคริปต์ Python 3 รายการต่อไปนี้ ลงในไดเรกทอรีที่ avbtool.py อยู่ ทำให้ fbpacktool.py ทำงานได้ และสร้าง Symlink ชื่อ 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

บรรทัดที่ 2 จะเรียกใช้เครื่องมือยืนยันการรวมที่เผยแพร่ในที่เก็บ Android Verified Boot เครื่องมือนี้จะคำนวณแฮชของรายการบันทึกที่พิจารณา ดึงแฮชอื่นๆ ที่จำเป็นเพื่อคำนวณจุดตรวจสอบใหม่จากบันทึก และเปรียบเทียบกับจุดตรวจสอบที่เผยแพร่โดยบันทึก

ระบบจะเขียนเอาต์พุตของคำสั่งลงใน stdout ดังนี้

  • OK หากมีการรวมอิมเมจไว้ในบันทึก
  • FAILURE หากไม่มีการรวมอิมเมจไว้

การยืนยันความสอดคล้อง (ไม่บังคับ)

เนื่องจาก Google เผยแพร่อิมเมจจากโรงงานของ Pixel เวอร์ชันใหม่อย่างสม่ำเสมอ บันทึกความโปร่งใสจึงมีการเพิ่มข้อมูลอย่างต่อเนื่อง พยาน จะตรวจสอบว่า Tree มีการเพิ่มข้อมูลในลักษณะที่สอดคล้องกับลีฟก่อนหน้า พยานจะติดตามแฮชรูทของ Tree และคำนวณแฮชรูทที่พิจารณาถัดไปโดยขอแฮชลีฟใหม่จาก Tree บันทึกความโปร่งใสต้องได้รับการตรวจสอบความสอดคล้องอย่างต่อเนื่องจึงจะป้องกันการแก้ไขได้

บุคคลที่สามจะตรวจสอบลักษณะการทำงานแบบเพิ่มเท่านั้นของบันทึกความโปร่งใสอย่างสม่ำเสมอ ดังนั้นผู้ใช้ส่วนใหญ่จึงไม่จำเป็นต้องดำเนินการนี้ด้วยตนเอง แต่ทุกคนสามารถตรวจสอบความสอดคล้องของบันทึกได้ Google ได้เผยแพร่การติดตั้งใช้งานแบบโอเพนซอร์ส ของพยานใน ที่เก็บ GitHub นี้ คุณต้องใช้ การ กำหนดค่า ที่เฉพาะเจาะจงกับบันทึกความโปร่งใสแบบไบนารีของ Pixel (PixelBT)