

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

# 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,
)
```

------