데이터 키 캐싱 세부 정보 - AWS Encryption SDK

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

데이터 키 캐싱 세부 정보

대부분의 애플리케이션은 사용자 지정 코드를 작성하지 않고도 데이터 키 캐싱의 기본 구현을 사용할 수 있습니다. 이 섹션에서는 기본 구현과, 옵션에 대한 몇 가지 세부 정보를 설명합니다.

데이터 키 캐싱의 작동 방식

요청에서 데이터 키 캐싱을 사용하여 데이터를 암호화하거나 복호화하는 경우 AWS Encryption SDK는 먼저 캐시에서 요청과 일치하는 데이터 키를 검색합니다. 유효한 일치 항목을 찾으면 캐시된 데이터 키를 사용하여 데이터를 암호화합니다. 그러지 않으면 캐시가 없을 때와 마찬가지로 새 데이터 키가 생성됩니다.

스트리밍 데이터와 같이 크기를 알 수 없는 데이터에는 데이터 키 캐싱이 사용되지 않습니다. 이를 통해 캐싱 CMM이 최대 바이트 임계값을 적절하게 적용할 수 있습니다. 이 동작을 방지하려면 메시지 크기를 암호화 요청에 추가합니다.

데이터 키 캐싱은 캐시 외에도 캐싱 암호화 자료 관리자(캐싱 CMM)를 사용합니다. 캐싱 CMM은 캐시 및 기본 CMM과 상호 작용하는 특수 암호화 자료 관리자(CMM)입니다. (마스터 키 공급자 또는 키링을 지정하면 AWS Encryption SDK에서 기본 CMM을 만듭니다.) 캐싱 CMM은 기본 CMM이 반환하는 데이터 키를 캐시합니다. 또한 캐싱 CMM은 사용자가 설정한 캐시 보안 임계값을 적용합니다.

캐시에서 잘못된 데이터 키가 선택되는 것을 방지하기 위해 모든 호환 가능한 캐싱 CMM은 캐시된 암호화 자료의 다음 속성이 구성 요소 요청과 일치해야 합니다.

참고

AWS Encryption SDK는 알고리즘 제품군키 파생 함수를 사용하는 경우에만 데이터 키를 캐시합니다.

다음 워크플로는 데이터 키 캐싱을 사용하거나 사용하지 않고 데이터 암호화 요청을 처리하는 방법을 보여줍니다. 캐시와 캐싱 CMM을 포함하여 사용자가 생성한 캐싱 구성 요소가 프로세스에서 어떻게 사용되는지 보여줍니다.

캐싱을 사용하지 않고 데이터 암호화

캐싱을 사용하지 않고 암호화 자료를 가져오려면 다음을 수행합니다.

  1. 애플리케이션에서 AWS Encryption SDK에 데이터를 암호화하도록 요청합니다.

    요청은 마스터 키 공급자 또는 키링을 지정합니다. AWS Encryption SDK는 사용자 마스터 키 또는 키링과 상호 작용하는 기본 CMM을 만듭니다.

  2. AWS Encryption SDK는 CMM에 암호화 자료(암호화 자료 가져오기)를 요청합니다.

  3. CMM은 해당 키링(C 및 JavaScript) 또는 마스터 키 공급자(Java 및 Python)에 암호화 자료를 요청합니다. 여기에는 AWS Key Management Service(AWS KMS)와 같은 암호화 서비스에 대한 호출이 포함될 수 있습니다. CMM은 암호화 자료를 AWS Encryption SDK에 반환합니다.

  4. AWS Encryption SDK는 일반 텍스트 데이터 키를 사용하여 데이터를 암호화합니다. 암호화된 데이터와 암호화된 데이터 키를 암호화된 메시지에 저장하여 사용자에게 반환합니다.

캐싱을 사용하지 않고 데이터 암호화

캐싱을 사용하여 데이터 암호화

