

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS CloudHSM 客户端 SDK 5 的 JCE 提供程序支持的机制
<a name="java-lib-supported_5"></a>

本主题提供有关 AWS CloudHSM 客户端 SDK 5 支持的 JCE 提供程序的机制的信息。有关支持的 Java 密码学架构 (JCA) 接口和引擎类的信息 AWS CloudHSM，请参阅以下主题。

**Topics**
+ [生成密钥与密钥对功能](#java-gen-key-pairs-5)
+ [密码函数](#java-ciphers_5)
+ [签署并验证功能](#java-sign-verify_5)
+ [摘要功能](#java-digests_5)
+ [HMAC 散列消息认证码函数](#java-mac_5)
+ [基于密码的消息身份验证码 (CMAC) 函数](#java-cmac_5)
+ [密钥协议函数](#java-key-derivation_5)
+ [使用密钥工厂将密钥转换为密钥规格](#java-key-factories)
+ [机制注释](#w2aac25c21c25c15c23)

## 生成密钥与密钥对功能
<a name="java-gen-key-pairs-5"></a>

Java AWS CloudHSM 软件库允许您使用以下操作生成密钥和密钥对函数。
+ `RSA`
+ `EC`
+ `AES`
+ `DESede (Triple DES)`请参阅备注[1](#java-gen-key-pairs-5-note-1)
+ `GenericSecret`

## 密码函数
<a name="java-ciphers_5"></a>

Java AWS CloudHSM 软件库支持以下算法、模式和填充组合。


| 算法 | Mode | Padding | 注意 | 
| --- | --- | --- | --- | 
| AES | CBC |  `AES/CBC/NoPadding` `AES/CBC/PKCS5Padding`  |  实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。 实施 `Cipher.UNWRAP_MODE for AES/CBC NoPadding`  | 
| AES | ECB |  `AES/ECB/PKCS5Padding` `AES/ECB/NoPadding`  | 实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。  | 
| AES | CTR |  `AES/CTR/NoPadding`  |  实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。  | 
| AES | GCM | `AES/GCM/NoPadding` | 实施 `Cipher.WRAP_MODE`、`Cipher.UNWRAP_MODE`、`Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。执行 AES-GCM 加密时，HSM 会忽略请求中的初始化向量 (IV) 并使用其生成的 IV。当该操作完成时，您必须调用 `Cipher.getIV()` 以获取 IV。 | 
| AESWrap | ECB |  `AESWrap/ECB/NoPadding` `AESWrap/ECB/PKCS5Padding` `AESWrap/ECB/ZeroPadding`  | 实施 `Cipher.WRAP_MODE` 和 `Cipher.UNWRAP_MODE`。  | 
| DESede （三重 DES） | CBC |  `DESede/CBC/PKCS5Padding` `DESede/CBC/NoPadding`  |  实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。有关即将发生的更改，请参阅下面的注释 [1](#java-gen-key-pairs-5-note-1)。  | 
| DESede （三重 DES） | ECB |  `DESede/ECB/NoPadding` `DESede/ECB/PKCS5Padding`  | 实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。有关即将发生的更改，请参阅下面的注释 [1](#java-gen-key-pairs-5-note-1)。  | 
| RSA | ECB | `RSA/ECB/PKCS1Padding` **请参阅备注 [1](#java-gen-key-pairs-5-note-1)** `RSA/ECB/OAEPPadding` `RSA/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-512ANDMGF1Padding`  |  实施 `Cipher.WRAP_MODE`、`Cipher.UNWRAP_MODE`、`Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。  | 
| RSA | ECB | `RSA/ECB/NoPadding` |  实施 `Cipher.ENCRYPT_MODE` 和 `Cipher.DECRYPT_MODE`。  | 
| RSAAESWrap | ECB |  `RSAAESWrap/ECB/OAEPPadding` `RSAAESWrap/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-512ANDMGF1Padding`  | 实施 `Cipher.WRAP_MODE` 和 `Cipher.UNWRAP_MODE`。  | 

## 签署并验证功能
<a name="java-sign-verify_5"></a>

Java AWS CloudHSM 软件库支持以下类型的签名和验证。使用客户端软件开发工具包 5 和带哈希功能的签名算法，在数据发送至 HSM 进行签名/验证之前，会在软件中对数据进行本地哈希处理。这意味着可由 SDK 执行哈希处理的数据大小没有限制。

**RSA 签名类型**
+ `NONEwithRSA`
+ `RSASSA-PSS`
+ `SHA1withRSA`
+ `SHA1withRSA/PSS`
+ `SHA1withRSAandMGF1`
+ `SHA224withRSA`
+ `SHA224withRSAandMGF1`
+ `SHA224withRSA/PSS`
+ `SHA256withRSA`
+ `SHA256withRSAandMGF1`
+ `SHA256withRSA/PSS`
+ `SHA384withRSA`
+ `SHA384withRSAandMGF1`
+ `SHA384withRSA/PSS`
+ `SHA512withRSA`
+ `SHA512withRSAandMGF1`
+ `SHA512withRSA/PSS`

**ECDSA 签名类型**
+ `NONEwithECDSA`
+ `SHA1withECDSA`
+ `SHA224withECDSA`
+ `SHA256withECDSA`
+ `SHA384withECDSA`
+ `SHA512withECDSA`

## 摘要功能
<a name="java-digests_5"></a>

Java AWS CloudHSM 软件库支持以下消息摘要。通过客户端软件开发工具包 5，数据将在软件中进行本地哈希处理。这意味着可由 SDK 执行哈希处理的数据大小没有限制。
+ `SHA-1`
+ `SHA-224`
+ `SHA-256`
+ `SHA-384`
+ `SHA-512`

## HMAC 散列消息认证码函数
<a name="java-mac_5"></a>

Java AWS CloudHSM 软件库支持以下 HMAC 算法。
+ `HmacSHA1`（以字节为单位的最大数据大小：16288）
+ `HmacSHA224`（以字节为单位的最大数据大小：16256）
+ `HmacSHA256`（以字节为单位的最大数据大小：16288）
+ `HmacSHA384`（以字节为单位的最大数据大小：16224）
+ `HmacSHA512`（以字节为单位的最大数据大小：16224）

## 基于密码的消息身份验证码 (CMAC) 函数
<a name="java-cmac_5"></a>

CMACs （基于密码的消息身份验证码）使用分组密码和密钥创建消息身份验证码 (MACs)。它们的不同之处 HMACs 在于，它们使用区块对称密钥方法 MACs 而不是哈希方法。

适用于 Java 的 AWS CloudHSM 软件库支持以下 CMAC 算法。
+ `AESCMAC`

## 密钥协议函数
<a name="java-key-derivation_5"></a>

Java AWS CloudHSM 软件库支持带有密钥派生函数 (KDF) 的 ECDH。支持以下 KDF 类型：
+ `ECDHwithX963SHA1KDF`支持 X9.63 KDF 算法 SHA1 [2](#kdf2)
+ `ECDHwithX963SHA224KDF`支持 X9.63 KDF 算法 SHA224 [2](#kdf2)
+ `ECDHwithX963SHA256KDF`支持 X9.63 KDF 算法 SHA256 [2](#kdf2)
+ `ECDHwithX963SHA384KDF`支持 X9.63 KDF 算法 SHA384 [2](#kdf2)
+ `ECDHwithX963SHA512KDF`支持 X9.63 KDF 算法 SHA512 [2](#kdf2)

## 使用密钥工厂将密钥转换为密钥规格
<a name="java-key-factories"></a>

您可以使用密钥工厂将密钥转换为密钥规格。 AWS CloudHSM JCE 有两种类型的关键工厂：

**SecretKeyFactory：**用于导入或派生对称密钥。使用 SecretKeyFactory，您可以传递支持的密钥或支持的密钥 KeySpec 以导入或派生对称密钥。 AWS CloudHSM以下是支持的规格 KeyFactory：
+ F SecretKeyFactory o `generateSecret` r 的方法支持以下[KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)类：
  + **KeyAttributesMap**可用于将带有附加属性的密钥字节作为 CloudHSM 密钥导入。可以在[此处](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)找到一个示例。
  + **[SecretKeySpec](https://docs.oracle.com/javase/8/docs/api/javax/crypto/spec/SecretKeySpec.html)**可用于将对称密钥规范作为 CloudHSM 密钥导入。
  + **AesCmacKdfParameterSpec**可用于使用另一个 CloudHSM AES 密钥派生对称密钥。

**注意**  
SecretKeyFactory的`translateKey`方法接受任何实现密钥接口的[密钥](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html)。

**KeyFactory：**用于导入非对称密钥。使用 KeyFactory，您可以传递支持的密钥或支持的密钥 KeySpec 以将非对称密钥导入其中 AWS CloudHSM。更多信息，请参阅以下资源：
+  KeyFactory对于`generatePublic`的方法，支持以下[KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)类：
+ 适用于 RSA 和 EC 的 KeyAttributesMap CloudHSM，包括： KeyTypes
  + Cloud KeyAttributesMap HSM 适用于 RSA 和 EC 公众。 KeyTypes可以在[此处](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)找到示例。
  + [X509](https://docs.oracle.com/javase/8/docs/api/java/security/spec/X509EncodedKeySpec.html) 同时EncodedKeySpec适用于 RSA 和 EC 公钥
  + [RSAPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPublicKeySpec.html)适用于 RSA 公钥
  + [ECPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPublicKeySpec.html)适用于 EC 公钥
+  KeyFactory对于`generatePrivate`的方法，支持以下[KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)类：
+ 适用于 RSA 和 EC 的 KeyAttributesMap CloudHSM，包括： KeyTypes
  + Cloud KeyAttributesMap HSM 适用于 RSA 和 EC 公众。 KeyTypes可以在[此处](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)找到示例。
  + [PKCS8EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/PKCS8EncodedKeySpec.html)适用于 EC 和 RSA 私钥
  + [RSAPrivateCrtKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPrivateCrtKeySpec.html)适用于 RSA 私钥
  + [ECPrivateKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPrivateKeySpec.html)适用于 EC 私钥

对于 KeyFactory的`translateKey`方法来说，它接受任何实现密钥[接口的密钥](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html)。

## 机制注释
<a name="w2aac25c21c25c15c23"></a>

[1] 根据 NIST 指导，2023 年以后处于 FIPS 模式的集群不允许这样做。对于处于非 FIPS 模式的集群，2023 年之后仍然允许。有关详细信息，请参阅 [FIPS 140 合规：2024 年机制弃用](compliance-dep-notif.md#compliance-dep-notif-1)。

[2] [NIST 特别出版物 800-56A 修订版 3 中规定了密钥派](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf)生函数 (KDFs)。