기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
JCE 제공자를 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션
이 주제를 사용하여 JCE 제공자를 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션할 수 있습니다. 마이그레이션의 이점은 을 참조하십시오. Client SDK 5의 이점
에서 AWS CloudHSM고객 애플리케이션은 AWS CloudHSM 클라이언트 소프트웨어 개발 키트 (SDK) 를 사용하여 암호화 작업을 수행합니다. 클라이언트 SDK 5는 계속해서 새로운 기능과 플랫폼 지원이 추가되는 기본 SDK입니다.
클라이언트 SDK 3 JCE 공급자는 표준 JCE 사양에 포함되지 않은 사용자 지정 클래스와 API를 사용합니다. JCE 공급자용 클라이언트 SDK 5는 JCE 사양을 준수하며 특정 영역에서 클라이언트 SDK 3과 이전 버전으로는 호환되지 않습니다. 고객 애플리케이션을 클라이언트 SDK 5로 마이그레이션하는 과정에서 변경이 필요할 수 있습니다. 이 섹션에서는 성공적인 마이그레이션에 필요한 변경 사항을 간략하게 설명합니다.
모든 공급자에 대한 마이그레이션 지침을 검토하려면 을 참조하십시오클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션.
주요 변경 사항을 해결하여 대비하십시오.
이러한 주요 변경 사항을 검토하고 그에 따라 개발 환경에서 애플리케이션을 업데이트하십시오.
Provider 클래스와 이름이 변경되었습니다.
변경된 내용 | 클라이언트 SDK 3에 포함된 내용 | 클라이언트 SDK 5의 내용 | 예 |
---|---|---|---|
제공자 클래스 및 이름 |
클라이언트 SDK 3의 JCE 제공자 클래스가 |
클라이언트 SDK 5에서는 공급자 클래스가 |
|
명시적 로그인은 변경되었지만 암시적 로그인은 변경되지 않았습니다.
변경된 사항 | 클라이언트 SDK 3에 포함된 내용 | 클라이언트 SDK 5의 내용 | 예 |
---|---|---|---|
명시적 로그인 |
클라이언트 SDK 3은 |
클라이언트 SDK 5에서 |
클라이언트 SDK 5에서 명시적 로그인을 사용하는 방법에 대한 예는 AWS GitHub CloudHSM LoginRunner |
암시적 로그인 |
암시적 로그인에는 변경이 필요하지 않습니다. 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션할 때 동일한 속성 파일 및 모든 환경 변수가 암시적 로그인에 계속 적용됩니다. |
클라이언트 SDK 5에서 암시적 로그인을 사용하는 방법에 대한 예제는 샘플 저장소의 샘플을 참조하십시오. LoginRunner |
-
[1] 클라이언트 SDK 3 코드 스니펫:
LoginManager lm = LoginManager.getInstance(); lm.login(partition, user, pass);
-
[2] 클라이언트 SDK 5 코드 스니펫:
// Construct or get the existing provider object AuthProvider provider = new CloudHsmProvider(); // Call login method on the CloudHsmProvider object // Here loginHandler is a CallbackHandler provider.login(null, loginHandler);
Client SDK 5에서 명시적 로그인을 사용하는 방법에 대한 예제는 LoginRunner 샘플
저장소의 샘플을 참조하십시오. AWS CloudHSM GitHub
키 생성이 변경되었습니다.
무엇이 변경되었나요? | 클라이언트 SDK 3에 포함된 내용 | 클라이언트 SDK 5의 내용 | 예 |
---|---|---|---|
키 생성 |
클라이언트 SDK 3에서는 키 생성 매개변수를 지정하는 데 |
클라이언트 SDK 5에서는 키 생성 속성을 지정하는 데 |
대칭 키를 생성하는 |
키 페어 생성 |
클라이언트 SDK 3에서는 |
클라이언트 SDK 5에서는 |
비대칭 키를 생성하는 |
-
[1] 클라이언트 SDK 3 키 생성 코드 스니펫:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium"); CaviumAESKeyGenParameterSpec aesSpec = new CaviumAESKeyGenParameterSpec( keySizeInBits, keyLabel, isExtractable, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[2] 클라이언트 SDK 5 키 생성 코드 스니펫:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", CloudHsmProvider.PROVIDER_NAME); final KeyAttributesMap aesSpec = new KeyAttributesMap(); aesSpec.put(KeyAttribute.LABEL, keyLabel); aesSpec.put(KeyAttribute.SIZE, keySizeInBits); aesSpec.put(KeyAttribute.EXTRACTABLE, isExtractable); aesSpec.put(KeyAttribute.TOKEN, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[3] 클라이언트 SDK 3 키 페어 생성 코드 스니펫:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("rsa", "Cavium"); CaviumRSAKeyGenParameterSpec spec = new CaviumRSAKeyGenParameterSpec( keySizeInBits, new BigInteger("65537"), label + ":public", label + ":private", isExtractable, isPersistent); keyPairGen.initialize(spec); keyPairGen.generateKeyPair();
-
[4] 클라이언트 SDK 5 키 페어 생성 코드 스니펫:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", providerName); // Set attributes for RSA public key final KeyAttributesMap publicKeyAttrsMap = new KeyAttributesMap(); publicKeyAttrsMap.putAll(additionalPublicKeyAttributes); publicKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Public"); publicKeyAttrsMap.put(KeyAttribute.MODULUS_BITS, keySizeInBits); publicKeyAttrsMap.put(KeyAttribute.PUBLIC_EXPONENT, new BigInteger("65537").toByteArray()); // Set attributes for RSA private key final KeyAttributesMap privateKeyAttrsMap = new KeyAttributesMap(); privateKeyAttrsMap.putAll(additionalPrivateKeyAttributes); privateKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Private"); // Create KeyPairAttributesMap and use that to initialize the // keyPair generator KeyPairAttributesMap keyPairSpec = new KeyPairAttributesMapBuilder() .withPublic(publicKeyAttrsMap) .withPrivate(privateKeyAttrsMap) .build(); keyPairGen.initialize(keyPairSpec); keyPairGen.generateKeyPair();
키 찾기, 삭제, 참조가 변경되었습니다.
이미 생성된 키를 찾으려면 를 AWS CloudHSM 사용해야 합니다. KeyStore 클라이언트 SDK 3에는 다음과 같은 두 가지 KeyStore 유형이 있습니다. Cavium
CloudHSM
클라이언트 SDK 5에는 다음 한 가지 KeyStore 유형만 있습니다. CloudHSM
에서 로 Cavium
KeyStore CloudHSM
KeyStore 이동하려면 KeyStore 유형을 변경해야 합니다. 또한 클라이언트 SDK 3은 키 핸들을 사용하여 키를 참조하는 반면, 클라이언트 SDK 5는 키 레이블을 사용합니다. 그에 따른 동작 변경은 다음과 같습니다.
변경된 사항 | 클라이언트 SDK 3에 포함된 내용 | 클라이언트 SDK 5의 내용 | 예 |
---|---|---|---|
주요 레퍼런스 |
Client SDK 3에서는 애플리케이션이 키 레이블 또는 키 핸들을 사용하여 HSM의 키를 참조합니다. 레이블을 KeyStore 사용하여 키를 찾거나 핸들을 사용하여 객체를 생성합니다 |
Client SDK 5에서 애플리케이션은 를 사용하여 AWS CloudHSM KeyStore 자바 클래스 사용 레이블로 키를 찾을 수 있습니다. 핸들로 키를 찾으려면 AWS CloudHSM |
|
여러 항목 찾기 |
|
AWS CloudHSM |
|
모든 키 찾기 |
클라이언트 SDK 3에서는 를 사용하여 HSM의 모든 키를 찾을 수 있습니다. |
클라이언트 SDK 5를 사용하면 클래스를 사용하여 키를 더 간단하고 효율적으로 찾을 수 있습니다. |
|
키 삭제 |
클라이언트 SDK 3은 키를 삭제하는 데 사용합니다 |
Client SDK 5의 |
키 삭제 기능을 보여주는 예제 코드는 CloudHSM |
-
[1] 스니펫은 다음과 같습니다.
KeyAttributesMap findSpec = new KeyAttributesMap(); findSpec.put(KeyAttribute.LABEL, label); findSpec.put(KeyAttribute.KEY_TYPE, keyType); KeyStoreWithAttributes keyStore = KeyStoreWithAttributes.getInstance("CloudHSM"); keyStore.load(null, null); keyStore.getKey(findSpec);
-
[2] 클라이언트 SDK 3에서 키 삭제:
Util.deleteKey(key);
클라이언트 SDK 5에서 키 삭제:
((Destroyable) key).destroy();
암호 언랩 작업은 변경되었지만 다른 암호 작업은 변경되지 않았습니다.
참고
암호 암호화/복호화/랩 작업은 변경할 필요가 없습니다.
언랩 작업을 수행하려면 클라이언트 SDK 3 CaviumUnwrapParameterSpec
클래스를 나열된 암호화 작업과 관련된 다음 클래스 중 하나로 바꿔야 합니다.
GCMUnwrapKeySpec
AES/GCM/NoPadding
언래핑용IvUnwrapKeySpec
용도 및AESWrap unwrap
AES/CBC/NoPadding unwrap
RSA OAEP unwrap
용OAEPUnwrapKeySpec
예시 스니펫: OAEPUnwrapkeySpec
OAEPParameterSpec oaepParameterSpec = new OAEPParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSpecified.DEFAULT); KeyAttributesMap keyAttributesMap = new KeyAttributesMap(KeyAttributePermissiveProfile.KEY_CREATION); keyAttributesMap.put(KeyAttribute.TOKEN, true); keyAttributesMap.put(KeyAttribute.EXTRACTABLE, false); OAEPUnwrapKeySpec spec = new OAEPUnwrapKeySpec(oaepParameterSpec, keyAttributesMap); Cipher hsmCipher = Cipher.getInstance( "RSA/ECB/OAEPPadding", CloudHsmProvider.PROVIDER_NAME); hsmCipher.init(Cipher.UNWRAP_MODE, key, spec);
서명 작업은 변경되지 않았습니다.
서명 작업에는 변경이 필요하지 않습니다.
클라이언트 SDK 5로 마이그레이션
이 섹션의 지침에 따라 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션하십시오.
참고
아마존 리눅스, 우분투 16.04, 우분투 18.04 센토스 6, 센토스 8, RHEL 6은 현재 클라이언트 SDK 5에서 지원되지 않습니다. 현재 클라이언트 SDK 3과 함께 이러한 플랫폼 중 하나를 사용하고 있다면 클라이언트 SDK 5로 마이그레이션할 때 다른 플랫폼을 선택해야 합니다.
-
클라이언트 SDK용 JCE 공급자 제거 3.
-
클라이언트 SDK용 클라이언트 데몬 제거 3.
참고
사용자 지정 구성을 다시 활성화해야 합니다.
-
의 단계에 따라 클라이언트 SDK JCE 공급자를 설치합니다. 클라이언트 SDK 5용 AWS CloudHSM JCE 공급자 설치 및 사용
-
클라이언트 SDK 5에는 새로운 구성 파일 형식과 명령줄 부트스트래핑 도구가 도입되었습니다. 클라이언트 SDK 5 JCE 공급자를 부트스트랩하려면 아래 사용 설명서에 나와 있는 지침을 따르십시오. Client SDK 부트스트랩합니다.
-
개발 환경에서 애플리케이션을 테스트하십시오. 최종 마이그레이션 전에 기존 코드를 업데이트하여 주요 변경 사항을 해결하세요.