데이터 키 캐싱을 사용하여 암호화 자료를 가져오려면 다음을 수행합니다.

  1. 애플리케이션에서 AWS Encryption SDK에 데이터를 암호화하도록 요청합니다.

    요청은 기본 암호 구성 요소 관리자(CMM)와 연결된 캐싱 암호 구성 요소 관리자(캐싱 CMM)를 지정합니다. 마스터 키 공급자 또는 키링을 지정하면 AWS Encryption SDK에서 기본 CMM을 만듭니다.

  2. SDK는 지정된 캐싱 CMM에 암호화 자료를 요청합니다.

  3. 캐싱 CMM은 캐시에서 암호화 자료를 요청합니다.

    1. 캐시가 일치하는 항목을 찾으면 일치하는 캐시 항목의 사용 기간 및 사용 값을 업데이트하고 캐시된 암호화 자료를 캐싱 CMM에 반환합니다.

      캐시 항목이 보안 임계값을 준수하는 경우 캐싱 CMM은 해당 항목을 SDK에 반환합니다. 그러지 않으면 항목을 제거하라고 캐시에 지시하고 일치하는 항목이 없는 것처럼 진행합니다.

    2. 캐시에서 유효한 일치 항목을 찾을 수 없는 경우 캐싱 CMM은 기본 CMM에 새 데이터 키를 생성하도록 요청합니다.

      기본 CMM은 해당 키링(C 및 JavaScript) 또는 마스터 키 공급자(Java 및 Python)로부터 암호화 자료를 가져옵니다. 여기에는 AWS Key Management Service와 같은 서비스에 대한 호출이 포함될 수 있습니다. 기본 CMM은 데이터 키의 일반 텍스트 및 암호화된 사본을 캐싱 CMM에 반환합니다.

      캐싱 CMM은 새 암호화 자료를 캐시에 저장합니다.

  4. 캐싱 CMM은 암호화 자료를 AWS Encryption SDK에 반환합니다.

  5. AWS Encryption SDK는 일반 텍스트 데이터 키를 사용하여 데이터를 암호화합니다. 암호화된 데이터와 암호화된 데이터 키를 암호화된 메시지에 저장하여 사용자에게 반환합니다.

데이터 키 캐싱을 사용하여 데이터 암호화

암호화 자료 캐시 생성

AWS Encryption SDK는 데이터 키 캐싱에 사용되는 암호화 자료에 대한 요구 사항을 정의합니다. 또한 구성 가능한 메모리 내 최소 최근 사용(LRU) 캐시인 로컬 캐시도 제공합니다. 로컬 캐시의 인스턴스를 생성하려면 Java 및 Python에서 LocalCryptoMaterialsCache 생성자를 생성하거나, JavaScript에서 getLocalCryptographicMaterialsCache 함수 또는 C에서 aws_cryptosdk_materials_cache_local_new 생성자를 사용합니다.

로컬 캐시에는 캐시된 항목의 추가, 제거, 일치 및 캐시 유지 관리를 비롯한 기본 캐시 관리를 위한 로직이 포함되어 있습니다. 사용자 지정 캐시 관리 로직을 작성할 필요가 없습니다. 로컬 캐시를 그대로 사용하거나, 사용자 지정하거나, 호환되는 캐시로 대체할 수 있습니다.

로컬 캐시를 생성할 때 용량, 즉 캐시에 저장할 수 있는 최대 항목 수를 설정합니다. 이 설정을 사용하면 데이터 키 재사용이 제한되는 효율적인 캐시를 설계할 수 있습니다.

또한 AWS Encryption SDK for Java 및 AWS Encryption SDK for Python은 null 암호화 자료 캐시(NullCryptoMaterialsCache)를 제공합니다. NullCryptoMaterialsCache는 모든 GET 작업에 대해 누락을 반환하고 PUT 작업에 응답하지 않습니다. NullCryptoMaterialsCache를 테스트에 사용하거나 캐싱 코드가 포함된 애플리케이션에서 캐싱을 일시적으로 비활성화할 수 있습니다.

