다음을 통해 공유


Azure Cloud HSM의 키 관리

효과적인 키 관리란 Azure Cloud HSM의 성능, 보안 및 효율성을 최적화하는 데 매우 중요합니다. 이 문서에서는 키 스토리지 제한, 키 래핑 보안, 키 특성 및 캐싱 전략을 처리하기 위한 모범 사례 및 권장 사항을 제공합니다.

키 스토리지 제한 관리

HSM(하드웨어 보안 모듈)에는 한 번에 저장할 수 있는 토큰 및 세션 키의 최대 수에 제한이 있습니다. 이러한 제한에 대한 자세한 내용은 Azure Cloud HSM 서비스 제한을 참조하세요.

Azure Cloud HSM 서비스 제한을 초과하지 않도록 하려면 효율적인 키 관리를 위해 다음 전략 중 하나 이상을 사용하는 것이 좋습니다.

  • 키 회전: 키를 자주 회전하여 이전 키가 교체되고 새 키를 위한 공간이 확보되도록 합니다. 자주 회전하면 보안을 유지하면서 스토리지 제한 내에서 HSM을 유지할 수 있습니다.
  • 키 계층: 기본 키를 사용하여 다른 키를 암호화하는 키 계층 구조를 사용합니다. 이 계층 구조는 HSM에 직접 저장해야 하는 키 수를 줄입니다.
  • 키 공유 및 재사용: 여러 세션 또는 토큰이 있는 애플리케이션의 경우 키를 공유하거나 다시 사용하여 저장된 총 수를 줄이는 것이 좋습니다.
  • 키 삭제: 더 이상 키가 필요하지 않은 경우(예: 세션이 종료된 후) 새 키의 공간을 확보하기 위해 키가 안전하게 삭제되었는지 확인합니다.

비고

Azure Cloud HSM 배포 내의 동기화 및 백업이 완료되도록 키를 만든 후 24시간 동안 기다립니다.

키 래핑 관리

Azure Cloud HSM의 EXTRACTABLE 특성을 사용하여 키를 추출할 수 있거나 추적할 수 없는 것으로 표시합니다. 기본적으로 HSM 키는 추출 가능으로 설정됩니다. 키를 암호화하는 키 래핑을 통해 HSM에서 추출 가능한 키를 내보낼 수 있습니다. 그런 다음, 키를 사용하려면 같은 래핑 키를 사용하여 포장을 풀어야 합니다.

반면, 어떤 상황에서도 Azure Cloud HSM에서 변경할 수 없는 키를 내보낼 수 없습니다. 키를 변경할 수 없는 키로 설정한 후에는 키를 추출 가능으로 변경할 수 없습니다. 키를 추출할 수 있어야 하는지 여부를 신중하게 고려하고 그에 따라 키 특성을 설정하는 것이 중요합니다.

애플리케이션에 키 래핑이 필요한 경우 신뢰할 수 있는 키 래핑을 사용하는 것이 좋습니다. 이 방법은 HSM 사용자가 관리자가 명시적으로 신뢰할 수 있는 키로 지정한 키만 래핑 및 래핑 해제하도록 제한합니다.

  • EXTRACTABLE=0: 0로 설정된 EXTRACTABLE 속성으로 생성된 키는 마스킹된 개체로만 내보낼 수 있습니다. HSM을 떠나고 싶지 않은 키에 이상적입니다.

  • WRAP_WITH_TRUSTED=1: 기본적으로 Azure Cloud HSM SDK를 통해 생성된 추출 가능한 키는 신뢰할 수 있는 키 래핑을 사용합니다. 그러나 PKCS#11에 대한 사양은 기본적으로 WRAP_WITH_TRUSTEDCK_FALSE (0)로 설정합니다. 신뢰할 수 있는 키 래핑이 없으면 암호화 사용자는 권한 부여 없이 키의 프라이빗 자료를 내보낼 수 있습니다. 클라이언트 애플리케이션에 대한 액세스 권한이 있고 해당 키를 사용하는 모든 사용자는 일반 텍스트로 내보낼 수 있습니다.

