AWS 데이터베이스 암호화 SDK 개념 - AWS 데이터베이스 암호화 SDK

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

AWS 데이터베이스 암호화 SDK 개념

클라이언트 측 암호화 라이브러리는 데이터베이스 암호화 SDK로 이름이 변경되었습니다. AWS 이 개발자 안내서는 여전히 DynamoDB Encryption Client에 대한 정보를 제공합니다.

이 항목에서는 데이터베이스 암호화 SDK에서 사용되는 개념과 용어에 대해 설명합니다. AWS

AWS 데이터베이스 암호화 SDK의 구성 요소가 상호 작용하는 방식을 알아보려면 을 참조하십시오. AWS 데이터베이스 암호화 SDK 작동 방식

AWS 데이터베이스 암호화 SDK에 대해 자세히 알아보려면 다음 항목을 참조하십시오.

  • AWS 데이터베이스 암호화 SDK가 봉투 암호화를 사용하여 데이터를 보호하는 방법을 알아보세요.

  • 엔빌로프 암호화의 구성 요소인 레코드를 보호하는 데이터 키와 데이터 키를 보호하는 래핑 키에 대해 알아봅니다.

  • 사용하는 래핑 키를 결정하는 키링에 대해 알아봅니다.

  • 암호화 프로세스에 무결성을 더하는 암호화 컨텍스트에 대해 알아봅니다.

  • 암호화 메서드가 레코드에 추가하는 자료 설명에 대해 알아봅니다.

  • AWS Database Encryption SDK에 암호화하고 서명할 필드를 알려주는 암호화 작업에 대해 알아봅니다.

봉투 암호화

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

데이터 키 보호

AWS 데이터베이스 암호화 SDK는 고유한 데이터 키로 각 필드를 암호화합니다. 그러면 지정한 래핑 키에서 각 데이터 키가 암호화됩니다. 암호화된 데이터 키를 자료 설명에 저장합니다.

래핑 키를 지정하려면 키링을 사용합니다.

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

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

데이터를 복호화하려면 암호화된 데이터 키를 복호화할 수 있는 래핑 키를 적어도 한 개 제공해야 합니다.

여러 알고리즘의 강점 결합

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

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

가능하면 키링 중 하나를 사용하는 것이 좋습니다. AWS KMS AWS KMS 키링을 사용할 때는 비대칭 AWS KMS key RSA를 래핑 키로 지정하여 여러 알고리즘의 장점을 결합하도록 선택할 수 있습니다. 대칭 암호화 KMS 키를 사용할 수도 있습니다.

데이터 키

데이터 키는 AWS 데이터베이스 암호화 SDK가 암호화 작업에서 표시된 레코드의 필드를 암호화하는 데 사용하는 암호화 키입니다. ENCRYPT_AND_SIGN 각 데이터 키는 암호화 키 요구 사항을 준수하는 바이트 배열입니다. AWS 데이터베이스 암호화 SDK는 고유한 데이터 키를 사용하여 각 속성을 암호화합니다.

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

AWS 데이터베이스 암호화 SDK는 데이터 키를 보호하기 위해 래핑 키라고 하는 하나 이상의 키 암호화 키로 데이터 키를 암호화합니다. AWS Database Encryption SDK는 일반 텍스트 데이터 키를 사용하여 데이터를 암호화한 후 가능한 한 빨리 메모리에서 데이터를 제거합니다. 그런 다음 암호화된 데이터 키를 자료 설명에 저장합니다. 자세한 내용은 AWS 데이터베이스 암호화 SDK 작동 방식단원을 참조하세요.

작은 정보

AWS 데이터베이스 암호화 SDK에서는 데이터 키와 데이터 암호화 키를 구분합니다. 지원되는 모든 알고리즘 제품군키 파생 함수를 사용하는 것이 가장 좋습니다. 키 파생 함수는 데이터 키를 입력으로 사용하고 레코드를 암호화하는 데 실제로 사용되는 데이터 암호화 키를 반환합니다. 이러한 이유로 데이터가 데이터 키에 "의해" 암호화되는 것이 아니라 데이터 키"에서" 암호화된다고 말하는 경우가 많습니다.

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

래핑 키

