AWS Encryption SDK의 개념 - AWS Encryption SDK

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

AWS Encryption SDK의 개념

이 섹션에서는 AWS Encryption SDK에서 사용되는 개념을 소개하고 용어집 및 참조를 제공합니다. 이는 AWS Encryption SDK 작동 방식과 이를 설명하는 데 사용되는 용어를 이해하는 데 도움이 되도록 설계되었습니다.

도움이 필요하세요?

  • AWS Encryption SDK에서 봉투 암호화를 사용하여 데이터를 보호하는 방법을 알아봅니다.

  • 봉투 암호화의 구성 요소인 데이터를 보호하는 데이터 키와 데이터 키를 보호하는 래핑 키에 대해 알아봅니다.

  • 사용하는 래핑 키를 결정하는 키링마스터 키 공급자에 대해 알아봅니다.

  • 암호화 프로세스에 무결성을 더하는 암호화 컨텍스트에 대해 알아봅니다. 이는 선택 사항이지만 권장되는 모범 사례입니다.

  • 암호화 메서드가 반환하는 암호화된 메시지에 대해 알아봅니다.

  • 이제 원하는 프로그래밍 언어로 AWS Encryption SDK를 사용할 준비가 된 것입니다.

봉투 암호화

암호화된 데이터의 보안은 부분적으로 복호화할 수 있는 데이터 키를 보호하는 데 달려 있습니다. 데이터 키를 보호하기 위해 널리 인정되는 모범 사례 중 하나는 데이터 키를 암호화하는 것입니다. 이렇게 하려면 키-암호화 키 또는 래핑 키라고 하는 또 다른 암호화 키가 필요합니다. 래핑 키를 사용하여 데이터 키를 암호화하는 방법을 봉투 암호화라고 합니다.

데이터 키 보호

AWS Encryption SDK는 각 메시지를 고유 데이터 키로 암호화합니다. 그러면 지정한 래핑 키에서 데이터 키가 암호화됩니다. 반환된 암호화된 메시지에 암호화된 데이터와 함께 암호화된 데이터 키를 저장합니다.

래핑 키를 지정하려면 키링 또는 마스터 키 공급자를 사용합니다.


                            AWS Encryption SDK를 사용하여 봉투 암호화
여러 개의 래핑 키로 동일한 데이터 암호화

여러 개의 래핑 키로 데이터 키를 암호화할 수 있습니다. 사용자마다 다른 래핑 키를 제공하거나, 유형이나 위치가 다른 래핑 키를 제공할 수 있습니다. 각 래핑 키는 동일한 데이터 키를 암호화합니다. AWS Encryption SDK는 모든 암호화된 데이터 키를 암호화된 데이터와 함께 암호화된 메시지에 저장합니다.

데이터를 복호화하려면 암호화된 데이터 키 중 하나를 복호화할 수 있는 래핑 키를 제공해야 합니다.


                            각 래핑 키가 동일한 데이터 키를 암호화하여 각 래핑 키에 대해 하나의 암호화된 데이터 키가 생성됨
여러 알고리즘의 강점 결합

데이터를 암호화하기 위해 기본적으로 AWS Encryption SDK는 AES-GCM 대칭 암호화, 키 유도 함수(KDF), 서명이 포함된 정교한 알고리즘 제품군을 사용합니다. 데이터 키를 암호화하려면 래핑 키에 적합한 대칭 또는 비대칭 암호화 알고리즘을 지정할 수 있습니다.

일반적으로 대칭 키 암호화 알고리즘이 비대칭 또는 퍼블릭 키 암호화보다 빠르고 더 작은 사이퍼텍스트를 생성합니다. 그러나 퍼블릭 키 알고리즘은 고유한 역할 구분을 제공하고 키 관리가 더 쉽습니다. 각각의 장점을 결합하려면 대칭 키 암호화로 데이터를 암호화한 다음 퍼블릭 키 암호화로 데이터 키를 암호화하면 됩니다.

데이터 키

데이터 키는 AWS Encryption SDK가 데이터를 암호화하는 데 사용하는 암호화 키입니다. 각 데이터 키는 암호화 키 요구 사항을 준수하는 바이트 배열입니다. 데이터 키 캐싱을 사용하지 않는 한 AWS Encryption SDK는 고유 데이터 키를 사용하여 각 메시지를 암호화합니다.

