Chức năng của Keymaster

Trang này cung cấp thông tin chi tiết để hỗ trợ người triển khai Lớp trừu tượng phần cứng Keymaster (HAL). Nó bao gồm từng chức năng trong API và phiên bản Keymaster nào có sẵn chức năng đó, đồng thời mô tả cách triển khai mặc định. Đối với thẻ, hãy xem trang Thẻ Keymaster .

Hướng dẫn thực hiện chung

Các nguyên tắc sau đây áp dụng cho tất cả các chức năng trong API.

Tham số con trỏ đầu vào

Phiên bản : 1, 2

Các tham số con trỏ đầu vào không được sử dụng cho một cuộc gọi nhất định có thể là NULL . Người gọi không bắt buộc phải cung cấp phần giữ chỗ. Ví dụ: một số loại và chế độ khóa có thể không sử dụng bất kỳ giá trị nào từ đối số inParams để bắt đầu , do đó, người gọi có thể đặt inParams thành NULL hoặc cung cấp một bộ tham số trống. Người gọi cũng có thể cung cấp các tham số không được sử dụng và các phương thức Keymaster sẽ không gây ra lỗi.

Nếu tham số đầu vào bắt buộc là NULL, thì các phương thức Keymaster sẽ trả về ErrorCode::UNEXPECTED_NULL_POINTER .

Bắt đầu từ Keymaster 3, không có tham số con trỏ. Tất cả các tham số được truyền theo tham chiếu giá trị hoặc hằng.

Tham số con trỏ đầu ra

Phiên bản : 1, 2

Tương tự như các tham số con trỏ đầu vào, các tham số con trỏ đầu ra không được sử dụng có thể là NULL . Nếu một phương thức cần trả về dữ liệu trong tham số đầu ra được tìm thấy là NULL thì phương thức đó sẽ trả về ErrorCode::OUTPUT_PARAMETER_NULL .

Bắt đầu từ Keymaster 3, không có tham số con trỏ. Tất cả các tham số được truyền theo tham chiếu giá trị hoặc hằng.

Lạm dụng API

Phiên bản : 1, 2, 3

Có nhiều cách mà người gọi có thể đưa ra những yêu cầu vô nghĩa hoặc ngu ngốc nhưng không sai về mặt kỹ thuật. Việc triển khai Keymaster không bắt buộc phải thất bại trong những trường hợp như vậy hoặc đưa ra chẩn đoán. Việc sử dụng khóa quá nhỏ, đặc điểm kỹ thuật của các tham số đầu vào không liên quan, sử dụng lại IV hoặc nonces, tạo khóa không có mục đích (do đó vô dụng) và những điều tương tự không được chẩn đoán khi triển khai. Phải chẩn đoán việc bỏ sót các tham số bắt buộc, đặc điểm kỹ thuật của các tham số bắt buộc không hợp lệ và các lỗi tương tự.

Trách nhiệm của ứng dụng, khung và kho khóa Android là đảm bảo rằng các lệnh gọi đến mô-đun Keymaster là hợp lý và hữu ích.

Chức năng

getTính năng phần cứng

Phiên bản : 3

Phương thức getHardwareFeatures mới hiển thị cho khách hàng một số đặ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 có đối số và trả về bốn giá trị, tất cả đều là boolean:

  • isSecure true nếu khóa được lưu trữ trong phần cứng bảo mật (TEE, v.v.) và không bao giờ rời khỏi nó.
  • supportsEllipticCurvetrue nếu phần cứng hỗ trợ mật mã Elliptic Curve với các đường cong NIST (P-224, P-256, P-384 và P-521).
  • supportsSymmetricCryptographytrue nếu phần cứng hỗ trợ mật mã đối xứng, bao gồm AES và HMAC.
  • supportsAttestationtrue nếu phần cứng hỗ trợ tạo chứng chỉ chứng thực khóa công khai Keymaster, được ký bằng khóa được đưa vào môi trường an toàn.

Các mã lỗi duy nhất mà phương pháp 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 không thể 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);

cấu hình

Phiên bản : 2

Chức năng này đã được giới thiệu trong Keymaster 2 và không được 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à quá trình triển khai của nhà sản xuất 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 thiết bị được mở và trước khi sử dụng. Nó được sử dụng để cung cấp KM_TAG_OS_VERSIONKM_TAG_OS_PATCHLEVEL cho keymaster. 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ị được cung cấp bởi phương pháp này chỉ được keymaster chấp nhận một lần cho mỗi lần khởi động. Các cuộc gọi tiếp theo trả về KM_ERROR_OK nhưng không làm gì cả.

Nếu việc triển khai keymaster trong phần cứng bảo mật và các giá trị phiên bản hệ điều hành cũng như mức bản vá được cung cấp không khớp với các giá trị được bộ tải khởi động cung cấp cho phần cứng bảo mật (hoặc nếu bộ tải khởi động không cung cấp giá trị), thì phương thức này sẽ trả về KM_ERROR_INVALID_ARGUMENT và tất cả các giá trị khác các phương thức 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);

addRngEntropy

Phiên bản : 1, 2, 3

Chức năng này được giới thiệu trong Keymaster 1 với add_rng_entropy và được đổ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 khóa, IV, v.v.

Việc triển khai Keymaster cần kết hợp an toàn entropy được cung cấp vào nhóm của chúng, đồng thời phải chứa entropy được tạo nội bộ từ trình tạo số ngẫu nhiên phần cứng. Việc trộn phải được xử lý sao cho kẻ tấn công có toàn quyền kiểm soát các bit được cung cấp addRngEntropy hoặc các bit do phần cứng tạo ra, chứ không phải cả hai, không có lợi thế không thể bỏ qua trong việc dự đoán các bit được tạo ra từ nhóm entropy.

Việc triển khai Keymaster cố gắng ước tính entropy trong nhóm nội bộ của họ giả định rằng dữ liệu do addRngEntropy cung cấp 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 lệnh gọi.

Tạo khóa

Phiên bản : 1, 2, 3