AWS Encryption SDK에서 각 암호화 자료 캐시는 캐싱 암호화 자료 관리자(캐싱 CMM)와 연결됩니다. 캐싱 CMM은 캐시에서 데이터 키를 가져와 캐시에 데이터 키를 넣고 사용자가 설정한 보안 임계값을 적용합니다. 캐싱 CMM을 생성할 때, 해당 CMM이 사용할 캐시를 지정하고, CMM이 캐싱할 데이터 키를 생성하는 기본 CMM 또는 마스터 키 공급자를 지정합니다.

암호화 자료 캐싱 관리자 생성

데이터 키 캐싱을 활성화하려면 캐시캐싱 암호화 자료 관리자(캐싱 CMM)를 생성합니다. 그런 다음 데이터 암호화 또는 복호화 요청에서 표준 암호화 자료 관리자(CMM), 마스터 키 공급자 또는 키링 대신 캐싱 CMM을 지정합니다.

다음과 같은 두 가지 유형의 CMM이 있습니다. 둘 다 데이터 키(및 관련 암호화 자료)를 가져오지만 다음과 같이 방법이 다릅니다.

  • CMM은 키링(C 또는 JavaScript) 또는 마스터 키 공급자(Java와 Python)와 연결됩니다. SDK가 CMM에 암호화 또는 복호화 구성 요소를 요청하면 CMM은 키링 또는 마스터 키 공급자로부터 구성 요소를 가져옵니다. Java 및 Python에서 CMM은 마스터 키를 사용하여 데이터 키를 생성, 암호화 또는 복호화합니다. C 및 JavaScript에서 키링은 암호화 자료를 생성 및 암호화하고 반환합니다.

  • 캐싱 CMM은 하나의 캐시(예: 로컬 캐시 및 기본 CMM)와 연결됩니다. SDK가 캐싱 CMM에 암호화 자료를 요청하면 캐싱 CMM은 캐시에서 해당 구성 요소를 가져오려고 시도합니다. 일치하는 항목을 찾을 수 없는 경우 캐싱 CMM은 기본 CMM에 구성 요소를 요청합니다. 그런 다음 새 암호화 자료를 캐싱한 다음 호출자에게 반환합니다.

또한 캐싱 CMM은 각 캐시 항목에 사용자가 설정한 보안 임계값을 적용합니다. 보안 임계값은 캐싱 CMM에서 설정하고 적용하므로 캐시가 민감한 구성 요소용으로 설계되지 않았더라도 호환되는 모든 캐시를 사용할 수 있습니다.

데이터 키 캐시 항목에는 무엇이 들어 있나요?

데이터 키 캐싱은 데이터 키 및 관련 암호화 자료를 캐시에 저장합니다. 각 항목에는 아래 나열된 요소가 포함됩니다. 이 정보는 데이터 키 캐싱 기능을 사용할지 여부를 결정할 때와, 캐싱 암호화 자료 관리자(캐싱 CMM)에서 보안 임계값을 설정할 때 유용할 수 있습니다.

암호화 요청의 캐시된 항목

암호화 작업의 결과로 데이터 키 캐시에 추가되는 항목에는 다음 요소가 포함됩니다.

  • 일반 텍스트 데이터 키

  • 암호화된 데이터 키(하나 이상)

  • 암호화 컨텍스트

  • 메시지 서명 키(하나가 사용되는 경우)

  • 알고리즘 제품군

  • 메타데이터(보안 임계값 적용을 위한 사용 카운터 포함)

복호화 요청의 캐시된 항목

복호화 작업의 결과로 데이터 키 캐시에 추가되는 항목에는 다음 요소가 포함됩니다.

  • 일반 텍스트 데이터 키

  • 서명 확인 키(하나가 사용되는 경우)

  • 메타데이터(보안 임계값 적용을 위한 사용 카운터 포함)

암호화 컨텍스트: 캐시 항목을 선택하는 방법