래핑 키는 AWS Database Encryption SDK가 레코드를 암호화하는 데이터 키를 암호화하는 데 사용하는 키-암호화 키입니다. 각각의 데이터 키는 한 개 또는 여러 개의 래핑 키로 암호화될 수 있습니다. 키링을 구성할 때 데이터를 보호하기 위해 사용할 래핑 키를 결정합니다.

여러 개의 래핑 키로 데이터 키 하나를 암호화

AWS 데이터베이스 암호화 SDK는 () 대칭 암호화 KMS 키 AWS Key Management Service(다중 지역 AWS KMS 키 포함AWS KMS) 및 비대칭 RSA KMS 키, 원시 AES-GCM (고급 암호화 표준/갈로이스 카운터 모드) 키, 원시 RSA 키 등 일반적으로 사용되는 여러 래핑 키를 지원합니다. 가능하면 KMS 키를 사용하는 것이 좋습니다. 사용해야 하는 래핑 키를 결정하려면 래핑 키 선택을 참조하세요.

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

키 관리 시스템이 없는 경우 사용하는 것이 좋습니다. AWS KMS AWS 데이터베이스 암호화 SDK는 와 통합되어 래핑 키를 보호하고 사용할 수 AWS KMS 있도록 도와줍니다.

키링

암호화와 복호화에 사용하는 래핑 키를 지정하려면 키링을 사용합니다. AWS 데이터베이스 암호화 SDK에서 제공하는 키링을 사용하거나 직접 구현을 설계할 수 있습니다.

키링은 데이터 키를 생성, 암호화, 복호화합니다. 또한 서명의 해시 기반 메시지 인증 코드(HMAC)를 계산하는 데 사용되는 MAC 키도 생성합니다. 키링을 정의할 때 데이터 키를 암호화하는 래핑 키를 지정할 수 있습니다. 대부분의 키링은 하나 이상의 래핑 키를 지정하거나, 래핑 키를 제공하고 보호하는 서비스를 지정합니다. 암호화할 때 AWS 데이터베이스 암호화 SDK는 키링에 지정된 모든 래핑 키를 사용하여 데이터 키를 암호화합니다. AWS 데이터베이스 암호화 SDK에서 정의하는 키링을 선택하고 사용하는 방법에 대한 도움말은 키링 사용을 참조하십시오.

암호화 작업

암호화 작업은 레코드의 각 필드에 수행할 작업을 암호화기에 지시합니다.

암호화 작업 값은 다음 중 하나일 수 있습니다.

중요한 데이터를 저장할 수 있는 필드의 경우 암호화 및 서명을 사용합니다. 기본 키 값 (예: DynamoDB 테이블의 파티션 키 및 정렬 키) 의 경우 암호화 컨텍스트에서 서명 전용 또는 서명 및 포함을 사용하십시오. 암호화 컨텍스트 속성에 서명 및 포함을 지정하는 경우 파티션 및 정렬 속성도 암호화 컨텍스트의 서명 및 포함이어야 합니다. 자료 설명에는 암호화 작업을 지정할 필요가 없습니다. AWS 데이터베이스 암호화 SDK는 자료 설명이 저장된 필드에 자동으로 서명합니다.

암호화 작업을 신중하게 선택합니다. 확실하지 않은 경우 Encrypt and sign(암호화 및 서명)을 사용합니다. AWS 데이터베이스 암호화 SDK를 사용하여 레코드를 보호한 후에는 기존 ENCRYPT_AND_SIGN 또는 필드를 변경하거나 기존 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 필드에 할당된 암호화 작업을 변경할 수 없습니다. SIGN_ONLY DO_NOTHING DO_NOTHING 하지만 여전히 데이터 모델에 다른 변경 사항을 적용할 수 있습니다. 예를 들어 단일 배포에서 암호화된 필드를 추가하거나 제거할 수 있습니다.

자료 설명

자료 설명은 암호화된 레코드의 헤더 역할을 합니다. AWS Database Encryption SDK로 필드를 암호화하고 서명하면 암호기는 암호화 자료를 조합할 때 자료 설명을 기록하고 암호기가 레코드에 추가하는 새 필드 (aws_dbe_head) 에 자료 설명을 저장합니다.

자료 설명은 데이터 키의 암호화된 사본과 기타 정보(예: 암호화 알고리즘, 암호화 컨텍스트, 암호화 및 서명 지침)를 포함하는 휴대용 형식의 데이터 구조입니다. 암호화 도구 레코드는 암호화 및 서명을 위해 암호화 자료를 결합할 때 자료 설명을 기록합니다. 나중에 필드를 확인하고 복호화하기 위해 암호화 자료를 조합해야 하는 경우 자료 설명을 지침으로 사용합니다.

