AWS KMS ECDH 키링 - AWS Encryption SDK

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

AWS KMS ECDH 키링

중요

AWS KMS ECDH키링은 버전 3에서만 사용할 수 있습니다. 의 AWS Encryption SDK for Java x. AWS KMS ECDH키링은 머티리얼 프로바이더 라이브러리 버전 1.5.0에 도입되었습니다.

AWS KMS ECDH키링은 비대칭 키 계약을 AWS KMS keys사용하여 양 당사자 간에 공유된 대칭 래핑 키를 도출합니다. 먼저 키링은 Elliptic Curve Diffie-Hellman (ECDH) 키 계약 알고리즘을 사용하여 발신자 키 쌍의 개인 키와 수신자의 공개 키에서 공유 암호를 도출합니다. KMS 그러면 키링은 공유 암호를 사용하여 데이터 암호화 키를 보호하는 공유 래핑 키를 추출합니다. 공유 래핑 키를 추출하기 위해 AWS Encryption SDK 사용 (KDF_CTR_HMAC_SHA384) 하는 키 파생 함수는 키 파생 권장 사항을 준수합니다NIST.

키 파생 함수는 64바이트의 키 자료를 반환합니다. 양 당사자가 올바른 키 자료를 사용할 수 있도록 하기 위해 에서는 처음 32바이트를 커밋 키로 사용하고 마지막 32바이트를 공유 래핑 키로 AWS Encryption SDK 사용합니다. 암호 해독 시 키링이 메시지 헤더 암호문에 저장된 것과 동일한 커밋 키 및 공유 래핑 키를 복제할 수 없는 경우 작업이 실패합니다. 예를 들어 Alice의 개인 키와 Bob의 공개 키로 구성된 키링으로 데이터를 암호화하는 경우 Bob의 개인 키와 Alice의 공개 키로 구성된 키링은 동일한 커밋 키와 공유 래핑 키를 재생하고 데이터를 해독할 수 있습니다. Bob의 공개 키가 KMS 키 쌍에서 가져온 것이 아닌 경우 Bob은 Raw ECDH 키링을 생성하여 데이터를 해독할 수 있습니다.

AWS KMS ECDH키링은 -를 사용하여 대칭 키로 데이터를 암호화합니다. AES GCM 그런 다음 -를 사용하여 파생된 공유 래핑 키로 데이터 키를 엔벨로프 암호화합니다. AES GCM 각 AWS KMS ECDH 키링에는 공유 래핑 키가 하나만 있을 수 있지만 여러 AWS KMS ECDH 키링을 단독으로 또는 다른 키링과 함께 다중 키링에 포함할 수 있습니다.

AWS KMS ECDH 키링에 필요한 권한

AWS 계정이 필요하지 AWS Encryption SDK 않으며 어떤 서비스에도 의존하지 않습니다. AWS 하지만 AWS KMS ECDH 키링을 사용하려면 AWS 계정이 있어야 하며 키링에 다음과 같은 최소 권한이 있어야 합니다. AWS KMS keys 사용 권한은 사용하는 키 계약 스키마에 따라 달라집니다.

  • KmsPrivateKeyToStaticPublicKey키 계약 스키마를 사용하여 데이터를 암호화하고 복호화하려면 발신자의 비대칭 키 DeriveSharedSecret 쌍에 GetPublicKeykms:와 kms:가 필요합니다. KMS 키링을 인스턴스화할 때 발신자의 DER 인코딩된 공개 키를 직접 제공하는 경우 발신자의 비대칭 키 쌍에 대한 kms: DeriveSharedSecret 권한만 있으면 됩니다. KMS

  • KmsPublicKeyDiscovery키 계약 스키마를 사용하여 데이터를 복호화하려면 지정된 비대칭 키 쌍에 대한 kms: DeriveSharedSecretkms: GetPublicKey 권한이 필요합니다. KMS

AWS KMS ECDH 키링 생성

