

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS CloudHSM 用戶端 SDK 5 的 JCE 提供者支援的機制
<a name="java-lib-supported_5"></a>

本主題提供 JCE 供應商使用 AWS CloudHSM 用戶端 SDK 5 支援機制的相關資訊。如需 支援的 Java 密碼編譯架構 (JCA) 介面和引擎類別的相關資訊 AWS CloudHSM，請參閱下列主題。

**Topics**
+ [產生金鑰與金鑰對函數](#java-gen-key-pairs-5)
+ [密碼函數](#java-ciphers_5)
+ [簽署和驗證函數](#java-sign-verify_5)
+ [Digest 函數](#java-digests_5)
+ [雜湊訊息驗證碼 (HMAC) 函數](#java-mac_5)
+ [加密式訊息驗證程式碼 (CMAC) 函數](#java-cmac_5)
+ [金鑰協議函數](#java-key-derivation_5)
+ [使用金鑰 Factory 將金鑰轉換為金錀規格](#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 | 填補 | 備註 | 
| --- | --- | --- | --- | 
| 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 的軟體程式庫支援以下類型的簽章和驗證。使用用戶端 SDK 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`

## Digest 函數
<a name="java-digests_5"></a>

適用於 Java AWS CloudHSM 的軟體程式庫支援下列訊息摘要。使用用戶端 SDK 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>

CMAC (加密式訊息驗證程式碼) 使用區塊密碼和金錀建立訊驗證代碼 (MAC)。與 HMAC 不同之處在於，它們使用 MAC 區塊對稱金錀方法而非雜湊方法。

適用於 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)

## 使用金鑰 Factory 將金鑰轉換為金錀規格
<a name="java-key-factories"></a>

您可以使用金鑰工廠將金鑰轉換為金鑰規格。JCE AWS CloudHSM 有兩種類型的金鑰工廠：

**SecretKeyFactory:** 用於匯入或衍生對稱金錀。使用 SecretKeyFactory，您可以傳遞支援的 Key 或支援的 KeySpec 將對稱金鑰匯入或衍生到 AWS CloudHSM。下列是 KeyFactory 支援的規格：
+ 如採用 SecretKeyFactory 的 `generateSecret` 方法，可支援下列 [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)** 可將對稱 key spec 匯入為 CloudHSM Key 匯入。
  + **AesCmacKdfParameterSpec** 可使用另一個 CloudHSM AES Key 來衍生對稱金錀。

**注意**  
SecretKeyFactory 的 `translateKey` 方法接受任何實現[金鑰](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html)介面的金鑰。

**KeyFactory:** 用於匯入非對稱金鑰。使用 KeyFactory，您可以傳遞支援的 Key 或支援的 KeySpec 將對稱金鑰匯入到 AWS CloudHSM。如需詳細資訊，請參閱下列資源：
+ 如採用 KeyFactory 的 `generatePublic` 方法，可支援下列 [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html) 類別：
+ 適用於 RSA 和 EC KeyTypes 的 CloudHSM KeyAttributesMap 包括：
  + 適用於 RSA 和 EC Public KeyTypes 的 CloudHSM KeyAttributesMap 包括：可從[此處](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)查看範例。
  + 適用於 RSA 和 EC Public Key 的 [X509EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/X509EncodedKeySpec.html)
  + 適用於 RSA Public Key 的 [RSAPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPublicKeySpec.html)
  + 適用於 EC Public Key 的 [ECPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPublicKeySpec.html)
+ 如採用 KeyFactory 的 `generatePrivate` 方法，可支援下列 [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html) 類別：
+ 適用於 RSA 和 EC KeyTypes 的 CloudHSM KeyAttributesMap 包括：
  + 適用於 RSA 和 EC Public KeyTypes 的 CloudHSM KeyAttributesMap 包括：可從[此處](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)查看範例。
  + 適用於 EC and RSA Private Key 的 [PKCS8EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/PKCS8EncodedKeySpec.html)
  + 適用於 RSA Private Key 的 [RSAPrivateCrtKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPrivateCrtKeySpec.html)
  + 適用於 EC Private Key 的 [ECPrivateKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPrivateKeySpec.html)

如採用 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】 金鑰衍生函數 (KDFs) 是在 [NIST 特殊出版物 800-56A 修訂版 3](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf) 中指定。