암호화된 데이터 키를 암호화된 필드와 함께 저장하면 복호화 작업이 간소화되고 암호화된 데이터와 별도로 암호화된 데이터 키를 저장하고 관리할 필요가 없습니다.

자료 설명에 대한 기술 정보는 자료 설명 형식을 참조하세요.

암호화 컨텍스트

암호화 작업의 보안을 개선하기 위해 AWS Database Encryption SDK는 모든 레코드 암호화 및 서명 요청에 암호화 컨텍스트를 포함합니다.

암호화 컨텍스트는 비밀이 아닌 임의의 추가 인증 데이터를 포함하는 키-값 페어 세트입니다. AWS 데이터베이스 암호화 SDK에는 데이터베이스의 논리적 이름과 암호화 컨텍스트의 기본 키 값 (예: DynamoDB 테이블의 파티션 키 및 정렬 키) 이 포함됩니다. 필드를 암호화하고 서명하면 암호화 컨텍스트가 암호화된 레코드에 암호화 방식으로 바인딩되므로 필드를 복호화하는 데 동일한 암호화 컨텍스트가 필요합니다.

AWS KMS 키링을 사용하는 경우 AWS 데이터베이스 암호화 SDK는 암호화 컨텍스트를 사용하여 키링이 호출할 때 추가 인증 데이터 (AAD) 를 제공합니다. AWS KMS

기본 알고리즘 제품군을 사용할 때마다 암호화 자료 관리자(CMM)은 예약된 이름 aws-crypto-public-key과 퍼블릭 확인 키를 나타내는 값으로 구성된 암호화 컨텍스트에 이름-값 페어를 추가합니다. 퍼블릭 확인 키는 자료 설명에 저장됩니다.

암호화 구성 요소 관리자

암호화 자료 관리자(CMM)는 데이터를 암호화, 복호화 및 서명하는 데 사용되는 암호화 자료를 수집합니다. 기본 알고리즘 제품군을 사용할 때마다 암호화 자료에는 일반 텍스트 및 암호화된 데이터 키, 대칭 서명 키, 비대칭 서명 키가 포함됩니다. 사용자는 CMM과 직접 상호 작용하지는 않습니다. 암호화 및 복호화 메서드가 이를 대신 처리합니다.

CMM은 AWS 데이터베이스 암호화 SDK와 키링 간의 연결 역할을 하므로 정책 적용 지원과 같은 사용자 지정 및 확장을 위한 이상적인 지점입니다. CMM을 명시적으로 지정할 수 있지만 필수는 아닙니다. 키링을 지정하면 AWS Database Encryption SDK가 기본 CMM을 생성합니다. 기본 CMM은 사용자가 지정한 키링으로부터 암호화 또는 복호화 자료를 가져옵니다. 여기에는 AWS Key Management Service(AWS KMS)와 같은 암호화 서비스에 대한 호출이 포함될 수 있습니다.

대칭 및 비대칭 암호화

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

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

AWS 데이터베이스 암호화 SDK는 봉투 암호화를 사용합니다. 대칭 데이터 키로 데이터를 암호화합니다. 하나 이상의 대칭 또는 비대칭 래핑 키를 사용하여 대칭 데이터 키를 암호화합니다. 데이터 키의 암호화된 사본을 하나 이상 포함하는 자료 설명을 레코드에 추가합니다.

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

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

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

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

키 커밋

AWS 데이터베이스 암호화 SDK는 각 암호문을 단일 일반 텍스트로만 해독할 수 있도록 하는 보안 속성인 키 커밋 (견고성이라고도 함) 을 지원합니다. 이를 위해 키 커밋은 레코드를 암호화한 데이터 키만 복호화에 사용되도록 보장합니다. AWS Database Encryption SDK에는 모든 암호화 및 복호화 작업에 대한 키 커밋이 포함되어 있습니다.

