자주 묻는 질문(FAQ) - AWS Encryption SDK

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

자주 묻는 질문(FAQ)

AWS Encryption SDK는 AWS SDK와 어떻게 다른가요?

AWS SDK는 AWS Key Management Service(AWS KMS)를 포함하여 Amazon Web Services(AWS)와 상호 작용하기 위한 라이브러리를 제공합니다. AWS Encryption SDK for .NET 같은 AWS Encryption SDK의 일부 언어 구현에는 항상 동일한 프로그래밍 언어의 AWS SDK가 반드시 필요합니다. 다른 언어 구현에서는 키링 또는 마스터 키 공급자에서 AWS KMS 키를 사용하는 경우에만 해당 AWS SDK가 반드시 필요합니다. 자세한 정보는 AWS Encryption SDK 프로그래밍 언어에서 프로그래밍 언어에 대한 주제를 참조하세요.

AWS SDK를 사용하여 소량의 데이터(대칭 암호화 키의 경우 최대 4,096바이트)를 암호화 및 복호화하고 클라이언트측 암호화를 위한 데이터 키를 생성하는 등 AWS KMS와 상호 작용할 수 있습니다. 하지만 데이터 키를 생성할 때는 AWS KMS의 외부 데이터 키로 데이터를 암호화하고, 일반 텍스트 데이터 키를 안전하게 폐기하고, 암호화된 데이터 키를 저장하고, 데이터 키를 복호화하고, 데이터를 복호화하는 등 전체 암호화 및 복호화 프로세스를 관리해야 합니다. AWS Encryption SDK에서 이 프로세스를 처리해 줍니다.

AWS Encryption SDK는 업계 표준 및 모범 사례를 사용하여 데이터를 암호화하고 복호화하는 라이브러리를 제공합니다. 데이터 키를 생성하고 지정한 래핑 키로 암호화한 다음 암호화된 데이터와 복호화에 필요한 암호화된 데이터 키가 포함된 이동 가능 데이터 객체인 암호화된 메시지를 반환합니다. 복호화할 때가 되어 암호화된 메시지와 래핑 키(선택 사항) 중 하나 이상을 전달하면 AWS Encryption SDK가 일반 텍스트 데이터를 반환합니다.

AWS Encryption SDK에서 AWS KMS keys를 래핑 키로 사용할 수 있지만 필수 사항은 아닙니다. 직접 생성한 암호화 키와 키 관리자 또는 온프레미스 하드웨어 보안 모듈에서 생성한 암호화 키를 사용할 수 있습니다. AWS 계정이 없어도 AWS Encryption SDK를 사용할 수 있습니다.

AWS Encryption SDK는 Amazon S3 암호화 클라이언트와 어떻게 다른가요?

AWS SDK의 Amazon S3 암호화 클라이언트는 Amazon Simple Storage Service(S3)에 저장된 데이터에 대해 암호화 및 복호화를 제공합니다. 이러한 클라이언트는 Amazon S3와 긴밀하게 연결되어 있으며 Amazon S3에 저장된 데이터에만 사용할 수 있습니다.

AWS Encryption SDK는 사용자가 어디에나 저장할 수 있는 데이터를 암호화하고 복호화합니다. AWS Encryption SDK 및 Amazon S3 암호화 클라이언트는 서로 다른 데이터 형식으로 사이퍼텍스트를 생성하기 때문에 호환되지 않습니다.

AWS Encryption SDK에서 지원하는 암호화 알고리즘에는 어떤 것이 있으며 기본값은 무엇인가요?

AWS Encryption SDK는 Galois/Counter Mode(GCM)의 Advanced Encryption Standard(AES) 대칭 알고리즘(AES-GCM)을 사용하여 데이터를 암호화합니다. 이를 통해 여러 대칭 및 비대칭 알고리즘 중에서 선택하여, 데이터를 암호화하는 데이터 키를 암호화할 수 있습니다.

AES-GCM의 기본 알고리즘 제품군은 256비트 키, 키 유도(HKDF), 디지털 서명키 커밋을 포함하는 AES-GCM입니다. AWS Encryption SDK는 디지털 서명 및 키 커밋 없이 192비트 및 128비트 암호화 키와 암호화 알고리즘도 지원합니다.

