AWS Encryption SDK의 모범 사례 - AWS Encryption SDK

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

AWS Encryption SDK의 모범 사례

AWS Encryption SDK는 업계 표준 및 모범 사례를 사용하여 데이터를 쉽게 보호할 수 있도록 설계되었습니다. 많은 모범 사례가 기본값으로 선택되어 있지만 일부 사례는 필요한 상황이라면 선택적으로 사용을 권장합니다.

최신 버전 사용

AWS Encryption SDK를 처음 사용할 때는 선호하는 프로그래밍 언어로 제공되는 최신 버전을 사용하세요. AWS Encryption SDK를 사용하고 있다면 가능한 한 빨리 각 최신 버전으로 업그레이드하세요. 이렇게 하면 권장 구성을 사용하고 새로운 보안 속성을 활용하여 데이터를 보호할 수 있습니다. 마이그레이션 및 배포 지침을 포함하여 지원되는 버전에 대한 자세한 내용은 지원 및 유지 관리의 버전 AWS Encryption SDK 섹션을 참조하세요.

새 버전에서 코드의 요소가 더 이상 사용되지 않는 경우 가능한 한 빨리 해당 요소를 교체합니다. 일반적으로 지원 중단 경고와 코드 주석에서 좋은 대안을 제시해 줍니다.

중요한 업그레이드를 더 쉽게 하고 오류 발생을 줄이기 위해 임시적 또는 일시적으로 릴리스를 제공하는 경우가 있습니다. 이러한 릴리스와 함께 제공되는 설명서를 사용하면 프로덕션 워크플로를 중단하지 않고 애플리케이션을 업그레이드할 수 있습니다.

기본값 사용

AWS Encryption SDK는 모범 사례가 기본값으로 설정되어 있습니다. 가능하면 설정된 기본값을 사용하세요. 기본값이 실용적이지 않은 경우 서명이 없는 알고리즘 제품군과 같은 대안을 제공합니다. 또한 고급 사용자에게도 사용자 지정 키링, 마스터 키 공급자, 암호화 구성 요소 관리자(CMM)와 같은 사용자 지정 기능을 제공합니다. 이러한 고급 대안을 신중하게 사용하고 가능하면 보안 엔지니어의 확인을 받도록 하세요.

암호화 컨텍스트 사용

암호화 작업의 보안을 개선하려면 모든 데이터 암호화 요청에 의미 있는 값을 포함하는 암호화 컨텍스트를 포함시키세요. 암호화 컨텍스트를 사용하는 것은 선택 사항이지만 권장되는 암호화 모범 사례입니다. 암호화 컨텍스트는 AWS Encryption SDK에서 인증된 암호화를 위한 추가 인증 데이터(AAD)를 제공합니다. 비밀은 아니지만 암호화 컨텍스트는 암호화된 데이터의 무결성과 신뢰성을 보호하는 데 도움이 될 수 있습니다.

AWS Encryption SDK에서는 암호화할 때만 암호화 컨텍스트를 지정합니다. 암호를 복호화할 때 AWS Encryption SDK는 AWS Encryption SDK가 반환하는 암호화된 메시지의 헤더에 있는 암호화 컨텍스트를 사용합니다. 애플리케이션에서 일반 텍스트 데이터를 반환하기 전에, 메시지를 암호화하는 데 사용한 암호화 컨텍스트가 메시지를 복호화하는 데 사용된 암호화 컨텍스트에 포함되어 있는지 확인합니다. 자세한 내용은 사용 중인 프로그래밍 언어의 예를 참조하세요.

명령줄 인터페이스를 사용하면 AWS Encryption SDK가 암호화 컨텍스트를 확인합니다.

래핑 키 보호

AWS Encryption SDK는 고유 데이터 키를 생성하여 각 일반 텍스트 메시지를 암호화합니다. 그런 다음 사용자가 제공한 래핑 키를 사용하여 데이터 키를 암호화합니다. 래핑 키를 분실하거나 삭제하면 암호화된 데이터를 복구할 수 없습니다. 키가 보호되지 않으면 데이터가 취약해질 수 있습니다.

