BYOK(Bring Your Own Key) 구성
시나리오
Key Vault 고객은 Azure 외부의 온-프레미스 HSM(하드웨어 보안 모듈)에서 Azure Key Vault를 지원하는 HSM으로 키를 안전하게 전송하려고 합니다. Key Vault 외부에서 생성된 키를 가져오는 프로세스를 BYOK(Bring Your Own Key)라고 합니다.
다음은 요구 사항입니다.
- 전송할 키는 HSM 외부에서 절대 일반 텍스트 형식으로 존재하지 않습니다.
- HSM 외부에서 전송할 키는 항상 Azure Key Vault HSM에 보관된 키로 보호됩니다.
용어
키 이름 | 키 유형 | Origin | 설명 |
---|---|---|---|
KEK(키 교환 키) | RSA | Azure Key Vault HSM | Azure Key Vault에서 생성된 HSM 지원 RSA 키 쌍 |
래핑 키 | AES | 공급업체 HSM | HSM 온-프레미스에서 생성된 [임시] AES 키 |
대상 키 | RSA, EC, AES(관리되는 HSM만 해당) | 공급업체 HSM | Azure Key Vault HSM으로 전송할 키 |
KEK(키 교환 키): BYOK(Bring Your Own Key) 키를 가져오기 위한 키 자격 증명 모음 내에서 고객이 생성한 HSM 지원 키입니다. KEK에는 다음과 같은 속성이 있어야 합니다.
- 크기가 4096비트, 3072비트 또는 2048비트인 RSA-HSM 키여야 합니다.
- 키 작업(key_ops)은 '가져오기'로 제한되므로 BYOK 프로세스 중에만 사용할 수 있습니다.
- 대상 키를 가져올 동일한 자격 증명 모음에 있어야 합니다.
사용자 단계
키 전송을 수행하려면,
- KEK를 생성합니다.
- KEK의 공개 키를 검색합니다.
- BYOK 도구를 제공한 HSM 공급업체를 사용하여 KEK를 대상 HSM으로 가져오고 KEK로 보호되는 대상 키를 내보냅니다.
- 보호되는 대상 키를 Azure Key Vault로 가져옵니다.
고객은 HSM 공급업체에서 제공한 BYOK 도구 및 설명서를 사용하여 3단계를 완료합니다. 키 전송 Blob(".byok" 파일)을 생성합니다.
HSM 제약 조건
기존 HSM은 다음을 포함하여 관리 대상의 키에 제약 조건을 적용할 수 있습니다.
- 키 랩 기반 내보내기를 허용하도록 HSM을 구성해야 할 수 있습니다.
- 대상 키는 제어된 내보내기를 허용하려면 HSM에 대한 CKA(Cryptoki Attribute)_EXTRACTABLE를 표시해야 할 수 있습니다.
- 경우에 따라 KEK 및 래핑 키를 CKA_TRUSTED로 표시해야 할 수 있으며 HSM에서 키를 래핑하는 데 사용할 수 있습니다.
원본 HSM의 구성은 일반적으로 이 사양의 범위를 벗어납니다. Microsoft는 HSM 공급업체가 이러한 구성 단계를 포함하는 BYOK 도구와 함께 설명서를 생성할 것으로 기대합니다.
참고 항목
이러한 단계 중 일부는 Azure PowerShell 및 Azure Portal과 같은 다른 인터페이스를 사용하여 수행할 수 있습니다. Key Vault SDK에서 동등한 기능을 사용하여 프로그래밍 방식으로 수행할 수도 있습니다.
KEK 생성
az keyvault key create 명령을 사용하여 키 작업이 가져오기로 설정된 KEK를 만듭니다. 아래 명령에서 반환된 키 식별자 'kid'를 기록해 둡니다.
az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name ContosoKeyVaultHSM
서비스는 다양한 KEK 길이를 지원합니다. 예를 들어, Azure SQL은 2048 또는 3072바이트의 키 길이만 지원합니다.
KEK의 공개 키 검색
KEK의 공개 키 부분을 다운로드하고 PEM 파일에 저장합니다.
az keyvault key download --name KEKforBYOK --vault-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem
HSM 공급업체에서 제공하는 BYOK 도구를 사용하여 키 전송 Blob 생성
HSM 공급업체가 제공한 BYOK 도구를 사용하여 키 전송 Blob(‘.byok’ 파일로 저장됨)을 만듭니다. 이 도구에 대한 입력 중 하나는 개인 정보 보호 강화 메일(.pem 파일)로 된 KEK 공개 키입니다.
키 전송 Blob
장기적으로 Microsoft는 PKCS#11 CKM_RSA_AES_KEY_WRAP 메커니즘을 사용하여 대상 키를 Azure Key Vault로 전송하려고 합니다. 이 메커니즘이 단일 Blob을 생성하고 더 중요하게는 임시임이 보장되며 중간 AES 키가 두 HSM에서 처리되기 때문입니다. 이 메커니즘은 현재 일부 HSM에서 사용할 수 없지만 AES 키를 사용하는 CKM_AES_KEY_WRAP_PAD 대상 키를 보호하고 CKM_RSA_PKCS_OAEP AES 키를 보호하는 조합은 동등한 Blob을 생성합니다.
대상 키 일반 텍스트는 키 유형에 따라 다릅니다.
- RSA 키의 경우 PKCS#8 [RFC5208]로 래핑된 프라이빗 키 ASN.1 DER 인코딩 [RFC3447]
- EC 키의 경우 PKCS#8 [RFC5208]로 래핑된 프라이빗 키 ASN.1 DER 인코딩 [RFC5915]
- 옥텟 키의 경우 키의 원시 바이트
그런 다음 일반 텍스트 키의 바이트는 CKM_RSA_AES_KEY_WRAP 메커니즘을 사용하여 변환됩니다.
- 임시 AES 키가 생성되고 SHA1과 함께 RSA-OAEP를 사용하여 래핑 RSA 키로 암호화됩니다.
- 인코딩된 일반 텍스트 키는 AES 키(패딩으로 AES 키 매핑 사용)를 사용하여 암호화됩니다.
- 암호화된 AES 키와 암호화된 일반 텍스트 키를 연결하여 최종 암호문 Blob을 생성합니다.
전송 Blob의 형식은 기본적으로 올바른 암호 해독을 위해 필요한 메타데이터를 서비스에 전달하기 위한 수단으로 JSON 웹 암호화 압축 직렬화(RFC7516)를 사용합니다.