모든 경우에 초기화 벡터(IV)의 길이는 12바이트이고 인증 태그의 길이는 16바이트입니다. 기본적으로 SDK는 데이터 키를 HMAC 기반 extract-and-expand 키 유도 함수(HKDF)의 입력으로 사용하여 AES-GCM 암호화 키를 유도하고 Elliptic Curve Digital Signature Algorithm(ECDSA) 서명도 추가합니다.

사용할 알고리즘 선택에 대한 자세한 내용은 지원 알고리즘 제품군 섹션을 참조하세요.

지원되는 알고리즘에 대한 구현 세부 정보는 알고리즘 참조 섹션을 참조하세요.

초기화 벡터(IV)는 어떻게 생성되며 어디에 저장되나요?

AWS Encryption SDK는 결정론적 방법을 사용하여 각 프레임에 대해 서로 다른 IV 값을 구성합니다. 이 절차를 통해 메시지 내에서 IV가 반복되지 않도록 합니다. (AWS Encryption SDK for Java 및 AWS Encryption SDK for Python의 버전 1.3.0 이전에는 각 프레임에 대해 고유한 IV 값을 AWS Encryption SDK가 임의로 생성했습니다.)

IV는 AWS Encryption SDK가 반환하는 암호화된 메시지에 저장됩니다. 자세한 내용은 AWS Encryption SDK 메시지 형식 참조 섹션을 참조하세요.

각 데이터 키는 어떻게 생성, 암호화 및 복호화되나요?

방법은 사용하는 키링 또는 마스터 키 공급자에 따라 다릅니다.

AWS Encryption SDK의 AWS KMS 키링 및 마스터 키 공급자는 AWS KMS GenerateDataKey API 작업을 사용하여 각 데이터 키를 생성하고 해당 래핑 키로 암호화합니다. 추가 KMS 키를 사용하여 데이터 키 사본을 암호화하려면 AWS KMS Encrypt 작업을 사용합니다. 데이터 키를 복호화하려면 AWS KMS Decrypt 작업을 사용합니다. 자세한 정보는 GitHub의 AWS Encryption SDK 사양에서 AWS KMS 키링을 참조하세요.

다른 키링은 각 프로그래밍 언어의 모범 사례 방법을 사용하여 데이터 키를 생성하고 암호화 및 복호화합니다. 자세한 내용은 GitHub AWS Encryption SDK 사양의 프레임워크 섹션에서 키링 또는 마스터 키 공급자의 사양을 참조하세요.

데이터를 암호화하는 데 사용된 데이터 키를 추적하려면 어떻게 해야 하나요?

AWS Encryption SDK에서 이 작업을 수행합니다. 데이터를 암호화하면 SDK는 데이터 키를 암호화하고, 암호화된 키를 암호화된 데이터와 함께 반환되는 암호화된 메시지에 저장합니다. 데이터를 복호화할 때 AWS Encryption SDK는 암호화된 메시지에서 암호화된 데이터 키를 추출하여 데이터 복호화에 사용합니다.

AWS Encryption SDK는 암호화된 데이터 키와 암호화된 데이터를 어떻게 저장하나요?

AWS Encryption SDK의 암호화 작업은 암호화된 데이터 및 암호화된 데이터 키가 들어 있는 단일 데이터 구조, 즉 암호화된 메시지를 반환합니다. 메시지 형식은 최소 두 가지 부분인 헤더본문으로 구성됩니다. 메시지 헤더에는 암호화된 데이터 키와, 메시지 본문 구성 방식에 대한 정보가 포함되어 있습니다. 메시지 본문에는 암호화된 데이터가 포함되어 있습니다. 알고리즘 제품군에 디지털 서명이 포함된 경우 메시지 형식에는 서명이 포함된 바닥글이 포함됩니다. 자세한 내용은 AWS Encryption SDK 메시지 형식 참조 섹션을 참조하세요.

AWS Encryption SDK의 메시지 형식은 암호화된 데이터에 얼마나 많은 오버헤드를 더하나요?