AWS Key Management Service(AWS KMS)와 같이 보안 키 인프라로 보호되는 래핑 키를 사용하세요. 원시 AES 또는 원시 RSA 키를 사용하는 경우 보안 요구 사항에 부합하는 무작위성 소스 및 내구성이 뛰어난 스토리지를 사용하세요. 하드웨어 보안 모듈(HSM) 또는 HSM을 제공하는 서비스(예: AWS CloudHSM)에서 래핑 키를 생성하고 저장하는 것이 가장 좋습니다.

키 인프라의 인증 메커니즘을 사용하여 래핑 키에 대한 액세스를 필요한 사용자로만 제한하세요. 최소 권한과 같은 모범 사례 원칙을 구현하세요. AWS KMS keys를 사용할 때는 모범 사례 원칙을 구현하는 키 정책과 IAM 정책을 사용합니다.

래핑 키 지정

암호화할 때뿐만 아니라 복호화할 때도 명시적으로 래핑 키를 지정하는 것이 항상 가장 좋습니다. 이렇게 하면 AWS Encryption SDK는 사용자가 지정한 키만 사용합니다. 이렇게 하면 의도한 암호화 키만 사용할 수 있습니다. 또한 AWS KMS 래핑 키의 경우, 실수로 다른 AWS 계정 또는 리전의 키를 사용하거나 사용 권한이 없는 키로 복호화를 시도하는 것을 방지하여 성능을 개선합니다.

암호화할 때 AWS Encryption SDK에서 제공하는 키링 및 마스터 키 공급자는 래핑 키를 지정하도록 요구합니다. 그리고 사용자가 지정한 래핑 키만 모두 사용합니다. 또한 원시 AES 키링, 원시 RSA 키링, JCEMasterKeys를 사용하여 암호화 및 복호화할 때도 래핑 키를 지정해야 합니다.

하지만 AWS KMS 키링과 마스터 키 공급자를 사용하여 복호화할 때는 래핑 키를 지정하지 않아도 됩니다. AWS Encryption SDK는 암호화된 데이터 키의 메타데이터에서 키 식별자를 가져올 수 있습니다. 하지만 래핑 키를 지정하는 것이 권장되는 모범 사례입니다.

AWS KMS 래핑 키를 사용할 때 이 모범 사례를 지원하려면 다음을 권장합니다.

  • 래핑 키를 지정하는 AWS KMS 키링을 사용하세요. 암호화 및 복호화 시 이러한 키링은 사용자가 지정하는 지정된 래핑 키만 사용합니다.

  • AWS KMS 마스터 키 및 마스터 키 공급자를 사용하는 경우 AWS Encryption SDK 버전 1.7.x에 도입된 엄격 모드 생성자를 사용하세요. 지정한 래핑 키로만 암호화하고 복호화하는 공급자를 생성합니다. 항상 모든 래핑 키로 복호화하는 마스터 키 공급자의 생성자는 버전 1.7.x에서 더 이상 사용되지 않으며 버전 2.0.x에서 삭제되었습니다.

복호화를 위해 AWS KMS 래핑 키를 지정하는 것이 비실용적일 경우 검색 공급자를 사용할 수 있습니다. C 및 JavaScript의 AWS Encryption SDK는 AWS KMS 검색 키링을 지원합니다. 검색 모드가 있는 마스터 키 공급자는 버전 1.7.x 이상에서 Java 및 Python으로 사용할 수 있습니다. 이러한 검색 공급자는 AWS KMS 래핑 키로 복호화할 때만 사용되며, 데이터 키를 암호화한 래핑 키를 사용하도록 AWS Encryption SDK에 명시적으로 지시합니다.

