

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 소프트웨어 라이브러리는 다음 알고리즘, 모드 및 패딩 조합을 지원합니다.


| Algorithm | 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)를 무시하고 HSM이 생성하는 IV를 사용합니다. 작업이 완료되면 `Cipher.getIV()`를 호출하여 IV를 가져와야 합니다. | 
| AESWrap | ECB |  `AESWrap/ECB/NoPadding` `AESWrap/ECB/PKCS5Padding` `AESWrap/ECB/ZeroPadding`  | `Cipher.WRAP_MODE`와 `Cipher.UNWRAP_MODE`를 구현합니다.  | 
| DESede (Triple DES) | CBC |  `DESede/CBC/PKCS5Padding` `DESede/CBC/NoPadding`  |  `Cipher.ENCRYPT_MODE`와 `Cipher.DECRYPT_MODE`를 구현합니다. 예정된 변경 사항은 [1](#java-gen-key-pairs-5-note-1) 아래 참고를 참조하세요.  | 
| DESede (Triple 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`

## 다이제스트 기능
<a name="java-digests_5"></a>

Java용 AWS CloudHSM 소프트웨어 라이브러리는 다음 메시지 다이제스트를 지원합니다. Client 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) 를 생성합니다. MAC에서는 해싱 방법이 아닌 블록 대칭 키 방법을 사용한다는 점에서 HMAC과 다릅니다.

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에서 지원되는 사양은 다음과 같습니다.
+ 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)**을 사용하여 대칭 키 사양을 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 KeyType 모두에 대한 CloudHSM KeyAttributesMap입니다.
  + RSA 및 EC 퍼블릭 KeyType 모두에 대한 CloudHSM KeyAttributesMap입니다. 예제는 [여기](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)에서 확인할 수 있습니다.
  + RSA 및 EC 퍼블릭 키 모두에 대한 [X509EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/X509EncodedKeySpec.html)
  + RSA 퍼블릭 키용 [RSAPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPublicKeySpec.html)
  + EC 퍼블릭 키용 [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 KeyType 모두에 대한 CloudHSM KeyAttributesMap입니다.
  + RSA 및 EC 퍼블릭 KeyType 모두에 대한 CloudHSM KeyAttributesMap입니다. 예제는 [여기](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)에서 확인할 수 있습니다.
  + EC 및 RSA 프라이빗 키 모두에 대한 [PKCS8로 인코딩된 키 사양](https://docs.oracle.com/javase/8/docs/api/java/security/spec/PKCS8EncodedKeySpec.html)
  + RSA 프라이빗 키용 [RSAPrivateCrtKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPrivateCrtKeySpec.html)
  + EC 프라이빗 키용 [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 Special Publication 800-56A 개정 3](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf)에 지정되어 있습니다.