JCE 제공자를 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션 - AWS CloudHSM

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

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 제공자 클래스가 CaviumProvider 호출되며 제공자 이름을 가집니다. Cavium

클라이언트 SDK 5에서는 공급자 클래스가 CloudHsmProvider 호출되며 공급자 이름을 가집니다. CloudHSM

CloudHsmProvider객체를 초기화하는 방법의 예는 AWS CloudHSM GitHub 샘플 리포지토리에서 확인할 수 있습니다.

명시적 로그인은 변경되었지만 암시적 로그인은 변경되지 않았습니다.

변경된 사항 클라이언트 SDK 3에 포함된 내용 클라이언트 SDK 5의 내용

명시적 로그인

클라이언트 SDK 3은 LoginManager 클래스를 사용하여 명시적 로그인을 수행합니다. 1

클라이언트 SDK 5에서 CloudHSM 공급자는 명시적 로그인을 구현합니다. AuthProvider AuthProvider표준 Java 클래스이며 Java의 관용적 방법을 따라 제공자에 로그인합니다. Client SDK 5의 향상된 로그인 상태 관리를 통해 애플리케이션은 더 이상 재연결 중에 로그인을 모니터링하고 수행할 필요가 없습니다. 2

클라이언트 SDK 5에서 명시적 로그인을 사용하는 방법에 대한 예는 AWS GitHub CloudHSM LoginRunner 샘플 리포지토리의 샘플을 참조하십시오.

암시적 로그인

암시적 로그인에는 변경이 필요하지 않습니다. 클라이언트 SDK 3에서 클라이언트 SDK 5로 마이그레이션할 때 동일한 속성 파일 및 모든 환경 변수가 암시적 로그인에 계속 적용됩니다.