Hàm này được giới thiệu trong Keymaster 1 với tên generate_key và được đổi tên trong Keymaster 3.

Tạo khóa mật mã mới, chỉ định các ủy quyền liên quan, được liên kết vĩnh viễn với khóa. Việc triển khai Keymaster khiến không thể sử dụng khóa theo bất kỳ cách nào không phù hợp với ủy quyền được chỉ định tại thời điểm tạo. Đối với các ủy quyền mà phần cứng bảo mật không thể thực thi, nghĩa vụ của phần cứng bảo mật được giới hạn ở việc đảm bảo rằng các ủy quyền không thể thực thi được liên kết với khóa không thể sửa đổi được, sao cho mọi lệnh gọi tới getKeyCharacteristics đều trả về giá trị ban đầu. Ngoài ra, các đặc tính do generateKey trả về sẽ phân bổ quyền chính xác giữa danh sách được thực thi bằng phần cứng và được thực thi bằng phần mềm. Xem getKeyCharacteristics để biết thêm chi tiết.

Các tham số được cung cấp cho generateKey phụ thuộc vào loại khóa được tạo. Phần này tóm tắt các thẻ cần thiết và tùy chọn cho từng loại khóa. Tag::ALGORITHM luôn cần thiết để chỉ định loại.

Khóa RSA

Các tham số sau đây là cần thiết để tạo khóa RSA.

  • Tag::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 này sẽ trả về ErrorCode::UNSUPPORTED_KEY_SIZE . Các giá trị được hỗ trợ là 1024, 2048, 3072 và 4096. Các giá trị được đề xuất là tất cả các kích thước khóa là bội số của 8.
  • Tag::RSA_PUBLIC_EXPONENT chỉ định giá trị số mũ công khai RSA. Nếu bị bỏ qua, phương thức trả về ErrorCode::INVALID_ARGUMENT . Các giá trị được hỗ trợ là 3 và 65537. Các giá trị được đề xuất đều là các giá trị nguyên tố tối đa 2^64.

Các tham số sau đây không cần thiết để tạo khóa RSA, nhưng việc tạo khóa RSA mà không có chúng sẽ tạo ra khóa 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.

  • Tag::PURPOSE chỉ rõ mục đích được phép. Tất cả các mục đích cần được hỗ trợ cho khóa RSA, dưới bất kỳ hình thức kết hợp nào.
  • Tag::DIGEST chỉ định các thuật toán phân loại có thể được sử dụng với khóa mới. Việc triển khai không hỗ trợ tất cả các thuật toán tóm tắt cần phải chấp nhận các yêu cầu tạo khóa bao gồm các thuật toán tóm tắt không được hỗ trợ. Các thông báo tóm tắt không được hỗ trợ phải được đặt trong danh sách "được thực thi bằng phần mềm" trong các đặc điểm chính được trả về. Điều này là do khóa có thể sử dụng được với các bản tóm tắt khác đó, nhưng việc tóm tắt được thực hiện trong phần mềm. Sau đó, phần cứng được gọi để thực hiện thao tác với Digest::NONE .
  • Tag::PADDING chỉ định các chế độ đệm có thể được sử dụng với khóa mới. Việc triển khai không hỗ trợ tất cả các thuật toán phân loại cần đặt PaddingMode::RSA_PSSPaddingMode::RSA_OAEP trong danh sách các đặc điểm chính do phần mềm thực thi nếu chỉ định bất kỳ thuật toán phân loại nào không được hỗ trợ.

Khóa ECDSA

Chỉ cần Tag::KEY_SIZE để tạo khóa ECDSA. Nó được sử dụng để chọn nhóm EC. Các giá trị được hỗ trợ lần lượt là 224, 256, 384 và 521, biểu thị các đường cong NIST p-224, p-256, p-384 và p521.

Tag::DIGEST cũng cần thiết cho khóa ECDSA hữu ích, nhưng không bắt buộc để tạo.

Phím AES

Chỉ cần Tag::KEY_SIZE để tạo khóa AES. Nếu bị bỏ qua, phương thức này sẽ trả về ErrorCode::UNSUPPORTED_KEY_SIZE . Các giá trị được hỗ trợ là 128 và 256, với sự hỗ trợ tùy chọn cho khóa AES 192 bit.

Các tham số sau đặc biệt phù hợp với khóa AES, nhưng không cần thiết để tạo khóa:

  • Tag::BLOCK_MODE chỉ định các chế độ khối mà khóa mới có thể được sử dụng.
  • Tag::PADDING chỉ định các chế độ đệm có thể được sử dụng. Điều này chỉ liên quan đến chế độ ECB và CBC.

Nếu chế độ khối GCM được chỉ định thì hãy cung cấp Tag::MIN_MAC_LENGTH . Nếu bị bỏ qua, phương thức trả về ErrorCode::MISSING_MIN_MAC_LENGTH . Giá trị của thẻ là bội số của 8 và nằm trong khoảng từ 96 đến 128.

Khóa HMAC

Các tham số sau đây là bắt buộc để tạo khóa HMAC:

  • Tag::KEY_SIZE chỉ định kích thước khóa theo bit. Các 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ả bội số của 8, từ 64 đến 512, đều được hỗ trợ. Giá trị lớn hơn có thể được hỗ trợ.
  • Tag::MIN_MAC_LENGTH chỉ định độ dài tối thiểu của MAC có thể được tạo hoặc xác minh bằng khóa này. Giá trị là bội số của 8 và ít nhất là 64.
  • Tag::DIGEST chỉ định thuật toán tóm tắt cho khóa. Chính xác một thông báo được chỉ định, nếu không thì trả về ErrorCode::UNSUPPORTED_DIGEST . Nếu thông báo không được ủy thác hỗ trợ, hãy trả về ErrorCode::UNSUPPORTED_DIGEST .

Đặc điểm chính

