Các hàm Keymaster

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:

  • isSecuretrue 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 đó.
  • supportsEllipticCurvetrue 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.
  • supportsAttestationtrue 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_VERSIONKM_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_PSSPaddingMode::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_IDThẻ::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,

Thẻ::ROLLBACK_RESISTANT.

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 generateKeyimportKey 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_IDThẻ::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_SIZEThẻ::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::ENCRYPTKeyPurpose::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ặc KeyPurpose::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ặc KeyPurpose::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::DECYPTKeyPurpose::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::ENCRYPTKeyPurpose::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_SIGNPaddingMode::RSA_PSS chỉ hỗ trợ ký và xác minh, trong khi PaddingMode::RSA_PKCS1_1_1_5_ENCRYPTPaddingMode::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ạo 0x00 || 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ỉ định Digest::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ỉ định Digest::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ó:

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ậthoà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ó:

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ậthoà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 trong inputParams 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 trong inputParams 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ặc BlockMode::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ại ErrorCode::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