클라이언트 SDK 5에서 암시적 로그인을 사용하는 방법에 대한 예제는 샘플 저장소의 샘플을 참조하십시오. LoginRunner AWS CloudHSM GitHub

  • [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에서는 키 생성 매개변수를 지정하는 데 Cavium[Key-type]AlgorithmParameterSpec 사용됩니다. 코드 스니펫은 각주를 참조하십시오. 1

클라이언트 SDK 5에서는 키 생성 속성을 지정하는 데 KeyAttributesMap 사용됩니다. 코드 스니펫은 각주를 참조하십시오. 2

대칭 키를 생성하는 KeyAttributesMap 데 사용하는 방법에 대한 예는 AWS CloudHSM SymmetricKeys Github 샘플 리포지토리의 샘플을 참조하십시오.

키 페어 생성

클라이언트 SDK 3에서는 Cavium[Key-type]AlgorithmparameterSpec 키 페어 생성 파라미터를 지정하는 데 사용됩니다. 코드 스니펫은 각주를 참조하십시오. 3

클라이언트 SDK 5에서는 KeyPairAttributesMap 이러한 매개변수를 지정하는 데 사용됩니다. 코드 스니펫은 각주를 참조하십시오. 4

비대칭 키를 생성하는 KeyAttributesMap 데 사용하는 방법에 대한 예제는 AsymmetricKeys 샘플 저장소의 샘플을 참조하십시오. AWS CloudHSM GitHub

  • [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 사용하여 키를 찾거나 핸들을 사용하여 객체를 생성합니다CaviumKey.

Client SDK 5에서 애플리케이션은 를 사용하여 AWS CloudHSM KeyStore 자바 클래스 사용 레이블로 키를 찾을 수 있습니다. 핸들로 키를 찾으려면 AWS CloudHSM KeyStoreWithAttributes with AWS CloudHSM KeyRefereneSpec 를 사용하십시오.

여러 항목 찾기

getEntrygetKey, 를 사용하여 키를 검색하거나 동일한 기준을 가진 항목이 여러 개 있는 getCertificate 시나리오에서 키를 검색하는 경우 찾은 첫 번째 항목만 반환됩니다. Cavium KeyStore

AWS CloudHSM KeyStoreKeyStoreWithAttributes 를 사용하면 이와 동일한 시나리오에서 예외가 발생합니다. 이 문제를 해결하려면 CloudHSM CLI에서 키 세트-속성 명령을 사용하여 키에 고유한 레이블을 설정하는 것이 좋습니다. 또는 기준과 일치하는 모든 키를 반환하는 KeyStoreWithAttributes#getKeys 데 사용합니다.

모든 키 찾기

클라이언트 SDK 3에서는 를 사용하여 HSM의 모든 키를 찾을 수 있습니다. Util.findAllKeys()

클라이언트 SDK 5를 사용하면 클래스를 사용하여 키를 더 간단하고 효율적으로 찾을 수 있습니다. KeyStoreWithAttributes 가능하면 키를 캐싱하여 지연 시간을 최소화하세요. 자세한 정보는 애플리케이션의 키를 효과적으로 관리을 참조하세요. HSM에서 모든 키를 검색해야 하는 경우 빈 KeyStoreWithAttributes#getKeys KeyAttributesMap 상태로 사용하십시오.

KeyStoreWithAttributes클래스를 사용하여 키를 찾는 예제는 AWS CloudHSM Github 샘플 리포지토리에 있으며 코드 스니펫은 에 나와 있습니다. 1

키 삭제

클라이언트 SDK 3은 키를 삭제하는 데 사용합니다Util.deleteKey().

Client SDK 5의 Key 객체는 이 Destroyable 인터페이스의 destroy() 방법을 사용하여 키를 삭제할 수 있는 인터페이스를 구현합니다.

키 삭제 기능을 보여주는 예제 코드는 CloudHSM Github 샘플 리포지토리에서 찾을 수 있습니다. 각 SDK의 샘플 스니펫은 에 나와 있습니다. 2

  • [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 클래스를 나열된 암호화 작업과 관련된 다음 클래스 중 하나로 바꿔야 합니다.

  • GCMUnwrapKeySpecAES/GCM/NoPadding언래핑용

  • IvUnwrapKeySpec용도 및 AESWrap unwrap AES/CBC/NoPadding unwrap

  • RSA OAEP unwrapOAEPUnwrapKeySpec

예시 스니펫: 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로 마이그레이션할 때 다른 플랫폼을 선택해야 합니다.

  1. 클라이언트 SDK용 JCE 공급자 제거 3.

    Amazon Linux 2
    $ sudo yum remove cloudhsm-jce
    CentOS 7
    $ sudo yum remove cloudhsm-jce
    RHEL 7
    $ sudo yum remove cloudhsm-jce
    RHEL 8
    $ sudo yum remove cloudhsm-jce
  2. 클라이언트 SDK용 클라이언트 데몬 제거 3.

    Amazon Linux 2
    $ sudo yum remove cloudhsm-client
    CentOS 7
    $ sudo yum remove cloudhsm-client
    RHEL 7
    $ sudo yum remove cloudhsm-client
    RHEL 8
    $ sudo yum remove cloudhsm-client
    참고

    사용자 지정 구성을 다시 활성화해야 합니다.

  3. 의 단계에 따라 클라이언트 SDK JCE 공급자를 설치합니다. 클라이언트 SDK 5용 AWS CloudHSM JCE 공급자 설치 및 사용

  4. 클라이언트 SDK 5에는 새로운 구성 파일 형식과 명령줄 부트스트래핑 도구가 도입되었습니다. 클라이언트 SDK 5 JCE 공급자를 부트스트랩하려면 아래 사용 설명서에 나와 있는 지침을 따르십시오. Client SDK 부트스트랩합니다.

  5. 개발 환경에서 애플리케이션을 테스트하십시오. 최종 마이그레이션 전에 기존 코드를 업데이트하여 주요 변경 사항을 해결하세요.

관련 주제