

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

# 용 JCE SDK에 대해 알려진 문제 AWS CloudHSM
<a name="ki-jce-sdk"></a>

다음은 JCE SDK에 영향을 미치는 문제입니다 AWS CloudHSM.

**Topics**
+ [문제: 비동기 키 페어로 작업할 때 키를 명시적으로 생성하거나 가져오지 않더라도 점유된 키 용량이 보입니다.](#ki-jce-1)
+ [문제: JCE 키 스토어가 읽기 전용입니다.](#ki-jce-3)
+ [문제: AES-GCM 암호화를 위한 버퍼가 16,000바이트를 초과할 수 없습니다.](#ki-jce-4)
+ [문제: ECDH(Elliptic-curve Diffie-Hellman) 키 파생은 HSM 내에서 부분적으로 실행됩니다.](#ki-jce-5)
+ [문제: KeyGenerator 및 KeyAttribute가 키 크기 파라미터를 비트 대신 바이트 수로 잘못 해석합니다.](#ki-jce-6)
+ [문제: Client SDK 5에서 "불법적인 반사 액세스 작업이 발생했습니다"라는 경고가 표시됩니다.](#ki-jce-7)
+ [문제: JCE 세션 풀이 소진되었습니다.](#ki-jce-8)
+ [문제: getKey 작업을 사용하는 클라이언트 SDK 5 메모리 누수](#ki-jce-9)

## 문제: 비동기 키 페어로 작업할 때 키를 명시적으로 생성하거나 가져오지 않더라도 점유된 키 용량이 보입니다.
<a name="ki-jce-1"></a>
+ **영향:** 이 문제로 인해 HSM에서 예기치 않게 키 공간이 부족해질 수 있으며 이 문제는 애플리케이션이 `CaviumKey` 객체 대신 표준 JCE 키 객체를 암호화 작업에 사용할 때 발생합니다. 표준 JCE 키 객체를 사용할 때는 애플리케이션이 종료될 때까지 세션 키가 이 키를 삭제하지 않으므로 `CaviumProvider`가 해당 키를 HSM으로 묵시적으로 가져옵니다. 결과적으로 애플리케이션이 실행되는 동안 키가 증가하여 HSM에서 사용 가능한 키 공간이 부족하게 되고 따라서 애플리케이션이 중단됩니다.
+ **해결 방법: **`CaviumSignature` 클래스, `CaviumCipher` 클래스, `CaviumMac` 클래스 또는 `CaviumKeyAgreement` 클래스를 사용할 때는 표준 JCE 키 객체 대신 `CaviumKey`로 키를 제공해야 합니다.

  [https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java) 클래스를 사용하여 일반 키를 `CaviumKey`로 수동으로 변환한 다음 작업이 완료된 후 수동으로 키를 삭제할 수 있습니다.
+ **해결 상태: **묵시적 가져오기를 적절하게 관리할 수 있도록 `CaviumProvider`를 업데이트하고 있습니다. 수정 사항이 제공되면 버전 기록 페이지에 발표됩니다.

## 문제: JCE 키 스토어가 읽기 전용입니다.
<a name="ki-jce-3"></a>
+ **영향: **현재 HSM에서 지원하지 않는 객체 유형을 JCE 키 스토어에 저장할 수 없습니다. 특히 인증서를 키 스토어에 저장할 수 없습니다. 따라서 키 스토어에서 인증서를 찾으려는 jarsigner와 같은 도구와의 상호 운용성이 방해를 받습니다.
+ **해결 방법: **키 스토어가 아닌 로컬 파일이나 S3 버킷 위치에서 인증서를 로드하도록 코드를 고칠 수 있습니다.
+ **해결 상태: ** AWS CloudHSM 키 스토어를 사용하여 인증서를 저장할 수 있습니다.

## 문제: AES-GCM 암호화를 위한 버퍼가 16,000바이트를 초과할 수 없습니다.
<a name="ki-jce-4"></a>

또한 멀티파트 AES-GCM 암호화가 지원되지 않습니다.
+ **영향: **AES-GCM을 사용하여 16,000바이트보다 큰 데이터를 암호화할 수 없습니다.
+ **해결 방법: **AES-CBC와 같은 대체 메커니즘을 사용하거나, 데이터를 여러 개로 분리하고 각 부분을 개별적으로 암호화할 수 있습니다. 데이터를 나누는 경우 분할된 암호문과 암호 해독을 관리해야 합니다. FIPS에서는 AES-GCM의 IV(초기화 벡터)를 HSM에서 생성해야 하므로 AES-GCM으로 암호화된 각 데이터의 IV가 다릅니다.
+ **해결 상태: **데이터 버퍼가 너무 큰 경우 명시적으로 실패하도록 SDK를 수정하고 있습니다. 멀티파트 암호화에 의존하지 않고 더 큰 버퍼를 지원하기 위한 대체 방법을 평가하고 있습니다. AWS CloudHSM 포럼 및 버전 기록 페이지에 업데이트가 발표됩니다.

## 문제: ECDH(Elliptic-curve Diffie-Hellman) 키 파생은 HSM 내에서 부분적으로 실행됩니다.
<a name="ki-jce-5"></a>

EC 프라이빗 키는 항상 HSM 내에 있지만 키 추출 프로세스는 여러 단계로 수행됩니다. 결과적으로 각 단계의 중간 결과를 클라이언트에서 사용할 수 있습니다. ECDH 키 파생 샘플은 [Java 코드 샘플](java-samples_3.md)에서 사용 가능합니다.
+ **영향: ** 클라이언트 SDK 3에는 JCE에 ECDH 기능이 추가됩니다. `KeyAgreement` 클래스를 사용하여 SecretKey를 파생하면 클라이언트에서 먼저 사용할 수 있으며 HSM으로 가져옵니다. 그러면 키 핸들이 애플리케이션에 반환됩니다.
+ **해결 방법: **에서 SSL/TLS 오프로드를 구현하는 경우 AWS CloudHSM이 제한은 문제가 아닐 수 있습니다. 애플리케이션에서 항상 키가 FIPS 경계 내에 있어야 하는 경우 ECDH 키 파생에 독립적인 대체 프로토콜을 사용하는 것이 좋습니다.
+ **해결 상태:** SDK 5.16은 이제 HSM 내에서 완전히 수행되는 키 파생을 통해 ECDH를 지원합니다.

## 문제: KeyGenerator 및 KeyAttribute가 키 크기 파라미터를 비트 대신 바이트 수로 잘못 해석합니다.
<a name="ki-jce-6"></a>

[KeyGenerator 클래스](https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/KeyGenerator.html#init(int))의 `init` 함수 또는 [AWS CloudHSM KeyAttribute enum](java-lib-attributes_5.md)의 `SIZE` 속성을 사용하여 키를 생성할 때 API는 인수가 키 비트 수여야 하는데 키 바이트 수일 것으로 잘못 예상합니다.
+ **영향:** Client SDK 버전 5.4.0\~5.4.2에서는 지정된 API에 키 크기가 바이트로 제공될 것으로 잘못 예상합니다.
+ **해결 방법: **클라이언트 SDK 버전 5.4.0\~5.4.2를 사용하는 경우 KeyGenerator 클래스 또는 KeyAttribute 열거형을 사용하여 AWS CloudHSM JCE 공급자를 사용하여 키를 생성하기 전에 키 크기를 비트에서 바이트로 변환합니다.
+ **해결 상태:** Client SDK 버전을 5.5.0 이상으로 업그레이드하십시오. 여기에는 KeyGenerator 클래스 또는 KeyAttribute 열거형을 사용하여 키를 생성할 때 키 크기(비트)를 올바르게 예상할 수 있는 수정 사항이 포함되어 있습니다.

## 문제: Client SDK 5에서 "불법적인 반사 액세스 작업이 발생했습니다"라는 경고가 표시됩니다.
<a name="ki-jce-7"></a>

Java 11과 함께 Client SDK 5를 사용하는 경우 CloudHSM은 다음 Java 경고를 표시합니다: 

```
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.amazonaws.cloudhsm.jce.provider.CloudHsmKeyStore (file:/opt/cloudhsm/java/cloudhsm-jce-5.6.0.jar) to field java.security .KeyStore.keyStoreSpi
WARNING: Please consider reporting this to the maintainers of com.amazonaws.cloudhsm.jce.provider.CloudHsmKeyStore
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
```

이 문제는 클라이언트 SDK 버전 5.8 이상에서 수정되었습니다.

**참고**  
OpenJDK 11은 더 이상 지원되지 않습니다. 클라이언트 SDK 5.17.1은 OpenJDK 11을 지원하는 마지막 릴리스입니다.

## 문제: JCE 세션 풀이 소진되었습니다.
<a name="ki-jce-8"></a>

**영향:** 다음 메시지가 표시된 후 JCE에서 작업을 수행하지 못할 수도 있습니다.

```
com.amazonaws.cloudhsm.jce.jni.exception.InternalException: There are too many operations 
happening at the same time: Reached max number of sessions in session pool: 1000
```

**해결 방법: **
+ 영향을 받은 경우 JCE 애플리케이션을 다시 시작하십시오.
+ 작업을 수행할 때 작업에 대한 참조를 잃기 전에 JCE 작업을 완료해야 할 수도 있습니다.
**참고**  
작업에 따라 완료 메서드가 필요할 수 있습니다.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/ki-jce-sdk.html)

**해결 상태:** Client SDK 5.9.0 이상에서 이 문제를 해결했습니다. 이 문제를 해결하려면 Client SDK를 다음 버전 중 하나로 업그레이드하십시오.

## 문제: getKey 작업을 사용하는 클라이언트 SDK 5 메모리 누수
<a name="ki-jce-9"></a>
+ **영향: **API `getKey` 작업의 JCE에서 클라이언트 SDK 버전 5.10.0 이하의 메모리 누수가 있습니다. 애플리케이션에서 `getKey` API를 여러 번 사용하는 경우 메모리 성장이 증가하여 애플리케이션의 메모리 설치 공간이 늘어납니다. 시간이 지남에 따라 스로틀링 오류가 발생하거나 애플리케이션을 다시 시작해야 할 수 있습니다.
+ **해결 방법: **클라이언트 SDK 5.11.0으로 업그레이드하는 것이 좋습니다. 이 작업을 수행할 수 없는 경우 애플리케이션에서 `getKey` API를 여러 번 호출하지 않는 것이 좋습니다. 대신 이전 `getKey` 작업에서 이전에 반환한 키를 최대한 재사용합니다.
+ **해결 상태: **클라이언트 SDK 버전을 이 문제에 대한 수정 사항이 포함된 5.11.0 이상으로 업그레이드합니다.