บันทึกความโปร่งใสแบบไบนารีของ 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 ของบันทึกซึ่งอยู่ใน checkpoint จะแสดงที่ https://developers.google.com/android/binary_transparency/checkpoint.txt โดยจะแสดงในรูปแบบ Checkpoint ส่วนลีฟของ Merkle Tree นี้จะแสดงที่ https://developers.google.com/android/binary_transparency/image_info.txt คุณสามารถยืนยันลายเซ็นของ Checkpoint ได้ด้วยคีย์สาธารณะต่อไปนี้
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
กระบวนการยืนยันจะอ่าน Checkpoint และไทล์ ที่มีรายการบันทึกจากบันทึก
กระบวนการยืนยันตัวตน
ระบบจะติดตั้งใช้งานบันทึกความโปร่งใสด้วย Merkle Tree ที่ประกอบด้วยแฮช โหนดลีฟจะมีข้อมูล และโหนดระดับบนจะมีแฮชของโหนดระดับล่าง
ระบบจะทำการคำนวณ 2 รายการใน Merkle Tree เพื่อยืนยันคุณสมบัติการป้องกันการแก้ไขของบันทึกความโปร่งใส ได้แก่ การยืนยันการรวมและการยืนยันความสอดคล้อง การยืนยันการรวมจะพิสูจน์ว่าบันทึกมีรายการที่สอดคล้องกับเวอร์ชันรูปภาพ นั่นคือ รายการบันทึกมี VBMeta Digest ซึ่งเป็นแฮชที่แสดงรูปภาพของระบบปฏิบัติการที่ส่งคืนจากอุปกรณ์ได้ ส่วนการยืนยันความสอดคล้องจะพิสูจน์ว่าเมื่อมีการเพิ่มรายการใหม่ลงใน Tree Checkpoint ใหม่จะสอดคล้องกับ 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
วิธีโคลนที่เก็บ GitHub android-binary-transparency
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 Digest ของค่าเริ่มต้นและการยืนยัน ไบนารี
หลังจากโคลนที่เก็บ avb (ตามที่แสดงในส่วนเครื่องมือยืนยันการรวม
) คุณจะพบ avbtool.py ภายในไดเรกทอรี avb ที่โคลน
คุณควรเพิ่มไดเรกทอรีนี้ลงในตัวแปรสภาพแวดล้อม $PATH
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
เป็นสคริปต์ Python ที่ใช้แยกคอมโพเนนต์แต่ละรายการใน
bootloader.img ของ Pixel
คุณไม่จำเป็นต้องใช้เครื่องมือนี้หากกำลังยืนยัน APK
เครื่องมือนี้มีความสำคัญเนื่องจากช่วยให้ avbtool.py ค้นพบรูปภาพที่จำเป็นสำหรับการยืนยัน
fbpacktool ต้องใช้ Python 3.6 ขึ้นไปและแพ็กเกจ
PyYAML
(เช่น python3 -m pip install pyyaml)
หากต้องการใช้เครื่องมือนี้ คุณควรดาวน์โหลดสคริปต์ Python 6 รายการต่อไปนี้
ลงในไดเรกทอรีที่ avbtool.py อยู่
ทำให้ fbpacktool.py ทำงานได้
และสร้างลิงก์สัญลักษณ์ชื่อ fbpacktool ไปยัง fbpacktool.py เพื่อความสะดวก
หากคุณมี wget ให้ใช้คำสั่งต่อไปนี้
computer:dir_to_avbtool$ wget https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
หากคุณมี curl ให้ใช้คำสั่งต่อไปนี้
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.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 สามารถตรวจสอบว่ารูปภาพของตนอยู่ในบันทึกได้โดยแยกข้อมูลเมตาที่เกี่ยวข้องก่อน จากนั้นเปรียบเทียบแฮชรูทที่คำนวณใหม่กับแฮชรูทที่อยู่ใน Checkpoint ที่เผยแพร่ หากแฮชตรงกัน เจ้าของ 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 --log_type=pixel
Stanza แรกจะดึงข้อมูลเมตาจากอุปกรณ์ Pixel ในรูปแบบรายการบันทึกและบันทึกข้อมูลดังกล่าวลงใน /tmp/log_payload.txt
Stanza ที่ 2 จะเรียกใช้เครื่องมือยืนยันการรวมที่เผยแพร่ใน ที่เก็บ Android Verified Boot เครื่องมือนี้จะคำนวณแฮชของรายการบันทึกที่พิจารณา ดึงแฮชอื่นๆ ที่จำเป็นเพื่อคำนวณ Checkpoint ใหม่จากบันทึก และเปรียบเทียบกับ Checkpoint ที่เผยแพร่โดยบันทึก
ระบบจะเขียนเอาต์พุตของคำสั่งลงใน stdout ดังนี้
OKหากรวมรูปภาพไว้ในบันทึกFAILUREหากไม่รวม
การยืนยันความสอดคล้อง (ไม่บังคับ)
เนื่องจาก Google เผยแพร่รูปภาพจากโรงงานของ Pixel เวอร์ชันใหม่อย่างสม่ำเสมอ บันทึกความโปร่งใสจึงเพิ่มขึ้นอย่างต่อเนื่อง พยาน จะตรวจสอบว่า Tree เพิ่มขึ้นในลักษณะที่สอดคล้องกับลีฟก่อนหน้า พยานจะติดตามแฮชรูทของ Tree และคำนวณแฮชรูทที่พิจารณาถัดไปโดยขอแฮชลีฟใหม่จาก Tree บันทึกความโปร่งใสต้องได้รับการตรวจสอบความสอดคล้องอย่างต่อเนื่องจึงจะป้องกันการแก้ไขได้
บุคคลที่สามจะตรวจสอบลักษณะการทำงานแบบเพิ่มเท่านั้นของบันทึกความโปร่งใสอย่างสม่ำเสมอ ดังนั้นผู้ใช้ส่วนใหญ่จึงไม่จำเป็นต้องดำเนินการนี้ด้วยตนเอง แต่ทุกคนสามารถตรวจสอบความสอดคล้องของบันทึกได้ Google ได้เผยแพร่การติดตั้งใช้งานแบบโอเพนซอร์ส ของพยานใน ที่เก็บ GitHub นี้ คุณต้องใช้ การ กำหนดค่า ที่เฉพาะเจาะจงกับบันทึกความโปร่งใสแบบไบนารีของ Pixel (PixelBT)