Nếu đối số các đặc tính không phải là NULL, thì generateKey trả về các đặc tính của khóa mới được tạo được chia thích hợp thành các danh sách được thực thi bằng phần cứng và được thực thi bằng phần mềm. Xem getKeyCharacteristics để biết mô tả về những đặc điểm nào có trong danh sách nào. Các đặc điểm được trả về bao gồm tất cả các tham số được chỉ định để tạo khóa, ngoại trừ Tag::APPLICATION_IDTag::APPLICATION_DATA . Nếu các thẻ này được bao gồm trong các tham số chính, chúng sẽ bị xóa 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 khóa được trả về. Tuy nhiên, chúng được liên kết bằng mật mã với blob khóa, do đó nếu không cung cấp giá trị chính xác khi sử dụng khóa thì việc sử dụng sẽ không thành công. Tương tự, Tag::ROOT_OF_TRUST được liên kết bằng mật mã với khóa nhưng nó có thể không được chỉ định trong quá trình tạo hoặc nhập khóa và không bao giờ được trả về.

Ngoài các thẻ được cung cấp, ủy thác còn thêm Tag::ORIGIN , với giá trị KeyOrigin::GENERATED và nếu khóa có khả năng chống khôi phục,

Thẻ::ROLLBACK_RESISTANT .

Khả năng chống rollback

Khả năng chống khôi phục có nghĩa là khi một khóa bị xóa bằng deleteKey hoặc deleteAllKeys , nó được đảm bảo bởi phần cứng an toàn sẽ không bao giờ có thể sử dụng được nữa. Việc triển khai không có khả năng chống khôi phục thường trả về tài liệu khóa được tạo hoặc nhập cho người gọi dưới dạng blob khóa, một dạng được mã hóa và xác thực. Khi kho khóa xóa blob khóa, khóa sẽ biến mất nhưng kẻ tấn công trước đây đã tìm cách lấy được tài liệu khóa có thể khôi phục nó vào thiết bị.

Một khóa có khả năng chống khôi phục nếu phần cứng bảo mật đảm bảo rằng các khóa đã xóa không thể khôi phục được sau này. Điều này thường được thực hiện bằng cách lưu trữ siêu dữ liệu khóa bổ sung ở một vị trí đáng tin cậy mà kẻ tấn công không thể thao túng. Trên thiết bị di động, cơ chế được sử dụng cho việc này thường là Replay Protected Memory Blocks (RPMB). Bởi vì số lượng khóa có thể được tạo về cơ bản là không bị giới hạn và bộ lưu trữ đáng tin cậy được sử dụng cho khả năng chống khôi phục có thể bị giới hạn về kích thước, nên phương pháp này cần phải thành công ngay cả khi không thể cung cấp khả năng chống khôi phục cho khóa mới. Trong trường hợp đó, không nên thêm Tag::ROLLBACK_RESISTANT vào các đặc điểm chính.

getKeyĐặc điểm

Phiên bản : 1, 2, 3

Hàm này được giới thiệu trong Keymaster 1 với get_key_characteristics và được đổi tên trong Keymaster 3.

Trả về các tham số và ủy quyền liên quan đến khóa được cung cấp, được chia thành hai bộ: được thực thi bằng phần cứng và được thực thi bằng phần mềm. Mô tả ở đây áp dụng như nhau cho các danh sách đặc điểm chính được trả về bởi generateKeyimportKey .

Nếu Tag::APPLICATION_ID được cung cấp trong quá trình tạo hoặc nhập khóa thì giá trị tương tự sẽ được cung cấp cho phương thức này trong đối số clientId . Nếu không, 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ì giá trị tương tự sẽ được cung cấp cho phương thức này trong đối số appData .

Các đặc tính được phương pháp này trả về mô tả đầy đủ loại và cách sử dụng khóa được chỉ định.

Quy tắc chung để quyết định xem một thẻ nhất định có thuộc danh sách được thực thi bằng phần cứng hay được thực thi bằng phần mềm hay không là nếu ý nghĩa của thẻ được đảm bảo hoàn toàn bởi phần cứng an toàn thì đó là phần cứng được thực thi. Nếu không, đó là phần mềm được thi hành. Dưới đây là danh sách các thẻ cụ thể mà việc phân bổ chính xác có thể không rõ ràng:

  • Tag::ALGORITHM , Tag::KEY_SIZETag::RSA_PUBLIC_EXPONENT là các thuộc tính nội tại của khóa. Đối với bất kỳ khóa nào được bảo mật bằng phần cứng, các thẻ này sẽ nằm trong danh sách được thực thi bằng phần cứng.
  • Tag::DIGEST các giá trị được phần cứng bảo mật hỗ trợ sẽ được đặt trong danh sách được phần cứng hỗ trợ. Các thông báo không được hỗ trợ sẽ được đưa vào danh sách được phần mềm hỗ trợ.
  • Các giá trị Tag::PADDING thường nằm trong danh sách được phần cứng hỗ trợ, trừ khi có khả năng một chế độ đệ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ẽ nằm trong danh sách do phần mềm thực thi. Khả năng như vậy phát sinh đối với các khóa RSA cho phép đệm PSS hoặc OAEP với các thuật toán phân loại không được phần cứng bảo mật hỗ trợ.
  • Tag::USER_SECURE_IDTag::USER_AUTH_TYPE chỉ được thực thi bằng phần cứng nếu xác thực người dùng được thực thi bằng phần cứng. Để thực hiện điều này, cả ủy thác Keymaster và ủy thác xác thực có liên quan đều phải được bảo mật và chia sẻ khóa HMAC bí mật được sử 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 chi tiết.
  • Các thẻ Tag::ACTIVE_DATETIME , Tag::ORIGINATION_EXPIRE_DATETIME và Tag ::USAGE_EXPIRE_DATETIME yêu cầu quyền truy cập vào đồng hồ treo tường có thể xác minh chính xác. Hầu hết phần cứng bảo mật chỉ có quyền truy cập vào thông tin thời gian do hệ điều hành không bảo mật cung cấp, có nghĩa là các thẻ được thực thi bằng phần mềm.
  • Tag::ORIGIN luôn nằm trong danh sách phần cứng dành cho các khóa gắn với phần cứng. Sự hiện diện của nó trong danh sách đó là cách các lớp cao hơn xác định rằng khóa được hỗ trợ bằng phần cứng.

