기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
의 개념 AWS Encryption SDK
이 섹션에서는 에서 사용되는 개념을 소개하고 용어집 및 참조를 제공합니다. AWS Encryption SDK이 문서는 AWS Encryption SDK 작동 방식과 이를 설명하는 데 사용하는 용어를 이해하는 데 도움이 되도록 설계되었습니다.
도움이 필요하세요?
-
봉투 암호화를 AWS Encryption SDK 사용하여 데이터를 보호하는 방법을 알아보십시오.
-
암호화 프로세스에 무결성을 더하는 암호화 컨텍스트에 대해 알아봅니다. 이는 선택 사항이지만 권장되는 모범 사례입니다.
-
암호화 메서드가 반환하는 암호화된 메시지에 대해 알아봅니다.
-
이제 원하는 프로그래밍 언어로 를 사용할 준비가 AWS Encryption SDK 된 것입니다.
봉투 암호화
암호화된 데이터의 보안은 부분적으로 복호화할 수 있는 데이터 키를 보호하는 데 달려 있습니다. 데이터 키를 보호하기 위해 널리 인정되는 모범 사례 중 하나는 데이터 키를 암호화하는 것입니다. 이렇게 하려면 키-암호화 키 또는 래핑 키라고 하는 또 다른 암호화 키가 필요합니다. 래핑 키를 사용하여 데이터 키를 암호화하는 방법을 봉투 암호화라고 합니다.
- 데이터 키 보호
-
는 고유한 데이터 키로 각 메시지를 AWS Encryption SDK 암호화합니다. 그러면 지정한 래핑 키에서 데이터 키가 암호화됩니다. 반환된 암호화된 메시지에 암호화된 데이터와 함께 암호화된 데이터 키를 저장합니다.
래핑 키를 지정하려면 키링 또는 마스터 키 공급자를 사용합니다.
- 여러 개의 래핑 키로 동일한 데이터 암호화
-
여러 개의 래핑 키로 데이터 키를 암호화할 수 있습니다. 사용자마다 다른 래핑 키를 제공하거나, 유형이나 위치가 다른 래핑 키를 제공할 수 있습니다. 각 래핑 키는 동일한 데이터 키를 암호화합니다. 는 암호화된 모든 데이터 키를 암호화된 데이터와 함께 암호화된 메시지에 AWS Encryption SDK 저장합니다.
데이터를 복호화하려면 암호화된 데이터 키 중 하나를 복호화할 수 있는 래핑 키를 제공해야 합니다.
- 여러 알고리즘의 강점 결합
-
데이터를 암호화하기 위해 기본적으로 는 GCM 대칭 암호화, 키 파생 함수 (HKDF) 및 서명을 포함하는 정교한 알고리즘 제품군을 AWS Encryption SDK 사용합니다. AES 데이터 키를 암호화하려면 래핑 키에 적합한 대칭 또는 비대칭 암호화 알고리즘을 지정할 수 있습니다.
일반적으로 대칭 키 암호화 알고리즘이 비대칭 또는 퍼블릭 키 암호화보다 빠르고 더 작은 사이퍼텍스트를 생성합니다. 그러나 퍼블릭 키 알고리즘은 고유한 역할 구분을 제공하고 키 관리가 더 쉽습니다. 각각의 장점을 결합하려면 대칭 키 암호화로 데이터를 암호화한 다음 퍼블릭 키 암호화로 데이터 키를 암호화하면 됩니다.
데이터 키
데이터 키는 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 Key Management Service (AWS KMS) 대칭 AWS KMS keys(다중 지역 키 포함), 원시 AES - GCM (고급 암호화 표준/Galois 카운터 모드) KMS 키, 원시 키 등 일반적으로 사용되는 여러 래핑 키를 AWS Encryption SDK 지원합니다. RSA 또한 자체 래핑 키를 확장하거나 구현할 수도 있습니다.
봉투 암호화를 사용할 때는 래핑 키를 무단 액세스로부터 보호해야 합니다. 다음 중 한 가지 방법으로 이를 수행할 수 있습니다.
-
AWS Key Management Service (AWS KMS)
와 같이 이러한 용도로 설계된 웹 서비스를 사용합니다. -
에서 제공하는 것과 같은 하드웨어 보안 모듈 (HSM)
을 사용하십시오. AWS CloudHSM -
다른 키 관리 도구 및 서비스를 사용합니다.
키 관리 시스템이 없는 경우 사용하는 것이 좋습니다 AWS KMS. 와 AWS Encryption SDK 통합되어 래핑 키를 보호하고 사용할 수 AWS KMS 있도록 도와줍니다. 그러나 AWS 서비스는 필요하지 AWS Encryption SDK AWS 않습니다.
키링 및 마스터 키 공급자
암호화와 암호 해독에 사용하는 래핑 키를 지정하려면 키링 (C, C#/) 을 사용합니다. NET, 및 JavaScript) 또는 마스터 키 제공자 (자바, Python,CLI) 에서 AWS Encryption SDK 제공하는 키링 및 마스터 키 제공자를 사용하거나 직접 구현을 설계할 수 있습니다. AWS Encryption SDK 는 언어 제약 조건에 따라 서로 호환되는 키링과 마스터 키 공급자를 제공합니다. 세부 정보는 키링 호환성을 참조하세요.
키링은 데이터 키를 생성, 암호화, 복호화합니다. 키링을 정의할 때 데이터 키를 암호화하는 래핑 키를 지정할 수 있습니다. 대부분의 키링은 하나 이상의 래핑 키를 지정하거나, 래핑 키를 제공하고 보호하는 서비스를 지정합니다. 래핑 키가 없는 키링을 정의하거나 추가 구성 옵션을 사용하여 더 복잡한 키링을 정의할 수도 있습니다. 에서 AWS Encryption SDK 정의하는 키링을 선택하고 사용하는 데 도움이 필요하면 을 참조하십시오. 키링 사용 키링은 C, C# /에서 지원됩니다. NET, JavaScript, 및 버전 3. 의 x AWS Encryption SDK for Java.
마스터 키 공급자는 키링의 대안입니다. 마스터 키 공급자는 지정한 래핑 키(또는 마스터 키)를 반환합니다. 각 마스터 키는 하나의 마스터 키 공급자와 연결되지만 마스터 키 공급자는 일반적으로 여러 마스터 키를 제공합니다. 마스터 키 제공자는 Java, Python 및 AWS 암호화에서 지원됩니다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 명령줄 인터페이스 (CLI) 에서 decrypt 명령에 암호화 컨텍스트를 제공하면 는 암호화된 메시지의 암호화 컨텍스트에 값이 CLI 있는지 확인한 다음 일반 텍스트 데이터를 반환합니다.
-
다른 프로그래밍 언어 구현의 경우 복호화 응답에 암호화 컨텍스트와 일반 텍스트 데이터가 포함됩니다. 애플리케이션의 복호화 함수는 일반 텍스트 데이터를 반환하기 전에 항상 복호화 응답의 암호화 컨텍스트에 암호화 요청(또는 하위 집합)의 암호화 컨텍스트가 포함되어 있는지 확인해야 합니다.
참고
버전 4를 사용합니다. 형태의 x. AWS Encryption SDK NET및 버전 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) 을 기본 알고리즘으로 사용하고 이를 다른 알고리즘 및 값과 결합합니다.
는 권장 알고리즘 제품군을 모든 암호화 작업의 기본값으로 AWS Encryption SDK 설정합니다. 기본값은 표준과 모범 사례가 개선됨에 따라 변경될 수 있습니다. 데이터 암호화 요청이나 암호화 자료 관리자 (CMM) 를 생성할 때 대체 알고리즘 세트를 지정할 수 있지만 상황에 따라 대안이 필요한 경우가 아니라면 기본값을 사용하는 것이 가장 좋습니다. 현재 기본값은 AES GCM HMAC -기반 extract-and-expand 키 파생 함수 (HKDF
애플리케이션에 고성능이 필요하고 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자의 신뢰도가 동일하다면 디지털 서명이 없는 알고리즘 제품군을 지정하는 것을 고려할 수 있습니다. 하지만 키 커밋과 키 유도 함수가 포함된 알고리즘 제품군을 사용하는 것을 적극 권장합니다. 이러한 기능이 없는 알고리즘 제품군은 이하 버전과의 호환성을 위해서만 지원됩니다.
암호화 구성 요소 관리자
암호화 자료 관리자 (CMM) 는 데이터를 암호화하고 해독하는 데 사용되는 암호화 자료를 조합합니다. 암호화 구성 요소에는 일반 텍스트 및 암호화된 데이터 키와 선택 사항인 메시지 서명 키가 포함됩니다. 절대 직접 상호작용하지 않습니다. CMM 암호화 및 복호화 메서드가 이를 대신 처리합니다.
기본 CMM 또는 에서 CMM AWS Encryption SDK 제공하는 캐싱을 사용하거나 사용자 정의를 CMM 작성할 수 있습니다. a를 지정할 수도 CMM 있지만 필수는 아닙니다. 키링 또는 마스터 키 제공자를 지정하면 에서 자동으로 기본값을 AWS Encryption SDK CMM 생성합니다. 기본값은 지정한 키링 또는 마스터 키 제공자로부터 암호화 또는 복호화 자료를 CMM 가져옵니다. 여기에는 AWS Key Management Service(AWS KMS)와 같은 암호화 서비스에 대한 호출이 포함될 수 있습니다.
는 AWS Encryption SDK 키링과 (또는 마스터 키 제공자) 간의 연락 담당자 CMM 역할을 하기 때문에 정책 적용 및 캐싱 지원과 같은 사용자 지정 및 확장을 위한 이상적인 지점입니다. 는 데이터 키 캐싱을 지원하는 캐싱을 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 키를 래핑 키로 사용하면 암호 해독 권한이 있는 사용자가 Encrypt를 호출하지 않고도 암호화된 암호문을 만들 수 있습니다. KMS KMS
이 문제를 방지하기 위해 에서는 암호화된 메시지 끝에 타원 곡선 디지털 서명 알고리즘 (ECDSA) 서명을 추가할 수 있도록 AWS Encryption SDK 지원합니다. 서명 알고리즘 제품군을 사용하는 경우 는 암호화된 각 메시지에 대해 임시 개인 키와 공개 키 쌍을 AWS Encryption SDK 생성합니다. 는 데이터 키의 암호화 컨텍스트에 공개 키를 AWS Encryption SDK 저장하고 개인 키를 삭제하므로 아무도 공개 키로 확인하는 다른 서명을 만들 수 없습니다. 알고리즘은 퍼블릭 키를 암호화된 데이터 키에 메시지 헤더의 추가 인증 데이터로 바인딩하므로 메시지 복호화만 할 수 있는 사용자는 퍼블릭 키를 변경할 수 없습니다.
서명 확인은 복호화 시 상당한 성능 비용을 추가시킵니다. 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자의 신뢰도가 같으면 서명이 포함되지 않은 알고리즘 제품군을 사용하는 것이 좋습니다.