모든 요청에 암호화 컨텍스트를 지정하여 데이터를 암호화할 수 있습니다. 하지만 암호화 컨텍스트는 데이터 키 캐싱에서 특별한 역할을 합니다. 이를 통해 데이터 키가 동일한 캐싱 CMM에서 생성된 경우에도 캐시에 데이터 키의 하위 그룹을 만들 수 있습니다.

암호화 컨텍스트는 비밀이 아닌 임의의 데이터를 포함하는 키-값 페어 세트입니다. 암호화하는 동안 암호화 컨텍스트는 암호화된 데이터에 암호적으로 바인딩되므로 데이터를 복호화하는 데 동일한 암호화 컨텍스트가 필요합니다. AWS Encryption SDK에서 암호화 컨텍스트는 암호화된 데이터 및 데이터 키와 함께 암호화된 메시지에 저장됩니다.

데이터 키 캐시를 사용하는 경우 암호화 컨텍스트를 통해 암호화 작업에 사용할 캐시된 특정 데이터 키를 선택할 수도 있습니다. 암호화 컨텍스트는 데이터 키(캐시 항목 ID의 일부)와 함께 캐시 항목에 저장됩니다. 캐시된 데이터 키는 암호화 컨텍스트가 일치하는 경우에만 재사용됩니다. 암호화 요청에 특정 데이터 키를 재사용하려면 동일한 암호화 컨텍스트를 지정합니다. 이러한 데이터 키를 피하려면 다른 암호화 컨텍스트를 지정합니다.

암호화 컨텍스트는 항상 선택 사항이지만 권장됩니다. 요청에 암호화 컨텍스트를 지정하지 않는 경우 빈 암호화 컨텍스트가 캐시 항목 식별자에 포함되고 각 요청과 일치합니다.

내 애플리케이션이 캐시된 데이터 키를 사용하고 있나요?

데이터 키 캐싱은 특정 애플리케이션 및 워크로드에 매우 효과적인 최적화 전략입니다. 그러나 약간의 위험이 수반되므로, 상황에 얼마나 효과적일 수 있는지 판단한 다음 이점이 위험보다 큰지 판단하는 것이 중요합니다.

데이터 키 캐싱은 데이터 키를 재사용하기 때문에 가장 확실한 효과는 새 데이터 키를 생성하기 위한 호출 횟수를 줄이는 것입니다. 데이터 키 캐싱이 구현되면 AWS Encryption SDK는 초기 데이터 키를 만들려는 경우와 캐시가 누락되는 경우에만 AWS KMS GenerateDataKey 작업을 호출합니다. 그러나 캐싱은 동일한 암호화 컨텍스트 및 알고리즘 세트를 포함하여 동일한 특성을 가진 수많은 데이터 키를 생성하는 애플리케이션에서만 성능을 눈에 띄게 개선합니다.

AWS Encryption SDK의 구현이 실제로 캐시의 데이터 키를 사용하고 있는지 판단하려면 다음 기술을 시도해 보세요.

  • 마스터 키 인프라의 로그에서 호출 빈도를 확인하여 새 데이터 키를 만듭니다. 데이터 키 캐싱이 효과적이면 새 키를 만드는 호출 횟수가 눈에 띄게 떨어집니다. 예를 들어 AWS KMS 마스터 키 또는 키링을 사용하는 경우 CloudTrail 로그에서 GenerateDataKey 호출을 검색합니다.

  • 다양한 암호화 요청에 대한 응답으로 AWS Encryption SDK에서 반환되는 암호화된 메시지를 비교합니다. 예를 들어, AWS Encryption SDK for Java를 사용하는 경우 다른 암호화 호출의 ParsedCiphertext 객체를 비교합니다. AWS Encryption SDK for JavaScript에서 MessageHeaderencryptedDataKeys 속성 내용을 비교합니다. 데이터 키를 재사용하면 암호화된 메시지의 암호화된 데이터 키가 동일합니다.