khóa nhập

Phiên bản : 1, 2, 3

Hàm này được giới thiệu trong Keymaster 1 với tên import_key và được đổi tên trong Keymaster 3.

Nhập vật liệu chính vào phần cứng Keymaster. Các tham số định nghĩa khóa và đặc tính đầu ra được xử lý giống như đối với generateKey , với các ngoại lệ sau:

  • Tag::KEY_SIZETag::RSA_PUBLIC_EXPONENT (chỉ dành cho khóa RSA) không cần thiết trong tham số đầu vào. Nếu không được cung cấp, ủy thác sẽ suy ra các giá trị từ tài liệu chính được cung cấp và thêm các thẻ và giá trị thích hợp vào các đặc điểm chính. Nếu các tham số được cung cấp, ủy thác sẽ xác thực chúng dựa trên tài liệu chính. Trong trường hợp không khớp, phương thức trả về ErrorCode::IMPORT_PARAMETER_MISMATCH .
  • Tag::ORIGIN được trả về có cùng giá trị với KeyOrigin::IMPORTED .

khóa xuất khẩu

Phiên bản : 1, 2, 3

Chức năng này được giới thiệu trong Keymaster 1 với export_key và được đổi tên trong Keymaster 3.

Xuất khóa chung từ cặp khóa Keymaster RSA hoặc EC.

Nếu Tag::APPLICATION_ID được cung cấp trong quá trình tạo hoặc nhập khóa thì giá trị tương tự sẽ được cung cấp cho phương thức này trong đối số clientId . Nếu không, 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ì giá trị tương tự sẽ được cung cấp cho phương thức này trong đối số appData .

phím xoá

Phiên bản : 1, 2, 3

Chức năng này được giới thiệu trong Keymaster 1 với tên delete_key và được đổi tên trong Keymaster 3.

Xóa khóa được cung cấp. Phương pháp này là tùy chọn và chỉ được triển khai bởi các mô-đun Keymaster có khả năng chống khôi phục.

xóaAllKeys

Phiên bản : 1, 2, 3

Chức năng này được giới thiệu trong Keymaster 1 với delete_all_keys và được đổi tên trong Keymaster 3.

Xóa tất cả các phím. Phương pháp này là tùy chọn và chỉ được triển khai bởi các mô-đun Keymaster có khả năng chống khôi phục.

tiêu diệtId chứng thực

Phiên bản : 3

Phương thức destroyAttestationIds() được sử dụng để vô hiệu hóa vĩnh viễn tính năng chứng thực ID mới (tùy chọn nhưng rất được khuyến khích). Nếu TEE không có cách nào để đảm bảo rằng chứng thực ID bị vô hiệu hóa vĩnh viễn sau khi phương thức này được gọi thì chứng thực ID hoàn toàn không được triển khai, trong trường hợp đó phương thức này không thực hiện gì và trả về ErrorCode::UNIMPLEMENTED . Nếu chứng thực ID được hỗ trợ, phương pháp này cần phải được triển khai và phải vô hiệu hóa vĩnh viễn tất cả các nỗ lực chứng thực ID trong tương lai. Phương thức này có thể được gọi bao nhiêu lần cũng được. Nếu chứng thực ID đã bị vô hiệu hóa vĩnh viễn thì phương thức này sẽ không thực hiện gì và trả về ErrorCode::OK .

Các mã lỗi duy nhất mà phương pháp này có thể trả về là ErrorCode::UNIMPLEMENTED (nếu chứng thực ID không được hỗ trợ), ErrorCode:OK , ErrorCode::KEYMASTER_NOT_CONFIGURED hoặc một trong các mã lỗi cho biết không thể giao tiếp với phần cứng bảo mật.

bắt đầu

Phiên bản : 1, 2, 3

Bắt đầu một thao tác mã hóa, sử dụng khóa được chỉ định, cho mục đích đã chỉ định, với các tham số đã chỉ định (nếu phù hợp) và trả về một bộ điều khiển thao tác được sử dụng với bản cập nhậtkết thúc để hoàn thành thao tác. Bộ điều khiển hoạt động cũng được sử dụng làm mã thông báo "thử thách" trong các hoạt động được xác thực và đối với các hoạt động đó được bao gồm trong trường challenge của mã thông báo xác thực.

Việc triển khai Keymaster hỗ trợ ít nhất 16 hoạt động đồng thời. Kho khóa sử dụng tối đa 15, để lại một cho vold sử dụng để mã hóa mật khẩu. Khi Keystore có 15 thao tác đang diễn ra ( begin đã được gọi nhưng finish hoặc abort vẫn chưa được gọi) và nó nhận được yêu cầu bắt đầu thao tác thứ 16, nó sẽ gọi abort đối với thao tác ít được sử dụng gần đây nhất để giảm số lượng thao tác đang hoạt động đến 14 trước khi begin cuộc gọi để bắt đầu thao tác mới được yêu cầu.

Nếu Tag::APPLICATION_ID hoặc Tag::APPLICATION_DATA được chỉ định trong quá trình tạo hoặc nhập khóa, lệnh gọi để begin sẽ bao gồm các thẻ đó với các giá trị được chỉ định ban đầu trong đối số inParams cho phương thức này.

Thực thi ủy quyền

