

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

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

지원되는 프로그래밍 언어 구현은 *키링을* 사용하여 [봉투 암호화](concepts.md#envelope-encryption)를 수행합니다. 키링은 데이터 키를 생성, 암호화 및 복호화합니다. 키링에 따라 각 메시지를 보호하는 고유한 데이터 키의 원본과 해당 데이터 키를 암호화하는 [래핑 키](concepts.md#master-key)가 결정됩니다. 암호화할 때 키링을 지정하고 암호를 복호화할 때는 동일하거나 다른 키링을 지정합니다. SDK에서 제공하는 키링을 사용하거나 호환되는 사용자 지정 키링을 직접 작성할 수 있습니다.

각 키링을 개별적으로 사용하거나 키링을 [여러 개의 키링](use-multi-keyring.md)으로 결합할 수 있습니다. 대부분의 키링이 데이터 키를 생성, 암호화 및 복호화할 수 있지만, 데이터 키만 생성하는 키링과 같이 특정 작업 하나만 수행하는 키링을 만들고 해당 키링을 다른 키링과 조합하여 사용할 수 있습니다.

래핑 키를 보호하고 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS)를 암호화되지 않은 상태로 두지 않는를 사용하는 키링과 같은 보안 경계 내에서 암호화 작업을 수행하는 AWS KMS 키링 AWS KMS keys 을 사용하는 것이 좋습니다. 하드웨어 보안 모듈(HSM)에 저장되거나 다른 마스터 키 서비스에서 보호하는 래핑 키를 사용하는 키링을 작성할 수도 있습니다. 자세한 내용은 *AWS Encryption SDK 사양*의 [키링 인터페이스](https://github.com/awslabs/aws-encryption-sdk-specification/blob/master/framework/keyring-interface.md) 항목을 참조하세요.

키링은 다른 프로그래밍 언어 구현에 사용되는 [마스터 키](concepts.md#master-key) 및 [마스터 키 공급자](concepts.md#master-key-provider)의 역할을 합니다. AWS Encryption SDK 의 다른 언어 구현을 사용하여 데이터를 암호화하고 복호화하는 경우 호환되는 키링과 마스터 키 제공자를 사용해야 합니다. 자세한 내용은 [키링 호환성](#keyring-compatibility)을 참조하세요.

이 주제에서는의 키링 기능을 사용하는 방법과 키링을 선택하는 AWS Encryption SDK 방법을 설명합니다.

## 키링 작동 방식
<a name="using-keyrings"></a>

데이터를 암호화할 때는 키링에 암호화 자료를 AWS Encryption SDK 요청합니다. 키링은 일반 텍스트 데이터 키와 키링의 각 래핑 키로 암호화된 데이터 키의 복사본을 반환합니다. 는 일반 텍스트 키를 AWS Encryption SDK 사용하여 데이터를 암호화한 다음 일반 텍스트 데이터 키를 삭제합니다. 그런 다음는 [암호화된 데이터 키와 암호화된 데이터가 포함된 암호화된 메시지를](concepts.md#message) AWS Encryption SDK 반환합니다.

![\[여러 래핑 키가 있는 키링을 사용한 암호화.\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/images/keyring-encrypt.png)


데이터를 복호화할 때 데이터를 암호화하는 데 사용한 것과 동일한 키링을 사용하거나 다른 키링을 사용할 수 있습니다. 데이터를 복호화하려면 복호화 키링에 암호화 키링에 래핑 키가 하나 이상 포함되거나 액세스 권한이 있어야 합니다.

는 암호화된 메시지에서 키링으로 암호화된 데이터 키를 AWS Encryption SDK 전달하고 키링에이 중 하나를 해독하도록 요청합니다. 키링은 해당 래핑 키를 사용하여 암호화된 데이터 키 중 하나를 암호화 해제하고 일반 텍스트 데이터 키를 반환합니다. AWS Encryption SDK 는 일반 텍스트 데이터 키를 사용하여 데이터를 복호화합니다. 키링에 있는 래핑 키 중 어느 것도 암호화된 데이터 키를 복호화할 수 없는 경우 복호화 작업이 실패합니다.

![\[키링을 사용하여 복호화.\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/images/keyring-decrypt.png)


하나의 키링을 사용하거나, 동일한 유형 또는 여러 유형의 키링을 하나의 [다중 키링](use-multi-keyring.md)에 조합할 수도 있습니다. 데이터를 암호화할 때 다중 키링은 다중 키링을 구성하는 모든 키링의 모든 래핑 키로 암호화된 데이터 키의 사본을 반환합니다. 다중 키링의 래핑 키 중 하나를 포함하는 키링을 사용하여 데이터를 복호화할 수 있습니다.

## 키링 호환성
<a name="keyring-compatibility"></a>

의 다양한 언어 구현 AWS Encryption SDK 에는 몇 가지 아키텍처 차이가 있지만 언어 제약에 따라 완전히 호환됩니다. 한 언어 구현을 사용하여 데이터를 암호화하고 다른 언어 구현으로 복호화할 수 있습니다. 하지만 데이터 키를 암호화하고 복호화하려면 동일하거나 상응하는 래핑 키를 사용해야 합니다. 언어 제약 조건에 대한 자세한 내용은 주제에서와 같이 각 언어 구현[의 호환성 AWS Encryption SDK for JavaScript](javascript-compatibility.md)에 대한 AWS Encryption SDK for JavaScript 주제를 참조하세요.

키링은 다음 프로그래밍 언어로 지원됩니다.
+ AWS Encryption SDK for C
+ AWS Encryption SDK for JavaScript
+ AWS Encryption SDK .NET용
+ 의 버전 3.*x* AWS Encryption SDK for Java
+ 선택적 [암호화 자료 공급자 라이브러리](https://github.com/aws/aws-cryptographic-material-providers-library)(MPL) 종속성과 함께 사용하는 AWS Encryption SDK for Python경우 버전 4.*x*.
+ AWS Encryption SDK Rust용
+ AWS Encryption SDK Go용

### 암호화 키링에 대한 다양한 요구 사항
<a name="encrypt-keyring-requirements"></a>

이외의 AWS Encryption SDK 언어 구현에서는 암호화 키링(또는 다중 키링) 또는 마스터 키 공급자의 AWS Encryption SDK for C모든 래핑 키가 데이터 키를 암호화할 수 있어야 합니다. 래핑 키가 암호화되지 않으면 암호화 메서드가 실패합니다. 따라서 호출자는 키링의 모든 키에 [필요한 권한](use-kms-keyring.md#kms-keyring-permissions)을 가지고 있어야 합니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다.

단 AWS Encryption SDK for C, 암호화 작업은 표준 검색 키링을 무시하지만 다중 리전 검색 키링을 단독으로 지정하거나 다중 키링에서 지정하는 경우 실패합니다.

### 호환되는 키링 및 마스터 키 제공자
<a name="keyring-compat-table"></a>

다음 표에는에서 AWS Encryption SDK 제공하는 키링과 호환되는 마스터 키 및 마스터 키 공급자가 나와 있습니다. 언어 제약 조건으로 인한 사소한 비호환성은 언어 구현에 대한 주제에 설명되어 있습니다.


| 키링: | 마스터 키 공급자: | 
| --- | --- | 
| [AWS KMS 키링](use-kms-keyring.md) |  [KMSMasterKey(Java)](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/kms/KmsMasterKey.html) [KMSMasterKeyProvider(Java)](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/kms/KmsMasterKeyProvider.html) [KMSMasterKey(Python)](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.kms.html) [KMSMasterKeyProvider(Python)](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.kms.html#aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider)   AWS Encryption SDK for Python 및 에는 [AWS KMS 리전 검색 키링](use-kms-keyring.md#kms-keyring-regional)과 동일한 마스터 키 또는 마스터 키 공급자가 포함되지 AWS Encryption SDK for Java 않습니다.   | 
| [AWS KMS 계층적 키링](use-hierarchical-keyring.md) | 다음 프로그래밍 언어 및 버전에서 지원됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/choose-keyring.html) | 
| [AWS KMS ECDH 키링](use-kms-ecdh-keyring.md) | 다음 프로그래밍 언어 및 버전에서 지원됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/choose-keyring.html) | 
| [Raw AES 키링](use-raw-aes-keyring.md) | 비대칭 암호화 키와 함께 사용하는 경우:[JceMasterKey](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/jce/JceMasterKey.html)(Java)[RawMasterKey](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.raw.html#aws_encryption_sdk.key_providers.raw.RawMasterKey)(Python) | 
| [Raw RSA 키링](use-raw-rsa-keyring.md) | 비대칭 암호화 키와 함께 사용하는 경우:[JceMasterKey](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/jce/JceMasterKey.html)(Java)[RawMasterKey](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.raw.html#aws_encryption_sdk.key_providers.raw.RawMasterKey)(Python) Raw RSA 키링은 비대칭 KMS 키를 지원하지 않습니다. 비대칭 RSA KMS 키를 사용하려면 for .NET 버전 4 AWS Encryption SDK .*x* 이상에서 대칭 암호화(`SYMMETRIC_DEFAULT`) 또는 비대칭 RSA를 사용하는 AWS KMS 키링을 지원합니다 AWS KMS keys.  | 
| [원시 ECDH 키링](use-raw-ecdh-keyring.md) | 다음 프로그래밍 언어 및 버전에서 지원됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/choose-keyring.html) | 