

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

# AWS Encryption SDK 참조
<a name="reference"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

는 [지원되는 알고리즘을](supported-algorithms.md) AWS Encryption SDK 사용하여 암호화된 데이터와 해당 암호화된 데이터 키가 포함된 단일 데이터 구조 또는 *메시지를* 반환합니다. 다음 주제에서는 알고리즘과 데이터 구조에 대해 설명합니다. 이 정보를 사용하여 이 SDK와 호환되는 사이퍼텍스트를 읽고 쓸 수 있는 라이브러리를 빌드하세요.

**Topics**
+ [메시지 형식 참조](message-format.md)
+ [메시지 형식 예제](message-format-examples.md)
+ [본문 AAD 참조](body-aad-reference.md)
+ [알고리즘 참조](algorithms-reference.md)
+ [초기화 벡터 참조](IV-reference.md)
+ [AWS KMS 계층적 키링 기술 세부 정보](hierarchical-keyring-details.md)

# AWS Encryption SDK 메시지 형식 참조
<a name="message-format"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

의 암호화 작업은 암호화된 데이터(암호 텍스트)와 모든 암호화된 데이터 키가 포함된 단일 데이터 구조 또는 [암호화된 메시지를](concepts.md#message) AWS Encryption SDK 반환합니다. 이 데이터 구조를 이해하거나 이를 읽고 쓰는 라이브러리를 구축하려면 메시지 형식을 이해해야 합니다.

메시지 형식은 최소 두 가지 부분인 *헤더*와 *본문*으로 구성됩니다. 경우에 따라 메시지 형식에 세 번째 부분인 *바닥글*이 포함되기도 합니다. 메시지 형식은 네트워크 바이트 순서로 정렬된 바이트 시퀀스를 정의하며 이를 빅 엔디안(big-endian) 형식이라고도 합니다. 메시지 형식은 헤더로 시작하여 본문, 바닥글(있는 경우) 순으로 이어집니다.

 AWS Encryption SDK 에서 지원하는 [알고리즘 제품군](algorithms-reference.md)은 두 가지 메시지 형식 버전 중 하나를 사용합니다. [키 커밋](concepts.md#key-commitment)이 없는 알고리즘 제품군은 메시지 형식 버전 1을 사용합니다. 키 커밋이 있는 알고리즘 제품군은 메시지 형식 버전 2를 사용합니다.

**Topics**
+ [헤더 구조](#header-structure)
+ [본문 구조](#body-structure)
+ [바닥글 구조](#footer-structure)

## 헤더 구조
<a name="header-structure"></a>

메시지 헤더에는 암호화된 데이터 키와 메시지 본문 구성 방식에 대한 정보가 포함되어 있습니다. 다음 표에서는 메시지 형식 버전 1 및 2의 헤더를 구성하는 필드에 대해 설명합니다. 표시된 순서대로 바이트가 추가됩니다.

**존재하지 않음** 값은 해당 버전의 메시지 형식에 필드가 존재하지 않음을 나타냅니다. **굵은 텍스트**는 각 버전의 값이 다름을 나타냅니다.

**참고**  
이 테이블의 모든 데이터를 보려면 가로 또는 세로로 스크롤해야 할 수도 있습니다.


**헤더 구조**  

| Field | 메시지 형식 버전 1길이(바이트) | 메시지 형식 버전 2길이(바이트) | 
| --- | --- | --- | 
| [Version](#header-version) | 1 | 1 | 
| [Type](#header-type) | 1 | 존재하지 않음 | 
| [Algorithm ID](#header-algorithm-id) | 2 | 2 | 
| [Message ID](#header-message-id) | 16 | 32 | 
| [AAD Length](#header-aad-length) | 2[암호화 컨텍스트](concepts.md#encryption-context)가 비어 있는 경우 2바이트 AAD 길이 필드의 값은 0입니다. | 2[암호화 컨텍스트](concepts.md#encryption-context)가 비어 있는 경우 2바이트 AAD 길이 필드의 값은 0입니다. | 
| [AAD](#header-aad) | 변수. 이 필드의 길이는 이전 2바이트(AAD 길이 필드)에 표시됩니다. [암호화 컨텍스트](concepts.md#encryption-context)가 비어 있는 경우 헤더에 AAD 필드가 없습니다. |  변수. 이 필드의 길이는 이전 2바이트(AAD 길이 필드)에 표시됩니다. [암호화 컨텍스트](concepts.md#encryption-context)가 비어 있는 경우 헤더에 AAD 필드가 없습니다.  | 
| [Encrypted Data Key Count](#header-data-key-count) | 2 | 2 | 
| [Encrypted Data Key(s)](#header-data-keys) | 변수. 암호화된 데이터 키의 수와 각 데이터 키의 길이에 따라 결정됩니다. | 변수. 암호화된 데이터 키의 수와 각 데이터 키의 길이에 따라 결정됩니다. | 
| [Content Type](#header-content-type) | 1 | 1 | 
| [Reserved](#header-reserved) | 4 | 존재하지 않음 | 
| [IV Length](#header-iv-length) | 1 | 존재하지 않음 | 
| [Frame Length](#header-frame-length) | 4 | 4 | 
| [Algorithm Suite Data](#algorithm-suite-data) | 존재하지 않음 | 변수. 메시지를 생성한 [알고리즘](algorithms-reference.md)에 의해 결정됩니다. | 
| [Header Authentication](#header-authentication) | 변수. 메시지를 생성한 [알고리즘](algorithms-reference.md)에 의해 결정됩니다. | 변수. 메시지를 생성한 [알고리즘](algorithms-reference.md)에 의해 결정됩니다. | 

**버전**  
이 메시지 형식의 버전입니다. 버전은 1 또는 2이며 바이트로 인코딩되어 16진수 표기법으로 `01` 또는 `02`입니다.

**유형**  
이 메시지 형식의 유형입니다. 유형은 구조의 종류를 나타냅니다. 지원되는 유일한 유형은 *고객이 인증한 암호화된 데이터*라고 설명됩니다. 해당 유형 값은 128이며 바이트로 인코딩되어 16진수 표기법으로 `80`입니다.  
메시지 형식 버전 2에는 이 필드가 존재하지 않습니다.

**알고리즘 ID**  
사용된 알고리즘의 식별자입니다. 이 값은 부호 없는 16비트 정수로 해석되는 2바이트 값입니다. 알고리즘에 대한 자세한 내용은 [AWS Encryption SDK 알고리즘 참조](algorithms-reference.md) 섹션을 참조하세요.

**메시지 ID**  
메시지를 식별하는 임의로 생성된 값입니다. 메시지 ID의 특징:  
+ 암호화된 메시지를 고유하게 식별합니다.
+ 메시지 헤더를 메시지 본문에 약하게 바인딩합니다.
+ 여러 암호화된 메시지와 함께 데이터 키를 안전하게 재사용할 수 있는 메커니즘을 제공합니다.
+  AWS Encryption SDK에서 실수로 데이터 키를 재사용하거나 키가 부족해지는 상황을 방지합니다.
이 값은 메시지 형식 버전 1에서는 128비트이고 버전 2에서는 256비트입니다.

**AAD 길이**  
추가 인증 데이터(AAD)의 길이입니다. 이 값은 AAD가 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
[암호화 컨텍스트](concepts.md#encryption-context)가 비어 있는 경우 AAD 길이 필드의 값은 0입니다.

**AAD**  
추가 인증 데이터입니다. AAD는 [암호화 컨텍스트](concepts.md#encryption-context)의 인코딩으로, 각 키와 값이 UTF-8로 인코딩된 문자열인 키-값 페어의 배열입니다. 암호화 컨텍스트는 바이트 시퀀스로 변환되어 AAD 값으로 사용됩니다. 암호화 컨텍스트가 비어 있는 경우 헤더에 AAD 필드가 없습니다.  
[서명이 있는 알고리즘](algorithms-reference.md)을 사용하는 경우 암호화 컨텍스트에는 키-값 페어 `{'aws-crypto-public-key', Qtxt}`가 포함되어야 합니다. Qtxt는 [SEC 1 버전 2.0](http://www.secg.org/sec1-v2.pdf)에 따라 압축된 후 base64로 인코딩된 타원 곡선의 점 Q를 나타냅니다. 암호화 컨텍스트에는 추가 값이 포함될 수 있지만 구성된 AAD의 최대 길이는 2^16 - 1바이트입니다.  
다음 표에서는 AAD를 구성하는 필드에 대해 설명합니다. 키-값 페어는 키별로 UTF-8 문자 코드에 따라 오름차순으로 정렬됩니다. 표시된 순서대로 바이트가 추가됩니다.    
**AAD 구조**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/message-format.html)  
**키-값 페어 수**  
AAD의 키-값 페어 수입니다. 이 값은 AAD에서 키-값 페어의 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다. AAD의 최대 키-값 페어 수는 2^16 - 1입니다.  
암호화 컨텍스트가 없거나 암호화 컨텍스트가 비어 있는 경우 이 필드는 AAD 구조에 존재하지 않습니다.  
**키 길이**  
키-값 페어의 키 길이입니다. 이 값은 키가 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
**키**  
키-값 페어의 키입니다. UTF-8로 인코딩된 바이트 시퀀스입니다.  
**값 길이**  
키-값 페어의 값 길이입니다. 이 값은 값이 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
**값**  
키-값 페어의 값입니다. UTF-8로 인코딩된 바이트 시퀀스입니다.

**암호화된 데이터 키 수**  
암호화된 데이터 키의 수입니다. 이 값은 암호화된 데이터 키의 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다. 각 메시지의 암호화된 데이터 키의 최대 수는 65,535개(2^16 - 1)입니다.

**암호화된 데이터 키(들)**  
암호화된 데이터 키의 시퀀스입니다. 시퀀스의 길이는 암호화된 데이터 키의 수와 각 데이터 키의 길이에 따라 결정됩니다. 시퀀스에는 암호화된 데이터 키가 하나 이상 포함되어 있습니다.  
다음 표에서는 암호화된 각 데이터 키를 구성하는 필드에 대해 설명합니다. 표시된 순서대로 바이트가 추가됩니다.    
**암호화된 데이터 키 구조**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/message-format.html)  
**키 공급자 ID 길이**  
키 공급자 식별자의 길이입니다. 이 값은 키 공급자 ID가 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
**키 공급자 ID**  
키 공급자 식별자입니다. 암호화된 데이터 키의 공급자를 나타내는 데 사용되며 확장 가능하도록 설계되었습니다.  
**키 공급자 정보 길이**  
키 공급자 정보의 길이입니다. 이 값은 키 공급자 정보가 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
**키 공급자 정보**  
키 공급자 정보입니다. 키 공급자에 의해 결정됩니다.  
 AWS KMS 이 마스터 키 공급자이거나 AWS KMS 키링을 사용하는 경우이 값에는의 Amazon 리소스 이름(ARN)이 포함됩니다 AWS KMS key.  
**암호화된 데이터 키 길이**  
암호화된 데이터 키의 길이입니다. 이 값은 암호화된 데이터 키가 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.  
**암호화된 데이터 키**  
암호화된 데이터 키입니다. 키 공급자에 의해 암호화된 데이터 암호화 키입니다.

**콘텐츠 유형**  
암호화된 데이터의 유형으로, 프레임 처리되지 않거나 프레임 처리됩니다.  
가능하면 프레임 처리된 데이터를 사용하세요. 는 레거시 용도로만 프레임 처리되지 않은 데이터를 AWS Encryption SDK 지원합니다. 의 일부 언어 구현은 여전히 프레임 처리되지 않은 사이퍼텍스트를 생성할 AWS Encryption SDK 수 있습니다. 지원되는 모든 언어 구현은 프레임 처리된 사이퍼텍스트와 프레임 처리되지 않은 사이퍼텍스트를 복호화할 수 있습니다.
프레임 처리된 데이터는 동일한 길이의 여러 부분으로 나뉘며 각 부분은 개별적으로 암호화됩니다. 프레임 처리된 콘텐츠는 유형 2이며 바이트로 인코딩되어 16진수 표기법으로 `02`입니다.  
프레임 처리되지 않은 데이터는 분할되지 않으며 암호화된 단일의 Blob입니다. 프레임 처리되지 않은 콘텐츠는 유형 1이며 바이트로 인코딩되어 16진수 표기법으로 `01`입니다.

**예약됨**  
4바이트의 예약된 시퀀스입니다. 이 값은 0이어야 합니다. 바이트로 인코딩되어 16진수 표기법으로 `00 00 00 00`입니다(즉, 0과 같은 32비트 정수 값의 4바이트 시퀀스).  
메시지 형식 버전 2에는 이 필드가 존재하지 않습니다.

**IV 길이**  
초기화 벡터(IV)의 길이입니다. 이 값은 IV를 포함한 바이트 수를 지정하는 부호 없는 8비트 정수로 해석되는 1바이트 값입니다. 이 값은 메시지를 생성한 [알고리즘](algorithms-reference.md)의 IV 바이트 값에 의해 결정됩니다.  
메시지 헤더에 결정론적 IV 값을 사용하는 알고리즘 제품군만 지원하는 메시지 형식 버전 2에는 이 필드가 존재하지 않습니다.

**프레임 길이**  
프레임 처리된 데이터의 각 프레임의 길이입니다. 이 값은 각 프레임의 바이트 수를 지정하는 부호 없는 32비트 정수로 해석되는 4바이트 값입니다. 데이터가 프레임 처리되어 있지 않은 경우, 즉 `Content Type` 필드의 값이 1인 경우 이 값은 0이어야 합니다.  
가능하면 프레임 처리된 데이터를 사용하세요. 는 레거시 용도로만 프레임 처리되지 않은 데이터를 AWS Encryption SDK 지원합니다. 의 일부 언어 구현은 여전히 프레임 처리되지 않은 사이퍼텍스트를 생성할 AWS Encryption SDK 수 있습니다. 지원되는 모든 언어 구현은 프레임 처리된 사이퍼텍스트와 프레임 처리되지 않은 사이퍼텍스트를 복호화할 수 있습니다.

**알고리즘 제품군 데이터**  
메시지를 생성한 [알고리즘](algorithms-reference.md)에 필요한 추가 데이터입니다. 길이와 내용은 알고리즘에 의해 결정됩니다. 길이는 0일 수 있습니다.  
메시지 형식 버전 1에는 이 필드가 존재하지 않습니다.

**헤더 인증**  
헤더 인증은 메시지를 생성한 [알고리즘](algorithms-reference.md)에 의해 결정됩니다. 헤더 인증은 전체 헤더에 대해 계산됩니다. IV와 인증 태그로 구성됩니다. 표시된 순서대로 바이트가 추가됩니다.    
**헤더 인증 구조**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/message-format.html)  
**IV**  
헤더 인증 태그를 계산하는 데 사용되는 초기화 벡터(IV)입니다.  
메시지 형식 버전 2의 헤더에는 이 필드가 존재하지 않습니다. 메시지 형식 버전 2는 메시지 헤더에 결정론적 IV 값을 사용하는 알고리즘 제품군만 지원합니다.  
**인증 태그**  
헤더의 인증 값입니다. 헤더의 전체 내용을 인증하는 데 사용됩니다.

## 본문 구조
<a name="body-structure"></a>

메시지 본문에는 *사이퍼텍스트*라고 하는 암호화된 데이터가 포함되어 있습니다. 본문 구조는 콘텐츠 유형(프레임 처리되지 않음 또는 프레임 처리됨)에 따라 달라집니다. 다음 섹션에서는 각 콘텐츠 유형에 대한 메시지 본문의 형식에 대해 설명합니다. 메시지 본문 구조는 메시지 형식 버전 1 및 2에서 동일합니다.

**Topics**
+ [프레임 처리되지 않은 데이터](#body-no-framing)
+ [프레임 처리된 데이터](#body-framing)

### 프레임 처리되지 않은 데이터
<a name="body-no-framing"></a>

프레임 처리되지 않은 데이터는 고유한 IV 및 [본문 AAD](body-aad-reference.md)를 사용하여 단일 Blob으로 암호화됩니다.

**참고**  
가능하면 프레임 처리된 데이터를 사용하세요. 는 레거시 용도로만 프레임 처리되지 않은 데이터를 AWS Encryption SDK 지원합니다. 의 일부 언어 구현은 여전히 프레임 처리되지 않은 사이퍼텍스트를 생성할 AWS Encryption SDK 수 있습니다. 지원되는 모든 언어 구현은 프레임 처리된 사이퍼텍스트와 프레임 처리되지 않은 사이퍼텍스트를 복호화할 수 있습니다.

아래 표에 프레임 처리되지 않은 데이터를 구성하는 필드가 나와 있습니다. 표시된 순서대로 바이트가 추가됩니다.


**프레임 처리되지 않은 본문 구조**  

| Field | 길이(바이트) | 
| --- | --- | 
| [IV](#body-unframed-iv) | 변수. 헤더의 [IV Length](#header-iv-length) 바이트에 지정된 값과 동일합니다. | 
| [Encrypted Content Length](#body-unframed-content-length) | 8 | 
| [Encrypted Content](#body-unframed-content) | 변수. 이전 8바이트에 지정된 값(암호화된 콘텐츠 길이)과 동일합니다. | 
| [Authentication Tag](#body-unframed-tag) | 변수. 사용된 [알고리즘 구현](algorithms-reference.md)에 따라 결정됩니다. | 

**IV**  
[암호화 알고리즘](algorithms-reference.md)과 함께 사용할 초기화 벡터(IV)입니다.

**암호화된 콘텐츠 길이**  
암호화된 콘텐츠 또는 *사이퍼텍스트*의 길이입니다. 이 값은 암호화된 콘텐츠가 포함된 바이트 수를 지정하는 부호 없는 64비트 정수로 해석되는 8바이트 값입니다.  
기술적으로, 허용되는 최대값은 2^63 - 1 또는 8엑스비바이트(8EiB)입니다. 그러나 [구현된 알고리즘](algorithms-reference.md)에 따른 제한으로 인해 실제 최대값은 2^36 - 32 또는 64기비바이트(64GiB)입니다.  
이 SDK의 Java 구현에서는 언어 제한으로 인해 이 값을 2^31 - 1 또는 2기비바이트(2GiB)로 추가 제한합니다.

**암호화된 콘텐츠**  
[암호화 알고리즘](algorithms-reference.md)에서 반환된 암호화된 콘텐츠(사이퍼텍스트)입니다.

**인증 태그**  
본문에 대한 인증 값입니다. 메시지 본문을 인증하는 데 사용됩니다.

### 프레임 처리된 데이터
<a name="body-framing"></a>

프레임 처리된 데이터에서 일반 텍스트 데이터는 *프레임*이라는 동일한 길이의 파트로 나뉩니다. 는 고유한 IV 및 [본문 AAD](body-aad-reference.md)를 사용하여 각 프레임을 별도로 AWS Encryption SDK 암호화합니다.

**참고**  
가능하면 프레임 처리된 데이터를 사용하세요. 는 레거시 용도로만 프레임 처리되지 않은 데이터를 AWS Encryption SDK 지원합니다. 의 일부 언어 구현은 여전히 프레임 처리되지 않은 사이퍼텍스트를 생성할 AWS Encryption SDK 수 있습니다. 지원되는 모든 언어 구현은 프레임 처리된 사이퍼텍스트와 프레임 처리되지 않은 사이퍼텍스트를 복호화할 수 있습니다.

 

[프레임 길이](#header-frame-length)(프레임 내 [암호화된 콘텐츠](#body-framed-regular-content) 길이)는 메시지마다 다를 수 있습니다. 프레임의 최대 바이트 수는 2^32 - 1입니다. 메시지의 최대 프레임 수는 2^32 - 1입니다.

프레임에는 *일반* 프레임과 *최종* 프레임, 이렇게 두 가지 유형이 있습니다. 모든 메시지는 최종 프레임으로 구성되거나 포함해야 합니다.

메시지의 모든 일반 프레임은 프레임 길이가 동일합니다. 최종 프레임의 프레임 길이는 서로 다를 수 있습니다.

프레임 처리된 데이터의 프레임 구성은 암호화된 콘텐츠의 길이에 따라 다릅니다.
+ **프레임 길이와 동일** - 암호화된 콘텐츠 길이가 일반 프레임의 프레임 길이와 동일하면 메시지는 데이터 뒤에 길이가 0인 최종 프레임을 포함하는 일반 프레임으로 구성될 수 있습니다. 또는 메시지는 데이터를 포함하는 최종 프레임으로만 구성될 수 있습니다. 이 경우, 최종 프레임은 일반 프레임과 프레임 길이가 동일합니다.
+ **프레임 길이의 배수** - 암호화된 콘텐츠 길이가 일반 프레임의 프레임 길이의 정확한 배수인 경우 메시지는 데이터 뒤에 길이가 0인 최종 프레임을 포함하는 일반 프레임으로 끝날 수 있습니다. 또는 메시지는 데이터를 포함하는 최종 프레임으로 끝날 수 있습니다. 이 경우, 최종 프레임은 일반 프레임과 프레임 길이가 동일합니다.
+ **프레임 길이의 배수가 아님** - 암호화된 콘텐츠 길이가 일반 프레임의 프레임 길이의 정확한 배수가 아닌 경우, 최종 프레임에 나머지 데이터가 포함됩니다. 최종 프레임의 프레임 길이는 일반 프레임의 프레임 길이보다 짧습니다.
+ **프레임 길이보다 짧음** - 암호화된 콘텐츠 길이가 일반 프레임의 프레임 길이보다 짧은 경우 메시지는 모든 데이터를 포함하는 최종 프레임으로 구성됩니다. 최종 프레임의 프레임 길이는 일반 프레임의 프레임 길이보다 짧습니다.

다음 표에서는 프레임을 구성하는 필드에 대해 설명합니다. 표시된 순서대로 바이트가 추가됩니다.


**프레임 본문 구조, 일반 프레임**  

| Field | 길이(바이트) | 
| --- | --- | 
| [Sequence Number](#body-framed-regular-sequence-number) | 4 | 
| [IV](#body-framed-regular-iv) | 변수. 헤더의 [IV Length](#header-iv-length) 바이트에 지정된 값과 동일합니다. | 
| [Encrypted Content](#body-framed-regular-content) | 변수. 헤더의 [Frame Length](#header-frame-length)에 지정된 값과 같습니다. | 
| [Authentication Tag](#body-framed-regular-tag) | 변수. 헤더의 [Algorithm ID](#header-algorithm-id)에 지정된 대로 사용된 알고리즘에 따라 결정됩니다. | 

**시퀀스 번호**  
프레임 시퀀스 번호입니다. 프레임의 증분 카운터 번호입니다. 이 값은 부호 없는 32비트 정수로 해석되는 4바이트 값입니다.  
프레임 데이터는 시퀀스 번호 1에서 시작해야 합니다. 후속 프레임은 순서대로 배치되어야 하며 이전 프레임보다 1씩 증가해야 합니다. 그러지 않으면 복호화 프로세스가 중지되고 오류가 보고됩니다.

**IV**  
프레임의 초기화 벡터(IV)입니다. SDK는 결정론적 방법을 사용하여 메시지의 각 프레임에 대해 서로 다른 IV를 구성합니다. 길이는 사용된 [알고리즘 제품군](algorithms-reference.md)에 따라 지정됩니다.

**암호화된 콘텐츠**  
[암호화 알고리즘](algorithms-reference.md)에서 반환한 프레임의 암호화된 콘텐츠(사이퍼텍스트)입니다.

**인증 태그**  
프레임의 인증 값입니다. 전체 프레임을 인증하는 데 사용됩니다.


**프레임 본문 구조, 최종 프레임**  

| Field | 길이(바이트) | 
| --- | --- | 
| [Sequence Number End](#body-framed-final-sequence-number-end) | 4 | 
| [Sequence Number](#body-framed-final-sequence-number) | 4 | 
| [IV](#body-framed-final-iv) | 변수. 헤더의 [IV Length](#header-iv-length) 바이트에 지정된 값과 동일합니다. | 
| [Encrypted Content Length](#body-framed-final-content-length) | 4 | 
| [Encrypted Content](#body-framed-final-content) | 변수. 이전 4바이트에 지정된 값(암호화된 콘텐츠 길이)과 동일합니다. | 
| [Authentication Tag](#body-framed-final-tag) | 변수. 헤더의 [Algorithm ID](#header-algorithm-id)에 지정된 대로 사용된 알고리즘에 따라 결정됩니다. | 

**시퀀스 번호 끝**  
최종 프레임을 나타내는 표시기입니다. 해당 값은 4바이트로 인코딩되어 16진수 표기법으로 `FF FF FF FF`입니다.

**시퀀스 번호**  
프레임 시퀀스 번호입니다. 프레임의 증분 카운터 번호입니다. 이 값은 부호 없는 32비트 정수로 해석되는 4바이트 값입니다.  
프레임 데이터는 시퀀스 번호 1에서 시작해야 합니다. 후속 프레임은 순서대로 배치되어야 하며 이전 프레임보다 1씩 증가해야 합니다. 그러지 않으면 복호화 프로세스가 중지되고 오류가 보고됩니다.

**IV**  
프레임의 초기화 벡터(IV)입니다. SDK는 결정론적 방법을 사용하여 메시지의 각 프레임에 대해 서로 다른 IV를 구성합니다. IV 길이의 길이는 [알고리즘 제품군](algorithms-reference.md)에 따라 지정됩니다.

**암호화된 콘텐츠 길이**  
암호화된 콘텐츠의 길이입니다. 이 값은 프레임의 암호화된 콘텐츠가 포함된 바이트 수를 지정하는 부호 없는 32비트 정수로 해석되는 4바이트 값입니다.

**암호화된 콘텐츠**  
[암호화 알고리즘](algorithms-reference.md)에서 반환한 프레임의 암호화된 콘텐츠(사이퍼텍스트)입니다.

**인증 태그**  
프레임의 인증 값입니다. 전체 프레임을 인증하는 데 사용됩니다.

## 바닥글 구조
<a name="footer-structure"></a>

[서명 기능이 있는 알고리즘](algorithms-reference.md)을 사용하는 경우 메시지 형식에 바닥글이 포함됩니다. 메시지 바닥글에는 메시지 헤더 및 본문에 대해 계산된 [디지털 서명](concepts.md#digital-sigs)이 포함됩니다. 다음 표에서는 바닥글을 구성하는 필드에 대해 설명합니다. 표시된 순서대로 바이트가 추가됩니다. 메시지 바닥글 구조는 메시지 형식 버전 1 및 2에서 동일합니다.


**바닥글 구조**  

| Field | 길이(바이트) | 
| --- | --- | 
| [Signature Length](#footer-signature-length) | 2 | 
| [Signature](#footer-signature) | 변수. 이전 2바이트에 지정된 값(서명 길이)과 동일합니다. | 

**서명 길이**  
서명의 길이입니다. 이 값은 서명이 포함된 바이트 수를 지정하는 부호 없는 16비트 정수로 해석되는 2바이트 값입니다.

**서명**  
서명입니다.

# AWS Encryption SDK 메시지 형식 예제
<a name="message-format-examples"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

다음 주제에서는 AWS Encryption SDK 메시지 형식의 예를 보여줍니다. 각 예제는 원시 바이트를 16진수 표기법으로 표시한 다음 해당 바이트가 나타내는 내용에 대한 설명을 보여줍니다.

**Topics**
+ [프레임 처리된 데이터(메시지 형식 버전 1)](#example-framed)
+ [프레임 처리된 데이터(메시지 형식 버전 2)](#example-framed-2)
+ [프레임 처리되지 않은 데이터(메시지 형식 버전 1)](#example-nonframed)

## 프레임 처리된 데이터(메시지 형식 버전 1)
<a name="example-framed"></a>

다음 예제는 [메시지 형식 버전 1](message-format.md)의 프레임 처리된 데이터에 대한 메시지 형식을 보여줍니다.

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see 알고리즘 참조)
6E7C0FBD 4DF4A999 717C22A2 DDFE1A27        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
416A4173 7569326F 7430364C 4B77715A        AAD Key-Value Pair 4, Value ("AjAsui2ot06LKwqZXDJnU/Aqc2vD+0OkpOZ1cc8Tg2qd7rs5aLTg7lvfUEW/86+/5w==")
58444A6E 552F4171 63327644 2B304F6B
704F5A31 63633854 67327164 37727335
614C5467 376C7666 5545572F 38362B2F
35773D3D
0002                                       EncryptedDataKeyCount (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C3F F02C897B
7A12EB19 8BF2D802 0110803B 24003D1F
A5474FBC 392360B5 CB9997E0 6A17DE4C
A6BD7332 6BF86DAB 60D8CCB8 8295DBE9
4707E356 ADA3735A 7C52D778 B3135A47
9F224BF9 E67E87
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C36 CD985E12
D218B674 5BBC6102 0110803B 0320E3CD
E470AA27 DEAB660B 3E0CE8E0 8B1A89E4
57DCC69B AAB1294F 21202C01 9A50D323
72EBAAFD E24E3ED8 7168E0FA DB40508F
556FBD58 9E621C
02                                         Content Type (2, framed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000100                                   Frame Length (256)
4ECBD5C0 9899CA65 923D2347                 IV
0B896144 0CA27950 CA571201 4DA58029        Authentication Tag
+------+
| Body |
+------+
00000001                                   Frame 1, Sequence Number (1)
6BD3FE9C ADBCB213 5B89E8F1                 Frame 1, IV
1F6471E0 A51AF310 10FA9EF6 F0C76EDF        Frame 1, Encrypted Content
F5AFA33C 7D2E8C6C 9C5D5175 A212AF8E
FBD9A0C3 C6E3FB59 C125DBF2 89AC7939
BDEE43A8 0F00F49E ACBBD8B2 1C785089
A90DB923 699A1495 C3B31B50 0A48A830
201E3AD9 1EA6DA14 7F6496DB 6BC104A4
DEB7F372 375ECB28 9BF84B6D 2863889F
CB80A167 9C361C4B 5EC07438 7A4822B4
A7D9D2CC 5150D414 AF75F509 FCE118BD
6D1E798B AEBA4CDB AD009E5F 1A571B77
0041BC78 3E5F2F41 8AF157FD 461E959A
BB732F27 D83DC36D CC9EBC05 00D87803
57F2BB80 066971C2 DEEA062F 4F36255D
E866C042 E1382369 12E9926B BA40E2FC
A820055F FB47E428 41876F14 3B6261D9
5262DB34 59F5D37E 76E46522 E8213640
04EE3CC5 379732B5 F56751FA 8E5F26AD        Frame 1, Authentication Tag
00000002                                   Frame 2, Sequence Number (2)
F1140984 FF25F943 959BE514                 Frame 2, IV
216C7C6A 2234F395 F0D2D9B9 304670BF        Frame 2, Encrypted Content
A1042608 8A8BCB3F B58CF384 D72EC004
A41455B4 9A78BAC9 36E54E68 2709B7BD
A884C1E1 705FF696 E540D297 446A8285
23DFEE28 E74B225A 732F2C0C 27C6BDA2
7597C901 65EF3502 546575D4 6D5EBF22
1FF787AB 2E38FD77 125D129C 43D44B96
778D7CEE 3C36625F FF3A985C 76F7D320
ED70B1F3 79729B47 E7D9B5FC 02FCE9F5
C8760D55 7779520A 81D54F9B EC45219D
95941F7E 5CBAEAC8 CEC13B62 1464757D
AC65B6EF 08262D74 44670624 A3657F7F
2A57F1FD E7060503 AC37E197 2F297A84
DF1172C2 FA63CF54 E6E2B9B6 A86F582B
3B16F868 1BBC5E4D 0B6919B3 08D5ABCF
FECDC4A4 8577F08B 99D766A1 E5545670
A61F0A3B A3E45A84 4D151493 63ECA38F        Frame 2, Authentication Tag
FFFFFFFF                                   Final Frame, Sequence Number End
00000003                                   Final Frame, Sequence Number (3)
35F74F11 25410F01 DD9E04BF                 Final Frame, IV
0000008E                                   Final Frame, Encrypted Content Length (142)
F7A53D37 2F467237 6FBD0B57 D1DFE830        Final Frame, Encrypted Content
B965AD1F A910AA5F 5EFFFFF4 BC7D431C
BA9FA7C4 B25AF82E 64A04E3A A0915526
88859500 7096FABB 3ACAD32A 75CFED0C
4A4E52A3 8E41484D 270B7A0F ED61810C
3A043180 DF25E5C5 3676E449 0986557F
C051AD55 A437F6BC 139E9E55 6199FD60
6ADC017D BA41CDA4 C9F17A83 3823F9EC
B66B6A5A 80FDB433 8A48D6A4 21CB
811234FD 8D589683 51F6F39A 040B3E3B        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0066                                       Signature Length (102)
30640230 085C1D3C 63424E15 B2244448        Signature
639AED00 F7624854 F8CF2203 D7198A28
758B309F 5EFD9D5D 2E07AD0B 467B8317
5208B133 02301DF7 2DFC877A 66838028
3C6A7D5E 4F8B894E 83D98E7C E350F424
7E06808D 0FE79002 E24422B9 98A0D130
A13762FF 844D
```

## 프레임 처리된 데이터(메시지 형식 버전 2)
<a name="example-framed-2"></a>

다음 예제는 [메시지 형식 버전 2](message-format.md)의 프레임 처리된 데이터에 대한 메시지 형식을 보여줍니다.

```
+--------+
| Header |
+--------+
02                                         Version (2.0)
0578                                       Algorithm ID (see Algorithms reference)
122747eb 21dfe39b 38631c61 7fad7340
cc621a30 32a11cc3 216d0204 fd148459        Message ID (random 256-bit value)
008e                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30546869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616e                                     AAD Key-Value Pair 2, Key ("1an")
000a                                       AAD Key-Value Pair 2, Value Length (10)
656e6372 79707469 6f6e                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636f6e 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616d 706c65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732d 63727970 746f2d70 75626c69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632d6b65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41746733 72703845 41345161 36706669        AAD Key-Value Pair 4, Value ("QXRnM3JwOEVBNFFhNnBmaTk3MUlTNTk3NHpOMnlZWE5vSmtwRHFPc0dIYkVaVDRqME5OMlFkRStmbTFVY01WdThnPT0=")
39373149 53353937 347a4e32 7959584e
6f4a6b70 44714f73 47486245 5a54346a
304e4e32 5164452b 666d3155 634d5675
38673d3d
0001                                       Encrypted Data Key Count (1)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732d 6b6d73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004b                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726e3a 6177733a 6b6d733a 75732d77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:658956600833:key/b3537ef1-d8dc-4780-9f5a-55776cbb2f7f")
6573742d 323a3635 38393536 36303038
33333a6b 65792f62 33353337 6566312d
64386463 2d343738 302d3966 35612d35
35373736 63626232 663766
00a7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010100 7840f38c 275e3109 7416c107        Encrypted Data Key 1, Encrypted Data Key
29515057 1964ada3 ef1c21e9 4c8ba0bd
bc9d0fb4 14000000 7e307c06 092a8648
86f70d01 0706a06f 306d0201 00306806
092a8648 86f70d01 0701301e 06096086
48016503 04012e30 11040c39 32d75294
06063803 f8460802 0110803b 2a46bc23
413196d2 903bf1d7 3ed98fc8 a94ac6ed
e00ee216 74ec1349 12777577 7fa052a5
ba62e9e4 f2ac8df6 bcb1758f 2ce0fb21
cc9ee5c9 7203bb
02                                         Content Type (2, framed data)
00001000                                   Frame Length (4096)
05cd035b 29d5499d 4587570b 87502afe        Algorithm Suite Data (key commitment)
634f7b2c c3df2aa9 88a10105 4a2c7687 
76cb339f 2536741f 59a1c202 4f2594ab        Authentication Tag
+------+
| Body |
+------+
ffffffff                                   Final Frame, Sequence Number End
00000001                                   Final Frame, Sequence Number (1)
00000000 00000000 00000001                 Final Frame, IV
00000009                                   Final Frame, Encrypted Content Length (9)
fa6e39c6 02927399 3e                       Final Frame, Encrypted Content
f683a564 405d68db eeb0656c d57c9eb0        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0067                                       Signature Length (103)
30650230 2a1647ad 98867925 c1712e8f        Signature 
ade70b3f 2a2bc3b8 50eb91ef 56cfdd18 
967d91d8 42d92baf 357bba48 f636c7a0
869cade2 023100aa ae12d08f 8a0afe85
e5054803 110c9ed8 11b2e08a c4a052a9
074217ea 3b01b660 534ac921 bf091d12
3657e2b0 9368bd
```

## 프레임 처리되지 않은 데이터(메시지 형식 버전 1)
<a name="example-nonframed"></a>

다음 예제에서는 프레임 처리되지 않은 데이터에 대한 메시지 형식을 보여줍니다.

**참고**  
가능하면 프레임 처리된 데이터를 사용하세요. 는 레거시 용도로만 프레임 처리되지 않은 데이터를 AWS Encryption SDK 지원합니다. 의 일부 언어 구현은 여전히 프레임 처리되지 않은 사이퍼텍스트를 생성할 AWS Encryption SDK 수 있습니다. 지원되는 모든 언어 구현은 프레임 처리된 사이퍼텍스트와 프레임 처리되지 않은 사이퍼텍스트를 복호화할 수 있습니다.

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see 알고리즘 참조)
B8929B01 753D4A45 C0217F39 404F70FF        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41734738 67473949 6E4C5075 3136594B        AAD Key-Value Pair 4, Value ("AsG8gG9InLPu16YKlqXTOD+nykG8YqHAhqecj8aXfD2e5B4gtVE73dZkyClA+rAMOQ==")
6C715854 4F442B6E 796B4738 59714841
68716563 6A386158 66443265 35423467
74564537 33645A6B 79436C41 2B72414D
4F513D3D
0002                                       Encrypted Data Key Count (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C28 4116449A
0F2A0383 659EF802 0110803B B23A8133
3A33605C 48840656 C38BCB1F 9CCE7369
E9A33EBE 33F46461 0591FECA 947262F3
418E1151 21311A75 E575ECC5 61A286E0
3E2DEBD5 CB005D
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040CB2 A820D0CC
76616EF2 A6B30D02 0110803B 8073D0F1
FDD01BD9 B0979082 099FDBFC F7B13548
3CC686D7 F3CF7C7A CCC52639 122A1495
71F18A46 80E2C43F A34C0E58 11D05114
2A363C2A E11397
01                                         Content Type (1, nonframed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000000                                   Frame Length (0, nonframed data)
734C1BBE 032F7025 84CDA9D0                 IV
2C82BB23 4CBF4AAB 8F5C6002 622E886C        Authentication Tag
+------+
| Body |
+------+
D39DD3E5 915E0201 77A4AB11                 IV
00000000 0000028E                          Encrypted Content Length (654)
E8B6F955 B5F22FE4 FD890224 4E1D5155        Encrypted Content
5871BA4C 93F78436 1085E4F8 D61ECE28
59455BD8 D76479DF C28D2E0B BDB3D5D3
E4159DFE C8A944B6 685643FC EA24122B
6766ECD5 E3F54653 DF205D30 0081D2D8
55FCDA5B 9F5318BC F4265B06 2FE7C741
C7D75BCC 10F05EA5 0E2F2F40 47A60344
ECE10AA7 559AF633 9DE2C21B 12AC8087
95FE9C58 C65329D1 377C4CD7 EA103EC1
31E4F48A 9B1CC047 EE5A0719 704211E5
B48A2068 8060DF60 B492A737 21B0DB21
C9B21A10 371E6179 78FAFB0B BAAEC3F4
9D86E334 701E1442 EA5DA288 64485077
54C0C231 AD43571A B9071925 609A4E59
B8178484 7EB73A4F AAE46B26 F5B374B8
12B0000C 8429F504 936B2492 AAF47E94
A5BA804F 7F190927 5D2DF651 B59D4C2F
A15D0551 DAEBA4AF 2060D0D5 CB1DA4E6
5E2034DB 4D19E7CD EEA6CF7E 549C86AC
46B2C979 AB84EE12 202FD6DF E7E3C09F
C2394012 AF20A97E 369BCBDA 62459D3E
C6FFB914 FEFD4DE5 88F5AFE1 98488557
1BABBAE4 BE55325E 4FB7E602 C1C04BEE
F3CB6B86 71666C06 6BF74E1B 0F881F31
B731839B CF711F6A 84CA95F5 958D3B44
E3862DF6 338E02B5 C345CFF8 A31D54F3
6920AA76 0BF8E903 552C5A04 917CCD11
D4E5DF5C 491EE86B 20C33FE1 5D21F0AD
6932E67C C64B3A26 B8988B25 CFA33E2B
63490741 3AB79D60 D8AEFBE9 2F48E25A
978A019C FE49EE0A 0E96BF0D D6074DDB
66DFF333 0E10226F 0A1B219C BE54E4C2
2C15100C 6A2AA3F1 88251874 FDC94F6B
9247EF61 3E7B7E0D 29F3AD89 FA14A29C
76E08E9B 9ADCDF8C C886D4FD A69F6CB4
E24FDE26 3044C856 BF08F051 1ADAD329
C4A46A1E B5AB72FE 096041F1 F3F3571B
2EAFD9CB B9EB8B83 AE05885A 8F2D2793
1E3305D9 0C9E2294 E8AD7E3B 8E4DEC96
6276C5F1 A3B7E51E 422D365D E4C0259C
50715406 822D1682 80B0F2E5 5C94
65B2E942 24BEEA6E A513F918 CCEC1DE3      Authentication Tag
+--------+
| Footer |
+--------+
0067                                     Signature Length (103)
30650230 7229DDF5 B86A5B64 54E4D627      Signature
CBE194F1 1CC0F8CF D27B7F8B F50658C0
BE84B355 3CED1721 A0BE2A1B 8E3F449E
1BEB8281 023100B2 0CB323EF 58A4ACE3
1559963B 889F72C3 B15D1700 5FB26E61
331F3614 BC407CEE B86A66FA CBF74D9E
34CB7E4B 363A38
```

# 에 대한 본문 추가 인증 데이터(AAD) 참조 AWS Encryption SDK
<a name="body-aad-reference"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

각 암호화 작업에 대해 [AES-GCM 알고리즘](algorithms-reference.md)에 추가 인증 데이터(AAD)를 제공해야 합니다. 이는 프레임 처리되었거나 처리되지 않은 [본문 데이터](message-format.md#body-structure) 둘 다에 대해서도 마찬가지입니다. AAD와 GCM(Galois/Counter Mode)에서의 AAD 사용 방법에 대한 자세한 내용은 [Recommendations for Block Cipher Modes of Operations: Galois/Counter Mode (GCM) and GMAC](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf)(블록 암호 운용 방식에 대한 권장 사항: GCM(Galois/Counter Mode) 및 GMAC)를 참조하세요.

다음 표에서는 본문 AAD를 구성하는 필드에 대해 설명합니다. 표시된 순서대로 바이트가 추가됩니다.


**본문 AAD 구조**  

| Field | 길이(바이트) | 
| --- | --- | 
| [Message ID](#body-aad-message-id) | 16 | 
| [Body AAD Content](#body-aad-content) | 변수. 다음 목록의 본문 AAD 콘텐츠를 참조하세요. | 
| [Sequence Number](#body-aad-sequence-number) | 4 | 
| [Content Length](#body-aad-content-length) | 8 | 

**메시지 ID**  
메시지 헤더에 설정된 것과 동일한 [Message ID](message-format.md#header-message-id) 값입니다.

**본문 AAD 콘텐츠**  
사용된 본문 데이터 유형에 따라 결정되는 UTF-8로 인코딩된 값입니다.  
[프레임 처리되지 않은 데이터](message-format.md#body-no-framing)의 경우 `AWSKMSEncryptionClient Single Block` 값을 사용합니다.  
[프레임 처리된 데이터](message-format.md#body-framing)의 일반 프레임의 경우 `AWSKMSEncryptionClient Frame` 값을 사용합니다.  
[프레임 처리된 데이터](message-format.md#body-framing)의 최종 프레임의 경우 `AWSKMSEncryptionClient Final Frame` 값을 사용합니다.

**시퀀스 번호**  
부호 없는 32비트 정수로 해석되는 4바이트 값입니다.  
[프레임 처리된 데이터](message-format.md#body-framing)의 경우 이는 프레임 시퀀스 번호입니다.  
[프레임 처리되지 않은 데이터](message-format.md#body-no-framing)의 경우 값 1을 사용합니다. 이 값은 16진수 표기법에서 4바이트 `00 00 00 01`로 인코딩됩니다.

**콘텐츠 길이**  
암호화를 위해 알고리즘에 제공되는 일반 텍스트 데이터의 길이(바이트)입니다. 이 값은 부호 없는 64비트 정수로 해석되는 8바이트 값입니다.

# AWS Encryption SDK 알고리즘 참조
<a name="algorithms-reference"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

와 호환되는 사이퍼텍스트를 읽고 쓸 수 있는 자체 라이브러리를 구축하는 경우 AWS Encryption SDK가 지원되는 알고리즘 제품군을 AWS Encryption SDK 구현하여 원시 데이터를 암호화하는 방법을 이해해야 합니다.

는 다음 알고리즘 제품군을 AWS Encryption SDK 지원합니다. 모든 AES-GCM 알고리즘 제품군에는 12바이트 [초기화 벡터](IV-reference.md)와 16바이트 AES-GCM 인증 태그가 있습니다. 기본 알고리즘 제품군은 AWS Encryption SDK 버전 및 선택한 키 커밋 정책에 따라 다릅니다. 자세한 내용은 [커밋 정책 및 알고리즘 제품군](troubleshooting-migration.md#configuration-conflict_1)을 참조하세요.


**AWS Encryption SDK 알고리즘 스위트**  

| 알고리즘 ID | 메시지 형식 버전 | 암호화 알고리즘 | 데이터 키 길이(비트) | 키 유도 알고리즘 | 서명 알고리즘 | 키 커밋 알고리즘 | 알고리즘 제품군 데이터 길이(바이트) | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 05 78 | 0x02 | AES-GCM | 256 | HKDF(SHA-512 사용) | ECDSA(P-384 및 SHA-384 사용) | HKDF(SHA-512 사용) | 32(키 커밋) | 
| 04 78 | 0x02 | AES-GCM | 256 | HKDF(SHA-512 사용) | 없음 | HKDF(SHA-512 사용) | 32(키 커밋) | 
| 03 78 | 0x01 | AES-GCM | 256 | HKDF(SHA-384 사용) | ECDSA(P-384 및 SHA-384 사용) | 없음 | 해당 사항 없음 | 
| 03 46 | 0x01 | AES-GCM | 192 | HKDF(SHA-384 사용) | ECDSA(P-384 및 SHA-384 사용) | 없음 | 해당 사항 없음 | 
| 02 14 | 0x01 | AES-GCM | 128 | HKDF(SHA-256 사용) | ECDSA(P-256 및 SHA-256 사용) | 없음 | 해당 사항 없음 | 
| 01 78 | 0x01 | AES-GCM | 256 | HKDF(SHA-256 사용) | 없음 | 없음 | 해당 사항 없음 | 
| 01 46 | 0x01 | AES-GCM | 192 | HKDF(SHA-256 사용) | 없음 | 없음 | 해당 사항 없음 | 
| 01 14 | 0x01 | AES-GCM | 128 | HKDF(SHA-256 사용) | 없음 | 없음 | 해당 사항 없음 | 
| 00 78 | 0x01 | AES-GCM | 256 | 없음 | 없음 | 없음 | 해당 사항 없음 | 
| 00 46 | 0x01 | AES-GCM | 192 | 없음 | 없음 | 없음 | 해당 사항 없음 | 
| 00 14 | 0x01 | AES-GCM | 128 | 없음 | 없음 | 없음 | 해당 사항 없음 | 

**알고리즘 ID**  
알고리즘 구현을 고유하게 식별하는 2바이트 16진수 값입니다. 이 값은 사이퍼텍스트의 [메시지 헤더](message-format.md#header-structure)에 저장됩니다.

**메시지 형식 버전**  
메시지 형식의 버전입니다. 키 커밋이 있는 알고리즘 제품군은 메시지 형식 버전 2(0x02)를 사용합니다. 키 커밋이 없는 알고리즘 제품군은 메시지 형식 버전 1(0x01)을 사용합니다.

**알고리즘 제품군 데이터 길이**  
알고리즘 제품군에만 관련된 데이터의 길이(바이트)입니다. 이 필드는 메시지 형식 버전 2(0x02)에서만 지원됩니다. 메시지 형식 버전 2(0x02)에서 이 데이터는 메시지 헤더의 `Algorithm suite data` 필드에 표시됩니다. [키 커밋](concepts.md#key-commitment)을 지원하는 알고리즘 제품군은 키 커밋 문자열에 32바이트를 사용합니다. 자세한 정보는 이 목록의 **키 커밋 알고리즘**을 참조하세요.

**데이터 키 길이**  
[데이터 키](concepts.md#DEK)의 길이(비트)입니다. AWS Encryption SDK 는 256비트, 192비트, 128비트 키를 지원합니다. 데이터 키는 [키링](concepts.md#keyring) 또는 마스터 키로 생성됩니다.  
일부 구현에서는 이 데이터 키가 HMAC 기반 추출 및 확장 키 유도 함수(HKDF)의 입력으로 사용됩니다. HKDF의 출력은 암호화 알고리즘에서 데이터 암호화 키로 사용됩니다. 자세한 정보는 이 목록의 **키 유도 알고리즘**을 참조하세요.

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

**키 커밋 알고리즘**  
키 커밋 문자열을 계산하는 데 사용되는 알고리즘입니다. 출력은 메시지 헤더의 `Algorithm suite data` 필드에 저장되며 키 커밋에 대한 데이터 키를 검증하는 데 사용됩니다.  
알고리즘 제품군에 키 커밋을 추가하는 방법에 대한 기술적인 설명은 Cryptology ePrint Archive의 [키 커밋 AEAD](https://eprint.iacr.org/2020/1153)를 참조하세요.

**키 유도 알고리즘**  
데이터 암호화 키를 추출하는 데 사용되는 HMAC 기반 추출 및 확장 키 유도 함수(HKDF)입니다. 는 [RFC 5869](https://tools.ietf.org/html/rfc5869)에 정의된 HKDF를 AWS Encryption SDK 사용합니다.  
**키 커밋이 없는 알고리즘 제품군**(알고리즘 ID `01xx` - `03xx`)  
+ 사용되는 해시 함수는 알고리즘 제품군에 따라 SHA-384 또는 SHA-256 중 하나입니다.
+ 추출 단계의 경우:
  + 솔트는 사용하지 않습니다. RFC에 따라 솔트는 0으로 구성된 문자열로 설정됩니다. 문자열 길이는 해시 함수 출력의 길이와 같으며, 이는 SHA-384의 경우 48바이트, SHA-256의 경우 32바이트입니다.
  + 입력 키 구성 요소는 키링 또는 마스터 키 공급자에서 받은 데이터 키입니다.
+ 확장 단계의 경우:
  + 입력 의사 난수 키는 추출 단계의 출력입니다.
  + 입력 정보는 알고리즘 ID와 메시지 ID를 순서대로 연결한 것입니다.
  + 출력 키 구성 요소의 길이는 **데이터 키 길이**입니다. 이 출력은 암호화 알고리즘에서 데이터 암호화 키로 사용됩니다.
**키 커밋이 있는 알고리즘 제품군**(알고리즘 ID `04xx` 및 `05xx`)  
+ 사용되는 해시 함수는 SHA-512입니다.
+ 추출 단계의 경우:
  + 솔트는 256비트 암호화 무작위 값입니다. [메시지 형식 버전 2](message-format.md)(0x02)에서 이 값이 `MessageID` 필드에 저장됩니다.
  + 초기 키 구성 요소는 키링 또는 마스터 키 공급자에서 받은 데이터 키입니다.
+ 확장 단계의 경우:
  + 입력 의사 난수 키는 추출 단계의 출력입니다.
  + 키 레이블은 빅 엔디안 바이트 순서로 UTF-8 인코딩된 바이트 `DERIVEKEY` 문자열입니다.
  + 입력 정보는 알고리즘 ID와 키 레이블을 순서대로 연결한 것입니다.
  + 출력 키 구성 요소의 길이는 **데이터 키 길이**입니다. 이 출력은 암호화 알고리즘에서 데이터 암호화 키로 사용됩니다.

**메시지 형식 버전**  
알고리즘 제품군과 함께 사용되는 메시지 형식의 버전입니다. 자세한 내용은 [메시지 형식 참조](message-format.md)을 참조하세요.

**서명 알고리즘**  
사이퍼텍스트 헤더 및 본문에 [디지털 서명](concepts.md#digital-sigs)을 생성하는 데 사용되는 서명 알고리즘입니다. 는 다음 세부 정보와 함께 타원 곡선 디지털 서명 알고리즘(ECDSA)을 AWS Encryption SDK 사용합니다.  
+ 사용되는 타원 곡선은 알고리즘 ID로 지정된 P-384 또는 P-256 곡선입니다. 이러한 곡선은 [DSS(디지털 서명 표준)(FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4)에 정의되어 있습니다.
+ 사용되는 해시 함수는 SHA-384(P-384 곡선 사용) 또는 SHA-256(P-256 곡선 사용)입니다.

# AWS Encryption SDK 초기화 벡터 참조
<a name="IV-reference"></a>


|  | 
| --- |
|   AWS Encryption SDK와 호환되는 자체 암호화 라이브러리를 빌드할 때 이 페이지의 정보를 참조할 수 있습니다. 호환되는 자체 암호화 라이브러리를 빌드하는 경우가 아니라면 이 정보는 필요 없을 것입니다. 지원되는 프로그래밍 언어 중 하나 AWS Encryption SDK 에서를 사용하려면 섹션을 참조하세요[프로그래밍 언어](programming-languages.md). 적절한 AWS Encryption SDK 구현의 요소를 정의하는 사양은 GitHub의 [AWS Encryption SDK 사양을](https://github.com/awslabs/aws-encryption-sdk-specification/) 참조하세요.  | 

는 지원되는 모든 [알고리즘 제품군](algorithms-reference.md)에 필요한 [초기화 벡터](https://en.wikipedia.org/wiki/Initialization_vector)(IVs)를 AWS Encryption SDK 제공합니다. SDK는 프레임 시퀀스 번호를 사용하여 IV를 구성하므로 동일한 메시지의 두 프레임이 동일한 IV를 가질 수 없습니다.

각 96비트(12바이트) IV는 다음 순서로 연결된 두 개의 빅 엔디안 바이트 배열로 구성됩니다.
+ 64비트: 0(향후 사용을 위해 예약됨)
+ 32비트: 프레임 시퀀스 번호. 헤더 인증 태그의 경우 이 값은 모두 0입니다.

[데이터 키 캐싱](data-key-caching.md)이 소개되기 전에는 AWS Encryption SDK 가 항상 새 데이터 키를 사용하여 각 메시지를 암호화하고 모든 IV를 임의로 생성했습니다. 무작위로 생성된 IV는 데이터 키가 재사용된 적이 없으므로 암호학적으로 안전했습니다. SDK가 의도적으로 데이터 키를 재사용하는 데이터 키 캐싱을 도입했을 때, SDK가 IV를 생성하는 방식을 변경했습니다.

메시지 내에서 반복할 수 없는 결정론적 IV를 사용하면 단일 데이터 키로 안전하게 실행할 수 있는 호출 수가 크게 늘어납니다. 또한 캐시된 데이터 키는 항상 [키 유도 함수](https://en.wikipedia.org/wiki/Key_derivation_function)가 있는 알고리즘 제품군을 사용합니다. 의사 무작위 키 유도 함수와 함께 결정적 IV를 사용하여 데이터 키에서 암호화 키를 추출하면가 암호화 범위를 초과하지 않고 2^32 메시지를 암호화 AWS Encryption SDK 할 수 있습니다.

# AWS KMS 계층적 키링 기술 세부 정보
<a name="hierarchical-keyring-details"></a>

[AWS KMS 계층적 키링](use-hierarchical-keyring.md)은 고유하지 않은 데이터 키를 사용하여 각 메시지를 암호화하고 활성 브랜치 키에서 파생된 고유한 래핑 키로 각 데이터 키를 암호화합니다. 이 키링은 HMAC SHA-256으로 의사 난수 함수를 통해 카운터 모드에서 [키 유도](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-108r1.pdf)를 사용하여 다음 입력으로 32바이트 래핑 키를 도출합니다.
+ 16바이트 무작위 솔트
+ 활성 브랜치 키
+ 키 공급자 식별자 "aws-kms-hierarchy"의 [UTF-8 인코딩된](https://en.wikipedia.org/wiki/UTF-8) 값

계층적 키링은 파생된 래핑 키를 사용하여 16바이트 인증 태그 및 다음 입력과 함께 AES-GCM-256을 사용하여 일반 텍스트 데이터 키의 사본을 암호화합니다.
+ 파생된 래핑 키는 AES-GCM 암호 키로 사용됩니다
+ 데이터 키는 AES-GCM 메시지로 사용됩니다
+ 12바이트 무작위 초기화 벡터(IV)는 AES-GCM IV로 사용됩니다
+ 다음과 같은 직렬화된 값을 포함하는 추가 인증 데이터(AAD)    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/hierarchical-keyring-details.html)