Tất cả khoá KeyMint phải được liên kết với một gốc tin cậy cho thiết bị. Gốc tin cậy là một chuỗi bit bắt nguồn từ khoá công khai dùng để xác minh chữ ký của hình ảnh khởi động, cùng với trạng thái khoá trình tải khởi động.
Các khoá KeyMint cũng phải được liên kết với phiên bản hệ điều hành và cấp bản vá của thiết bị. Để hỗ trợ cấu trúc mô-đun của Treble, liên kết phiên bản này bao gồm các cấp độ bản vá riêng biệt cho từng phân vùng (boot
, system
và vendor
). Điều này cho phép cập nhật từng phân vùng một cách độc lập, đồng thời vẫn cung cấp tính năng bảo vệ rollback.
Để triển khai liên kết phiên bản này, ứng dụng đáng tin cậy (TA) KeyMint cần có cách thức để nhận phiên bản hệ điều hành và cấp độ bản vá hiện tại một cách an toàn, đồng thời đảm bảo rằng thông tin mà ứng dụng nhận được khớp với tất cả thông tin về hệ thống đang chạy.
- Thiết bị có tính năng Quy trình khởi động được xác minh của Android (AVB):
- Bạn có thể đưa các cấp độ bản vá và phiên bản hệ điều hành vào
vbmeta.img
để trình tải khởi động có thể cung cấp các cấp độ bản vá và phiên bản hệ điều hành đó cho KeyMint. - Đối với các phân vùng theo chuỗi, thông tin phiên bản cho phân vùng nằm trong VBMeta theo chuỗi.
- Nhìn chung, thông tin phiên bản phải nằm trong
VBMeta struct
chứa dữ liệu xác minh (hàm băm hoặc cây băm) cho một phân vùng nhất định.
- Bạn có thể đưa các cấp độ bản vá và phiên bản hệ điều hành vào
- Thiết bị không có AVB:
- Việc triển khai tính năng Xác minh quy trình khởi động cần cung cấp hàm băm của siêu dữ liệu phiên bản cho trình tải khởi động để trình tải khởi động có thể cung cấp hàm băm cho KeyMint.
boot.img
có thể tiếp tục lưu trữ các cấp độ bản vá trong tiêu đề.system.img
có thể tiếp tục lưu trữ các cấp độ bản vá và phiên bản hệ điều hành trong các thuộc tính chỉ có thể đọc.vendor.img
lưu trữ cấp độ bản vá trong thuộc tính chỉ có thể đọcro.vendor.build.version.security_patch
.- Trình tải khởi động có thể cung cấp hàm băm của tất cả dữ liệu được xác thực bằng tính năng Xác minh quy trình khởi động cho KeyMint.
Các thẻ sau đây mô tả thông tin phiên bản cho các phân vùng có liên quan:
Tag::VENDOR_PATCHLEVEL
: phân vùngvendor
Tag::BOOT_PATCHLEVEL
: phân vùngboot
Tag::OS_PATCHLEVEL
vàOS_VERSION
: phân vùngsystem
. (OS_VERSION
bị xoá khỏi tiêu đềboot.img
.)
Việc triển khai KeyMint phải xử lý tất cả các cấp độ bản vá một cách độc lập. Bạn có thể sử dụng khoá nếu tất cả thông tin phiên bản khớp với các giá trị liên kết với khoá. Nếu phiên bản thiết bị hiện tại mới hơn bất kỳ giá trị nào được liên kết với một khoá, thì KeyMint sẽ trả về lỗi KEY_REQUIRES_UPGRADE
khi có bất kỳ nỗ lực nào để sử dụng khoá đó. Sau đó, Kho khoá sẽ thực hiện IKeyMintDevice::upgradeKey()
để tạo một keyblob mới liên kết với các cấp độ bản vá hiện tại (và Kho khoá sẽ xoá keyblob trước đó bằng lệnh gọi đến IKeyMintDevice::deleteKey()
).