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