HSM PKCS11 seal 구성
HSM PKCS11 seal 구성
PKCS11 seal은 Vault가 PKCS11을 사용하는 HSM을 seal wrapping 메커니즘으로 사용하도록 구성합니다. Vault Enterprise의 HSM PKCS11 지원은 다음 중 하나로 활성화됩니다:
출처: 문서
본문
Auto-unseal 및 seal wrapping에는 Vault Enterprise가 필요합니다 PKCS11의 auto-unseal 및 seal wrapping은 Vault Enterprise가 필요합니다. Vault Enterprise는 기본적으로 seal wrapping을 활성화하므로 KMS 서비스가 봉인 해제 과정 중뿐만 아니라 런타임에도 사용 가능해야 합니다. 자세한 내용은 Seal wrap overview를 참고하세요.
- Vault 구성 파일에
seal "pkcs11"블록이 있는 경우 - 환경 변수
VAULT_HSM_LIB가 라이브러리 경로로 설정되고VAULT_SEAL_TYPE이pkcs11로 설정된 경우. 환경 변수로 활성화한다면 다른 필수 값(즉VAULT_HSM_SLOT)도 제공해야 합니다.
중요: Vault가 자체 키를 생성하게 하는 것이 가장 쉽게 시작하는 방법이지만, 보안상 Vault는 키를 비내보내기(non-exportable)로 표시합니다. HSM 키 백업 전략에 키가 내보내기 가능해야 한다면 직접 키를 생성해야 합니다. Vault가 키를 생성하는 데 사용하는 생성 속성 목록은 이 문서 끝에 나와 있습니다.
요구 사항
Vault Enterprise HSM에는 다음 소프트웨어 패키지가 필요합니다:
- PKCS#11 호환 HSM 통합 라이브러리. Vault는 PKCS#11 버전 2.2 이상을 대상으로 합니다. 특정 HSM에 따라 일부 함수(예: 키 생성)는 수동으로 수행해야 할 수 있습니다.
- GNU libltdl 라이브러리 — 서버의 올바른 아키텍처용으로 설치되었는지 확인하세요.
기본 pkcs11 예시
이 예시는 모든 필수 값을 제공해 Vault 구성 파일을 통해 HSM PKCS11 seal을 구성합니다:
seal "pkcs11" {
lib = "/usr/vault/lib/libCryptoki2_64.so"
slot = "2305843009213693953"
pin = "AAAA-BBBB-CCCC-DDDD"
key_label = "vault-hsm-key"
hmac_key_label = "vault-hsm-hmac-key"
}
IBM EP11 토큰과 pkcs11 사용
IBM EP11 토큰과 함께 pkcs11 seal을 사용하려면 opencryptoki가 설치되어 있어야 하며, LinuxOne 또는 Linux on IBM Z 인스턴스에서 Crypto Express 어댑터가 활성화되어 있어야 합니다. 자세한 내용은 IBM EP11 Token Documentation을 참고하세요.
seal "pkcs11" {
lib = "/usr/local/lib/opencryptoki/libopencryptoki.so"
slot = "4"
pin = "12345678"
key_label = "vault_hsm_key"
hmac_key_label = "vault_hsm_hmac_key"
generate_key = true
}
pkcs11 파라미터
다음 파라미터는 Vault 구성 파일의 seal 스탠자에 적용됩니다:
-
lib(string: <required>): PKCS#11 라이브러리 공유 객체 파일의 경로입니다.VAULT_HSM_LIB환경 변수로도 지정할 수 있습니다.참고: HSM에 따라
lib파라미터의 값은 바이너리 또는 동적 라이브러리일 수 있으며, Vault 바이너리가 현재 실행 중인 시스템에 따라 다른 라이브러리가 필요할 수 있습니다(예: Linux 시스템이 Windows .dll 파일을 해석하기 위해 다른 라이브러리가 필요할 수 있음). -
slot(string: <slot or token label required>): 사용할 슬롯 번호로, 문자열로 지정합니다(예:"2305843009213693953").VAULT_HSM_SLOT환경 변수로도 지정할 수 있습니다.참고: 슬롯은 보통 OS 설정 유틸리티에서 16진수 값으로 나열되지만, 이 구성은 10진수 등가값을 사용합니다. 예를 들어 HSM 명령줄
pkcs11-tool을 사용하면 16진수0x2000000000000001로 나열된 슬롯은 10진수2305843009213693953과 같습니다. 이 값들은 사용 중인 HSM에 따라 더 짧게 또는 다르게 나열될 수 있습니다. -
token_label(string: <slot or token label required>): 사용할 슬롯 토큰 라벨입니다.VAULT_HSM_TOKEN_LABEL환경 변수로도 지정할 수 있습니다. -
pin(string: <required>): 로그인용 PIN입니다.VAULT_HSM_PIN환경 변수로도 지정할 수 있습니다. 환경 변수로 설정하면 Vault를 다시 시작할 때 다시 설정해야 합니다. -
key_label(string: <required>): 사용할 키의 라벨입니다. 키가 없고 생성이 활성화되어 있다면 이 라벨이 생성된 키에 부여됩니다.VAULT_HSM_KEY_LABEL환경 변수로도 지정할 수 있습니다. -
default_key_label(string: ""): 복호화 작업을 위한 기본 키 라벨입니다. 0.10.1 이전에는 키 라벨이 암호문과 함께 저장되지 않았습니다. 이제 seal 항목은 암호화 작업에 사용된 라벨을 추적합니다. 이 필드의 기본값은key_label입니다.key_label이 회전되고 이 값이 설정되지 않으면 복호화가 실패할 수 있습니다.VAULT_HSM_DEFAULT_KEY_LABEL환경 변수로도 지정할 수 있습니다. 이 값은 새 설치에서는 무시됩니다. -
key_id(string: ""): 사용할 키의 ID입니다. 값은 16진수 문자열이어야 합니다(예: "0x33333435363434373537").VAULT_HSM_KEY_ID환경 변수로도 지정할 수 있습니다. -
hmac_key_label(string: <required>): HMAC에 사용할 키의 라벨입니다. 적절한 유형이어야 합니다. Vault가 이를 만들려 하면 CKK_GENERIC_SECRET_KEY를 사용하려 시도합니다. 키가 없고 생성이 활성화되어 있다면 이 라벨이 생성된 키에 부여됩니다.VAULT_HSM_HMAC_KEY_LABEL환경 변수로도 지정할 수 있습니다. -
default_hmac_key_label(string: ""): 서명 작업을 위한 기본 HMAC 키 라벨입니다. 0.10.1 이전에는 HMAC 키 라벨이 서명과 함께 저장되지 않았습니다. 이제 seal 항목은 서명 작업에 사용된 라벨을 추적합니다. 이 필드의 기본값은hmac_key_label입니다.hmac_key_label이 회전되고 이 값이 설정되지 않으면 서명 검증이 실패할 수 있습니다.VAULT_HSM_HMAC_DEFAULT_KEY_LABEL환경 변수로도 지정할 수 있습니다. 이 값은 새 설치에서는 무시됩니다. -
hmac_key_id(string: ""): 사용할 HMAC 키의 ID입니다. 값은 16진수 문자열이어야 합니다(예: "0x33333435363434373537").VAULT_HSM_HMAC_KEY_ID환경 변수로도 지정할 수 있습니다. -
mechanism(string: <best available>): 사용할 암호화/복호화 메커니즘으로, 10진수 또는 16진수(0x접두사) 문자열로 지정합니다.VAULT_HSM_MECHANISM환경 변수로도 지정할 수 있습니다. 현재 지원되는 메커니즘(우선순위 순서):0x1085CKM_AES_CBC_PAD(HMAC 메커니즘 필요)0x1082CKM_AES_CBC(HMAC 메커니즘 필요)0x1087CKM_AES_GCM0x0009CKM_RSA_PKCS_OAEP0x0001CKM_RSA_PKCS
경고: CKM_RSA_PKCS는 OAEP보다 덜 안전한 것으로 간주되는 PKCS #1 v1.5 패딩 방식을 지정합니다. 가능하면 CKM_RSA_PKCS보다 CKM_RSA_PKCS_OAEP 사용을 권장합니다.
-
hmac_mechanism(string: "0x0251"): 사용할 암호화/복호화 메커니즘으로, 10진수 또는 16진수(0x접두사) 문자열로 지정합니다. 현재0x0251(사양의CKM_SHA256_HMAC에 해당)만 지원됩니다.VAULT_HSM_HMAC_MECHANISM환경 변수로도 지정할 수 있습니다. 이 값은 특정 메커니즘에만 필요합니다. -
generate_key(string: "false"): Vault 초기화 시key_label로 지정된 라벨의 기존 키를 찾을 수 없으면 Vault가 키를 생성하도록 지시합니다. 문자열로 표현된 부울입니다(예:"true").VAULT_HSM_GENERATE_KEY환경 변수로도 지정할 수 있습니다. 적절한 유형의 키를 만들기 위해 독점 벤더 확장이 필요한 경우처럼 일부 상황에서는 Vault가 키를 성공적으로 생성하지 못할 수 있습니다.참고: 클러스터 초기화 후 초기 키 생성이 발생하면, 향후 의도하지 않은 키 생성을 방지하기 위해 이 플래그를 비활성화하는 것이 좋습니다.
-
force_rw_session(string: "false"): 모든 작업이 HSM에 대한 읽기-쓰기 세션을 열도록 강제합니다. 문자열로 표현된 부울입니다(예:"true").VAULT_HSM_FORCE_RW_SESSION환경 변수로도 지정할 수 있습니다. 이 키는 주로 AWS CloudHSM v5 pkcs11 구현 내의 제한을 우회하기 위한 것입니다. -
max_parallel(int: 1)- 특정 시점에 HSM으로 진행 중일 수 있는 동시 요청 수입니다. -
disabled(string: ""): Vault가 auto seal 구성에서 마이그레이션 중이라면true로 설정하세요. 그렇지 않으면false로 설정하세요.
pin은 간접 값 참조(indirect value references)일 수 있습니다.
seal 마이그레이션 과정에 대한 자세한 내용은 Seal Migration 문서를 참고하세요.
메커니즘별 플래그
-
rsa_encrypt_local(string: "false"): RSA 키에 대한 암호화를 지원하지 않는 HSM의 경우 암호화를 로컬로 수행합니다.CKM_RSA_PKCS_OAEP및CKM_RSA_PKCS메커니즘에 사용 가능합니다.VAULT_HSM_RSA_ENCRYPT_LOCAL환경 변수로도 지정할 수 있습니다. -
rsa_oaep_hash(string: "sha256"): OAEP 패딩과 함께 RSA에 사용할 해시 알고리즘을 지정합니다. 유효한 값은 sha1, sha224, sha256, sha384, sha512입니다.CKM_RSA_PKCS_OAEP메커니즘에 사용 가능합니다.VAULT_HSM_RSA_OAEP_HASH환경 변수로도 지정할 수 있습니다.
참고: 구성 파일에서 VAULT_HSM_PIN을 seal 파라미터로 전달할 수 있지만, 이 값을 환경 변수로 설정하는 것을 강력히 권장합니다.
pkcs11 환경 변수
또는 다음 환경 변수를 제공해 HSM seal을 활성화할 수 있습니다:
VAULT_SEAL_TYPE
VAULT_HSM_LIB
VAULT_HSM_SLOT
VAULT_HSM_TOKEN_LABEL
VAULT_HSM_PIN
VAULT_HSM_KEY_LABEL
VAULT_HSM_DEFAULT_KEY_LABEL
VAULT_HSM_KEY_ID
VAULT_HSM_HMAC_KEY_LABEL
VAULT_HSM_HMAC_DEFAULT_KEY_LABEL
VAULT_HSM_HMAC_KEY_ID
VAULT_HSM_MECHANISM
VAULT_HSM_HMAC_MECHANISM
VAULT_HSM_GENERATE_KEY
VAULT_HSM_RSA_ENCRYPT_LOCAL
VAULT_HSM_RSA_OAEP_HASH
VAULT_HSM_FORCE_RW_SESSION
Vault 키 생성 속성
Vault가 HSM 키를 생성한다면 다음은 Vault가 사용하는 속성 목록입니다. 이 식별자는 공식 PKCS#11 식별자에 해당합니다.
AES 키
CKA_CLASS:CKO_SECRET_KEY(시크릿 키)CKA_KEY_TYPE:CKK_AES(키 유형은 AES)CKA_VALUE_LEN:32(키 크기는 256비트)CKA_LABEL: Vault 구성에 설정된 키 라벨로 설정됨CKA_ID: 무작위 32비트 부호 없는 정수로 설정됨CKA_PRIVATE:true(키는 이 슬롯/토큰에 개인)CKA_TOKEN:true(키는 단일 세션만이 아니라 슬롯/토큰에 유지됨)CKA_SENSITIVE:true(키는 민감한 값)CKA_ENCRYPT:true(키는 암호화에 사용 가능)CKA_DECRYPT:true(키는 복호화에 사용 가능)CKA_WRAP:true(키는 래핑에 사용 가능)CKA_UNWRAP:true(키는 언래핑에 사용 가능)CKA_EXTRACTABLE:false(키는 내보낼 수 없음)
RSA 키
공개 키(Public Key)
CKA_CLASS:CKO_PUBLIC_KEY(공개 키)CKA_KEY_TYPE:CKK_RSA(키 유형은 RSA)CKA_LABEL: Vault 구성에 설정된 키 라벨로 설정됨CKA_ID: 무작위 32비트 부호 없는 정수로 설정됨CKA_ENCRYPT:true(키는 암호화에 사용 가능)CKA_WRAP:true(키는 래핑에 사용 가능)CKA_MODULUS_BITS:2048(키 크기는 2048비트)CKA_PUBLIC_EXPONENT:0x10001(공개 지수 65537)CKA_TOKEN:true(키는 단일 세션만이 아니라 슬롯/토큰에 유지됨)
개인 키(Private Key)
CKA_CLASS:CKO_PRIVATE_KEY(개인 키)CKA_KEY_TYPE:CKK_RSA(키 유형은 RSA)CKA_LABEL: Vault 구성에 설정된 키 라벨로 설정됨CKA_ID: 무작위 32비트 부호 없는 정수로 설정됨CKA_DECRYPT:true(키는 복호화에 사용 가능)CKA_UNWRAP:true(키는 언래핑에 사용 가능)CKA_TOKEN:true(키는 단일 세션만이 아니라 슬롯/토큰에 유지됨)CKA_EXTRACTABLE:false(키는 내보낼 수 없음)
HMAC 키
CKA_CLASS:CKO_SECRET_KEY(시크릿 키)CKA_KEY_TYPE:CKK_GENERIC_SECRET_KEY(키 유형은 일반 시크릿 키)CKA_VALUE_LEN:32(키 크기는 256비트)CKA_LABEL: Vault 구성에 설정된 HMAC 키 라벨로 설정됨CKA_ID: 무작위 32비트 부호 없는 정수로 설정됨CKA_PRIVATE:true(키는 이 슬롯/토큰에 개인)CKA_TOKEN:true(키는 단일 세션만이 아니라 슬롯/토큰에 유지됨)CKA_SENSITIVE:true(키는 민감한 값)CKA_SIGN:true(키는 서명에 사용 가능)CKA_VERIFY:true(키는 검증에 사용 가능)CKA_EXTRACTABLE:false(키는 내보낼 수 없음)
키 회전
이 seal은 서로 다른 키 라벨을 사용해 키 버전을 추적함으로써 키를 회전하는 것을 지원합니다. 키 값을 회전하려면 HSM의 다른 키 라벨에 새 키를 생성하고 Vault 구성을 새 키 라벨 값으로 갱신하세요. Vault 인스턴스를 다시 시작해 새 키 라벨을 적용하면 모든 새 암호화 작업이 갱신된 키 라벨을 사용합니다. 이전 키는 비활성화하거나 삭제해서는 안 되며 이전 데이터를 복호화하는 데 사용됩니다. 이전 키를 비활성화하거나 삭제하려면 Vault가 seal-rewrap을 수행해 이전 키로 암호화된 데이터를 새 키로 복호화할 수 있도록 해야 합니다.
참고: 0.10.1 이전 버전에서는 키 정보가 암호문과 함께 추적되지 않았습니다. 이 버전 이전에 seal wrapping된 데이터에 대해 회전을 원한다면 default_key_label과 hmac_default_key_label도 설정해 이전 값을 복호화할 수 있게 해야 합니다.
튜토리얼
HSM Integration - Seal Wrap 튜토리얼을 참고해 데이터를 보호하기 위해 Seal Wrap 기능을 활성화하는 방법을 알아보세요.