Trang này trình bày một phương pháp (có độ tin cậy cao nhất) để đảm bảo rằng bạn có thể chạy phiên bản hình ảnh Pixel hợp lệ trên thiết bị Pixel. Quá trình này bao gồm việc tải hình ảnh ban đầu xuống máy tính và thực hiện bằng chứng về việc đưa nhật ký vào trên cấu phần phần mềm đã tải xuống trước khi cài đặt ROM lên thiết bị.
Cách xác minh hình ảnh gốc của Pixel
Điều kiện tiên quyết để xác minh
Trước khi tiến hành xác minh rằng hình ảnh gốc mà bạn vừa tải xuống là phù hợp với tuyên bố của chúng tôi, bạn cần làm như sau từ một máy tính đã kết nối mạng.
Golang
Công cụ xác minh được viết bằng Go. Để tạo công cụ này, hãy cài đặt Go 1.17 trở lên từ trang web Go.
wget hoặc curl
wget và curl là các công cụ có thể dùng để truy xuất hoặc tải tệp xuống từ Internet. Hãy nhớ cài đặt một trong hai công cụ này trên hệ thống của bạn, vì phần còn lại của hướng dẫn này và tập lệnh chúng tôi cung cấp đều dựa vào một trong hai công cụ đó.
Avbtool
avbtool được dùng để tính toán chuỗi đại diện VBMeta của hình ảnh gốc và xác minh tệp nhị phân.
Bạn có thể tải xuống từ kho lưu trữ AOSP bằng lệnh bên dưới và tìm thêm thông tin chi tiết trong tài liệu được liên kết.
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Sau khi sao chép kho lưu trữ đó, bạn có thể tìm thấy avbtool.py
trong thư mục kho lưu trữ avb
được sao chép. Ngoài ra, bạn nên thêm thư mục này vào biến môi trường $PATH
.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Trình xác minh bằng chứng về việc đưa vào
Trình xác minh bằng chứng về việc đưa vào là một mô-đun Go truy vấn nhật ký minh bạch về hình ảnh của Nhà máy Pixel và cho biết liệu một hình ảnh có được đưa vào nhật ký hay không.
Sau khi sao chép kho lưu trữ AVB ở trên, bạn sẽ tìm thấy mã nguồn của trình xác minh trong tools/transparency/verify/
Fbpacktool
fbpacktool là một tập lệnh python dùng để giải nén từng thành phần trong bootloader.img
của Pixel. Công cụ này rất quan trọng để cho phép avbtool.py
khám phá các hình ảnh cần thiết để xác minh.
Để sử dụng công cụ này, bạn nên tải ba tập lệnh python sau xuống thư mục chứa avbtool.py
, tạo fbpacktool.py
có thể thực thi và tạo một đường liên kết tượng trưng có tên fbpacktool
đến fbpacktool.py
để thuận tiện.
Nếu có wget
, bạn có thể đưa ra lệnh sau để tải 3 tập lệnh xuống:
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
Nếu có curl
, bạn có thể đưa ra các lệnh sau để tải ba tập lệnh xuống:
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
Bạn cũng cần một công cụ có tên openssl để giúp thực hiện nhiều thao tác mã hoá bằng cách sử dụng thiết bị đầu cuối trong quy trình xác minh. Đảm bảo rằng bạn đã cài đặt trình điều khiển trên hệ thống. Bạn có thể kiểm tra trên thiết bị đầu cuối bằng cách đưa ra lệnh sau và đảm bảo rằng kết quả trả về không trống. Ví dụ:
computer:~$ which openssl
/usr/bin/openssl
Tạo trọng tải để xác minh
Để xác minh hình ảnh bạn có trên thiết bị hoặc hình ảnh tải xuống từ trang web Hình ảnh nhà máy Pixel, trước tiên, bạn phải tạo tải trọng tương ứng với hình ảnh đó từ Vân tay bản dựng và VBMeta Digest. Có hai tuỳ chọn, thủ công hoặc tự động, như mô tả bên dưới.
- Vân tay số của bản dựng: Giá trị nhận dạng chuỗi của hình ảnh gốc
- Ví dụ:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Ví dụ:
- VBMeta Digest: Một hàm băm mã hoá SHA-256 liên kết các phần khác nhau của hình ảnh gốc với nhau
- Ví dụ:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Ví dụ:
Tạo tải trọng thủ công
Để tạo tải trọng xác minh theo cách thủ công, bạn cần tạo một tệp văn bản, payload.txt
chứa vân tay số của bản dựng trên một dòng, sau đó là chuỗi đại diện VBMeta trên dòng tiếp theo, với một dòng mới trống (vui lòng tham khảo mục Nội dung nhật ký để biết định dạng chính xác).
Sau khi làm theo các bước trên trang web Hình ảnh ban đầu, nội dung của tệp payload.txt
sẽ có dạng như sau:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Trích xuất VBMeta Digest và Build Fingerprint từ trang web Hình ảnh gốc của Pixel
Khi tải hình ảnh gốc xuống từ trang web Hình ảnh gốc của Pixel, bạn sẽ cần giải nén tệp đã tải xuống. Thao tác này sẽ tạo một thư mục khác. Chuyển đến thư mục mới tạo và giải nén tệp image-*.zip
liên kết để lấy các tệp *.img
riêng lẻ. Các tệp nhị phân này là hình ảnh phân vùng. Đảm bảo rằng tệp vbmeta.img
tồn tại trong các tệp img.
Bạn sẽ thấy như sau:
computer:oriole-sd1a.210817.015.a4$ unzip image-oriole-sd1a.210817.015.a4.zip
Archive: image-oriole-sd1a.210817.015.a4.zip
inflating: android-info.txt
inflating: boot.img
inflating: vendor_boot.img
inflating: system.img
inflating: vendor.img
inflating: product.img
inflating: system_ext.img
inflating: system_other.img
inflating: dtbo.img
inflating: vbmeta_system.img
inflating: vbmeta.img
inflating: super_empty.img
Bạn có thể trích xuất vân tay bản dựng và tính toán hàm băm VBMeta từ tất cả các tệp đã tải xuống.
Sau khi avbtool.py
được cung cấp cho $PATH
, bạn có thể đưa ra các lệnh sau từ thiết bị đầu cuối để trích xuất vân tay bản dựng và tính toán chuỗi đại diện VBMeta của hình ảnh gốc mà bạn vừa tải xuống:
computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\..*build\.fingerprint=google/.*/release-keys' system.img | cut -f2 -d'='
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
computer:dir_containing_unzipped_factory_image$ avbtool.py calculate_vbmeta_digest --image vbmeta.img
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Xác minh hình ảnh ban đầu đã tải xuống theo cách thủ công
Để xác minh chính xác hình ảnh ban đầu đã tải xuống, bạn cần tải fbpacktool.py và hai tệp python khác phụ thuộc vào tệp này (fbpack.py và packedstruct.py) xuống để giải nén các thành phần trong bootloader.img
, vì các thành phần này được mô tả riêng lẻ trong cấu trúc VBMeta. Sau khi có trình giải nén, bạn có thể sử dụng fbpacktool.py
để giải nén hình ảnh trình tải khởi động. Ví dụ:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
Bạn sẽ thấy các tệp .img bổ sung xuất hiện trong thư mục đó.
Bây giờ, bạn có thể tiếp tục sử dụng avbtool.py
để xác minh thủ công rằng chữ ký của các phân vùng khớp với nhau.
computer:dir_containing_unzipped_images$ avbtool.py verify_image --image vbmeta.img --follow_chain_partitions
Verifying image vbmeta.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta.img
vbmeta_system: Chained but ROLLBACK_SLOT (which is 1) and KEY (which has sha1 df529646b7225015196a714006346f0768b87fcf) not specified
--
Verifying image vbmeta_system.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_system.img
product: Successfully verified sha256 hashtree of product.img for image of 2700468224 bytes
system: Successfully verified sha256 hashtree of system.img for image of 878493696 bytes
system_ext: Successfully verified sha256 hashtree of system_ext.img for image of 251334656 bytes
vbmeta_vendor: Chained but ROLLBACK_SLOT (which is 3) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image vbmeta_vendor.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_vendor.img
vendor: Successfully verified sha256 hashtree of vendor.img for image of 472940544 bytes
boot: Chained but ROLLBACK_SLOT (which is 2) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image boot.img using embedded public key
vbmeta: Successfully verified footer and SHA256_RSA4096 vbmeta struct in boot.img
boot: Successfully verified sha256 hash of boot.img for image of 24481792 bytes
abl: Successfully verified sha256 hash of abl.img for image of 1744896 bytes
bl1: Successfully verified sha256 hash of bl1.img for image of 12288 bytes
bl2: Successfully verified sha256 hash of bl2.img for image of 544768 bytes
bl31: Successfully verified sha256 hash of bl31.img for image of 86016 bytes
dtbo: Successfully verified sha256 hash of dtbo.img for image of 2152234 bytes
gsa: Successfully verified sha256 hash of gsa.img for image of 262144 bytes
ldfw: Successfully verified sha256 hash of ldfw.img for image of 4096000 bytes
pbl: Successfully verified sha256 hash of pbl.img for image of 49152 bytes
tzsw: Successfully verified sha256 hash of tzsw.img for image of 4304896 bytes
vendor_boot: Successfully verified sha256 hash of vendor_boot.img for image of 25718784 bytes
vendor_dlkm: Successfully verified sha256 hashtree of vendor_dlkm.img for image of 54505472 bytes
Nếu bạn không thấy thông báo lỗi hoặc thông báo không thành công, thì tức là VBMeta của hình ảnh đã tải xuống hiện đã được xác minh thành công.
Tự động tạo tải trọng
Để thuận tiện cho bạn, chúng tôi cũng cung cấp một tập lệnh python mà bạn có thể sử dụng. Với công cụ này, thay vì tìm nạp và giải nén tệp theo cách thủ công, bạn chỉ cần chỉ định URL đến hình ảnh gốc.
computer:dir_to_avb_repo/tools/transparency$ python3 ./pixel_factory_image_verify.py https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Fetching file from: https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Successfully downloaded file.
Successfully unpacked factory image.
Successfully unpacked factory image partitions.
Successfully unpacked bootloader image.
Successfully verified VBmeta.
Successfully extracted build fingerprint.
Successfully calculated VBMeta Digest.
The build fingerprint for factory image is: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
The VBMeta Digest for factory image is: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
A corresponding "payload.txt" file has been created.
Việc thực thi lệnh ở trên sẽ tải gói hình ảnh gốc xuống, giải nén gói và xác minh chữ ký của các phân vùng đã ký. Sau khi xác minh thành công, tệp này sẽ tạo một tệp mới có tên là payload.txt
và nội dung của tệp sẽ tương tự như bên dưới:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Sau khi tạo thành công tệp payload.txt, bạn có thể bắt đầu các bước xác minh việc đưa hình ảnh vào.
Xác minh việc đưa hình ảnh vào (Bằng chứng về việc đưa vào)
Sau khi tạo tải trọng, hãy đặt một biến shell (ví dụ: $PAYLOAD_PATH
) để trỏ đến đường dẫn đến tải trọng.
Công cụ chứng minh việc đưa vào đã được phát hành trong kho lưu trữ avb
trong Dự án nguồn mở Android. Cách chạy:
computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=../payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=pixel
Trình xác minh sử dụng điểm kiểm tra và nội dung nhật ký (có trong thư mục thẻ thông tin) để kiểm tra xem trọng tải hình ảnh của bạn có trong nhật ký minh bạch hay không, tức là trọng tải hình ảnh đó do Google phát hành.
Kết quả của lệnh được ghi vào stdout:
OK. inclusion check success!
nếu hình ảnh có trong nhật ký,FAILURE
nếu không.