AWS Encryption SDK로 인해 추가되는 오버헤드의 양은 다음을 비롯하여 여러 요인에 따라 달라집니다.

  • 일반 텍스트 데이터의 크기

  • 지원되는 알고리즘 중 사용되는 알고리즘

  • 추가 인증 데이터(AAD) 제공 여부 및 해당 AAD의 길이

  • 래핑 키 또는 마스터 키의 수 및 유형

  • 프레임 크기(프레임 데이터를 사용하는 경우)

AWS Encryption SDK를 기본 구성(래핑 키(또는 마스터 키)로 AWS KMS key 1개, AAD 없음, 프레임 처리되지 않은 데이터, 서명이 포함된 암호화 알고리즘)으로 사용하는 경우 오버헤드는 약 600바이트입니다. 일반적으로, AWS Encryption SDK는 제공된 AAD를 제외하고 1KB 이하의 오버헤드를 더하는 것으로 가정할 수 있습니다. 자세한 내용은 AWS Encryption SDK 메시지 형식 참조 섹션을 참조하세요.

자체 마스터 키 공급자를 사용할 수 있나요?

예. 구현 세부 정보는 사용하는 지원 프로그래밍 언어에 따라 달라집니다. 그러나 지원되는 모든 언어를 사용하여 사용자 지정 암호화 자료 관리자(CMM), 마스터 키 공급자, 키링, 마스터 키 및 래핑 키를 정의할 수 있습니다.

두 개 이상의 래핑 키로 데이터를 암호화할 수 있나요?

예. 키가 다른 리전에 있거나 복호화에 사용할 수 없는 경우 추가 래핑 키(또는 마스터 키)를 사용하여 데이터 키를 암호화하여 중복성을 추가할 수 있습니다.

여러 래핑 키로 데이터를 암호화하려면 여러 래핑 키가 있는 키링 또는 마스터 키 공급자를 만듭니다. 키링으로 작업할 때 여러 래핑 키를 사용하여 단일 키링을 만들거나 다중 키링을 만들 수 있습니다.

여러 래핑 키로 데이터를 암호화하는 경우 AWS Encryption SDK는 하나의 래핑 키를 사용하여 일반 텍스트 데이터 키를 생성합니다. 데이터 키는 고유하며 래핑 키와 수학적으로 관련이 없습니다. 이 작업은 일반 텍스트 데이터 키와, 래핑 키로 암호화된 데이터 키 복사본을 반환합니다. 그러면 암호화 메서드는 다른 래핑 키로 데이터 키를 암호화합니다. 그 결과로 생성되는 암호화된 메시지에는 암호화된 데이터와, 각 래핑 키의 암호화된 데이터 키 1개가 포함됩니다.

암호화된 메시지는 암호화 작업에 사용된 래핑 키 중 하나를 사용하여 복호화할 수 있습니다. AWS Encryption SDK는 래핑 키를 사용하여 암호화된 데이터 키를 복호화합니다. 그런 다음 일반 텍스트 데이터 키를 사용하여 데이터를 복호화합니다.

AWS Encryption SDK로 암호화할 수 있는 데이터 유형에는 어떤 것이 있나요?

AWS Encryption SDK의 대부분의 프로그래밍 언어 구현은 원시 바이트(바이트 배열), I/O 스트림(바이트 스트림) 및 문자열을 암호화할 수 있습니다. AWS Encryption SDK for .NET은 I/O 스트림을 지원하지 않습니다. 지원되는 프로그래밍 언어 각각에 대한 예제 코드를 제공합니다.

AWS Encryption SDK는 입/출력(I/O) 스트림을 어떻게 암호화 및 복호화하나요?

AWS Encryption SDK는 기본 I/O 스트림이 포함된 암호화 또는 복호화 스트림을 생성합니다. 암호화 또는 복호화 스트림은 읽기 또는 쓰기 호출에서 암호화 작업을 수행합니다. 예를 들어 기본 스트림에서 일반 텍스트 데이터를 읽고 암호화한 후 결과를 반환할 수 있습니다. 또는 기본 스트림에서 사이퍼텍스트를 읽고 복호화한 후 결과를 반환할 수 있습니다. 스트리밍을 지원하는 지원되는 프로그래밍 언어 각각의 스트림을 암호화 및 복호화하는 예제 코드를 제공합니다.

AWS Encryption SDK for .NET은 I/O 스트림을 지원하지 않습니다.