

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

# AWS Database Encryption SDK란 무엇입니까?
<a name="what-is-database-encryption-sdk"></a>


****  

|  | 
| --- |
| 클라이언트 측 암호화 라이브러리의 이름이 AWS Database Encryption SDK로 변경되었습니다. 이 개발자 안내서는 여전히 [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md)에 대한 정보를 제공합니다. | 

 AWS Database Encryption SDK는 데이터베이스 설계에 클라이언트 측 암호화를 포함할 수 있는 소프트웨어 라이브러리 세트입니다. AWS Database Encryption SDK는 레코드 수준 암호화 솔루션을 제공합니다. 암호화할 필드와 데이터의 신뢰성을 보장하는 서명에 포함할 필드를 지정합니다. 전송 중 및 유휴 상태의 중요 데이터를 암호화하면 일반 텍스트 데이터를 AWS을 포함한 제3자가 사용할 수 없게 하는 데 도움이 됩니다. AWS Database Encryption SDK는 Apache 2.0 라이선스에 따라 무료 제공됩니다.

이 개발자 안내서에서는 [아키텍처 소개](concepts.md), [데이터 보호 방법에](how-it-works.md) 대한 세부 정보, [서버 측 암호화](client-server-side.md)와 데이터의 차이점, 시작하는 데 도움이 되는 [애플리케이션의 중요 구성 요소 선택](configure.md) 지침 등 AWS Database Encryption SDK의 개념적 개요를 제공합니다.

 AWS Database Encryption SDK는 *속성* 수준 암호화를 통해 Amazon DynamoDB를 지원합니다.

 AWS Database Encryption SDK에는 다음과 같은 이점이 있습니다.

**데이터베이스 애플리케이션을 위해 특별히 설계됨**  
 AWS Database Encryption SDK를 사용하기 위해 암호화 전문가가 될 필요는 없습니다. 구현에는 기존 애플리케이션과 함께 작동하도록 설계된 헬퍼 방법이 포함됩니다.  
필수 구성 요소를 생성 및 구성한 후, 암호화 클라이언트는 사용자가 데이터베이스에 레코드를 추가할 때 레코드를 투명하게 암호화 및 서명하고, 검색할 때 이를 확인하고 복호화합니다.

**보안 암호화 및 서명 포함**  
 AWS Database Encryption SDK에는 고유한 데이터 암호화 키를 사용하여 각 레코드의 필드 값을 암호화한 다음 레코드에 서명하여 필드를 추가 또는 삭제하거나 암호화된 값을 교체하는 등 무단 변경으로부터 보호하는 보안 구현이 포함되어 있습니다.