데이터 키를 지정, 생성, 구현, 확장, 보호 또는 사용할 필요가 없습니다. 암호화 및 복호화 작업을 호출할 때 AWS Encryption SDK가 이를 대신 수행합니다.

데이터 키를 보호하기 위해 AWS Encryption SDK는 래핑 키 또는 마스터 키라고도 하는 하나 이상의 키-암호화 키로 데이터 키를 암호화합니다. AWS Encryption SDK는 일반 텍스트 데이터 키를 사용하여 데이터를 암호화한 후 가능한 한 빨리 메모리에서 제거합니다. 그런 다음 암호화 작업이 반환하는 암호화된 메시지에 암호화된 데이터와 함께 암호화된 데이터 키를 저장합니다. 자세한 내용은 AWS Encryption SDK 작동 방식을(를) 참조하세요.

작은 정보

AWS Encryption SDK에서는 데이터 키데이터 암호화 키를 구분합니다. 기본 제품군을 포함하여 지원되는 알고리즘 제품군 중 일부는 데이터 키가 암호화 한도에 도달하지 않도록 하는 키 유도 함수를 사용합니다. 키 유도 함수는 데이터 키를 입력으로 받아 실제로 데이터를 암호화하는 데 사용되는 데이터 암호화 키를 반환합니다. 이러한 이유로 데이터가 데이터 키에 "의해" 암호화되는 것이 아니라 데이터 키"에서" 암호화된다고 말하는 경우가 많습니다.

암호화된 각 데이터 키에는 해당 데이터 키를 암호화한 래핑 키의 식별자를 비롯한 메타데이터가 포함됩니다. 이 메타데이터를 사용하면 AWS Encryption SDK는 복호화 시 유효한 래핑 키를 쉽게 식별할 수 있습니다.

래핑 키

래핑 키는 AWS Encryption SDK가 데이터를 암호화하는 데이터 키를 암호화하는 데 사용하는 키-암호화 키입니다. 각각의 일반 텍스트 데이터 키는 한 개 또는 여러 개의 래핑 키로 암호화될 수 있습니다. 키링 또는 마스터 키 공급자를 구성할 때 데이터를 보호하기 위해 사용할 래핑 키를 결정합니다.

참고

래핑 키는 키링 또는 마스터 키 공급자에 있는 키를 말합니다. 마스터 키는 일반적으로 마스터 키 공급자를 사용할 때 인스턴스화하는 MasterKey 클래스와 연결됩니다.

AWS Encryption SDK는 일반적으로 사용되는 여러 래핑 키(예: 다중 리전 KMS 키를 포함한 AWS Key Management Service(AWS KMS) 대칭 AWS KMS keys, 원시 AES-GCM(Advanced Encryption Standard/Galois Counter Mode) 키, 원시 RSA 키)를 지원합니다. 또한 자체 래핑 키를 확장하거나 구현할 수도 있습니다.

봉투 암호화를 사용할 때는 래핑 키를 무단 액세스로부터 보호해야 합니다. 다음 중 한 가지 방법으로 이를 수행할 수 있습니다.

키 관리 시스템이 없는 경우 AWS KMS를 사용하는 것을 권장합니다. AWS Encryption SDK는 래핑 키 보호 및 사용을 지원하기 위해 AWS KMS와 통합되었습니다. 하지만 AWS Encryption SDK에는 AWS 또는 기타 AWS 서비스가 필요하지 않습니다.

키링 및 마스터 키 공급자

