Liên kết phiên bản

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, systemvendor). Đ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.
  • 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ể đọc ro.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:

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()).