Trang này cung cấp thông tin chi tiết để hỗ trợ những người triển khai Keymaster Lớp trừu tượng phần cứng (HAL). Nó bao gồm từng chức năng trong API và phiên bản Keymaster nào có chức năng này mô tả cách triển khai mặc định. Đối với thẻ, hãy xem Thẻ Keymaster.
Nguyên tắc triển khai chung
Các nguyên tắc sau đây áp dụng cho tất cả hàm trong API.
Tham số con trỏ đầu vào
Phiên bản: 1, 2
Tham số con trỏ đầu vào không được dùng cho một lệnh gọi nhất định có thể là
NULL
. Phương thức gọi không bắt buộc phải cung cấp phần giữ chỗ.
Ví dụ: một số loại khoá và chế độ có thể không sử dụng bất kỳ giá trị nào trong
Đối số inParams
thành bắt đầu, vì vậy, phương thức gọi có thể
đặt inParams
thành NULL
hoặc cung cấp một tham số trống
thiết lập. Phương thức gọi cũng có thể cung cấp các tham số không dùng đến và phương thức Keymaster phải
không phải là lỗi sự cố.
Nếu tham số đầu vào bắt buộc là NULL, thì các phương thức Keymaster sẽ trả về giá trị
ErrorCode::UNEXPECTED_NULL_POINTER
.
Kể từ Keymaster 3, không có tham số con trỏ. Tất cả thông số được chuyển theo tham chiếu giá trị hoặc tham chiếu const.
Tham số con trỏ đầu ra
Phiên bản: 1, 2
Tương tự như tham số con trỏ đầu vào, tham số con trỏ đầu ra không dùng đến
có thể là NULL
. Nếu một phương thức cần trả về dữ liệu trong một đầu ra
tham số được tìm thấy là NULL
, tham số này sẽ trả về
ErrorCode::OUTPUT_PARAMETER_NULL
Kể từ Keymaster 3, không có tham số con trỏ. Tất cả thông số được chuyển theo tham chiếu giá trị hoặc tham chiếu const.
Sử dụng API sai mục đích
Phiên bản: 1, 2, 3
Có nhiều cách để người gọi có thể đưa ra yêu cầu không hợp lý hoặc đều là ngốc nghếch nhưng không sai về mặt kỹ thuật. Quá trình triển khai Keymaster không không thành công trong những trường hợp như vậy hoặc đưa ra thông tin chẩn đoán. Sử dụng khoá quá nhỏ, đặc tả các tham số đầu vào không liên quan, việc sử dụng lại IV hoặc số chỉ dùng một lần, tạo khoá không có mục đích (do đó vô ích) và những tương tự thì không nên được chẩn đoán bằng các triển khai. Thiếu các tham số bắt buộc, thông số kỹ thuật của tham số bắt buộc không hợp lệ và các lỗi tương tự cần được chẩn đoán.
Các ứng dụng, khung và kho khoá Android có trách nhiệm thực hiện việc này đảm bảo rằng các lệnh gọi đến mô-đun Keymaster hợp lý và hữu ích.
Hàm
getHardwareFeatures (Tính năng phần cứng)
Phiên bản: 3
Phương thức getHardwareFeatures
mới sẽ hiển thị cho khách hàng một số
các đặc điểm quan trọng của phần cứng bảo mật cơ bản.
Phương thức này không nhận đối số và trả về 4 giá trị, tất cả đều là boolean:
isSecure
làtrue
nếu các khoá được lưu trữ trong bảo mật phần cứng (TEE, v.v.) và không bao giờ rời khỏi phần cứng đó.supportsEllipticCurve
làtrue
nếu phần cứng hỗ trợ mã hoá đường cong elip với các đường cong NIST (P-224, P-256, P-384 và P-521).supportsSymmetricCryptography
mới làtrue
nếu phần cứng hỗ trợ mật mã đối xứng, bao gồm cả AES và HMAC.supportsAttestation
làtrue
nếu phần cứng hỗ trợ tạo chứng chỉ chứng thực khoá công khai Keymaster, ký bằng một khoá được đưa vào một môi trường an toàn.
Các mã lỗi duy nhất mà phương thức này có thể trả về là ErrorCode:OK
,
ErrorCode::KEYMASTER_NOT_CONFIGURED
hoặc một trong các mã lỗi
cho biết lỗi khi giao tiếp với phần cứng bảo mật.
getHardwareFeatures() generates(bool isSecure, bool supportsEllipticCurve, bool supportsSymmetricCryptography, bool supportsAttestation, bool supportsAllDigests, string keymasterName, string keymasterAuthorName);
định cấu hình
Phiên bản: 2
Hàm này được giới thiệu trong Keymaster 2 và không dùng nữa trong Keymaster 3, vì thông tin này có sẵn trong các tệp thuộc tính hệ thống và nhà sản xuất quá trình triển khai sẽ đọc các tệp đó trong khi khởi động.
Định cấu hình keymaster. Phương thức này được gọi một lần sau khi mở thiết bị
và trước khi sử dụng. Được dùng để cung cấp
KM_TAG_OS_VERSION và
KM_TAG_OS_PATCHLEVEL đến
quản lý phím. Cho đến khi phương thức này được gọi, tất cả các phương thức khác đều trả về
KM_ERROR_KEYMASTER_NOT_CONFIGURED
. Các giá trị do URL này cung cấp
chỉ được keymaster chấp nhận một lần cho mỗi lần khởi động. Tiếp theo
lệnh gọi sẽ trả về KM_ERROR_OK
, nhưng không làm gì cả.
Nếu việc triển khai keymaster nằm trong phần cứng bảo mật, phiên bản hệ điều hành và
Các giá trị ở cấp bản vá được cung cấp không khớp với các giá trị được cung cấp cho khoá bảo mật
phần cứng theo trình tải khởi động (hoặc nếu trình tải khởi động không cung cấp các giá trị),
thì phương thức này sẽ trả về KM_ERROR_INVALID_ARGUMENT
và tất cả các phương thức khác
sẽ tiếp tục trả về KM_ERROR_KEYMASTER_NOT_CONFIGURED
.
keymaster_error_t (*configure)(const struct keymaster2_device* dev, const keymaster_key_param_set_t* params);
thêmRngEntropy
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là add_rng_entropy
và đổi tên trong Keymaster 3.
Thêm entropy do người gọi cung cấp vào nhóm được triển khai Keymaster 1 sử dụng để tạo số ngẫu nhiên cho khoá, IV, v.v.
Việc triển khai Keymaster cần kết hợp các dữ liệu được cung cấp một cách an toàn
entropy vào bể, cũng phải chứa
entropy được tạo nội bộ từ một trình tạo số ngẫu nhiên phần cứng.
Việc kết hợp phải được xử lý để kẻ tấn công có toàn quyền kiểm soát
của bit do addRngEntropy
cung cấp hoặc phần cứng do phần cứng tạo
bit, nhưng không phải cả hai, không có lợi thế không nhỏ trong việc dự đoán số bit
được tạo ra từ nhóm entropy.
Triển khai Keymaster nhằm ước tính entropy trong
nhóm nội bộ giả định rằng dữ liệu được cung cấp bởi
addRngEntropy
không chứa entropy. Việc triển khai Keymaster có thể
trả về ErrorCode::INVALID_INPUT_LENGTH
nếu chúng được cung cấp nhiều hơn 2
KiB dữ liệu trong một cuộc gọi.
generateKey
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là generate_key
và đổi tên trong Keymaster 3.
Tạo khoá mật mã mới, chỉ định các hoạt động uỷ quyền liên quan,
được liên kết vĩnh viễn với khoá này. Việc triển khai Keymaster giúp
không thể sử dụng khoá theo bất kỳ cách nào không nhất quán với các uỷ quyền
được chỉ định tại thời điểm tạo. Đối với các hoạt động uỷ quyền mà
phần cứng không thể thực thi, nghĩa vụ của phần cứng bảo mật được giới hạn đối với
đảm bảo rằng các uỷ quyền không thể thực thi được liên kết với khoá không thể
được sửa đổi để mọi lệnh gọi đến
getKeyCharacteristics
sẽ trả về giá trị ban đầu. Ngoài ra, các đặc điểm được trả về bởi
generateKey
phân bổ ủy quyền một cách chính xác giữa
danh sách được thực thi phần cứng và thực thi phần mềm. Xem
getKeyCharacteristics để biết thêm thông tin chi tiết.
Các tham số được cung cấp cho generateKey
phụ thuộc vào loại khoá
đang được tạo. Phần này tóm tắt các thẻ cần thiết và không bắt buộc cho
từng loại khoá. Thẻ::ALGORITHM
luôn cần thiết để chỉ định loại.
Khoá RSA
Các tham số sau đây là cần thiết để tạo khoá RSA.
- Thẻ::KEY_SIZE
chỉ định kích thước của mô-đun công khai, tính bằng bit. Nếu bị bỏ qua,
phương thức sẽ trả về
ErrorCode::UNSUPPORTED_KEY_SIZE
. Các giá trị được hỗ trợ là 1024, 2048, 3072 và 4096. Giá trị được đề xuất đều là kích thước chính là bội số của 8. - Thẻ::RSA_PUBLIC_EXPONENT
chỉ định giá trị số mũ công khai RSA. Nếu bị bỏ qua, phương thức
sẽ trả về
ErrorCode::INVALID_ARGUMENT
. Các giá trị được hỗ trợ là 3 và 65537. Các giá trị được đề xuất là tất cả giá trị nguyên tố lên đến 2^64.
Các tham số sau đây là không cần thiết để tạo khoá RSA, nhưng
việc tạo khoá RSA mà không có chúng sẽ tạo ra một khoá không sử dụng được. Tuy nhiên,
Hàm generateKey
không trả về lỗi nếu các tham số này
bị bỏ qua.
- Thẻ::PURPOSE chỉ định các mục đích được phép. Tất cả các mục đích cần được hỗ trợ cho khoá RSA, trong bất kỳ cách kết hợp nào.
- Tag::HEADLINE chỉ định
các thuật toán chuỗi đại diện có thể dùng với khoá mới. Triển khai
không hỗ trợ tất cả thuật toán chuỗi đại diện cần chấp nhận quy trình tạo khoá
có chứa chuỗi đại diện không được hỗ trợ. Thông báo không được hỗ trợ phải là
được đặt trong giải pháp "được thực thi bằng phần mềm" trong đặc điểm chính được trả về.
Điều này là do khoá có thể sử dụng được cùng với các chuỗi đại diện khác đó, nhưng việc phân tích cú pháp lại
thực hiện trong phần mềm. Sau đó, phần cứng được gọi để thực hiện thao tác
cùng với
Digest::NONE
. - Tag::PADDING chỉ định
chế độ khoảng đệm có thể dùng với khoá mới. Triển khai
không hỗ trợ tất cả thuật toán chuỗi đại diện cần đặt
PaddingMode::RSA_PSS
vàPaddingMode::RSA_OAEP
inch danh sách các đặc điểm chính được thực thi bằng phần mềm, nếu có bất kỳ đặc điểm nào không được hỗ trợ các thuật toán chuỗi đại diện được chỉ định.
Khoá ECDSA
Chỉ Tag::KEY_SIZE mới là để tạo khoá ECDSA. Thuộc tính này được dùng để chọn nhóm EC. Các giá trị được hỗ trợ là 224, 256, 384 và 521, cho biết Các đường cong NIST p-224, p-256, p-384 và p521, tương ứng.
Từ khoá::PWA cũng cần thiết để có khoá ECDSA hữu ích, nhưng không bắt buộc đối với việc tạo.
Khoá AES
Chỉ Tag::KEY_SIZE
là cần thiết để tạo khoá AES. Nếu bỏ qua, phương thức sẽ trả về
ErrorCode::UNSUPPORTED_KEY_SIZE
. Sau đây là các giá trị được hỗ trợ:
128 và 256, với hỗ trợ tùy chọn cho các phím AES 192 bit.
Các tham số sau đặc biệt phù hợp với khoá AES, nhưng không cần thiết để tạo một mã:
Tag::BLOCK_MODE
chỉ định các chế độ khối mà khoá mới có thể được sử dụng.Tag::PADDING
chỉ định các chế độ khoảng đệm có thể đã sử dụng. Thao tác này chỉ áp dụng cho các chế độ ECB và CBC.
Nếu chế độ chặn GCM được chỉ định, hãy cung cấp
Thẻ::MIN_MAC_LENGTH.
Nếu bị bỏ qua, phương thức này sẽ trả về ErrorCode::MISSING_MIN_MAC_LENGTH
.
Giá trị của thẻ là bội số của 8 và từ 96 đến 128.
Khoá HMAC
Các tham số sau đây là bắt buộc để tạo khoá HMAC:
- Thẻ::KEY_SIZE chỉ định kích thước khoá tính bằng bit. Giá trị nhỏ hơn 64 và các giá trị không phải là bội số của 8 sẽ không được hỗ trợ. Tất cả hỗ trợ bội số của 8 từ 64 đến 512. Giá trị lớn hơn có thể là được hỗ trợ.
- Thẻ::MIN_MAC_LENGTH xác định độ dài tối thiểu của Các địa chỉ MAC có thể được tạo hoặc xác minh bằng khoá này. Giá trị là bội số của 8 và ít nhất 64.
- Từ khoá::PWA
chỉ định thuật toán chuỗi đại diện cho khoá. Chính xác
một chuỗi đại diện được chỉ định, nếu không thì trả về
ErrorCode::UNSUPPORTED_DIGEST
. Nếu chuỗi đại diện không được hỗ trợ bởi trình tin cậy, trả vềErrorCode::UNSUPPORTED_DIGEST
.
Đặc điểm chính
Nếu đối số đặc điểm không phải là giá trị NULL, thì generateKey
sẽ trả về
đặc điểm của khoá mới được tạo được chia thích hợp thành
danh sách được thực thi phần cứng và thực thi phần mềm. Xem
getKeyCharacteristics đối với nội dung mô tả
đặc điểm nào sẽ nằm trong danh sách nào. Các đặc điểm được trả về
bao gồm tất cả các thông số được chỉ định để tạo khoá, ngoại trừ
Thẻ::APPLICATION_ID và
Thẻ::APPLICATION_DATA.
Nếu các thẻ này được đưa vào thông số chính, thì các thẻ này sẽ bị xoá khỏi
các đặc điểm được trả về nên không thể tìm thấy giá trị của chúng
bằng cách kiểm tra blob khoá được trả về. Tuy nhiên, chúng bị ràng buộc theo mã hoá
vào blob khoá để nếu không cung cấp giá trị chính xác khi khoá được
đã sử dụng, không sử dụng được. Tương tự,
Thẻ::ROOT_OF_TRUST là
được liên kết bằng mã hoá với khoá nhưng có thể không được chỉ định trong
tạo hoặc nhập khoá và không bao giờ được trả về.
Ngoài các thẻ được cung cấp, bộ tin cậy cũng
thêm Tag::ORIGINAL,
với giá trị KeyOrigin::GENERATED
,
và nếu khoá có khả năng chống khôi phục,
Tính năng chống khôi phục
Khả năng khôi phục có nghĩa là sau khi khoá bị xoá bằng deleteKey hoặc deleteAllKeys, và được đảm bảo bằng phần cứng bảo mật sẽ không bao giờ sử dụng được nữa. Các phương pháp triển khai thường không có khả năng kháng nghị trả về tài liệu khoá được tạo hoặc nhập cho phương thức gọi dưới dạng blob khoá, mã hóa và xác thực. Khi kho khoá xoá blob khoá, khoá sẽ là biến mất, nhưng một kẻ tấn công trước đó đã truy xuất được tài liệu khoá có thể khôi phục ảnh đó vào thiết bị.
Khoá có khả năng chống khôi phục nếu các đảm bảo phần cứng bảo mật đã bị xoá bạn sẽ không thể khôi phục khoá sau này. Việc này thường được thực hiện bằng cách lưu trữ khoá bổ sung ở một vị trí đáng tin cậy mà kẻ tấn công không thể thao túng. Bật trên thiết bị di động, cơ chế được sử dụng cho cơ chế này thường là Phát lại bộ nhớ được bảo vệ Chặn (RPMB). Vì số lượng khoá có thể được tạo về cơ bản là không bị ràng buộc và bộ nhớ đáng tin cậy dùng cho khả năng chống khôi phục có thể bị giới hạn về quy mô, phương pháp này cần thành công ngay cả khi khả năng khôi phục Không thể cung cấp khoá mới. Trong trường hợp đó, Thẻ::ROLLBACK_RESISTANT không nên được thêm vào đặc điểm chính.
getKeyCharacteristics
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 dưới dạng
get_key_characteristics
và được đổi tên trong Keymaster 3.
Trả về các tham số và hoạt động uỷ quyền liên quan đến khoá đã cung cấp, được chia thành hai nhóm: thực thi phần cứng và thực thi bằng phần mềm. Phần mô tả ở đây cũng áp dụng như nhau cho danh sách đặc điểm chính do generateKey và importKey trả về.
Nếu bạn cung cấp Tag::APPLICATION_ID
trong quá trình tạo khoá
hoặc nhập, thì cùng một giá trị sẽ được cung cấp cho
phương thức này trong đối số clientId
. Nếu không, giá trị
phương thức trả về ErrorCode::INVALID_KEY_BLOB
. Tương tự,
nếu Tag::APPLICATION_DATA
được cung cấp trong quá trình tạo
hoặc nhập, thì cùng một giá trị sẽ được cung cấp cho
phương thức này trong đối số appData
.
Các đặc điểm được phương thức này trả về mô tả đầy đủ loại và mức sử dụng khoá đã chỉ định.
Quy tắc chung để quyết định xem một thẻ nhất định có nằm trong phần tử danh sách được thực thi phần cứng hoặc thực thi phần mềm là nếu ý nghĩa của thẻ được đảm bảo hoàn toàn bằng phần cứng bảo mật, phần cứng được thực thi. Nếu không, trạng thái phần mềm thực thi. Dưới đây là danh sách các thẻ cụ thể có cách phân bổ chính xác có thể không rõ ràng:
- Thẻ::ALGORITHM, Thẻ::KEY_SIZE, và Tag::RSA_PUBLIC_EXPONENT là các thuộc tính nội tại của khoá. Đối với mọi khoá được bảo mật bằng phần cứng, các thẻ này sẽ có trong danh sách được thực thi phần cứng.
- Giá trị Tag::CHẢNH được hỗ trợ bởi phần cứng bảo mật được đặt trong danh sách phần cứng được hỗ trợ. Thông báo không được hỗ trợ sẽ xuất hiện trong danh sách được phần mềm hỗ trợ.
- Giá trị Tag::PADDING thường nằm trong danh sách được hỗ trợ phần cứng, trừ khi có khả năng một chế độ khoảng đệm cụ thể có thể phải được thực hiện bằng phần mềm. Trong trường hợp đó, chúng sẽ được đưa vào danh sách được thực thi bằng phần mềm. Khả năng như vậy phát sinh đối với các khoá RSA cho phép khoảng đệm PSS hoặc OAEP với các thuật toán chuỗi đại diện không được phần cứng bảo mật hỗ trợ.
- Thẻ::USER_SECURE_ID và Thẻ::USER_XÁC_TYPE chỉ được thực thi phần cứng nếu quy trình xác thực người dùng được thực thi bằng phần cứng. Người nhận thực hiện điều này, tin cậy Keymaster và quy trình xác thực liên quan cả hai người tin cậy phải bảo mật và dùng chung khoá HMAC bí mật dùng để ký và xác thực mã thông báo xác thực. Xem Trang Xác thực để biết thông tin chi tiết.
- Thẻ::ACTIVE_DATETIME, Thẻ::ORIGINALATION_EXPIRE_DATETIME, và Tag::USAGE_EXPIRE_DATETIME cần quyền truy cập vào đồng hồ treo tường có thể xác minh được. Phần cứng bảo mật nhất chỉ có quyền truy cập vào thông tin thời gian do hệ điều hành không an toàn cung cấp, tức là có nghĩa là thẻ được phần mềm thực thi.
- Thẻ::ORIGINAL là luôn có trong danh sách phần cứng cho các phím ràng buộc phần cứng. Sự hiện diện của Google là cách các lớp cao hơn xác định rằng một khoá được dựa trên phần cứng.
khoá-nhập
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là import_key
và đổi tên trong Keymaster 3.
Nhập nội dung khoá vào phần cứng Keymaster. Các tham số định nghĩa chính và
đặc điểm đầu ra được xử lý giống như đối với generateKey
,
với các ngoại lệ sau:
- Thẻ::KEY_SIZE và
Thẻ::RSA_PUBLIC_EXPONENT
(chỉ dành cho khoá RSA) là không cần thiết trong tham số đầu vào. Nếu không được cung cấp,
tin cậy suy ra các giá trị từ tài liệu khoá đã cung cấp rồi thêm
các thẻ và giá trị phù hợp với đặc điểm chính. Nếu các thông số là
được cung cấp, thì chương trình tin cậy sẽ xác thực chúng theo nội dung khoá. Trong
trường hợp không khớp, thì phương thức này sẽ trả về
ErrorCode::IMPORT_PARAMETER_MISMATCH
. - Tag::ORIGINAL được trả về có thuộc tính
có cùng giá trị với
KeyOrigin::IMPORTED
.
khoá xuất
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là export_key
và đổi tên trong Keymaster 3.
Xuất khoá công khai từ cặp khoá RSA hoặc EC của Keymaster.
Nếu Tag::APPLICATION_ID
được cung cấp trong quá trình tạo khoá hoặc
nhập, cùng một giá trị được cung cấp cho phương thức này trong
Đối số clientId
. Nếu không, phương thức này sẽ trả về
ErrorCode::INVALID_KEY_BLOB
. Tương tự, nếu
Tag::APPLICATION_DATA
đã được cung cấp trong quá trình tạo hoặc nhập, thì cùng một giá trị được cung cấp cho
phương thức này trong đối số appData
.
DeleteKey
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là delete_key
và đổi tên trong Keymaster 3.
Xoá khoá đã cung cấp. Phương thức này không bắt buộc và chỉ được triển khai bằng các mô-đun Keymaster có chức năng chống khôi phục.
deleteAllKeys
Phiên bản: 1, 2, 3
Hàm này được giới thiệu trong Keymaster 1 là delete_all_keys
và đổi tên trong Keymaster 3.
Xoá tất cả các khoá. Phương thức này không bắt buộc và chỉ được triển khai nhờ các mô-đun Keymaster có chức năng chống khôi phục.
huỷ Chứng thựcIds
Phiên bản: 3
Phương thức destroyAttestationIds()
được dùng để vĩnh viễn
tắt tính năng mới (không bắt buộc, nhưng bạn nên làm vậy)
Chứng thực giá trị nhận dạng
của chúng tôi. Nếu TEE không có cách nào để đảm bảo rằng quy trình chứng thực giá trị nhận dạng là vĩnh viễn
bị tắt sau khi phương thức này được gọi, thì bạn không được chứng thực giá trị nhận dạng
đều được triển khai, trong trường hợp đó, phương thức này không có tác dụng gì và
sẽ trả về ErrorCode::UNIMPLEMENTED
. Nếu quy trình chứng thực giấy tờ tuỳ thân được
được hỗ trợ, phương thức này cần được triển khai và phải tắt vĩnh viễn
tất cả nỗ lực chứng thực danh tính trong tương lai. Phương thức này có thể được gọi là bất kỳ số nào
lần. Nếu quy trình chứng thực giấy tờ tuỳ thân đã bị tắt vĩnh viễn, thì phương thức này sẽ
không có giá trị nào và trả về ErrorCode::OK
.
Các mã lỗi duy nhất mà phương thức này có thể trả về là
ErrorCode::UNIMPLEMENTED
(nếu không hỗ trợ chứng thực giấy tờ tuỳ thân),
ErrorCode:OK
, ErrorCode::KEYMASTER_NOT_CONFIGURED
hoặc
một trong các mã lỗi cho biết không thể kết nối với trình bảo mật
phần cứng.
bắt đầu
Phiên bản: 1, 2, 3
Bắt đầu thao tác mã hoá bằng khoá đã chỉ định cho
mục đích, với các tham số được chỉ định (nếu phù hợp) và trả về một
nút điều khiển thao tác dùng với thao tác update (cập nhật) và finish (hoàn tất) để hoàn tất thao tác. Xử lý thao tác là
cũng được dùng làm "thách thức" mã thông báo trong các thao tác đã xác thực và
hoạt động có trong trường challenge
của
mã xác thực.
Quá trình triển khai Keymaster hỗ trợ đồng thời ít nhất 16
các toán tử. Kho khoá sử dụng tối đa 15 khoá, để lại một khoá cho vold dùng cho mật khẩu
mã hoá. Khi Kho khoá có 15 thao tác đang diễn ra (begin
có
nhưng finish
hoặc abort
chưa được gọi
gọi) và nhận được yêu cầu để bắt đầu lần gọi thứ 16, thì
abort
trên thao tác được dùng gần đây nhất để giảm số lượng
các hoạt động đang diễn ra lên 14 trước khi gọi begin
để bắt đầu
thao tác mới được yêu cầu.
Nếu Thẻ::APPLICATION_ID
hoặc Tag::APPLICATION_DATA đã được chỉ định
trong khi tạo hoặc nhập khoá, các lệnh gọi đến begin
bao gồm các lệnh đó
các thẻ có các giá trị được chỉ định ban đầu trong đối số inParams
cho phương thức này.
Thực thi việc uỷ quyền
Trong phương thức này, các hoạt động uỷ quyền khoá sau đây được thực thi bởi
tin cậy nếu việc triển khai đặt chúng vào chế độ cài đặt "được thực thi phần cứng"
các đặc điểm tương ứng và liệu tác vụ đó không phải là thao tác khoá công khai hay không. Khoá công khai
toán tử, nghĩa là KeyPurpose::ENCRYPT
và KeyPurpose::VERIFY
,
bằng khoá RSA hoặc EC, được phép thành công ngay cả khi việc uỷ quyền
không được đáp ứng.
- Thẻ::PURPOSE: Mục đích
được chỉ định trong lệnh gọi
begin()
phải phù hợp với một trong các mục đích trong các hoạt động uỷ quyền khoá, trừ phi thao tác được yêu cầu là khoá công khai hoạt động. Nếu mục đích được chỉ định không khớp và hoạt động không một thao tác khoá công khai,begin
sẽ trả vềErrorCode::UNSUPPORTED_PURPOSE
Thao tác khoá công khai hoạt động xác minh hoặc mã hoá bất đối xứng. - Thẻ::ACTIVE_DATETIME
chỉ có thể được thực thi nếu có một nguồn thời gian UTC đáng tin cậy. Nếu
ngày và giờ hiện tại trước giá trị thẻ, phương thức sẽ trả về
ErrorCode::KEY_NOT_YET_VALID
. - Thẻ::ORIGINALATION_EXPIRE_DATETIME
chỉ có thể được thực thi nếu có một nguồn thời gian UTC đáng tin cậy. Nếu
ngày và giờ hiện tại sau giá trị thẻ và mục đích là
KeyPurpose::ENCRYPT
hoặcKeyPurpose::SIGN
, phương thức trả vềErrorCode::KEY_EXPIRED
. - Thẻ::USAGE_EXPIRE_DATETIME
chỉ có thể được thực thi nếu có một nguồn thời gian UTC đáng tin cậy. Nếu
ngày và giờ hiện tại sau giá trị thẻ và mục đích là
KeyPurpose::DECRYPT
hoặcKeyPurpose::VERIFY
, phương thức trả vềErrorCode::KEY_EXPIRED
. - Thẻ::MIN_SECONDS_BETWEEN_OPS
được so sánh với một bộ tính giờ tương đối đáng tin cậy cho biết lần sử dụng gần đây nhất
khoá. Nếu thời gian sử dụng gần đây nhất cộng với giá trị thẻ ít hơn thời gian hiện tại,
phương thức sẽ trả về
ErrorCode::KEY_RATE_LIMIT_EXCEEDED
. Xem nội dung mô tả thẻ để biết các thông tin quan trọng về việc triển khai. - Thẻ::MAX_USES_PER_BOOT
được so sánh với một bộ đếm bảo mật theo dõi việc sử dụng khoá
kể từ thời gian khởi động. Nếu số lần sử dụng trước đó vượt quá giá trị thẻ,
phương thức trả về
ErrorCode::KEY_MAX_OPS_EXCEEDED
. - Thẻ::USER_SECURE_ID
chỉ được thực thi bằng phương thức này khi khoá cũng có
Thẻ::: XÁC THỰC TIMEOUT
Nếu khoá có cả hai, thì phương thức này phải nhận được một giá trị hợp lệ
Thẻ::: XÁC THỰC TOKEN trong
inParams
. Để mã thông báo xác thực là hợp lệ, tất cả các phải đúng:- Trường HMAC xác thực chính xác.
- Ít nhất một trong Thẻ::USER_SECURE_ID các giá trị từ khoá này khớp với ít nhất một trong các giá trị mã nhận dạng bảo mật trong mã thông báo.
- Khoá có Thẻ::USER_XÁC_TYPE khớp với loại xác thực trong mã thông báo.
Nếu không đáp ứng bất kỳ điều kiện nào trong số này, phương thức sẽ trả về
ErrorCode::KEY_USER_NOT_AUTHENTICATED
. - Thẻ::Call_NONCE
cho phép phương thức gọi chỉ định một vectơ khởi tạo (IV) hoặc số chỉ dùng một lần. Nếu khoá
không có thẻ này nhưng phương thức gọi đã cung cấp
Thẻ::NONCE đối với phương thức này,
Trả về
ErrorCode::CALLER_NONCE_PROHIBITED
. - Thẻ::BOOTloadER_ONLY
chỉ định rằng chỉ trình tải khởi động mới có thể sử dụng khoá. Nếu phương thức này là
được gọi bằng khoá chỉ dành cho trình tải khởi động sau khi thực thi xong trình tải khởi động,
hàm này sẽ trả về
ErrorCode::INVALID_KEY_BLOB
.
Khoá RSA
Tất cả các thao tác khoá RSA đều chỉ định chính xác một chế độ khoảng đệm trong inParams
.
Nếu không chỉ định hoặc chỉ định nhiều lần, phương thức này sẽ trả về
ErrorCode::UNSUPPORTED_PADDING_MODE
.
Hoạt động ký và xác minh RSA cũng cần thông báo, cũng như mã hoá RSA
và giải mã với chế độ khoảng đệm OAEP. Đối với những trường hợp đó, phương thức gọi
chỉ định chính xác một chuỗi đại diện trong inParams
. Nếu bạn không chỉ định hoặc chỉ định
nhiều lần, phương thức này sẽ trả về ErrorCode::UNSUPPORTED_DIGEST
.
Hoạt động khoá riêng tư (KeyPurpose::DECYPT
và KeyPurpose::SIGN
)
cần uỷ quyền chuỗi đại diện và khoảng đệm, tức là các lần uỷ quyền khoá
cần chứa các giá trị được chỉ định. Nếu không, phương thức này sẽ trả về
ErrorCode::INCOMPATIBLE_DIGEST
hoặc ErrorCode::INCOMPATIBLE_PADDING
, nếu phù hợp. Thao tác khoá công khai
(KeyPurpose::ENCRYPT
và KeyPurpose::VERIFY
) được phép sử dụng với
chuỗi đại diện hoặc khoảng đệm trái phép.
Ngoại trừ PaddingMode::NONE
, tất cả các chế độ khoảng đệm RSA đều là
chỉ có thể áp dụng cho một số mục đích nhất định. Cụ thể,
PaddingMode::RSA_PKCS1_1_5_SIGN
và PaddingMode::RSA_PSS
chỉ hỗ trợ ký và xác minh, trong khi PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
và PaddingMode::RSA_OAEP
chỉ hỗ trợ mã hoá và giải mã.
Phương thức này sẽ trả về ErrorCode::UNSUPPORTED_PADDING_MODE
nếu
chế độ đã chỉ định không hỗ trợ mục đích đã chỉ định.
Có một số tương tác quan trọng giữa chế độ khoảng đệm và chuỗi đại diện:
PaddingMode::NONE
cho biết giá trị "thô" Toán tử RSA là thực hiện. Nếu ký hoặc xác minh,Digest::NONE
được chỉ định cho chuỗi đại diện. Không cần thông báo để mã hoá không có khoảng đệm hoặc của chúng tôi.- Khoảng đệm
PaddingMode::RSA_PKCS1_1_5_SIGN
cần có chuỗi đại diện. Chiến lược phát hành đĩa đơn chuỗi đại diện có thể làDigest::NONE
, trong trường hợp này Keymaster không thể xây dựng cấu trúc chữ ký PKCS#1 v1.5 thích hợp, bởi vì nó không thể thêm cấu trúc DigestInfo. Thay vào đó, việc triển khai tạo0x00 || 0x01 || PS || 0x00 || M
, trong đó M là thông báo được cung cấp và PS là chuỗi khoảng đệm. Kích thước của khoá RSA phải lớn hơn thông báo ít nhất 11 byte, nếu không thì phương thức sẽ trả vềErrorCode::INVALID_INPUT_LENGTH
. - Khoảng đệm
PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
không yêu cầu chuỗi đại diện. - Khoảng đệm
PaddingMode::RSA_PSS
cần có chuỗi đại diện, có thể không phải làDigest::NONE
Nếu bạn chỉ địnhDigest::NONE
, phương thức trả vềErrorCode::INCOMPATIBLE_DIGEST
. Ngoài ra, kích thước của khoá RSA phải lớn hơn kích thước đầu ra ít nhất là 2 + D byte kích thước của chuỗi đại diện, trong đó D là kích thước của chuỗi đại diện, tính bằng byte. Nếu không phương thức sẽ trả vềErrorCode::INCOMPATIBLE_DIGEST
. Kích thước muối là D. - Khoảng đệm
PaddingMode::RSA_OAEP
cần có chuỗi đại diện, có thể không phải làDigest::NONE
Nếu bạn chỉ địnhDigest::NONE
, phương thức trả vềErrorCode::INCOMPATIBLE_DIGEST
.
Khoá EC
Thao tác phím EC chỉ định chính xác một chế độ khoảng đệm trong inParams
.
Nếu không chỉ định hoặc được chỉ định nhiều lần, phương thức
sẽ trả về ErrorCode::UNSUPPORTED_PADDING_MODE
.
Hoạt động khoá riêng tư (KeyPurpose::SIGN
) cần được uỷ quyền
chuỗi đại diện và khoảng đệm, tức là các lượt uỷ quyền khoá
cần chứa các giá trị được chỉ định. Nếu không, trả lại
ErrorCode::INCOMPATIBLE_DIGEST
. Thao tác khoá công khai
(KeyPurpose::VERIFY
) được phép có chuỗi đại diện hoặc khoảng đệm trái phép.
Khoá AES
Thao tác phím AES chỉ định chính xác một chế độ khối và một chế độ khoảng đệm
trong inParams
. Nếu một trong hai giá trị không được chỉ định hoặc chỉ định giá trị khác
nhiều lần, hãy trả về ErrorCode::UNSUPPORTED_BLOCK_MODE
hoặc
ErrorCode::UNSUPPORTED_PADDING_MODE
Các chế độ được chỉ định phải
được cho phép bằng khoá, nếu không phương thức sẽ trả về
ErrorCode::INCOMPATIBLE_BLOCK_MODE
hoặc
ErrorCode::INCOMPATIBLE_PADDING_MODE
Nếu chế độ chặn là BlockMode::GCM
, inParams
chỉ định Tag::MAC_LENGTH
và
giá trị được chỉ định là bội số của 8 và không lớn hơn 128
hoặc nhỏ hơn giá trị của Tag::MIN_MAC_LENGTH
trong
uỷ quyền khoá. Đối với độ dài MAC lớn hơn 128 hoặc không phải là bội số của
8, trả về ErrorCode::UNSUPPORTED_MAC_LENGTH
. Cho các giá trị thấp hơn
lớn hơn độ dài tối thiểu của khoá, hãy trả về ErrorCode::INVALID_MAC_LENGTH
.
Nếu chế độ chặn là BlockMode::GCM
hoặc BlockMode::CTR
,
chế độ khoảng đệm được chỉ định phải là PaddingMode::NONE
.
Đối với BlockMode::ECB
hoặc BlockMode::CBC
, chế độ này có thể
PaddingMode::NONE
hoặc PaddingMode::PKCS7
. Nếu chế độ khoảng đệm
không đáp ứng các điều kiện này, hãy trả về ErrorCode::INCOMPATIBLE_PADDING_MODE
.
Nếu chế độ chặn là BlockMode::CBC
, BlockMode::CTR
,
hoặc BlockMode::GCM
, thì cần có vectơ khởi tạo hoặc số chỉ dùng một lần.
Trong hầu hết trường hợp, phương thức gọi không nên cung cấp giá trị IV hoặc số chỉ dùng một lần. Trong trường hợp đó,
Quá trình triển khai Keymaster sẽ tạo một IV hoặc số chỉ dùng một lần ngẫu nhiên và trả về thông qua
Thẻ::NONCE trong outParams
.
CBC và CTR IV có kích thước 16 byte. Số chỉ dùng một lần GCM có kích thước 12 byte. Nếu khoá
uỷ quyền có chứa
Thẻ::Call_NONCE,
thì phương thức gọi có thể cung cấp IV/số chỉ dùng một lần với
Thẻ::NONCE
trong inParams
. Nếu một số chỉ dùng một lần được cung cấp khi
Thẻ::Call_NONCE
không được uỷ quyền, hãy trả lại ErrorCode::CALLER_NONCE_PROHIBITED
.
Nếu một số chỉ dùng một lần không được cung cấp khi
Thẻ::Call_NONCE
được uỷ quyền, hãy tạo một IV/số chỉ dùng một lần ngẫu nhiên.
Khoá HMAC
Thao tác khoá HMAC chỉ định Tag::MAC_LENGTH
trong inParams
.
Giá trị được chỉ định phải là bội số của 8 và không lớn hơn
độ dài chuỗi đại diện hoặc nhỏ hơn giá trị của Tag::MIN_MAC_LENGTH
trong các hoạt động uỷ quyền khoá. Đối với độ dài MAC lớn hơn độ dài thông báo hoặc
không phải bội số của 8, hãy trả về ErrorCode::UNSUPPORTED_MAC_LENGTH
.
Đối với các giá trị nhỏ hơn độ dài tối thiểu của khoá, hãy trả về
ErrorCode::INVALID_MAC_LENGTH
.
cập nhật
Phiên bản: 1, 2, 3
Cung cấp dữ liệu để xử lý trong một hoạt động đang diễn ra được bắt đầu bằng begin.
Thao tác này do tham số operationHandle
chỉ định.
Để linh hoạt hơn cho việc xử lý vùng đệm, việc triển khai phương thức này
có lựa chọn dùng ít dữ liệu hơn so với mức được cung cấp. Người gọi là
chịu trách nhiệm lặp lại để cấp dữ liệu còn lại trong các lệnh gọi tiếp theo. Chiến lược phát hành đĩa đơn
lượng dữ liệu đầu vào đã tiêu thụ được trả về trong tham số inputConsumed
.
Quá trình triển khai luôn tiêu tốn ít nhất một byte, trừ phi
thao tác không thể chấp nhận thêm nữa; nếu có nhiều hơn 0 byte và không
byte được sử dụng, phương thức gọi sẽ coi đây là lỗi và huỷ thao tác.
Việc triển khai cũng có thể chọn lượng dữ liệu cần trả lại, do cập nhật. Điều này chỉ liên quan đến hoạt động mã hoá và giải mã, vì việc ký và xác minh sẽ không trả lại dữ liệu nào cho đến khi hoàn tất. Trả về dữ liệu càng sớm càng tốt, thay vì lưu dữ liệu vào vùng đệm.
Xử lý lỗi
Nếu phương thức này trả về mã lỗi không phải là ErrorCode::OK
,
thao tác bị huỷ và xử lý thao tác bị vô hiệu hoá. Bất kỳ hạng nào
việc sử dụng tên người dùng nào trong tương lai, với phương pháp này,
finish hoặc huỷ
sẽ trả về ErrorCode::INVALID_OPERATION_HANDLE
.
Thực thi việc uỷ quyền
Việc thực thi uỷ quyền khoá chủ yếu được thực hiện lúc bắt đầu. Trường hợp ngoại lệ là khoá có:
- Một hoặc nhiều Thẻ::USER_SECURE_IDs và
- Không có Thẻ::verify_TIMEOUT
Trong trường hợp này, khoá sẽ yêu cầu lượt uỷ quyền cho mỗi thao tác và việc cập nhật
nhận được một Tag:::XÁC_TOKEN
trong đối số inParams
. HMAC xác minh rằng mã thông báo là hợp lệ và có chứa
một mã nhận dạng người dùng bảo mật trùng khớp, khớp với mã
Thẻ::USER_GCS_TYPE,
và chứa xử lý thao tác của thao tác hiện tại trong
trường thử thách. Nếu không đáp ứng những điều kiện này, hãy trả về
ErrorCode::KEY_USER_NOT_AUTHENTICATED
.
Phương thức gọi cung cấp mã thông báo xác thực cho mỗi lệnh gọi để cập nhật và hoàn tất. Trong quá trình triển khai, bạn chỉ cần xác thực mã thông báo một lần nếu muốn.
Khoá RSA
Đối với hoạt động ký và xác minh bằng Digest::NONE
,
phương thức này chấp nhận toàn bộ khối được ký hoặc xác minh trong một
cập nhật. Mô-đun này có thể không chỉ sử dụng một phần của khối. Tuy nhiên, nếu phương thức gọi
chọn cung cấp dữ liệu trong nhiều nội dung cập nhật, phương thức này chấp nhận dữ liệu đó.
Nếu phương thức gọi cung cấp nhiều dữ liệu để ký hơn mức có thể sử dụng (độ dài của
dữ liệu vượt quá kích thước khoá RSA), trả về ErrorCode::INVALID_INPUT_LENGTH
.
Khoá ECDSA
Đối với hoạt động ký và xác minh bằng Digest::NONE
,
phương thức này chấp nhận toàn bộ khối được ký hoặc xác minh trong một
cập nhật. Phương thức này có thể không chỉ sử dụng một phần của khối.
Tuy nhiên, nếu phương thức gọi chọn cung cấp dữ liệu trong nhiều nội dung cập nhật, phương thức này chấp nhận nó. Nếu phương thức gọi cung cấp thêm dữ liệu để ký tối đa là mức có thể sử dụng, thì dữ liệu sẽ tự động bị cắt bớt. (Điều này khác với xử lý dữ liệu dư thừa được cung cấp trong các hoạt động RSA tương tự. Lý do dẫn đến quyết định này là khả năng tương thích với các ứng dụng cũ.)
Khoá AES
Chế độ AES GCM hỗ trợ "dữ liệu xác thực được liên kết", được cung cấp qua
Thẻ::ASSOCIATED_DATA
trong đối số inParams
.
Dữ liệu liên quan có thể được cung cấp trong các lệnh gọi lặp lại (quan trọng là
dữ liệu quá lớn để gửi trong một khối) nhưng luôn đứng trước dữ liệu
cần mã hoá hoặc giải mã. Lệnh gọi cập nhật có thể nhận cả hai dữ liệu liên quan
và dữ liệu để mã hoá/giải mã, nhưng các bản cập nhật tiếp theo có thể không bao gồm
. Nếu phương thức gọi cung cấp dữ liệu liên quan cho một cuộc gọi cập nhật sau cuộc gọi
chứa dữ liệu để mã hoá/giải mã, hãy trả về ErrorCode::INVALID_TAG
.
Đối với mã hóa GCM, thẻ được nối vào bản mã bằng cách
finish. Trong quá trình giải mã, lượt chuyển đổi cuối cùng
Tag::MAC_LENGTH
byte dữ liệu được cung cấp cho
cập nhật là thẻ. Vì một lệnh gọi nhất định của
update không thể biết đó có phải là lệnh gọi cuối cùng hay không,
thẻ sẽ xử lý tất cả trừ độ dài thẻ và lưu dữ liệu thẻ có thể có vào vùng đệm
trong khi hoàn tất.
hoàn tất
Phiên bản: 1, 2, 3
Hoàn tất một thao tác đang diễn ra được bắt đầu bằng begin, và xử lý tất cả dữ liệu chưa được xử lý được cung cấp bởi cập nhật.
Phương thức này là phương thức cuối cùng được gọi trong một toán tử, vì vậy tất cả dữ liệu đã xử lý sẽ được trả về.
Dù hoàn tất thành công hay trả về lỗi, phương thức này vẫn hoàn tất
thao tác đó và do đó làm mất hiệu lực xử lý thao tác được cung cấp. Bất kỳ hạng nào
việc sử dụng tên người dùng trong tương lai, bằng phương pháp này, hoặc cập nhật hoặc
huỷ bỏ, trả về ErrorCode::INVALID_OPERATION_HANDLE
.
Thao tác ký sẽ trả về chữ ký dưới dạng kết quả. Hoạt động xác minh
chấp nhận chữ ký trong tham số signature
và không trả về kết quả nào.
Thực thi việc uỷ quyền
Việc thực thi việc uỷ quyền chính được thực hiện chủ yếu trong bắt đầu. Trường hợp ngoại lệ là khoá có:
- Một hoặc nhiều Thẻ::USER_SECURE_IDs và
- Không có Thẻ::: XÁC THỰC TIMEOUT
Trong trường hợp này, khoá sẽ yêu cầu lượt uỷ quyền cho mỗi thao tác và việc cập nhật
nhận được một Tag:::XÁC_TOKEN
trong đối số inParams
. HMAC xác minh rằng mã thông báo
là hợp lệ và chứa mã nhận dạng người dùng bảo mật trùng khớp, khớp với
Thẻ::USER_XÁC_TYPE và
chứa xử lý thao tác của thao tác hiện tại trong
trường thử thách. Nếu không đáp ứng những điều kiện này, hãy trả về
ErrorCode::KEY_USER_NOT_AUTHENTICATED
.
Phương thức gọi cung cấp mã thông báo xác thực cho mỗi lệnh gọi đến cập nhật và hoàn tất. Trong quá trình triển khai, bạn chỉ cần xác thực mã thông báo một lần nếu muốn.
Khoá RSA
Một số yêu cầu bổ sung, tuỳ thuộc vào chế độ khoảng đệm:
PaddingMode::NONE
. Đối với các hoạt động ký và mã hoá không được đệm, nếu dữ liệu được cung cấp ngắn hơn khoá, thì dữ liệu sẽ được thêm vào phía bên trái trước khi ký/mã hoá. Nếu dữ liệu có cùng độ dài với khoá, nhưng lớn hơn về số lượng, hãy trả vềErrorCode::INVALID_ARGUMENT
. Cho hoạt động xác minh và giải mã, dữ liệu phải có độ dài làm khoá. Nếu không, hãy trả vềErrorCode::INVALID_INPUT_LENGTH.
PaddingMode::RSA_PSS
. Đối với các thao tác chữ ký có đệm PSS, Dữ liệu ngẫu nhiên của PSS là kích thước của chuỗi đại diện thông báo và được tạo ngẫu nhiên. Thông báo được chỉ định với Tag::HEADLINE tronginputParams
lúc begin được dùng làm chuỗi đại diện PSS và dưới dạng thuật toán chuỗi đại diện MGF1.PaddingMode::RSA_OAEP
. Thông báo được chỉ định bằng Gắn thẻ::êu bài TIÊU CHUẨN tronginputParams
trên begin được dùng làm OAEP thuật toán chuỗi đại diện và SHA1 được dùng làm thuật toán chuỗi đại diện MGF1.
Khoá ECDSA
Nếu dữ liệu được cung cấp để ký hoặc xác minh không có đệm quá dài, hãy cắt bớt nó.
Khoá AES
Một số điều kiện bổ sung, tuỳ thuộc vào chế độ chặn:
BlockMode::ECB
hoặcBlockMode::CBC
. Nếu khoảng đệm làPaddingMode::NONE
và chiều dài dữ liệu không phải là bội số của kích thước khối AES, trả vềErrorCode::INVALID_INPUT_LENGTH
Nếu khoảng đệm làPaddingMode::PKCS7
, hãy thêm dữ liệu theo thông số kỹ thuật PKCS#7. Lưu ý rằng PKCS#7 khuyên bạn nên thêm một khối khoảng đệm bổ sung nếu dữ liệu là bội số của độ dài khối.BlockMode::GCM
. Trong khi mã hoá, sau khi xử lý toàn bộ văn bản thuần tuý, tính toán thẻ (Thẻ::MAC_LENGTH byte) và nối thêm mã đó vào thuật toán mật mã được trả về. Trong quá trình giải mã, xử lý Thẻ cuối cùng::MAC_LENGTH byte làm thẻ. Nếu xác minh bằng thẻ không thành công, hãy trả lạiErrorCode::VERIFICATION_FAILED
.
hủy đi
Phiên bản: 1, 2, 3
Huỷ thao tác đang diễn ra. Sau lệnh gọi huỷ, hãy trả về
ErrorCode::INVALID_OPERATION_HANDLE
cho
bất kỳ lần sử dụng tiếp theo nào của tên xử lý thao tác được cung cấp với cập nhật,
hoàn tất hoặc huỷ.
get_supported_algorithm
Phiên bản: 1
Trả về danh sách các thuật toán mà phần cứng Keymaster hỗ trợ trong quá trình triển khai. Quá trình triển khai phần mềm sẽ trả về một danh sách trống; kết hợp Việc triển khai sẽ trả về danh sách chỉ chứa các thuật toán được phần cứng hỗ trợ.
Các quá trình triển khai Keymaster 1 hỗ trợ RSA, EC, AES và HMAC.
get_supported_block_modes
Phiên bản: 1
Trả về danh sách chế độ khối AES mà phần cứng Keymaster hỗ trợ cho một thuật toán và mục đích đã chỉ định.
Đối với RSA, EC và HMAC không phải là thuật toán mật mã khối, phương thức này sẽ trả về một
danh sách trống cho tất cả các mục đích hợp lệ. Mục đích không hợp lệ sẽ khiến phương thức này
trả về ErrorCode::INVALID_PURPOSE
.
Các phương pháp triển khai Keymaster 1 hỗ trợ ECB, CBC, CTR và GCM cho AES mã hoá và giải mã.
get_supported_padding_modes
Phiên bản: 1
Trả về danh sách các chế độ khoảng đệm mà phần cứng Keymaster hỗ trợ cho một thuật toán và mục đích đã chỉ định.
HMAC và EC không có khái niệm khoảng đệm nên phương thức này sẽ trả về một danh sách trống
cho tất cả mục đích hợp lệ. Mục đích không hợp lệ phải khiến phương thức trả về
ErrorCode::INVALID_PURPOSE
.
Đối với RSA, việc hỗ trợ việc triển khai Keymaster 1:
- Mã hoá, giải mã, ký và xác minh không có khoảng đệm. Cho mặt không có đệm ký và mã hoá, nếu thông điệp ngắn hơn mô-đun công khai, phải đệm sang trái bằng số 0. Đối với phương thức giải mã không có đệm và thì độ dài đầu vào phải khớp với kích thước mô-đun công khai.
- Chế độ mã hoá và ký đệm PKCS#1 v1.5
- PSS có độ dài muối tối thiểu là 20
- OAEP
Đối với AES ở chế độ ECB và CBC, việc triển khai Keymaster 1 không hỗ trợ khoảng đệm và PKCS#7-khoảng đệm. Chế độ CTR và GCM chỉ hỗ trợ không có khoảng đệm.
get_supported_Asks
Phiên bản: 1
Trả về danh sách các chế độ thông báo mà phần cứng Keymaster hỗ trợ cho một thuật toán và mục đích đã chỉ định.
Không có chế độ AES hỗ trợ hoặc yêu cầu phân tích, nên phương thức này sẽ trả về giá trị trống cho mục đích hợp lệ.
Các hoạt động triển khai Keymaster 1 có thể triển khai một tập hợp con các thuộc tính đã xác định chuỗi đại diện. Việc triển khai cung cấp SHA-256 và có thể cung cấp MD5, SHA1, SHA-224, SHA-256, SHA384 và SHA512 (tập hợp đầy đủ các thông báo tổng hợp được xác định).
get_supported_nhập_định dạng
Phiên bản: 1
Trả về danh sách các định dạng nhập được phần cứng Keymaster hỗ trợ việc triển khai thuật toán được chỉ định.
Các phương thức triển khai Keymaster 1 hỗ trợ định dạng PKCS#8 (không có mật khẩu bảo vệ) để nhập cặp khoá RSA và EC, đồng thời hỗ trợ nhập RAW Tài liệu về khoá AES và HMAC.
get_supported_export_formats
Phiên bản: 1
Trả về danh sách các định dạng xuất được phần cứng Keymaster hỗ trợ việc triển khai thuật toán được chỉ định.
Các triển khai Keymaster1 hỗ trợ định dạng X.509 để xuất RSA và Khoá công khai EC. Không hỗ trợ xuất khoá riêng tư hoặc khoá bất đối xứng.
Hàm trước đây
Keymaster 0
Các hàm sau thuộc định nghĩa Keymaster 0 ban đầu. Chúng đều có trong Keymaster 1 struct keymaster1_device_t. Tuy nhiên, trong Keymaster, 1.0 thì chúng không được triển khai và con trỏ hàm của chúng được đặt thành NULL.
generate_keypair
import_keypair
get_keypair_public
delete_keypair
delete_all
sign_data
Verify_data
Keymaster 1
Các hàm sau thuộc định nghĩa Keymaster 1, nhưng bị xóa trong Keymaster 2, cùng với các chức năng Keymaster 0 được liệt kê ở trên.
get_supported_algorithms
get_supported_block_modes
get_supported_padding_modes
get_supported_digests
get_supported_import_formats
get_supported_export_formats
Keymaster 2
Các hàm sau thuộc định nghĩa Keymaster 2, nhưng bị xóa trong Keymaster 3, cùng với các chức năng Keymaster 1 được liệt kê ở trên.
configure