검색 공급자를 사용해야 하는 경우 검색 필터 기능을 사용하여 해당 공급자가 사용하는 래핑 키를 제한합니다. 예를 들어 AWS KMS 리전 검색 키링은 특정 AWS 리전의 래핑 키만 사용합니다. 또한 특정 AWS 계정의 래핑 키만 사용하도록 AWS KMS 키링과 AWS KMS 마스터 키 공급자를 구성할 수도 있습니다. 또한 항상 그렇듯이 키 정책 및 IAM 정책을 사용하여 AWS KMS 래핑 키에 대한 액세스를 제어하세요.

디지털 서명 사용

서명 기능이 있는 알고리즘 제품군을 사용하는 것이 가장 좋습니다. 디지털 서명은 메시지 발신자가 메시지를 보낼 권한이 있는지 확인하고 메시지의 무결성을 보호합니다. 모든 버전의 AWS Encryption SDK는 기본적으로 서명 기능이 포함된 알고리즘 제품군을 사용합니다.

보안 요구 사항에 디지털 서명이 포함되지 않은 경우 디지털 서명이 없는 알고리즘 제품군을 선택할 수 있습니다. 그러나 특히 한 사용자 그룹이 데이터를 암호화하고 다른 사용자 그룹이 해당 데이터를 복호화하는 경우에 디지털 서명을 사용하는 것이 좋습니다.

키 커밋 사용

키 커밋 보안 기능을 사용하는 것이 가장 좋습니다. 키 커밋은 데이터를 암호화한 고유 데이터 키의 ID를 확인함으로써 두 개 이상의 일반 텍스트 메시지를 반환할 수 있는 사이퍼텍스트를 복호화하는 것을 방지합니다.

AWS Encryption SDK는 버전 2.0.x부터 키 커밋을 통한 암호화 및 복호화를 완벽하게 지원합니다. 기본적으로 모든 메시지는 키 커밋을 통해 암호화되고 복호화됩니다. AWS Encryption SDK 버전 1.7.x는 키 커밋을 사용하여 사이퍼텍스트를 복호화할 수 있습니다. 이 버전은 이하 버전 사용자가 버전 2.0.x를 성공적으로 배포하는 데 도움이 되도록 설계되었습니다.

키 커밋에 대한 지원에는 새로운 알고리즘 제품군과 키 커밋이 없는 사이퍼텍스트보다 단 30바이트 더 큰 사이퍼텍스트를 생성하는 새로운 메시지 형식이 포함됩니다. 이 설계는 성능에 미치는 영향을 최소화하여 대부분의 사용자가 키 커밋의 이점을 누릴 수 있도록 했습니다. 애플리케이션이 크기와 성능에 매우 민감한 경우 커밋 정책 설정을 사용하여 키 커밋을 사용하지 않도록 설정하거나 AWS Encryption SDK가 약정 없이 메시지를 복호화하도록 허용할 수 있습니다. 단, 반드시 필요한 경우에만 설정하는 것이 좋습니다.

암호화된 데이터 키의 수 제한

복호화하는 메시지, 특히 신뢰할 수 없는 출처에서 온 메시지의 암호화된 데이터 키의 수를 제한하는 것이 좋습니다. 암호를 복호화할 수 없는 수많은 암호화된 데이터 키가 포함된 메시지를 복호화하면 지연 시간이 길어지고, 비용이 늘어나며, 계정을 공유하는 타사 및 애플리케이션의 성능이 저하되고, 키 인프라가 고갈될 가능성이 있습니다. 제한이 없을 경우, 암호화된 메시지는 최대 65,535(2^16 - 1)개의 암호화된 데이터 키를 보유할 수 있습니다. 자세한 내용은 암호화된 데이터 키 제한 섹션을 참조하세요.

이러한 모범 사례의 기반이 되는 AWS Encryption SDK 보안 기능에 대한 자세한 내용은 AWS 보안 블로그향상된 클라이언트측 암호화: 명시적 KeyID 및 키 커밋을 참조하세요.