Azure Cloud HSM 공급자에 대한 키 특성 지원

Azure Cloud HSM 공급자 프라이빗 및 대칭 키의 기본 특성 EXTRACTABLE=0을 지원합니다. 공급자 내에서 WRAP_WITH_TRUSTED 구성 지원 기본 WRAP_WITH_TRUSTED 값
azcloudhsm_util EXTRACTABLE, !WRAP_WITH_TRUSTED 1 (0 매개 변수를 통해 설정할 수 있습니다.)
PKCS#11 EXTRACTABLE, !WRAP_WITH_TRUSTED 0 (PKCS#11 사양에 지정되었지만, API에서 1으로 설정할 수 있습니다.)
CNG/KSP EXTRACTABLE, !WRAP_WITH_TRUSTED 아니오 아니오 1
OpenSSL 엔진 EXTRACTABLE, !WRAP_WITH_TRUSTED 아니오 아니오 1
JCE !EXTRACTABLE, !PERSISTANT, !WRAP_WITH_TRUSTED 아니오 1

암호화 API: CNG(차세대) 공급자를 사용하여 만드는 키는 항상 .로 EXTRACTABLE설정됩니다. 이 CavImportKey.exe 도구를 사용하여 키 핸들을 통해 다른 Azure Cloud HSM 도구에서 CNG 공급자로 키를 가져올 수 있습니다. 이 가져오기는 기존 키 핸들에서 KSP(키 스토리지 공급자)에 키를 만듭니다.

CNG 또는 KSP를 공급자로 사용하는 인증 기관의 경우 CNG 공급자 내에서 생성된 모든 키는 여전히 추출 가능한 것으로 표시됩니다. HSM에서 TRUSTED로 표시된 키(예: 사용자 생성 키 암호화 키)는 WRAP_WITH_TRUSTED 변경 이후에도 이러한 키의 프라이빗 키 일반 텍스트를 추출하는 데 사용될 수 있습니다.

이러한 경우, azcloudhsm_util를 사용하여 키를 생성하는 것이 좋습니다. 그렇게 하면 키가 EXTRACTABLE로 표시되지 않습니다. 생성된 키에 원하는 특성이 있는지 확인하는 데 사용하는 getAttribute 것이 좋습니다.

키 특성을 사용하여 키 권한 관리

키 특성을 사용하여 권한과 같은 주요 기능을 관리합니다. 키를 생성할 때 키 특성을 사용하여 해당 키에 대한 특정 작업을 허용하거나 제한하는 권한을 지정합니다. 의도한 목적에 필요한 특성만 사용하여 키를 생성하는 것이 좋습니다.

예를 들어 암호화에 사용되는 AES(Advanced Encryption Standard) 키에는 HSM 외부에서 키를 래핑하는 기능이 없어야 합니다. Azure Cloud HSM SDK의 특성에 대한 자세한 내용은 통합 가이드를 참조하세요.

키 개체를 캐싱하여 대기 시간 최적화

대기 시간을 줄이려면 가능하면 키 개체를 캐싱하는 것이 좋습니다. 키를 검색할 때 Azure Cloud HSM 클러스터의 각 HSM이 쿼리됩니다. 이 작업은 비용이 많이 들고 효율적으로 확장되지 않습니다. 키 검색 방법은 공급자에 따라 달라집니다.

  • PKCS#11의 경우 키 검색은 API를 C_FindObjects 사용합니다.
  • JCE(Java Cryptography Extension)의 경우 키 검색에서 KeyStore 이 값을 사용합니다.

최적의 성능을 위해 애플리케이션을 시작하는 동안 키 찾기 명령(예: findKeykey list)을 한 번만 사용하는 것이 좋습니다. 반환된 키 개체를 애플리케이션 메모리에 저장합니다. 나중에 이 키 개체가 필요한 경우 각 작업을 사용하여 쿼리하는 대신 캐시에서 검색합니다. 이를 쿼리하면 상당한 성능 오버헤드가 발생합니다.