대부분의 최신 대칭 암호 (AES 포함) 는 데이터베이스 암호화 SDK가 레코드에 표시된 각 일반 텍스트 필드를 암호화하는 데 사용하는 고유 데이터 키처럼 단일 비밀 키로 일반 텍스트를 암호화합니다. AWS ENCRYPT_AND_SIGN 동일한 데이터 키로 이 레코드를 복호화하면 원본과 동일한 일반 텍스트가 반환됩니다. 다른 키를 사용한 복호화는 일반적으로 실패합니다. 어렵기는 하지만 두 개의 서로 다른 키로 사이퍼텍스트를 복호화하는 것은 기술적으로 가능합니다. 드문 경우지만, 사이퍼텍스트를 부분적으로 복호화할 수 있는 다르지만 여전히 식별할 수 있는 일반 텍스트로 복호화할 수 있는 키를 찾는 것이 가능합니다.

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

이 시나리오를 방지하기 위해 AWS 데이터베이스 암호화 SDK에는 암호화 및 복호화 시 키 커밋이 포함됩니다. 암호화 메서드는 사이퍼텍스트를 생성한 고유 데이터 키를 키 커밋, 즉 데이터 키의 파생물을 사용하여 자료 설명에 대해 계산된 해시 기반 메시지 인증 코드(HMAC)에 암호화 방식으로 바인딩합니다. 그런 다음 자료 설명에 키 커밋을 저장합니다. 키 커밋으로 레코드를 해독할 때 AWS 데이터베이스 암호화 SDK는 데이터 키가 암호화된 레코드의 유일한 키인지 확인합니다. 데이터 키 확인에 실패하면 복호화 작업이 실패합니다.

디지털 서명

시스템 간에 전송되는 데이터의 신뢰성을 보장하기 위해 레코드에 디지털 서명을 적용할 수 있습니다. 디지털 서명은 항상 비대칭입니다. 프라이빗 키를 사용하여 서명을 만들고 이를 원본 레코드에 추가합니다. 수신자는 퍼블릭 키를 사용하여 서명 후 레코드가 수정되지 않았는지 확인합니다. 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자의 신뢰도가 동일하지 않은 경우 디지털 서명을 사용해야 합니다.

AWS Database Encryption SDK는 인증된 암호화 알고리즘인 AES-GCM을 사용하여 데이터를 암호화하지만 AES-GCM은 대칭 키를 사용하기 때문에 암호문을 해독하는 데 사용되는 데이터 키를 해독할 수 있는 사람은 누구나 암호화된 새 암호문을 수동으로 생성하여 잠재적인 보안 문제가 발생할 수 있습니다.

이 문제를 방지하기 위해 기본 알고리즘 제품군은 타원 곡선 디지털 서명 알고리즘(ECDSA) 서명을 암호화된 레코드에 추가합니다. 기본 알고리즘 제품군은 인증된 암호화 알고리즘인 AES-GCM을 사용하여 ENCRYPT_AND_SIGN로 표시된 레코드의 필드를 암호화합니다. 그런 다음,, 로 표시된 ENCRYPT_AND_SIGN 레코드의 필드에 대해 해시 기반 메시지 인증 코드 (HMAC) 와 비대칭 ECDSA 서명을 모두 계산합니다SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. SIGN_ONLY 복호화 프로세스는 서명을 사용하여 인증된 사용자가 레코드를 암호화했는지 확인합니다.

기본 알고리즘 세트를 사용하는 경우 AWS Database Encryption SDK는 암호화된 각 레코드에 대해 임시 프라이빗 키와 퍼블릭 키 쌍을 생성합니다. AWS Database Encryption SDK는 공개 키를 자료 설명에 저장하고 개인 키를 삭제하므로 누구도 공개 키로 확인하는 다른 서명을 생성할 수 없습니다. 알고리즘은 퍼블릭 키를 자료 설명의 추가 인증 데이터로 암호화된 데이터 키에 바인딩하므로 레코드 복호화만 가능한 사용자는 퍼블릭 키를 변경할 수 없습니다.

AWS 데이터베이스 암호화 SDK에는 항상 HMAC 검증이 포함됩니다. ECDSA 디지털 서명은 기본적으로 활성화되지만 필수는 아닙니다. 데이터를 암호화하는 사용자와 데이터를 복호화하는 사용자가 동일하게 신뢰되는 경우 디지털 서명이 포함되지 않은 알고리즘 제품군을 사용하여 성능을 향상시키는 것을 고려할 수 있습니다. 대체 알고리즘 제품군 선택에 대한 자세한 내용은 알고리즘 제품군 선택을 참조하세요.