키 다시 랩핑

데이터 암호화 키를 IBM® Key Protect API를 사용하여 다시 암호화하십시오.

Key Protect에서 루트 키를 순환하면 새로운 암호화 키 자료가 루트 키와 연관된 데이터 암호화 키(DEK) 보호를 위해 사용할 수 있게 됩니다. 다시 랩핑 API를 사용하면 일반 텍스트 양식에 키를 노출하지 않고 DEK를 다시 암호화하거나 다시 랩핑할 수 있습니다.

엔벨로프 암호화를 통해 클라우드에서 저장된 데이터의 보안을 제어하는 방법을 알아보려면 엔벨로프 암호화로 데이터 보호를 참조하십시오.

API를 사용하여 키 다시 랩핑

일반 텍스트 양식에 DEK를 노출하지 않고 Key Protect에서 관리하는 루트 키로 지정된 데이터 암호화 키(DEK)를 다시 암호화할 수 있습니다.

키 랩핑 해제는 서비스에 대한 unwrapwrap 호출을 결합하여 작동됩니다. 예를 들어, 먼저 DEK에 액세스하도록 rewrap API를 호출한 후 최신 루트 키 자료를 사용하여 DEK를 다시 암호화하도록 unwrap API를 호출하여 wrap 오퍼레이션을 에뮬레이트할 수 있습니다.

서비스에서 루트 키를 회전한 후 루트 키와 연결된 데이터 암호화 키를 다시 래핑하여 POST호출을 작성할 수 있습니다.

https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/rewrap
  1. 서비스 및 인증용 인증 정보를 검색하여 서비스에서 키에 대한 작업을 수행하십시오.

  2. 초기 랩핑 요청을 수행하는 데 사용한 순환된 루트 키의 ID를 복사하십시오.

    GET api/v2/keys 요청을 작성하거나 Key Protect GUI에서 키를 확인하여 키 ID를 검색할 수 있습니다.

  3. 최신 랩핑 요청 중에 리턴된 ciphertext 값을 복사하십시오.

  4. 다음을 실행하여 키를 최신 루트 키 자료로 다시 래핑합니다 curl명령의 JSON 키 및 값에 대한 설명입니다.

    $ curl -X POST \
        "https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/rewrap" \
        -H "accept: application/vnd.ibm.kms.key_action+json" \
        -H "authorization: Bearer <IAM_token>" \
        -H "bluemix-instance: <instance_ID>" \
        -H "content-type: application/vnd.ibm.kms.key_action+json" \
        -H "x-kms-key-ring: <key_ring_ID>" \
        -H "correlation-id: <correlation_ID>" \
        -d '{
                "ciphertext": "<encrypted_data_key>",
                "aad": [
                    "<additional_data>",
                    "<additional_data>"
                ]
            }'
    

    다음 표에 따라 예제 요청의 변수를 대체하십시오.

Key Protect 에서 키를 다시 래핑하는 데 필요한 변수를 설명합니다.
가변 설명
지역 필수. Key Protect 인스턴스가 상주하는 지리적 영역을 표시하는 지역 약어(예: us-south 또는 eu-gb)입니다.
자세한 내용은 지역별 서비스 엔드포인트를 참조하세요.
keyID_or_alias 필수. 초기 랩핑 요청에 사용한 루트 키의 고유 ID 또는 별명입니다.
IAM_token 필수. 사용자의 IBM Cloud 액세스 토큰입니다. curl 요청에 Bearer 값을 포함하여 IAM 토큰의 전체 컨텐츠를 포함하십시오.
자세한 내용은 액세스 토큰 검색하기를 참조하세요.
instance_ID 필수. Key Protect 서비스 인스턴스에 지정된 고유 ID입니다.
자세한 내용은 인스턴스 ID 검색하기를 참조하세요.
key_ring_ID 선택사항입니다. 키가 속한 키 링의 고유 ID입니다. 지정되지 않은 경우 Key Protect은(는) 지정된 인스턴스와 연관된 모든 키 링에서 키를 검색합니다. 보다 최적화된 요청을 위해 키 링 ID를 지정하는 것이 좋습니다.
참고: x-kms-key-ring 헤더 없이 생성된 키의 키 링 ID는 기본값입니다.
For more information, see 키 그룹화.
correlation_ID 트랜잭션을 추적하고 상관시키는 데 사용되는 고유 ID입니다.
encrypted_data_key 필수. 원래 랩핑 오퍼레이션이 리턴한 암호문 값입니다.
additional_data 선택사항키를 보안하는 데 사용되는 추가 인증 데이터(AAD) 입니다. 각 문자열은 최대 255자입니다. 초기 랩핑 호출을 위해 AAD를 제공한 경우에는 후속 랩핑 해제 또는 다시 랩핑 호출 중에 동일한 AAD를 지정해야 합니다.

중요: Key Protect 서비스는 추가 인증 데이터를 저장하지 않습니다. AAD를 제공하는 경우에는 후속 랩핑 해제 또는 다시 랩핑 요청 중에 동일한 AAD를 액세스 및 제공할 수 있도록 안전한 위치에 데이터를 저장하십시오.

새로 랩핑된 데이터 암호화 키, 제공된 암호 텍스트와 연관된 원래 키 버전(keyVersion) 및 새 암호 텍스트와 연관된 최신 키 버전(rewrappedKeyVersion)이 응답 엔티티 본문에 리턴됩니다. 다음 JSON 오브젝트는 예제 리턴값을 표시합니다.

{
    "ciphertext": "eyJjaX ... h0Ijoi ... c1ZCJ9",
    "keyVersion": {
        "id": "02fd6835-6001-4482-a892-13bd2085f75d"
    },
    "rewrappedKeyVersion": {
        "id": "12e8c9c2-a162-472d-b7d6-8b9a86b815a6"
    }
}

데이터가 최신 루트 키로 보호되도록 추후 엔벨로프 암호화 오퍼레이션에 대한 새 ciphertext 값을 저장하고 사용하십시오.

선택적 유효성 검증

ciphertext 값을 base64로 디코딩하여 키가 성공적으로 다시 랩핑되었는지 확인하십시오.

$ echo <ciphertext> | base64 --decode

<ciphertext>을(를) 이전 단계에서 리턴된 base64로 인코딩된 값으로 바꾸십시오. 다음 JSON 오브젝트는 예제 CLI 출력을 표시합니다.

{
    "ciphertext": "mIzRrwZAA8+WqRckG6gt1ji8HlEEJPSiV+TRBSR4GVr+FlAZlC5KvRriRF0=",
    "iv": "lbwxXlAW2DS7+5jGz5Y1Kg==",
    "version": "4.0.0",
    "handle": "8e309bae-b3ec-4270-9b87-89f8697fe54f"
}