Trong phương pháp này, các ủy quyền khóa sau sẽ được ủy thác thực thi nếu việc triển khai đặt chúng vào các đặc điểm "được thực thi bằng phần cứng" và nếu hoạt động không phải là hoạt động khóa chung. Các hoạt động khóa công khai, nghĩa là KeyPurpose::ENCRYPTKeyPurpose::VERIFY , với khóa RSA hoặc EC, được phép thành công ngay cả khi không đáp ứng các yêu cầu ủy quyền.

  • Tag::PURPOSE : Mục đích được chỉ định trong lệnh gọi begin() phải khớp với một trong các mục đích trong ủy quyền khóa, trừ khi thao tác được yêu cầu là thao tác khóa chung. Nếu mục đích đã chỉ định không khớp và thao tác không phải là thao tác khóa chung, thì begin sẽ trả về ErrorCode::UNSUPPORTED_PURPOSE . Hoạt động khóa công khai là hoạt động mã hóa hoặc xác minh bất đối xứng.
  • Tag::ACTIVE_DATETIME chỉ có thể được thực thi nếu có sẵn 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 .
  • Tag::ORIGINATION_EXPIRE_DATETIME chỉ có thể được thực thi nếu có sẵn nguồn thời gian UTC đáng tin cậy. Nếu ngày và giờ hiện tại muộn hơn giá trị thẻ và mục đích là KeyPurpose::ENCRYPT hoặc KeyPurpose::SIGN , phương thức trả về ErrorCode::KEY_EXPIRED .
  • Tag::USAGE_EXPIRE_DATETIME chỉ có thể được thực thi nếu có sẵn nguồn thời gian UTC đáng tin cậy. Nếu ngày và giờ hiện tại muộn hơn giá trị thẻ và mục đích là KeyPurpose::DECRYPT hoặc KeyPurpose::VERIFY , phương thức trả về ErrorCode::KEY_EXPIRED .
  • Tag::MIN_SECONDS_BETWEEN_OPS được so sánh với bộ đếm thời gian tương đối đáng tin cậy cho biết lần sử dụng khóa cuối cùng. Nếu thời gian sử dụng cuối cùng cộng với giá trị thẻ nhỏ hơn thời gian hiện tại, phương thức trả về ErrorCode::KEY_RATE_LIMIT_EXCEEDED . Xem mô tả thẻ để biết chi tiết triển khai quan trọng.
  • Tag::MAX_USES_PER_BOOT được so sánh với bộ đếm an toàn theo dõi việc sử dụng khóa kể từ thời điểm khởi động. Nếu số lần sử dụng trước đó vượt quá giá trị thẻ, phương thức sẽ trả về ErrorCode::KEY_MAX_OPS_EXCEEDED .
  • Tag::USER_SECURE_ID chỉ được thực thi bằng phương pháp này nếu khóa cũng có Tag::AUTH_TIMEOUT . Nếu khóa có cả hai thì phương thức này phải nhận được Tag::AUTH_TOKEN hợp lệ trong inParams . Để mã thông báo xác thực hợp lệ, tất cả những điều sau đây phải đúng:
    • Trường HMAC xác nhận chính xác.
    • Ít nhất một trong các giá trị Tag::USER_SECURE_ID từ khóa khớp với ít nhất một trong các giá trị ID bảo mật trong mã thông báo.
    • Khóa có Tag::USER_AUTH_TYPE khớp với loại xác thực trong mã thông báo.

    Nếu bất kỳ điều kiện nào trong số này không được đáp ứng, phương thức sẽ trả về ErrorCode::KEY_USER_NOT_AUTHENTICATED .

  • Tag::CALLER_NONCE cho phép người gọi chỉ định vectơ nonce hoặc vectơ khởi tạo (IV). Nếu khóa không có thẻ này nhưng người gọi đã cung cấp Tag::NONCE cho phương thức này, ErrorCode::CALLER_NONCE_PROHIBITED sẽ được trả về.
  • Tag::BOOTLOADER_ONLY chỉ định rằng chỉ bộ nạp khởi động mới có thể sử dụng khóa. Nếu phương thức này được gọi bằng khóa chỉ dành cho bộ nạp khởi động sau khi bộ nạp khởi động thực thi xong, nó sẽ trả về ErrorCode::INVALID_KEY_BLOB .

Khóa RSA

Tất cả các thao tác khóa RSA chỉ định chính xác một chế độ đệm trong inParams . Nếu không được chỉ định hoặc được chỉ định nhiều lần, phương thức sẽ trả về ErrorCode::UNSUPPORTED_PADDING_MODE .

Các hoạt động ký và xác minh RSA cần có bản tóm tắt, cũng như các hoạt động mã hóa và giải mã RSA với chế độ đệm OAEP. Đối với những trường hợp đó, người gọi chỉ định chính xác một thông báo trong inParams . Nếu không được chỉ định hoặc được chỉ định nhiều lần, phương thức sẽ trả về ErrorCode::UNSUPPORTED_DIGEST .

Các thao tác khóa riêng ( KeyPurpose::DECYPTKeyPurpose::SIGN ) cần có ủy quyền phân loại và đệm, điều đó có nghĩa là ủy quyền khóa cần phải 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. Các hoạt động khóa công khai ( KeyPurpose::ENCRYPTKeyPurpose::VERIFY ) được phép thực hiện với việc phân loại hoặc đệm trái phép.

Ngoại trừ PaddingMode::NONE , tất cả các chế độ đệm RSA chỉ được á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ã hóa và giải mã. Phương thức 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ế độ đệm và thông báo:

  • PaddingMode::NONE chỉ ra rằng thao tác RSA "thô" được thực hiện. Nếu ký hoặc xác minh, Digest::NONE được chỉ định cho bản tóm tắt. Không cần thông báo cho mã hóa hoặc giải mã không đệm.
  • PaddingMode::RSA_PKCS1_1_5_SIGN phần đệm yêu cầu thông báo. Thông báo có thể là Digest::NONE , trong trường hợp đó, việc triển khai Keymaster không thể xây dựng cấu trúc chữ ký PKCS#1 v1.5 thích hợp vì nó không thể thêm cấu trúc DigestInfo. Thay vào đó, việc triển khai xây dựng 0x00 || 0x01 || PS || 0x00 || M , trong đó M là thông báo được cung cấp và PS là chuỗi đệm. Kích thước của khóa RSA phải lớn hơn thông báo ít nhất 11 byte, nếu không phương thức sẽ trả về ErrorCode::INVALID_INPUT_LENGTH .
  • PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT phần đệm không yêu cầu thông báo.
  • Phần đệm PaddingMode::RSA_PSS yêu cầu thông báo, có thể không phải là Digest::NONE . Nếu Digest::NONE được chỉ định, phương thức sẽ trả về ErrorCode::INCOMPATIBLE_DIGEST . Ngoài ra, kích thước của khóa RSA phải lớn hơn ít nhất 2 + D byte so với kích thước đầu ra của bản tóm tắt, trong đó D là kích thước của bản tóm tắt, tính bằng byte. Nếu không, phương thức trả về ErrorCode::INCOMPATIBLE_DIGEST . Kích thước muối là D.
  • PaddingMode::RSA_OAEP phần đệm yêu cầu thông báo, có thể không phải là Digest::NONE . Nếu Digest::NONE được chỉ định, phương thức sẽ trả về ErrorCode::INCOMPATIBLE_DIGEST .