**모든 소스의 암호화 자료 사용**  
 AWS Database Encryption SDK는 [키링을](concepts.md#keyring-concept) 사용하여 레코드를 보호하는 고유한 데이터 암호화 키를 생성, 암호화 및 해독합니다. 키링은 해당 데이터 키를 암호화하는 [래핑 키](concepts.md#wrapping-key)를 결정합니다.  
[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) 또는 [AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/)와 같은 암호화 서비스를 포함하여 모든 소스의 래핑 키를 사용할 수 있습니다. AWS Database Encryption SDK에는 AWS 계정 또는 서비스가 AWS 필요하지 않습니다.

**암호화 자료 캐싱 지원**  
[AWS KMS 계층적 키링](use-hierarchical-keyring.md)은 Amazon DynamoDB 테이블에 유지되는 AWS KMS 보호된 *브랜치 키를* 사용한 다음 암호화 및 복호화 작업에 사용되는 브랜치 키 자료를 로컬로 캐싱하여 AWS KMS 호출 수를 줄이는 암호화 자료 캐싱 솔루션입니다. 레코드를 암호화하거나 복호화할 AWS KMS 때마다를 호출하지 않고도 대칭 암호화 KMS 키로 암호화 자료를 보호할 수 있습니다. AWS KMS 계층적 키링은 호출을 최소화해야 하는 애플리케이션에 적합합니다 AWS KMS.

**검색 가능한 암호화**  
전체 데이터베이스를 복호화하지 않고도 암호화된 레코드를 검색할 수 있는 데이터베이스를 설계할 수 있습니다. 위협 모델 및 쿼리 요구 사항에 따라 [검색 가능한 암호화](searchable-encryption.md)를 사용하여 암호화된 데이터베이스에 대해 정확한 일치 검색 또는 보다 사용자 정의된 복잡한 쿼리를 수행할 수 있습니다.

**멀티테넌트 데이터베이스 스키마 지원**  
 AWS Database Encryption SDK를 사용하면 각 테넌트를 고유한 암호화 자료로 격리하여 공유 스키마를 사용하여 데이터베이스에 저장된 데이터를 보호할 수 있습니다. 데이터베이스 내에서 암호화 작업을 수행하는 사용자가 여러 명 있는 경우 AWS KMS 키링 중 하나를 사용하여 각 사용자에게 암호화 작업에 사용할 고유한 키를 제공합니다. 자세한 내용은 [멀티테넌트 데이터베이스 작업](configure.md#config-multitenant-databases) 단원을 참조하십시오.

**원활한 스키마 업데이트 지원**  
 AWS Database Encryption SDK를 구성할 때 암호화 및 서명할 필드, 서명할 필드(암호화하지 않음), 무시할 필드를 클라이언트에 알려주는 암호화 [작업을](concepts.md#crypt-actions) 제공합니다. AWS Database Encryption SDK를 사용하여 레코드를 보호한 후에도 [데이터 모델을 변경](ddb-update-data-model.md)할 수 있습니다. 단일 배포에서 암호화된 필드 추가 또는 제거와 같은 암호화 작업을 업데이트할 수 있습니다.

## 오픈 소스 리포지토리에서 개발
<a name="dbesdk-repos"></a>

 AWS Database Encryption SDK는 GitHub의 오픈 소스 리포지토리에서 개발됩니다. 이러한 리포지토리를 사용하여 코드를 보고, 문제를 읽고 제출하고, 구현과 관련된 정보를 찾을 수 있습니다.

**DynamoDB용 AWS Database Encryption SDK**
+ GitHub의 [aws-database-encryption-sdk-dynamodb](https://github.com/aws/aws-database-encryption-sdk-dynamodb/) 리포지토리는 Java, .NET 및 Rust에서 DynamoDB용 AWS Database Encryption SDK의 최신 버전을 지원합니다.

   AWS Database Encryption SDK for DynamoDB는 사양을 작성하는 확인 인식 언어인 [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md)의 제품이며, 이를 구현할 코드와 이를 테스트하기 위한 증명입니다. 그 결과 기능적 정확성을 보장하는 프레임워크에서 AWS Database Encryption SDK for DynamoDB의 기능을 구현하는 라이브러리가 탄생했습니다.

## 지원 및 유지 관리
<a name="support"></a>

 AWS Database Encryption SDK는 버전 관리 및 수명 주기 단계를 포함하여 AWS SDK 및 도구가 사용하는 것과 동일한 [유지 관리 정책을](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) 사용합니다. 데이터베이스 구현을 위해 사용 가능한 최신 버전의 AWS Database Encryption SDK를 사용하고 새 버전이 출시되면 업그레이드하는 것이 모범 사례입니다.

자세한 내용은 SDK [AWS 및 도구 참조 안내서의 SDKs 및 도구 유지 관리 정책을](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) 참조 AWS SDKs.

## 피드백 보내기
<a name="feedback"></a>

우리는 여러분의 의견을 환영합니다. 질문이나 의견이 있거나 보고해야 할 문제가 있는 경우 다음 리소스를 사용하세요.

 AWS Database Encryption SDK에서 잠재적 보안 취약성을 발견한 경우 [AWS 보안 팀에 알리](https://aws.amazon.com/security/vulnerability-reporting/)세요. 공개적으로 GitHub 문제를 작성하지 마세요.

이 설명서에 대한 피드백을 제공하려면 이 페이지의 피드백 링크를 사용하십시오.

# AWS Database Encryption SDK 개념
<a name="concepts"></a>


****  

|  | 
| --- |
| 클라이언트 측 암호화 라이브러리의 이름이 AWS Database Encryption SDK로 변경되었습니다. 이 개발자 안내서는 여전히 [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md)에 대한 정보를 제공합니다. | 

이 주제에서는 AWS Database Encryption SDK에 사용되는 개념과 용어를 설명합니다.

 AWS Database Encryption SDK의 구성 요소가 상호 작용하는 방법을 알아보려면 섹션을 참조하세요[AWS Database Encryption SDK 작동 방식](how-it-works.md).

 AWS Database Encryption SDK에 대해 자세히 알아보려면 다음 주제를 참조하세요.
+  AWS Database Encryption SDK가 [봉투 암호화](#envelope-encryption)를 사용하여 데이터를 보호하는 방법을 알아봅니다.
+ 엔빌로프 암호화의 구성 요소인 레코드를 보호하는 [데이터 키](#data-key)와 데이터 키를 보호하는 [래핑 키](#wrapping-key)에 대해 알아봅니다.
+ 사용하는 래핑 키를 결정하는 [키링](#keyring-concept)에 대해 알아봅니다.
+ 암호화 프로세스에 무결성을 더하는 [암호화 컨텍스트](#encryption-context)에 대해 알아봅니다.
+ 암호화 메서드가 레코드에 추가하는 [자료 설명](#material-description)에 대해 알아봅니다.
+  AWS Database Encryption SDK에 암호화하고 서명할 필드를 알려주는 [암호화 작업](#crypt-actions)에 대해 알아봅니다.

**Topics**
+ [봉투 암호화](#envelope-encryption)
+ [데이터 키](#data-key)
+ [래핑 키](#wrapping-key)
+ [키링](#keyring-concept)
+ [암호화 작업](#crypt-actions)
+ [자료 설명](#material-description)
+ [암호화 컨텍스트](#encryption-context)
+ [암호화 구성 요소 관리자](#crypt-materials-manager)
+ [대칭 및 비대칭 암호화](#symmetric-key-encryption)
+ [키 커밋](#key-commitment)
+ [디지털 서명](#digital-sigs)

## 봉투 암호화
<a name="envelope-encryption"></a>

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

**데이터 키 보호**  
 AWS Database Encryption SDK는 고유한 데이터 키로 각 필드를 암호화합니다. 그러면 지정한 래핑 키에서 각 데이터 키가 암호화됩니다. 암호화된 데이터 키를 [자료 설명](#material-description)에 저장합니다.  
래핑 키를 지정하려면 [키링](#keyring-concept)을 사용합니다.  

![\[AWS Database Encryption SDK를 사용한 봉투 암호화\]](http://docs.aws.amazon.com/ko_kr/database-encryption-sdk/latest/devguide/images/dbesdk-envelope.png)


**여러 개의 래핑 키로 동일한 데이터 암호화**  
여러 개의 래핑 키로 데이터 키를 암호화할 수 있습니다. 사용자마다 다른 래핑 키를 제공하거나, 유형이나 위치가 다른 래핑 키를 제공할 수 있습니다. 각 래핑 키는 동일한 데이터 키를 암호화합니다. AWS Database Encryption SDK는 [자료 설명](#material-description)의 암호화된 필드와 함께 모든 암호화된 데이터 키를 저장합니다.  
데이터를 복호화하려면 암호화된 데이터 키를 복호화할 수 있는 래핑 키를 적어도 한 개 제공해야 합니다.

**여러 알고리즘의 강점 결합**  
기본적으로 AWS Database Encryption SDK는 AES-GCM 대칭 암호화, HMAC 기반 키 유도 함수(HKDF) 및 [ECDSA 서명](#digital-sigs)이 포함된 [알고리즘 제품군](supported-algorithms.md)을 사용합니다. 데이터 키를 암호화하려면 래핑 키에 적합한 [대칭 또는 비대칭 암호화 알고리즘](#symmetric-key-encryption)을 지정할 수 있습니다.  
일반적으로 대칭 키 암호화 알고리즘이 비대칭 또는 *퍼블릭 키 암호화*보다 빠르고 더 작은 사이퍼텍스트를 생성합니다. 그러나 퍼블릭 키 알고리즘은 고유한 역할 구분을 제공합니다. 각각의 장점을 결합하려면 퍼블릭 키 암호화를 사용하여 데이터 키를 암호화할 수 있습니다.  
가능하면 AWS KMS 키링 중 하나를 사용하는 것이 좋습니다. [AWS KMS 키링](use-kms-keyring.md)을 사용할 때 비대칭 RSA를 래핑 키 AWS KMS key 로 지정하여 여러 알고리즘의 강도를 결합하도록 선택할 수 있습니다. 대칭 암호화 KMS 키를 사용할 수도 있습니다.

## 데이터 키
<a name="data-key"></a>

*데이터 키*는 AWS Database Encryption SDK가 암호화 [작업에](#crypt-actions) 표시된 레코드의 필드를 암호화하는 데 사용하는 `ENCRYPT_AND_SIGN` 암호화 키입니다. 각 데이터 키는 암호화 키 요구 사항을 준수하는 바이트 배열입니다. AWS Database Encryption SDK는 고유한 데이터 키를 사용하여 각 속성을 암호화합니다.

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

데이터 키를 보호하기 위해 AWS Database Encryption SDK는 [래핑](#wrapping-key) 키라고 하는 하나 이상의 *키 암호화* 키로 암호화합니다. AWS Database Encryption SDK는 일반 텍스트 데이터 키를 사용하여 데이터를 암호화한 후 가능한 한 빨리 메모리에서 제거합니다. 그런 다음 암호화된 데이터 키를 [자료 설명](#material-description)에 저장합니다. 자세한 내용은 [AWS Database Encryption SDK 작동 방식](how-it-works.md)을 참조하세요.

**작은 정보**  
 AWS Database Encryption SDK에서는 *데이터 키*와 *데이터 암호화 키를* 구분합니다. 지원되는 모든 [알고리즘 제품군](supported-algorithms.md)은 [키 파생 함수](https://en.wikipedia.org/wiki/Key_derivation_function)를 사용하는 것이 가장 좋습니다. 키 파생 함수는 데이터 키를 입력으로 사용하고 레코드를 암호화하는 데 실제로 사용되는 데이터 암호화 키를 반환합니다. 이러한 이유로 데이터가 데이터 키에 "의해" 암호화되는 것이 아니라 데이터 키"에서" 암호화된다고 말하는 경우가 많습니다.

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

## 래핑 키
<a name="wrapping-key"></a>

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

![\[여러 개의 래핑 키로 데이터 키 하나를 암호화\]](http://docs.aws.amazon.com/ko_kr/database-encryption-sdk/latest/devguide/images/dbesdk-wrapping-key.png)


 AWS Database Encryption SDK는 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) (AWS KMS) 대칭 암호화 KMS 키([다중 리전 키 포함 AWS KMS](use-kms-keyring.md#config-mrks)) 및 비대칭 [RSA KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-rsa), 원시 AES-GCM(고급 암호화 표준/갈루아 카운터 모드) 키, 원시 RSA 키와 같이 일반적으로 사용되는 여러 래핑 키를 지원합니다. 가능하면 KMS 키를 사용하는 것이 좋습니다. 사용해야 하는 래핑 키를 결정하려면 [래핑 키 선택](configure.md#config-keys)을 참조하세요.

엔빌로프 암호화를 사용할 때는 래핑 키를 무단 액세스로부터 보호해야 합니다. 다음 중 한 가지 방법으로 이를 수행할 수 있습니다.
+ [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/)와 같이 이러한 용도로 설계된 서비스를 사용합니다.
+ [AWS CloudHSM](https://aws.amazon.com/cloudhsm/)에서 제공하는 것과 같은 [하드웨어 보안 모듈(HSM)](https://en.wikipedia.org/wiki/Hardware_security_module)을 사용합니다.
+ 다른 키 관리 도구 및 서비스를 사용합니다.

키 관리 시스템이 없는 경우를 사용하는 것이 좋습니다 AWS KMS. AWS Database Encryption SDK는와 통합되어 래핑 키를 보호하고 사용하는 AWS KMS 데 도움이 됩니다.

## 키링
<a name="keyring-concept"></a>

암호화와 복호화에 사용하는 래핑 키를 지정하려면 키링을 사용합니다. AWS Database Encryption SDK가 제공하는 키링을 사용하거나 자체 구현을 설계할 수 있습니다.

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

## 암호화 작업
<a name="crypt-actions"></a>

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

암호화 작업 값은 다음 중 하나일 수 있습니다.
+ **암호화 및 서명** - 필드를 암호화합니다. 암호화된 필드를 서명에 포함합니다.
+ **서명 전용** - 서명에 필드를 포함합니다.
+ **암호화 컨텍스트에 서명 및 포함** - 서명 및 [암호화 컨텍스트](#encryption-context)에 필드를 포함합니다.

  기본적으로 파티션 및 정렬 키는 암호화 컨텍스트에 포함된 유일한 속성입니다. [AWS KMS 계층적 키링](use-hierarchical-keyring.md)의 브랜치 키 ID 공급자가 암호화 컨텍스트에서 복호화하는 데 필요한 브랜치 키를 식별할 수 `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 있도록 추가 필드를 로 정의하는 것이 좋습니다. 자세한 내용은 [브랜치 키 ID 공급자](use-hierarchical-keyring.md#branch-key-id-supplier)를 참조하세요.
**참고**  
`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 암호화 작업을 사용하려면 AWS Database Encryption SDK 버전 3.3 이상을 사용해야 합니다. 를 포함하도록 [데이터 모델을 업데이트하기 전에 모든 리더](ddb-update-data-model.md)에 새 버전을 배포합니다`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.
+ **아무것도 하지 않음** - 필드를 암호화하거나 서명에 포함하지 않습니다.

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

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

## 자료 설명
<a name="material-description"></a>

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

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

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

자료 설명에 대한 기술 정보는 [자료 설명 형식](reference.md#material-description-format)을 참조하세요.

## 암호화 컨텍스트
<a name="encryption-context"></a>

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

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

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

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

## 암호화 구성 요소 관리자
<a name="crypt-materials-manager"></a>

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

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

## 대칭 및 비대칭 암호화
<a name="symmetric-key-encryption"></a>

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

*비대칭 암호화*는 수학적으로 관련된 데이터 키 페어를 사용합니다. 페어의 키 중 하나가 데이터를 암호화하고, 페어의 다른 키만 데이터를 복호화할 수 있습니다.

 AWS Database Encryption SDK는 [봉투 암호화](#envelope-encryption)를 사용합니다. 대칭 데이터 키로 데이터를 암호화합니다. 하나 이상의 대칭 또는 비대칭 래핑 키를 사용하여 대칭 데이터 키를 암호화합니다. 데이터 키의 암호화된 사본을 하나 이상 포함하는 [자료 설명](#material-description)을 레코드에 추가합니다.

**데이터 암호화(대칭 암호화)**  
 AWS Database Encryption SDK는 대칭 [데이터 키](#data-key)와 대칭 암호화 [알고리즘이 포함된 알고리즘 제품군](supported-algorithms.md)을 사용하여 데이터를 암호화합니다. AWS Database Encryption SDK는 데이터를 해독하기 위해 동일한 데이터 키와 동일한 알고리즘 제품군을 사용합니다.

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

## 키 커밋
<a name="key-commitment"></a>

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

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

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

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

## 디지털 서명
<a name="digital-sigs"></a>

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

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

기본 알고리즘 제품군을 사용하면 AWS Database Encryption SDK는 암호화된 각 레코드에 대해 임시 프라이빗 키와 퍼블릭 키 페어를 생성합니다. AWS Database Encryption SDK는 퍼블릭 키를 [자료 설명](#material-description)에 저장하고 프라이빗 키를 삭제합니다. 이렇게 하면 아무도 퍼블릭 키로 확인하는 다른 서명을 생성할 수 없습니다. 알고리즘은 퍼블릭 키를 자료 설명의 추가 인증 데이터로 암호화된 데이터 키에 바인딩하여 필드를 복호화할 수 있는 사용자가 퍼블릭 키를 변경하거나 서명 확인에 영향을 미치지 않도록 합니다.

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

**참고**  
키링이 암호화 도구와 암호 해독기 사이를 구분하지 않는 경우 디지털 서명은 암호화 값을 제공하지 않습니다.

비대칭 RSA [AWS KMS 키링](use-kms-keyring.md)을 포함한 AWS KMS 키링은 AWS KMS 키 정책 및 IAM 정책에 따라 암호화 도구와 복호화기 간에 구분할 수 있습니다.

암호화 특성으로 인해 다음 키링은 암호화 도구와 복호화자 간에 구분할 수 없습니다.
+ AWS KMS 계층적 키링
+ AWS KMS ECDH 키링
+ Raw AES 키링
+ Raw RSA 키링
+ 원시 ECDH 키링

# AWS Database Encryption SDK 작동 방식
<a name="how-it-works"></a>


****  

|  | 
| --- |
| 클라이언트 측 암호화 라이브러리의 이름이 AWS Database Encryption SDK로 변경되었습니다. 이 개발자 안내서는 여전히 [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md)에 대한 정보를 제공합니다. | 

 AWS Database Encryption SDK는 데이터베이스에 저장하는 데이터를 보호하도록 특별히 설계된 클라이언트 측 암호화 라이브러리를 제공합니다. 라이브러리에는 변경 없이 확장하거나 사용할 수 있는 보안 구현이 포함되어 있습니다. 사용자 정의 구성 요소 정의 및 사용에 대한 자세한 내용은 데이터베이스 구현을 위한 GitHub 리포지토리를 참조하세요.

이 섹션의 워크플로에서는 AWS Database Encryption SDK가 데이터베이스의 데이터를 암호화 및 서명하고 해독하는 방법을 설명합니다. 이러한 워크플로는 추상 요소와 기본 기능을 사용하여 기본 프로세스를 설명합니다. AWS Database Encryption SDK가 데이터베이스 구현과 작동하는 방식에 대한 자세한 내용은 데이터베이스의 *암호화된 항목* 주제를 참조하세요.

 AWS Database Encryption SDK는 [봉투 암호화](concepts.md#envelope-encryption)를 사용하여 데이터를 보호합니다. 각 레코드는 고유한 [데이터 키](concepts.md#data-key)로 암호화됩니다. 데이터 키는 암호화 작업에 `ENCRYPT_AND_SIGN`으로 표시된 각 필드에 대해 고유한 데이터 암호화 키를 파생하는 데 사용됩니다.** 그런 다음 데이터 키의 복사본은 지정한 래핑 키로 암호화됩니다. 암호화된 레코드를 해독하기 위해 AWS Database Encryption SDK는 지정한 래핑 키를 사용하여 하나 이상의 암호화된 데이터 키를 해독합니다. 그런 다음 사이버텍스트를 복호화하고 일반 텍스트 항목을 반환할 수 있습니다.

 AWS Database Encryption SDK에 사용되는 용어에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Encryption SDK 개념](concepts.md).

## 암호화 및 서명
<a name="encrypt-and-sign"></a>

기본적으로 AWS Database Encryption SDK는 데이터베이스의 레코드를 암호화, 서명, 확인 및 해독하는 레코드 암호화 도구입니다. 암호화하고 서명할 필드에 대한 지침과 레코드에 대한 정보를 가져옵니다. 지정한 래핑 키로 구성된 [암호화 자료 관리자](concepts.md#crypt-materials-manager)로부터 암호화 자료와 사용 방법에 대한 지침을 가져옵니다.

다음 연습에서는 AWS Database Encryption SDK가 데이터 항목을 암호화하고 서명하는 방법을 설명합니다.

1. 암호화 자료 관리자는 AWS 데이터베이스 암호화 SDK에 일반 텍스트 데이터 키 1개, 지정된 [래핑](concepts.md#wrapping-key) 키로 암호화된 [데이터 키](concepts.md#data-key)의 사본, MAC 키와 같은 고유한 데이터 암호화 키를 제공합니다.
**참고**  
여러 개의 래핑 키로 데이터 키를 암호화할 수 있습니다. 각 래핑 키는 데이터 키의 별도 복사본을 암호화합니다. AWS Database Encryption SDK는 암호화된 모든 데이터 키를 [자료 설명](concepts.md#material-description)에 저장합니다. AWS Database Encryption SDK는 자료 설명을 저장하는 레코드에 새 필드(`aws_dbe_head`)를 추가합니다.  
데이터 키의 암호화된 각 복사본에 대해 MAC 키가 파생됩니다. MAC 키는 자료 설명에 저장되지 않습니다. 대신, 복호화 메서드는 래핑 키를 사용하여 MAC 키를 다시 파생시킵니다.

1. 암호화 메서드는 지정한 [암호화 작업](concepts.md#crypt-actions)에서 `ENCRYPT_AND_SIGN`으로 표시된 각 필드를 암호화합니다.

1. 암호화 메서드는 데이터 키에서 `commitKey`을 파생한 다음 이를 사용하여 [키 커밋 값](concepts.md#key-commitment)을 생성한 다음 데이터 키를 삭제합니다.

1. 암호화 메서드는 레코드에 [자료 설명](concepts.md#material-description)을 추가합니다. 자료 설명에는 암호화된 데이터 키와 암호화된 레코드에 대한 기타 정보가 포함되어 있습니다. 자료 설명에 포함된 정보의 전체 목록은 [자료 설명 형식](reference.md#material-description-format)을 참조하세요.

1. 암호화 방법은 **1단계**에서 반환된 MAC 키를 사용하여 암호화 작업`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`에서 자료 설명, [암호화 컨텍스트](concepts.md#encryption-context) 및 `ENCRYPT_AND_SIGN`, `SIGN_ONLY`또는 로 표시된 각 필드의 표준화를 통해 해시 기반 메시지 인증 코드(HMAC) 값을 계산합니다. HMAC 값은 암호화 메서드가 레코드에 추가하는 새 필드(`aws_dbe_foot`)에 저장됩니다.

1. 암호화 방법은 자료 설명, 암호화 컨텍스트 및 , `SIGN_ONLY`또는 `ENCRYPT_AND_SIGN`로 표시된 각 필드의 표준화를 통해 [ECDSA 서명을](concepts.md#digital-sigs) 계산`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`하고 필드에 ECDSA 서명을 저장합니다`aws_dbe_foot`.
**참고**  
ECDSA 서명은 기본적으로 활성화되어 있지만 필수는 아닙니다.

1. 암호화 메서드는 암호화되고 서명된 레코드를 데이터베이스에 저장합니다

## 복호화 및 확인
<a name="decrypt-and-verify"></a>

1. 암호 자료 관리자(CMM)는 일반 텍스트 [데이터 키](concepts.md#data-key) 및 관련 MAC 키를 포함하여 자료 설명에 저장된 복호화 자료를 사용하여 복호화 메서드를 제공합니다.

   1. CMM은 지정된 키 링의 [래핑 키](concepts.md#wrapping-key)를 사용하여 암호화된 데이터 키를 복호화하고 일반 텍스트 데이터 키를 반환합니다.

1. 복호화 메서드는 자료 설명의 키 커밋 값을 비교하고 확인합니다.

1. 복호화 메서드는 서명 필드의 서명을 확인합니다.

   정의한 허용된 인증되지 않은 필드 `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 목록에서 `ENCRYPT_AND_SIGN``SIGN_ONLY`, 또는 로 표시된 필드를 식별합니다. [Allowed unsigned attributes](ddb-java-using.md#allowed-unauth) 복호화 메서드는 **1단계**에서 반환된 MAC 키를 사용하여 `ENCRYPT_AND_SIGN`, `SIGN_ONLY`또는 로 표시된 필드의 HMAC 값을 다시 계산하고 비교합니다`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. 그런 다음 [암호화 컨텍스트](concepts.md#encryption-context)에 저장된 퍼블릭 키를 사용하여 [ECDSA 서명](concepts.md#digital-sigs)을 확인합니다.

1. 복호화 메서드는 일반 텍스트 데이터 키를 사용하여 `ENCRYPT_AND_SIGN`.로 표시된 각 값을 복호화합니다. 그러면 AWS Database Encryption SDK가 일반 텍스트 데이터 키를 삭제합니다.

1. 복호화 메서드는 일반 텍스트 레코드를 반환합니다.

# AWS Database Encryption SDK에서 지원되는 알고리즘 제품군
<a name="supported-algorithms"></a>


****  

|  | 
| --- |
| 클라이언트 측 암호화 라이브러리의 이름이 AWS Database Encryption SDK로 변경되었습니다. 이 개발자 안내서는 여전히 [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md)에 대한 정보를 제공합니다. | 

*알고리즘 제품군*은 암호화 알고리즘 및 관련 값의 모음입니다. 암호화 시스템은 알고리즘 구현을 사용하여 사이퍼텍스트를 생성합니다.

 AWS Database Encryption SDK는 알고리즘 제품군을 사용하여 데이터베이스의 필드를 암호화하고 서명합니다. 지원되는 모든 알고리즘 제품군은 AES-GCM이라고 하는 Galois/Counter Mode(GCM)와 함께 고급 암호화 표준(AES) 알고리즘을 사용하여 원시 데이터를 암호화합니다. AWS Database Encryption SDK는 256비트 암호화 키를 지원합니다. 인증 태그의 길이는 항상 16바이트입니다.


**AWS Database Encryption SDK 알고리즘 제품군**  

| Algorithm | 암호화 알고리즘 | 데이터 키 길이(비트) | 키 유도 알고리즘 | 대칭 서명 알고리즘 | 비대칭 서명 알고리즘 | 키 커밋 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 기본값 | AES-GCM | 256 | HKDF(SHA-512 사용) | HMAC-SHA-384 | ECDSA(P-384 및 SHA-384 사용) | HKDF(SHA-512 사용) | 
| ECDSA 디지털 서명이 없는 AES-GCM | AES-GCM | 256 | HKDF(SHA-512 사용) | HMAC-SHA-384 | 없음 | HKDF(SHA-512 사용) | 

**암호화 알고리즘**  
사용되는 암호화 알고리즘의 이름 및 모드입니다. AWS Database Encryption SDK의 알고리즘 제품군은 Galois/Counter Mode(GCM)와 함께 고급 암호화 표준(AES) 알고리즘을 사용합니다.  


**데이터 키 길이**  
[데이터 키](concepts.md#data-key)의 길이(비트)입니다. AWS Database Encryption SDK는 256비트 데이터 키를 지원합니다. 데이터 키는 HMAC 기반 extract-and-expand 키 유도 함수(HKDF)에 대한 입력으로 사용됩니다. HKDF의 출력은 암호화 알고리즘에서 데이터 암호화 키로 사용됩니다.

**키 유도 알고리즘**  
데이터 암호화 키를 추출하는 데 사용되는 HMAC 기반 추출 및 확장 키 유도 함수(HKDF)입니다. AWS Database Encryption SDK는 [RFC 5869](https://tools.ietf.org/html/rfc5869)에 정의된 HKDF를 사용합니다.  
+ 사용되는 해시 함수는 SHA-512입니다.
+ 추출 단계의 경우:
  + 솔트는 사용하지 않습니다. RFC에 따라 솔트는 0으로 구성된 문자열로 설정됩니다.
  + 입력 키 구성 요소는 [키링](concepts.md#keyring-concept)의 데이터 키입니다.
+ 확장 단계의 경우:
  + 입력 의사 난수 키는 추출 단계의 출력입니다.
  + 키 레이블은 빅 엔디안 바이트 순서로 UTF-8 인코딩된 바이트 `DERIVEKEY` 문자열입니다.
  + 입력 정보는 알고리즘 ID와 키 레이블을 순서대로 연결한 것입니다.
  + 출력 키 구성 요소의 길이는 **데이터 키 길이**입니다. 이 출력은 암호화 알고리즘에서 데이터 암호화 키로 사용됩니다.

**대칭 서명 알고리즘**  
대칭 서명을 생성하는 데 사용되는 해시 기반 메시지 인증 코드(HMAC) 알고리즘입니다. 지원되는 모든 알고리즘 제품군에는 HMAC 확인이 포함됩니다.  
 AWS Database Encryption SDK는 재료 설명과 `ENCRYPT_AND_SIGN`, `SIGN_ONLY`또는 로 표시된 모든 필드를 직렬화합니다`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. 그런 다음 HMAC를 암호화 해시 함수 알고리즘(SHA-384)과 함께 사용하여 표준화에 서명합니다.  
대칭 HMAC 서명은 AWS Database Encryption SDK가 레코드에 추가하는 새 필드(`aws_dbe_foot`)에 저장됩니다.

**비대칭 서명 알고리즘**  
비대칭 디지털 서명을 생성하는 데 사용되는 서명 알고리즘입니다.  
 AWS Database Encryption SDK는 재료 설명과 `ENCRYPT_AND_SIGN`, `SIGN_ONLY`또는 로 표시된 모든 필드를 직렬화합니다`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. 그런 다음 다음 세부 정보와 함께 타원 곡선 디지털 서명 알고리즘(ECDSA)을 사용하여 표준화에 서명합니다.  
+ 사용되는 타원 곡선은 디지털 서명 표준(DSS)(FIPS PUB 186-4)에 정의된 P-384입니다. [http://doi.org/10.6028/NIST.FIPS.186-4](http://doi.org/10.6028/NIST.FIPS.186-4) 
+ 사용되는 해시 함수는 SHA-384입니다.
비대칭 ECDSA 서명은 `aws_dbe_foot` 필드에 대칭 HMAC 서명과 함께 저장됩니다.  
ECDSA 디지털 서명은 기본적으로 포함되지만 필수는 아닙니다.

**키 커밋**  
커밋 키를 도출하는 데 사용되는 HMAC 기반 extract-and-expand 키 유도 함수(HKDF)입니다.  
+ 사용되는 해시 함수는 SHA-512입니다.
+ 추출 단계의 경우:
  + 솔트는 사용하지 않습니다. RFC에 따라 솔트는 0으로 구성된 문자열로 설정됩니다.
  + 입력 키 구성 요소는 [키링](concepts.md#keyring-concept)의 데이터 키입니다.
+ 확장 단계의 경우:
  + 입력 의사 난수 키는 추출 단계의 출력입니다.
  + 입력 정보는 빅 엔디안 바이트 순서로 `COMMITKEY` 문자열의 UTF-8-encoded 바이트입니다.
  + 출력 키 지정 구성 요소의 길이는 256비트입니다. 이 출력은 커밋 키로 사용됩니다.
커밋 키는 [자료 설명](reference.md#material-description-format)에 대해 고유한 256비트 해시 기반 메시지 인증 코드(HMAC) 해시인 [레코드 커](reference.md#format-commitment)밋을 계산합니다. 알고리즘 제품군에 키 커밋을 추가하는 방법에 대한 기술적인 설명은 Cryptology ePrint Archive의 [키 커밋 AEAD](https://eprint.iacr.org/2020/1153)를 참조하세요.

## 기본 알고리즘 제품군
<a name="recommended-algorithms"></a>

기본적으로 AWS Database Encryption SDK는 AES-GCM, HMAC 기반 extract-and-expand 키 유도 함수(HKDF), HMAC 확인, ECDSA 디지털 서명, 키 커밋 및 256비트 암호화 키가 있는 알고리즘 제품군을 사용합니다.

기본 알고리즘 제품군에는 HMAC 확인(대칭 서명) 및 [ECDSA 디지털 서명](concepts.md#digital-sigs)(대칭 서명)이 포함됩니다. 이러한 서명은 AWS Database Encryption SDK가 레코드에 추가하는 새 필드(`aws_dbe_foot`)에 저장됩니다. ECDSA 디지털 서명은 권한 부여 정책에서 한 사용자 집합이 데이터를 암호화하고 다른 사용자 집합이 데이터를 복호화하도록 허용하는 경우에 특히 유용합니다.

기본 알고리즘 제품군은 데이터 [키를 레코드에 연결하는 HMAC 해시인 키 커](concepts.md#key-commitment)밋도 도출합니다. 키 커밋 값은 자료 설명 및 커밋 키에서 계산된 HMAC입니다. 그런 다음 자료 설명에 키 커밋 값을 저장합니다. 키 커밋이 포함된 알고리즘 제품군은 각 사이퍼텍스트가 하나의 일반 텍스트로만 복호화되도록 합니다. 이를 위해 암호화 알고리즘에 대한 입력으로 사용된 데이터 키를 검증합니다. 암호화할 때 알고리즘 제품군은 키 커밋 HMAC를 도출합니다. 암호를 복호화하기 전에 데이터 키가 동일한 키 커밋 HMAC를 생성하는지 확인합니다. 그러지 않으면 복호화 호출이 실패합니다.

## ECDSA 디지털 서명이 없는 AES-GCM
<a name="other-algorithms"></a>

기본 알고리즘 제품군은 대부분의 애플리케이션에 적합할 수 있지만 대체 알고리즘 제품군을 선택할 수 있습니다. 예를 들어 일부 신뢰 모델은 ECDSA 디지털 서명이 없는 알고리즘 제품군으로 충족됩니다. 데이터를 암호화하는 사용자와 데이터를 해독하는 사용자가 동일하게 신뢰할 수 있는 경우에만이 제품군을 사용합니다.

모든 AWS Database Encryption SDK 알고리즘 제품군에는 HMAC 확인(대칭 서명)이 포함됩니다. 유일한 차이점은 ECDSA 디지털 서명이 없는 AES-GCM 알고리즘 제품군에 추가적인 신뢰성 및 거부 방지 계층을 제공하는 비대칭 서명이 없다는 것입니다.

예를 들어 키링, , `wrappingKeyA` `wrappingKeyB`및에 래핑 키가 여러 개 `wrappingKeyC`있고를 사용하여 레코드`wrappingKeyA`를 복호화하는 경우 HMAC 대칭 서명은에 액세스할 수 있는 사용자가 레코드를 암호화했는지 확인합니다`wrappingKeyA`. 기본 알고리즘 제품군을 사용한 경우 HMACs에 대한 동일한 확인을 제공하고 `wrappingKeyA`추가로 ECDSA 디지털 서명을 사용하여에 대한 암호화 권한이 있는 사용자가 레코드를 암호화했는지 확인합니다`wrappingKeyA`.

디지털 서명이 없는 AES-GCM 알고리즘 제품군을 선택하려면 암호화 구성에 다음 코드 조각을 포함합니다.

------
#### [ Java ]

다음 코드 조각은 ECDSA 디지털 서명이 없는 AES-GCM 알고리즘 제품군을 지정합니다. 자세한 내용은 [AWS Database Encryption SDK for DynamoDB의 암호화 구성](ddb-java-using.md#ddb-config-encrypt) 단원을 참조하십시오.

```
.algorithmSuiteId(
    DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384)
```

------
#### [ C\$1 / .NET ]

다음 코드 조각은 ECDSA 디지털 서명이 없는 AES-GCM 알고리즘 제품군을 지정합니다. 자세한 내용은 [AWS Database Encryption SDK for DynamoDB의 암호화 구성](ddb-net-using.md#ddb-net-config-encrypt) 단원을 참조하십시오.

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

------
#### [ Rust ]

다음 코드 조각은 ECDSA 디지털 서명이 없는 AES-GCM 알고리즘 제품군을 지정합니다. 자세한 내용은 [AWS Database Encryption SDK for DynamoDB의 암호화 구성](ddb-rust-using.md#ddb-rust-config-encrypt) 단원을 참조하십시오.

```
.algorithm_suite_id(
    DbeAlgorithmSuiteId::AlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384,
)
```

------