데이터를 암호화하고 해독하는 AWS KMS ECDH 키링을 생성하려면 키 계약 스키마를 사용해야 합니다. KmsPrivateKeyToStaticPublicKey KmsPrivateKeyToStaticPublicKey키 계약 스키마를 사용하여 AWS KMS ECDH 키링을 초기화하려면 다음 값을 제공하십시오.

  • 발신자 ID AWS KMS key

    값이 인 비대칭 NIST 권장 타원 곡선 () KMS 키 ECC 쌍을 식별해야 합니다. KeyUsage KEY_AGREEMENT 보낸 사람의 개인 키는 공유 암호를 추출하는 데 사용됩니다.

  • (선택 사항) 발신자의 공개 키

    5280에 DER 정의된 대로 X.509로 인코딩된 공개 키 SubjectPublicKeyInfo (SPKI) 라고도 함) 여야 합니다. RFC

    이 AWS KMS GetPublicKey작업은 비대칭 키 쌍의 공개 KMS 키를 필수 DER -encoded 형식으로 반환합니다.

    AWS KMS 발신자의 공개 키를 직접 제공하면 키링으로 걸려오는 호출 횟수를 줄일 수 있습니다. 발신자의 퍼블릭 키에 값을 제공하지 않으면 키링이 AWS KMS 호출하여 발신자의 퍼블릭 키를 검색합니다.

  • 수신자의 공개 키

    DER5280에 정의된 대로 수신자의 인코딩된 X.509 공개 키 SubjectPublicKeyInfo (SPKI) 라고도 함) 를 제공해야 합니다. RFC

    이 AWS KMS GetPublicKey작업은 비대칭 키 쌍의 공개 KMS 키를 필수 DER -encoded 형식으로 반환합니다.

  • 커브 사양

    지정된 키 페어의 타원 곡선 사양을 식별합니다. 발신자와 수신자의 키 페어 모두 동일한 커브 사양을 가져야 합니다.

    유효한 값: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (선택 사항) 권한 부여 토큰 목록

    권한 부여로 키링의 KMS AWS KMS ECDH 키에 대한 액세스를 제어하는 경우 키링을 초기화할 때 필요한 모든 부여 토큰을 제공해야 합니다.

Java

다음 예제에서는 보낸 사람의 AWS KMS ECDH 키, 보낸 사람의 공개 KMS 키, 받는 사람의 공개 키를 사용하여 키링을 만듭니다. 이 예에서는 선택적 senderPublicKey 파라미터를 사용하여 발신자의 공개 키를 제공합니다. 발신자의 공개 키를 제공하지 않으면 키링이 AWS KMS 호출하여 발신자의 공개 키를 검색합니다. 발신자와 수신자의 키 페어가 모두 순조롭게 진행되고 있습니다. ECC_NIST_P256

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

AWS KMS ECDH디스커버리 키링 만들기

암호를 해독할 때는 사용할 수 있는 키를 지정하는 것이 가장 좋습니다. AWS Encryption SDK 이 모범 사례를 따르려면 키 계약 스키마와 함께 AWS KMS ECDH 키링을 사용하십시오. KmsPrivateKeyToStaticPublicKey 하지만 AWS KMS ECDH 검색 키링, 즉 지정된 키 쌍의 KMS 퍼블릭 키가 메시지 암호문에 저장된 수신자의 퍼블릭 키와 일치하는 경우 메시지를 해독할 수 있는 AWS KMS ECDH 키링을 만들 수도 있습니다.

중요

KmsPublicKeyDiscovery키 계약 스키마를 사용하여 메시지를 해독하면 소유자에 관계없이 모든 공개 키를 수락합니다.

KmsPublicKeyDiscovery키 계약 스키마를 사용하여 AWS KMS ECDH 키링을 초기화하려면 다음 값을 제공하십시오.

  • 수신자 ID AWS KMS key

    값이 인 비대칭 NIST 권장 타원 곡선 () KMS 키 ECC 쌍을 식별해야 합니다. KeyUsage KEY_AGREEMENT

  • 커브 사양

    수신자의 키 페어에 KMS 있는 타원 곡선 사양을 식별합니다.

    유효한 값: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (선택 사항) 권한 부여 토큰 목록

    권한 부여를 통해 키링의 KMS 키에 대한 액세스를 제어하는 경우 AWS KMS ECDH 키링을 초기화할 때 필요한 모든 부여 토큰을 제공해야 합니다.

Java

다음 예제에서는 ECC_NIST_P256 곡선에 KMS 키 쌍이 있는 AWS KMS ECDH 검색 키링을 만듭니다. 지정된 KMS 키 쌍에 kms: GetPublicKeykms: DeriveSharedSecret 권한이 있어야 합니다. 이 키링은 지정된 키 쌍의 공개 키가 메시지 암호문에 저장된 수신자의 공개 KMS 키와 일치하는 모든 메시지를 해독할 수 있습니다.

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();