Phím EC

Các thao tác phím EC chỉ định chính xác một chế độ đệm trong inParams . Nếu không được chỉ định hoặc được chỉ định nhiều lần, phương thức sẽ trả về ErrorCode::UNSUPPORTED_PADDING_MODE .

Các hoạt động khóa riêng ( KeyPurpose::SIGN ) cần có sự ủy quyền của thông báo và phần đệm, điều đó có nghĩa là các ủy quyền khóa cần phải chứa các giá trị được chỉ định. Nếu không, hãy trả về ErrorCode::INCOMPATIBLE_DIGEST . Các hoạt động khóa công khai ( KeyPurpose::VERIFY ) được phép thực hiện với phần đệm hoặc phần đệm trái phép.

Phím AES

Các thao tác phím AES chỉ định chính xác một chế độ khối và một chế độ đệm trong inParams . Nếu một trong hai giá trị không được chỉ định hoặc được chỉ định 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 khóa ủy quyền, 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 không lớn hơn 128 hoặc nhỏ hơn giá trị của Tag::MIN_MAC_LENGTH trong ủy quyền khóa. Đối với độ dài MAC lớn hơn 128 hoặc không phải là 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 khóa, hãy trả về ErrorCode::INVALID_MAC_LENGTH .

Nếu chế độ khối là BlockMode::GCM hoặc BlockMode::CTR , chế độ đệm được chỉ định phải là PaddingMode::NONE . Đối với BlockMode::ECB hoặc BlockMode::CBC , chế độ có thể là PaddingMode::NONE hoặc PaddingMode::PKCS7 . Nếu chế độ đệm không đáp ứng các điều kiện này, hãy trả về ErrorCode::INCOMPATIBLE_PADDING_MODE .

Nếu chế độ khối là BlockMode::CBC , BlockMode::CTR hoặc BlockMode::GCM , thì cần có vectơ khởi tạo hoặc nonce. Trong hầu hết các trường hợp, người gọi không nên cung cấp IV hoặc nonce. Trong trường hợp đó, việc triển khai Keymaster tạo ra IV hoặc nonce ngẫu nhiên và trả về nó thông qua Tag::NONCE trong outParams . CBC và CTR IV là 16 byte. Nonces GCM là 12 byte. Nếu ủy quyền khóa chứa Tag::CALLER_NONCE thì người gọi có thể cung cấp IV/nonce với Tag::NONCE trong inParams . Nếu một nonce được cung cấp khi Tag::CALLER_NONCE không được ủy quyền, hãy trả về ErrorCode::CALLER_NONCE_PROHIBITED . Nếu nonce không được cung cấp khi Tag::CALLER_NONCE được ủy quyền, hãy tạo IV/nonce ngẫu nhiên.

Khóa HMAC

Các thao tác phím HMAC chỉ định Tag::MAC_LENGTH trong inParams . Giá trị được chỉ định phải là bội số của 8, không lớn hơn độ dài tóm tắt hoặc nhỏ hơn giá trị của Tag::MIN_MAC_LENGTH trong ủy quyền khóa. Đối với độ dài MAC lớn hơn độ dài tóm tắt 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 khóa, 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 bắt đầu bằng start . Hoạt động được chỉ định bởi tham số operationHandle .

Để mang lại sự linh hoạt hơn cho việc xử lý bộ đệm, việc triển khai phương pháp này có tùy chọn tiêu thụ ít dữ liệu hơn mức được cung cấp. Người gọi có trách nhiệm lặp lại để cung cấp phần dữ liệu còn lại trong các cuộc gọi tiếp theo. Lượng đầu vào đã tiêu thụ được trả về trong tham số inputConsumed . Việc triển khai luôn tiêu tốn ít nhất một byte, trừ khi thao tác không thể chấp nhận thêm nữa; nếu cung cấp nhiều hơn 0 byte và tiêu thụ 0 byte, người gọi sẽ coi đây là lỗi và hủy bỏ thao tác.

Việc triển khai cũng có thể chọn lượng dữ liệu cần trả về sau khi cập nhật. Điều này chỉ liên quan đến các hoạt động mã hóa và giải mã, vì việc ký và xác minh không trả lại dữ liệu nào cho đến khi kết thúc . Trả về dữ liệu càng sớm càng tốt, thay vì đệm nó.

Xử lý lỗi

Nếu phương thức này trả về mã lỗi khác với ErrorCode::OK , thì thao tác bị hủy bỏ và điều khiển thao tác bị vô hiệu. Bất kỳ việc sử dụng tay cầm nào trong tương lai, với phương thức này, finish hoặc abort , sẽ trả về ErrorCode::INVALID_OPERATION_HANDLE .

Thực thi ủy quyền

Việc thực thi ủy quyền chính được thực hiện chủ yếu ở phần đầu . Một ngoại lệ là trường hợp khóa có:

Trong trường hợp này, khóa yêu cầu ủy quyền cho mỗi thao tác và phương thức cập nhật sẽ nhận được Tag::AUTH_TOKEN trong đối số inParams . HMAC xác minh rằng mã thông báo hợp lệ và chứa ID người dùng an toàn phù hợp, khớp với Tag::USER_AUTH_TYPE của khóa và chứa bộ điều khiển hoạt động của hoạt động hiện tại trong trường thử thách. Nếu những điều kiện này không được đáp ứng, hãy trả về ErrorCode::KEY_USER_NOT_AUTHENTICATED .

Người gọi cung cấp mã thông báo xác thực cho mỗi cuộc gọi để cập nhậtkết thúc . Việc triển khai chỉ cần xác thực mã thông báo một lần nếu muốn.

Khóa RSA

Đối với các hoạt động ký và xác minh với Digest::NONE , phương pháp này chấp nhận toàn bộ khối được ký hoặc xác minh trong một bản cập nhật. Nó có thể không chỉ tiêu thụ một phần của khối. Tuy nhiên, nếu người gọi chọn cung cấp dữ liệu trong nhiều bản cập nhật thì phương thức này sẽ chấp nhận dữ liệu đó. Nếu người gọi cung cấp nhiều dữ liệu để ký hơn mức có thể sử dụng (độ dài dữ liệu vượt quá kích thước khóa RSA), hãy trả về ErrorCode::INVALID_INPUT_LENGTH .

Khóa ECDSA

Đối với các hoạt động ký và xác minh với Digest::NONE , phương pháp này chấp nhận toàn bộ khối được ký hoặc xác minh trong một bản cập nhật. Phương pháp này có thể không chỉ tiêu thụ một phần của khối.

Tuy nhiên, nếu người gọi chọn cung cấp dữ liệu trong nhiều bản cập nhật thì phương thức này sẽ chấp nhận dữ liệu đó. Nếu người gọi cung cấp nhiều dữ liệu để ký hơn mức có thể sử dụng thì dữ liệu sẽ bị cắt bớt một cách âm thầm. (Điều này khác với việc xử lý dữ liệu dư thừa được cung cấp trong các hoạt động RSA tương tự. Lý do cho điều này là khả năng tương thích với các máy khách cũ.)

Phím AES

Chế độ AES GCM hỗ trợ "dữ liệu xác thực liên quan" được cung cấp qua thẻ Tag::ASSOCIATED_DATA trong đối số inParams . Dữ liệu liên quan có thể được cung cấp trong các cuộc gọi lặp lại (quan trọng nếu dữ liệu quá lớn để gửi trong một khối) nhưng luôn đi trước dữ liệu được mã hóa hoặc giải mã. Lệnh gọi cập nhật có thể nhận cả dữ liệu liên quan và dữ liệu để mã hóa/giải mã, nhưng các bản cập nhật tiếp theo có thể không bao gồm dữ liệu liên quan. Nếu người gọi cung cấp dữ liệu liên quan đến cuộc gọi cập nhật sau cuộc gọi bao gồm dữ liệu để mã hóa/giải mã, hãy trả về ErrorCode::INVALID_TAG .

Đối với mã hóa GCM, thẻ được thêm vào văn bản mã hóa bằng finish . Trong quá trình giải mã, Tag::MAC_LENGTH byte cuối cùng của dữ liệu được cung cấp cho lệnh gọi cập nhật cuối cùng là thẻ. Vì một lệnh gọi update nhất định không thể biết liệu đó có phải là lệnh gọi cuối cùng hay không, nên nó xử lý tất cả ngoại trừ độ dài thẻ và đệm dữ liệu thẻ có thể có trong khi finish .

hoàn thành

Phiên bản : 1, 2, 3

Kết thúc một hoạt động đang diễn ra bắt đầu bằng start , xử lý tất cả dữ liệu chưa được xử lý do (các) bản cập nhật cung cấp.

Phương thức này là phương thức cuối cùng được gọi trong một thao tác, vì vậy tất cả dữ liệu đã xử lý sẽ được trả về.

Cho dù nó hoàn thành thành công hoặc trả về một lỗi, phương pháp này hoàn tất hoạt động và do đó làm mất hiệu lực xử lý hoạt động được cung cấp. Bất kỳ việc sử dụng tay cầm nào trong tương lai, với phương thức này hoặc cập nhật hoặc hủy bỏ , trả về ErrorCode::INVALID_OPERATION_HANDLE .

Hoạt động ký kết trả về chữ ký làm đầu ra. Hoạt động xác minh chấp nhận chữ ký trong tham số signature và không trả về đầu ra.

Thực thi ủy quyền

Thực thi ủy quyền chính được thực hiện chủ yếu trong bắt đầu . Một ngoại lệ là trường hợp khóa có:

Trong trường hợp này, khóa yêu cầu ủy quyền cho mỗi hoạt động và phương thức cập nhật nhận được thẻ :: auth_token trong đối số inParams . HMAC xác minh rằng mã thông báo là hợp lệ và chứa ID người dùng bảo mật phù hợp, khớp với thẻ của khóa :: user_auth_type và chứa tay cầm hoạt động của hoạt động hiện tại trong trường thử thách. Nếu các điều kiện này không được đáp ứng, hãy trả về ErrorCode::KEY_USER_NOT_AUTHENTICATED .

Người gọi cung cấp mã thông báo xác thực cho mỗi cuộc gọi để cập nhậtkết thúc . Việc thực hiện chỉ cần xác nhận mã thông báo một lần nếu nó thích.

Khóa RSA

Một số yêu cầu bổ sung, tùy thuộc vào chế độ đệm:

  • PaddingMode::NONE . Đối với các hoạt động ký và mã hóa không được bảo vệ, nếu dữ liệu được cung cấp ngắn hơn khóa, dữ liệu sẽ được dán bằng 0 ở bên trái trước khi ký/mã hóa. Nếu dữ liệu có cùng độ dài với phím, nhưng lớn hơn về mặt số, return ErrorCode::INVALID_ARGUMENT . Để xác minh và giải mã các hoạt động, dữ liệu phải dài bằng khóa. Nếu không, trả về ErrorCode::INVALID_INPUT_LENGTH.
  • PaddingMode::RSA_PSS . Đối với các hoạt động chữ ký bằng PSS, muối PSS là kích thước của tiêu hóa thông báo và được tạo ngẫu nhiên. Digest được chỉ định với TAG :: DIGEST trong inputParams khi bắt đầu được sử dụng làm thuật toán Digest PSS và như thuật toán tiêu hóa MGF1.
  • PaddingMode::RSA_OAEP . Digest được chỉ định với TAG :: Digest in inputParams khi bắt đầu được sử dụng làm thuật toán tiêu hóa OAEP và SHA1 được sử dụng làm thuật toán tiêu hóa MGF1.