암호화 및 복호화에 사용하는 래핑 키를 지정하려면 키링 (C, C# /.NET 및 JavaScript) 또는 마스터 키 제공자 (Java, Python, CLI) 를 사용합니다. AWS Encryption SDK에서 제공하는 키링 및 마스터 키 공급자를 사용하거나 직접 구현을 설계할 수 있습니다. AWS Encryption SDK는 언어 제약 조건에 따라 서로 호환되는 키링과 마스터 키 공급자를 제공합니다. 자세한 내용은 키링 호환성을(를) 참조하세요.

키링은 데이터 키를 생성, 암호화, 복호화합니다. 키링을 정의할 때 데이터 키를 암호화하는 래핑 키를 지정할 수 있습니다. 대부분의 키링은 하나 이상의 래핑 키를 지정하거나, 래핑 키를 제공하고 보호하는 서비스를 지정합니다. 래핑 키가 없는 키링을 정의하거나 추가 구성 옵션을 사용하여 더 복잡한 키링을 정의할 수도 있습니다. AWS Encryption SDK가 정의하는 키링을 선택하고 사용하는 데 도움이 필요하면 키링 사용 섹션을 참조하세요. 키링은 C, C#/.NET 및 버전 3에서 지원됩니다. JavaScript 의 x. AWS Encryption SDK for Java

마스터 키 공급자는 키링의 대안입니다. 마스터 키 공급자는 지정한 래핑 키(또는 마스터 키)를 반환합니다. 각 마스터 키는 하나의 마스터 키 공급자와 연결되지만 마스터 키 공급자는 일반적으로 여러 마스터 키를 제공합니다. 마스터 키 공급자는 Java, Python, AWS Encryption CLI에서 지원됩니다.

암호화를 위해 키링(또는 마스터 키 공급자)을 지정해야 합니다. 복호화를 위해 동일한 키링(또는 마스터 키 공급자)을 지정하거나 다른 키링을 지정할 수 있습니다. 암호화할 때 AWS Encryption SDK는 사용자가 지정한 모든 래핑 키를 사용하여 데이터 키를 암호화합니다. 복호화할 때 AWS Encryption SDK는 사용자가 지정한 래핑 키만 사용하여 암호화된 데이터 키를 복호화합니다. 복호화를 위해 래핑 키를 지정하는 것은 선택 사항이지만 AWS Encryption SDK 모범 사례입니다.

래핑 키 지정에 대한 자세한 내용은 래핑 키 선택 섹션을 참조하세요.

암호화 컨텍스트

암호화 작업의 보안을 개선하려면 모든 데이터 암호화 요청에 암호화 컨텍스트를 포함시킵니다. 암호화 컨텍스트를 사용하는 것은 선택 사항이지만 권장되는 암호화 모범 사례입니다.

암호화 컨텍스트는 비밀이 아닌 임의의 추가 인증 데이터를 포함하는 키-값 페어 세트입니다. 암호화 컨텍스트에는 사용자가 선택한 모든 데이터가 포함될 수 있지만 일반적으로 파일 유형, 목적 또는 소유권에 대한 데이터와 같이 로깅 및 추적에 유용한 데이터로 구성됩니다. 데이터를 암호화하면 암호화 컨텍스트는 암호화된 데이터에 암호화 방식으로 바인딩되므로 데이터를 복호화할 때 동일한 암호화 컨텍스트가 필요합니다. 또한 AWS Encryption SDK는 반환하는 암호화된 메시지의 헤더에 암호화 컨텍스트를 일반 텍스트로 포함시킵니다.

AWS Encryption SDK가 사용하는 암호화 컨텍스트는 사용자가 지정하는 암호화 컨텍스트와 암호화 구성 요소 관리자(CMM)가 추가하는 퍼블릭 키 페어로 구성됩니다. 특히, 서명이 포함된 암호화 알고리즘을 사용할 때마다 CMM은 예약된 이름(aws-crypto-public-key)과 퍼블릭 확인 키를 나타내는 값으로 구성된 이름-값 페어를 암호화 컨텍스트에 추가합니다. 암호화 컨텍스트의 aws-crypto-public-key 이름은 AWS Encryption SDK에 의해 예약되며 암호화 컨텍스트의 다른 페어의 이름으로 사용할 수 없습니다. 자세한 내용은 메시지 형식 참조AAD를 참조하세요.

다음 예제 암호화 컨텍스트는 요청에서 지정된 두 개의 암호화 컨텍스트 페어와 CMM이 추가하는 퍼블릭 키 페어로 구성되어 있습니다.

"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>

데이터를 복호화하려면 암호화된 메시지를 전달합니다. AWS Encryption SDK는 암호화된 메시지 헤더에서 암호화 컨텍스트를 추출할 수 있으므로 암호화 컨텍스트를 별도로 제공할 필요가 없습니다. 하지만 암호화 컨텍스트는 암호화된 메시지를 올바르게 복호화하고 있는지 확인하는 데 도움이 될 수 있습니다.

  • AWS Encryption SDK Command Line Interface(CLI)에서 복호화 명령에 암호화 컨텍스트를 제공하는 경우 CLI는 일반 텍스트 데이터를 반환하기 전에 암호화된 메시지의 암호화 컨텍스트에 해당 값이 있는지 확인합니다.

  • 다른 프로그래밍 언어 구현의 경우 복호화 응답에 암호화 컨텍스트와 일반 텍스트 데이터가 포함됩니다. 애플리케이션의 복호화 함수는 일반 텍스트 데이터를 반환하기 전에 항상 복호화 응답의 암호화 컨텍스트에 암호화 요청(또는 하위 집합)의 암호화 컨텍스트가 포함되어 있는지 확인해야 합니다.

참고

버전 4와 함께. AWS Encryption SDK.NET용 x와 버전 3입니다. x에서는 필수 암호화 컨텍스트 CMM을 사용하여 모든 암호화 요청에 암호화 컨텍스트를 요구할 수 있습니다. AWS Encryption SDK for Java

암호화 컨텍스트를 선택할 때는 해당 값이 비밀이 아님을 기억해야 합니다. 암호화 컨텍스트는 AWS Encryption SDK가 반환하는 암호화된 메시지의 헤더에 일반 텍스트로 표시됩니다. AWS Key Management Service를 사용하는 경우 암호화 컨텍스트는 감사 레코드 및 로그(예: AWS CloudTrail)에 일반 텍스트로 표시될 수도 있습니다.

코드에서 암호화 컨텍스트를 제출하고 확인하는 예제는 선호하는 프로그래밍 언어의 예제를 참조하세요.

암호화된 메시지

AWS Encryption SDK를 사용하여 데이터를 암호화하면 암호화된 메시지가 반환됩니다.

암호화된 메시지는 암호화된 데이터와 함께 데이터 키의 암호화된 사본, 알고리즘 ID, 선택 사항으로 암호화 컨텍스트디지털 서명을 포함하는 이동 가능한 형식화된 데이터 구조입니다. AWS Encryption SDK의 암호화 작업은 암호화된 메시지를 반환하고 복호화 작업은 암호화된 메시지를 입력으로 사용합니다.

암호화된 데이터와 암호화된 데이터 키를 결합하면 복호화 작업이 간소화되고, 암호화된 데이터 키를 암호화 데이터와 독립적으로 저장하고 관리할 필요가 없습니다.

암호화된 메시지에 대한 기술 정보는 암호화된 메시지 형식을 참조하세요.

알고리즘 제품군

AWS Encryption SDK는 알고리즘 제품군을 사용하여 암호화 및 복호화 작업이 반환하는 암호화된 메시지의 데이터를 암호화하고 서명합니다. AWS Encryption SDK에서는 여러 알고리즘 제품군을 지원합니다. 지원하는 알고리즘은 모두 AES(Advanced Encryption Standard)를 기본 알고리즘으로 사용하고 이 기본 알고리즘을 다른 알고리즘 및 값과 조합합니다.

AWS Encryption SDK에서는 모든 암호화 작업의 기본값으로 사용할 권장 알고리즘 제품군을 설정합니다. 기본값은 표준과 모범 사례가 개선됨에 따라 변경될 수 있습니다. 데이터 암호화 요청이나 암호화 구성 요소 관리자(CMM)를 생성할 때 대체 알고리즘 제품군을 지정할 수 있지만 상황에 따라 대안이 필요한 경우가 아니라면 기본값을 사용하는 것이 가장 좋습니다. 현재 기본값은 HMAC 기반 extract-and-expand 키 파생 함수 (HKDF), 키 커밋, 타원 곡선 디지털 서명 알고리즘 (ECDSA) 서명 및 256비트 암호화 키를 갖춘 AES-GCM입니다.

애플리케이션에 고성능이 필요하고 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자의 신뢰도가 동일하다면 디지털 서명이 없는 알고리즘 제품군을 지정하는 것을 고려할 수 있습니다. 하지만 키 커밋과 키 유도 함수가 포함된 알고리즘 제품군을 사용하는 것을 적극 권장합니다. 이러한 기능이 없는 알고리즘 제품군은 이하 버전과의 호환성을 위해서만 지원됩니다.

암호화 구성 요소 관리자

암호화 구성 요소 관리자(CMM)는 데이터를 암호화하고 복호화하는 데 사용되는 암호화 구성 요소를 조합합니다. 암호화 구성 요소에는 일반 텍스트 및 암호화된 데이터 키와 선택 사항인 메시지 서명 키가 포함됩니다. 사용자는 CMM과 직접 상호 작용하지는 않습니다. 암호화 및 복호화 메서드가 이를 대신 처리합니다.

AWS Encryption SDK가 제공하는 기본 CMM 또는 캐싱 CMM을 사용하거나 사용자 지정 CMM을 작성할 수 있습니다. 그리고 CMM을 지정할 수 있지만 필수는 아닙니다. 키링 또는 마스터 키 공급자를 지정하면 AWS Encryption SDK에서 기본 CMM을 생성합니다. 기본 CMM은 사용자가 지정한 키링 또는 마스터 키 공급자로부터 암호화 또는 복호화 구성 요소를 가져옵니다. 여기에는 AWS Key Management Service(AWS KMS)와 같은 암호화 서비스에 대한 호출이 포함될 수 있습니다.

CMM은 AWS Encryption SDK와 키링(또는 마스터 키 공급자) 간에 연락 지점의 역할을 하기 때문에 정책 시행 및 캐싱 지원과 같은 사용자 지정 및 확장을 위한 이상적인 지점입니다. AWS Encryption SDK는 데이터 키 캐싱을 지원하기 위해 캐싱 CMM을 제공합니다.

대칭 및 비대칭 암호화

대칭 암호화는 동일한 키를 사용하여 데이터를 암호화하고 복호화합니다.

비대칭 암호화는 수학적으로 관련된 데이터 키 페어를 사용합니다. 페어의 키 중 하나가 데이터를 암호화하고, 페어의 다른 키만 데이터를 복호화할 수 있습니다. 자세한 내용은 AWS 암호화 서비스 및 도구 가이드암호화 알고리즘을 참조하세요.

AWS Encryption SDK는 봉투 암호화를 사용합니다. 대칭 데이터 키로 데이터를 암호화합니다. 하나 이상의 대칭 또는 비대칭 래핑 키를 사용하여 대칭 데이터 키를 암호화합니다. 암호화된 데이터와 하나 이상의 데이터 키의 암호화된 사본이 포함된 암호화된 메시지를 반환합니다.

데이터 암호화(대칭 암호화)

데이터를 암호화하기 위해 AWS Encryption SDK는 대칭 데이터 키와 대칭 암호화 알고리즘이 포함된 알고리즘 제품군을 사용합니다. 데이터를 복호화하기 위해 AWS Encryption SDK는 동일한 데이터 키와 동일한 알고리즘 제품군을 사용합니다.

데이터 키 암호화(대칭 또는 비대칭 암호화)

암호화 및 복호화 작업에 제공하는 키링 또는 마스터 키 공급자에 따라 대칭 데이터 키가 암호화 및 복호화되는 방식이 결정됩니다. 대칭 암호화를 사용하는 키링 또는 마스터 키 공급자(예: AWS KMS 키링)를 선택할 수도 있고, 비대칭 암호화를 사용하는 키링 또는 마스터 키 공급자(예: 원시 RSA 키링 또는 JceMasterKey)를 선택할 수도 있습니다.

키 커밋

AWS Encryption SDK는 각 사이퍼텍스트가 하나의 일반 텍스트로만 복호화될 수 있도록 보장하는 보안 속성인 키 커밋(견고성이라고도 함)을 지원합니다. 이를 위해 키 커밋은 메시지를 암호화한 데이터 키만 복호화에 사용되도록 보장합니다. 키 커밋으로 데이터를 암호화하고 복호화하는 것이 AWS Encryption SDK 모범 사례입니다.

AES를 포함한 대부분의 최신 대칭 암호는 AWS Encryption SDK가 각 일반 텍스트 메시지를 암호화하는 데 사용하는 고유 데이터 키와 같은 단일 비밀 키로 일반 텍스트를 암호화합니다. 동일한 데이터 키로 이 데이터를 복호화하면 원본과 동일한 일반 텍스트가 반환됩니다. 다른 키를 사용한 복호화는 일반적으로 실패합니다. 하지만 서로 다른 두 개의 키로 사이퍼텍스트를 복호화할 수 있습니다. 드문 경우이긴 하지만, 몇 바이트의 사이퍼텍스트를 다르지만 여전히 식별할 수 있는 일반 텍스트로 복호화할 수 있는 키를 찾는 경우가 있습니다.

AWS Encryption SDK는 항상 각 일반 텍스트 메시지를 하나의 고유 데이터 키로 암호화합니다. 여러 래핑 키(또는 마스터 키)로 해당 데이터 키를 암호화할 수 있지만 래핑 키는 항상 동일한 데이터 키를 암호화합니다. 하지만 정교하고 수동으로 조작된 암호화된 메시지에는 실제로 각각 다른 래핑 키로 암호화된 서로 다른 데이터 키가 포함될 수 있습니다. 예를 들어 한 사용자가 암호화된 메시지를 복호화하여 0x0(false)이 반환됐지만 동일한 암호화된 메시지를 다른 사용자가 복호화하면 0x1(true)이 반환될 수 있습니다.

이러한 시나리오를 방지하기 위해 AWS Encryption SDK에서는 암호화 및 복호화 시 키 커밋을 지원합니다. AWS Encryption SDK가 키 커밋을 사용하여 메시지를 암호화할 때 사이퍼텍스트를 생성한 고유 데이터 키를 비밀이 아닌 데이터 키 식별자인 키 커밋 문자열에 암호화 방식으로 바인딩합니다. 그런 다음 암호화된 메시지의 메타데이터에 키 커밋 문자열을 저장합니다. 키 커밋으로 메시지를 복호화할 때 AWS Encryption SDK는 데이터 키가 해당 암호화된 메시지의 유일한 키인지 확인합니다. 데이터 키 확인에 실패하면 복호화 작업이 실패합니다.

키 커밋에 대한 지원은 버전 1.7.x에 도입되었으며, 키 커밋으로 메시지를 복호화할 수는 있지만 키 커밋으로 암호화하지는 않습니다. 이 버전을 사용하면 키 커밋으로 사이퍼텍스트를 복호화하는 기능을 완전히 배포할 수 있습니다. 버전 2.0.x에서는 키 커밋이 완전히 지원됩니다. 기본적으로 키 커밋을 통해서만 암호화하고 복호화합니다. 이는 이하 버전의 AWS Encryption SDK로 암호화된 사이퍼텍스트를 복호화할 필요가 없는 애플리케이션에 적합한 구성입니다.

키 커밋을 통한 암호화 및 복호화가 모범 사례이기는 하지만, 사용 시기를 직접 결정하고 적용 속도를 조정할 수 있습니다. 버전 1.7.x부터 AWS Encryption SDK는 기본 알고리즘 제품군을 설정하고 사용할 알고리즘 제품군을 제한하는 커밋 정책을 지원합니다. 이 정책은 키 커밋으로 데이터를 암호화 및 복호화할지 여부를 결정합니다.

키 커밋을 사용하면 암호화된 메시지 크기가 약간 더 커지며(+ 30바이트) 처리하는 데 시간이 더 걸립니다. 애플리케이션이 크기나 성능에 매우 민감한 경우 키 커밋을 사용하지 않도록 설정할 수 있습니다. 하지만 꼭 필요한 경우에만 이를 설정하세요.

키 커밋 기능을 포함하여 버전 1.7.x 및 2.0.x로 마이그레이션하는 방법에 대한 자세한 내용은 AWS Encryption SDK 마이그레이션 섹션을 참조하세요. 키 커밋에 대한 기술 정보는 AWS Encryption SDK 알고리즘 참조AWS Encryption SDK 메시지 형식 참조 섹션을 참조하세요.

커밋 정책

커밋 정책은 애플리케이션이 키 커밋을 사용하여 암호화 및 복호화할지 여부를 결정하는 구성 설정입니다. 키 커밋으로 데이터를 암호화하고 복호화하는 것이 AWS Encryption SDK 모범 사례입니다.

커밋 정책에는 세 가지 값이 있습니다.

참고

전체 표를 보려면 가로 또는 세로로 스크롤해야 할 수 있습니다.

커밋 정책 값
키 커밋으로 암호화 키 커밋 없이 암호화 키 커밋으로 복호화 키 커밋 없이 복호화
ForbidEncryptAllowDecrypt
RequireEncryptAllowDecrypt
RequireEncryptRequireDecrypt

커밋 정책 설정은 AWS Encryption SDK 버전 1.7.x에 도입되었습니다. 지원되는 모든 프로그래밍 언어에서 유효합니다.

  • ForbidEncryptAllowDecrypt는 키 커밋 유무에 관계없이 복호화하지만, 키 커밋으로 암호화하지는 않습니다. 이 값은 버전 1.7.x에서 커밋 정책에 대해 유일하게 유효한 값이며 모든 암호화 및 복호화 작업에 사용됩니다. 이 값은 애플리케이션을 실행하는 모든 호스트가 키 커밋으로 암호화된 사이퍼텍스트를 접하기 전 키 커밋으로 복호화 준비를 할 수 있도록 설계되었습니다.

  • RequireEncryptAllowDecrypt는 항상 키 커밋으로 암호화합니다. 키 커밋 유무에 관계없이 복호화할 수 있습니다. 이 값은 버전 2.0.x에 도입되었으며, 이를 사용하면 키 커밋으로 암호화를 시작하지만 키 커밋 없이 레거시 사이퍼텍스트를 복호화할 수 있습니다.

  • RequireEncryptRequireDecrypt는 키 커밋을 통해서만 암호화 및 복호화합니다. 이 값은 버전 2.0.x의 기본값입니다. 모든 사이퍼텍스트가 키 커밋으로 암호화되는 것이 확실한 경우에 이 값을 사용합니다.

커밋 정책 설정에 따라 사용할 수 있는 알고리즘 제품군이 결정됩니다. 버전 1.7.x부터 AWS Encryption SDK는 키 커밋을 위한 알고리즘 제품군(서명 포함 및 미포함)을 지원합니다. 커밋 정책과 충돌하는 알고리즘 제품군을 지정하는 경우 AWS Encryption SDK에서 오류를 반환합니다.

커밋 정책을 설정하는 데 도움이 필요하면 커밋 정책 설정 섹션을 참조하세요.

디지털 서명

시스템 간에 전송되는 디지털 메시지의 무결성을 보장하기 위해 메시지에 디지털 서명을 적용할 수 있습니다. 디지털 서명은 항상 비대칭입니다. 개인 키를 사용하여 서명을 만들고 이를 원본 메시지에 추가합니다. 수신자는 퍼블릭 키를 사용하여 서명 후 메시지가 수정되지 않았는지 확인합니다.

AWS Encryption SDK는 인증된 암호화 알고리즘인 AES-GCM을 사용하여 데이터를 암호화하고, 복호화 프로세스는 디지털 서명을 사용하지 않고 암호화된 메시지의 무결성과 신뢰성을 확인합니다. 그러나 AES-GCM은 대칭 키를 사용하기 때문에 사이퍼텍스트를 복호화하는 데 사용되는 데이터 키를 복호화할 수 있는 사용자라면 누구나 암호화된 새 사이퍼텍스트를 수동으로 생성할 수 있어 잠재적인 보안 문제가 발생할 수 있습니다. 예를 들어 AWS KMS 키를 래핑 키로 사용하는 경우 KMS Decrypt 권한이 있는 사용자는 KMS Encrypt를 호출하지 않고도 암호화된 사이퍼텍스트를 만들 수 있습니다.

이 문제를 방지하기 위해 AWS Encryption SDK는 암호화된 메시지의 끝에 타원 곡선 디지털 서명 알고리즘(ECDSA) 서명을 추가할 수 있도록 지원합니다. 서명 알고리즘 제품군을 사용할 때 AWS Encryption SDK는 암호화된 각 메시지에 대해 임시 프라이빗 키와 퍼블릭 키 페어를 생성합니다. AWS Encryption SDK는 데이터 키의 암호화 컨텍스트에 퍼블릭 키를 저장하고 프라이빗 키를 삭제하므로 아무도 퍼블릭 키로 확인하는 다른 서명을 만들 수 없습니다. 알고리즘은 퍼블릭 키를 암호화된 데이터 키에 메시지 헤더의 추가 인증 데이터로 바인딩하므로 메시지 복호화만 할 수 있는 사용자는 퍼블릭 키를 변경할 수 없습니다.

서명 확인은 복호화 시 상당한 성능 비용을 추가시킵니다. 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자의 신뢰도가 같으면 서명이 포함되지 않은 알고리즘 제품군을 사용하는 것이 좋습니다.