기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
JCE 공급자를 AWS CloudHSM 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션
이 주제를 사용하여 JCE 공급자를 AWS CloudHSM 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션합니다. 마이그레이션의 이점은 AWS CloudHSM 클라이언트 SDK 5의 이점 섹션을 참조하세요.
에서 AWS CloudHSM고객 애플리케이션은 AWS CloudHSM 클라이언트 소프트웨어 개발 키트(SDK)를 사용하여 암호화 작업을 수행합니다. 클라이언트 SDK 5는 새로운 기능과 플랫폼 지원이 지속적으로 추가되는 기본 SDK입니다.
클라이언트 SDK 3 JCE 공급자는 표준 JCE 사양에 포함되지 않은 사용자 지정 클래스 및 API를 사용합니다. JCE 공급자용 클라이언트 SDK 5는 JCE 사양을 준수하며 특정 영역에서는 클라이언트 SDK 3과 역호환되지 않습니다. 고객 애플리케이션은 클라이언트 SDK 5로의 마이그레이션의 일환으로 변경이 필요할 수 있습니다. 이 섹션에서는 성공적인 마이그레이션에 필요한 변경 사항을 간략하게 설명합니다.
모든 공급자에 대한 마이그레이션 지침을 검토하려면 AWS CloudHSM 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션 섹션을 참조하세요.
변경 사항을 해결하여 준비
이러한 중단된 변경 사항을 검토하고 그에 따라 개발 환경에서 애플리케이션을 업데이트합니다.
공급자 클래스 및 이름 변경됨
변경된 사항 | 클라이언트 SDK 3에서의 내용 | 클라이언트 SDK 5에서의 내용 | 예제 |
---|---|---|---|
공급자 클래스 및 이름 |
클라이언트 SDK 3의 JCE 공급자 클래스는 |
클라이언트 SDK 5에서 공급자 클래스는 |
|
명시적 로그인 변경됨, 암시적 로그인 변경되지 않음
변경된 사항 | 클라이언트 SDK 3에서의 내용 | 클라이언트 SDK 5에서의 내용 | 예제 |
---|---|---|---|
명시적 로그인 |
클라이언트 SDK 3은 명시적 로그인에 |
클라이언트 SDK 5에서 |
클라이언트 SDK 5에서 명시적 로그인을 사용하는 방법에 대한 예는 AWS CloudHSM GitHub 샘플 리포지토리 |
암시적 로그인 |
암시적 로그인에는 변경이 필요하지 않습니다. 동일한 속성 파일과 모든 환경 변수는 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션할 때 암시적 로그인에 계속 작동합니다. |
클라이언트 SDK 5에서 암시적 로그인을 사용하는 방법에 대한 예는 AWS CloudHSM GitHub 샘플 리포지토리의 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);
클라이언트 SDK 5에서 명시적 로그인을 사용하는 방법에 대한 예는 AWS CloudHSM GitHub 샘플 리포지토리의 LoginRunner
샘플을 참조하세요.
키 생성 변경됨
변경된 사항 | 클라이언트 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();
키 찾기, 삭제 및 참조 변경됨
에서 이미 생성된 키를 찾으려면 KeyStore를 AWS CloudHSM 사용합니다. 클라이언트 SDK 3에는 Cavium
및 CloudHSM
, 두 가지 KeyStore 유형이 있습니다. 클라이언트 SDK 5에는 CloudHSM
, 한 가지 KeyStore 유형만 있습니다.
Cavium
KeyStore에서 CloudHSM
KeyStore로 이동하려면 KeyStore 유형을 변경해야 합니다. 또한 클라이언트 SDK 3는 키 핸들을 사용하여 키를 참조하는 반면 클라이언트 SDK 5는 키 레이블을 사용합니다. 결과 동작 변경 사항은 다음과 같습니다.
변경된 사항 | 클라이언트 SDK 3에서의 내용 | 클라이언트 SDK 5에서의 내용 | 예제 |
---|---|---|---|
키 참조 |
클라이언트 SDK 3를 사용하면 애플리케이션이 키 레이블 또는 키 핸들을 사용하여 HSM에서 키를 참조합니다. KeyStore에서 레이블을 사용하여 키를 찾거나 핸들을 사용하여 |
클라이언트 SDK 5에서 애플리케이션은 클라이언트 SDK 5용 AWS CloudHSM KeyStore Java 클래스를 사용하여 레이블별로 키를 찾을 수 있습니다. 핸들별로 키를 찾으려면를 AWS CloudHSM |
|
여러 항목 찾기 |
|
및를 AWS CloudHSM |
|
모든 키 찾기 |
클라이언트 SDK 3에서는 |
클라이언트 SDK 5를 사용하면 |
|
키 삭제 |
클라이언트 SDK 3는 |
클라이언트 SDK 5의 |
키 삭제 기능을 보여주는 예제 코드는 CloudHSM GitHub 샘플 리포지토리 |
-
[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
클래스를 나열된 암호화 작업과 관련된 다음 클래스 중 하나로 교체해야 합니다.
AES/GCM/NoPadding
래핑 해제의GCMUnwrapKeySpec
AESWrap unwrap
및AES/CBC/NoPadding unwrap
의IvUnwrapKeySpec
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로 마이그레이션합니다.
참고
Amazon Linux, Ubuntu 16.04, Ubuntu 18.04, CentOS 6, CentOS 8 및 RHEL 6은 현재 클라이언트 SDK 5에서 지원되지 않습니다. 현재 클라이언트 SDK 3에서 이러한 플랫폼 중 하나를 사용하는 경우 클라이언트 SDK 5로 마이그레이션할 때 다른 플랫폼을 선택해야 합니다.
-
클라이언트 SDK 3용 JCE 공급자를 제거합니다.
-
클라이언트 SDK 3용 클라이언트 대몬을 제거합니다.
참고
사용자 지정 구성을 다시 활성화해야 합니다.
-
AWS CloudHSM 클라이언트 SDK 5용 JCE 공급자 설치의 단계에 따라 클라이언트 SDK JCE 공급자를 설치합니다.
-
클라이언트 SDK 5에는 새로운 구성 파일 형식과 명령줄 부트스트랩 도구가 도입되었습니다. 클라이언트 SDK 5 JCE 공급자를 부트스트랩하려면 클라이언트 부트스트랩 SDK의 사용 설명서에 나열된 지침을 따릅니다.
-
개발 환경에서 애플리케이션을 테스트합니다. 기존 코드를 업데이트하여 최종 마이그레이션 전에 중단되는 변경 사항을 해결합니다.