Khóa ECDSA

Nếu dữ liệu được cung cấp cho việc ký hoặc xác minh không được bảo vệ là quá dài, hãy cắt ngắn nó.

Khóa AES

Một số điều kiện bổ sung, tùy thuộc vào chế độ khối:

  • BlockMode::ECB hoặc BlockMode::CBC . Nếu phần đệm là PaddingMode::NONE và độ dài dữ liệu không phải là bội số của kích thước khối AES, hãy trả về ErrorCode::INVALID_INPUT_LENGTH . Nếu phần đệm là PaddingMode::PKCS7 , hãy đệ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 đệm bổ sung nếu dữ liệu là bội số của độ dài khối.
  • BlockMode::GCM . Trong quá trình mã hóa, sau khi xử lý tất cả các bản rõ, hãy tính toán thẻ ( TAG :: mac_length byte) và nối nó vào bản mã được trả về. Trong quá trình giải mã, hãy xử lý thẻ cuối cùng :: mac_length byte làm thẻ. Nếu xác minh thẻ không thành công, hãy trả về ErrorCode::VERIFICATION_FAILED .

Huỷ bỏ

Phiên bản : 1, 2, 3

Hủy bỏ hoạt động đang tiến triển. Sau cuộc gọi để hủy bỏ, hãy trả về ErrorCode::INVALID_OPERATION_HANDLE cho bất kỳ việc sử dụng tiếp theo nào của tay cầm hoạt động được cung cấp với cập nhật , kết thúc hoặc hủy bỏ .

get_supported_algorithms

Phiên bản 1

Trả về danh sách các thuật toán được hỗ trợ bởi việc triển khai phần cứng Keymaster. Một triển khai phần mềm trả về một danh sách trống; Việc triển khai lai trả về một danh sách chỉ chứa các thuật toán được hỗ trợ bởi phần cứng.

Việc 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 các chế độ khối AES được hỗ trợ bởi việc triển khai phần cứng Keymaster cho một thuật toán và mục đích được chỉ định.

Đối với RSA, EC và HMAC, không phải là khối mật mã, phương thức 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 trả về ErrorCode::INVALID_PURPOSE .

Việc triển khai Keymaster 1 hỗ trợ ECB, CBC, CTR và GCM cho mã hóa và giải mã AES.

get_supported_padding_modes

Phiên bản 1

Trả về danh sách các chế độ đệm được hỗ trợ bởi việc triển khai phần cứng Keymaster cho một thuật toán và mục đích được chỉ định.

HMAC và EC không có khái niệm đệm nên phương thức 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 trả về ErrorCode::INVALID_PURPOSE .

Đối với RSA, hỗ trợ triển khai của Keymaster 1:

  • Mã hóa không được bảo vệ, giải mã, ký kết và xác minh. Đối với mã hóa và ký kết không được bảo vệ, nếu tin nhắn ngắn hơn mô đun công khai, việc triển khai phải bỏ nó bằng các số không. Để giải mã và xác minh không được bảo vệ, độ dài đầu vào phải phù hợp với kích thước mô đun công khai.
  • PKCS#1 V1.5 Các chế độ đệm và ký kết ký
  • PSS với độ dài muối tối thiểu là 20
  • OAEP

Đối với AES trong các chế độ ECB và CBC, việc triển khai Keymaster 1 không hỗ trợ đệm và PKCS#7-padding. Chế độ CTR và GCM chỉ hỗ trợ không có đệm.

get_supported_digests

Phiên bản 1

Trả về danh sách các chế độ Digest được hỗ trợ bởi việc triển khai phần cứng Keymaster cho một thuật toán và mục đích được chỉ định.

Không có chế độ AES hỗ trợ hoặc yêu cầu tiêu hóa, vì vậy phương thức trả về một danh sách trống cho các mục đích hợp lệ.

Việc triển khai Keymaster 1 có thể triển khai một tập hợp con của các tiêu hóa được xác định. 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 (toàn bộ các tiêu hóa được xác định).

get_supported_import_formats

Phiên bản 1

Trả về danh sách các định dạng nhập được hỗ trợ bởi việc triển khai phần cứng Keymaster của một thuật toán được chỉ định.

Việc triển khai Keymaster 1 hỗ trợ định dạng PKCS#8 (không bảo vệ mật khẩu) để nhập các cặp khóa RSA và EC và hỗ trợ nhập khẩu tài liệu khóa 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 hỗ trợ bởi việc triển khai phần cứng Keymaster của một thuật toán được chỉ định.

Việc triển khai Keymaster1 hỗ trợ định dạng X.509 để xuất các khóa công khai RSA và EC. Xuất khẩu khóa riêng hoặc khóa không đối xứng không được hỗ trợ.

Chức năng lịch sử

Keymaster 0

Các chức năng sau thuộc về định nghĩa Keymaster 0 ban đầu. Chúng đã có mặt trong Keymaster 1 Struct Keymaster1_Device_T. Tuy nhiên, trong Keymaster 1.0, chúng không được triển khai và các con trỏ chức năng 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 chức năng sau thuộc về định nghĩa của Keymaster 1, nhưng đã được xóa trong Keymaster 2, cùng với các hàm 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 chức năng sau thuộc về định nghĩa của Keymaster 2, nhưng đã được xóa trong Keymaster 3, cùng với các hàm Keymaster 1 được liệt kê ở trên.

  • configure