IBM Cloud Docs
重新包装钥匙

重新包装钥匙

通过使用 IBM® Key ProtectAPI.

当您 旋转Key Protect中的根密钥、 新的加密密钥材料可用于保护与根密钥相关联的数据加密密钥(DEK)。 加密密钥(DEK)。 使用重新封装 应用程序接口,你可以重新加密或重新封装你的 DEK,而不会暴露其明文形式的密钥。 明文形式。

了解信封加密如何帮助您控制云中静态数据的安全 的安全性,请参阅 使用信封加密保护数据

使用应用程序接口重包密钥

您可以使用在 * 中管理的根密钥重新加密指定的数据加密密钥(DEK) 中管理Key Protect根密钥重新加密指定的数据加密密钥(DEK),而不会暴露 明文形式的数据加密密钥。

重包按键的工作原理是将 unwrapwrap 组合起来调用服务。 For example, you can emulate a rewrap operation by first calling the unwrap API to access a DEK, and then calling the wrap API to reencrypt the DEK by using the newest root key material.

旋转服务中的根密钥后、 重新封装与根密钥相关联的数据加密密钥,方法是在根密钥上输入 POST call to the following endpoint.

https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/rewrap
  1. 检索服务和认证凭证以与服务中的密钥一起使用

  2. 复制用于执行初始封装请求的已旋转根密钥的 ID。 请求。

    您可以通过 GET api/v2/keys 请求或 查看Key Protect中的密钥。 图形用户界面。

  3. 复制最近一次打包请求时返回的 ciphertext 值。

  4. 使用最新的根密钥材料重新封装密钥,方法如下 curl command.

    $ 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 中重新封装密钥所需的变量。
变量 描述
区域 需要。 地区缩写,如 us-southeu-gb,表示您的Key Protect实例所在的地理区域。
For more information, see 区域服务终端.
keyID_or_alias 需要。 用于初始封装请求的根密钥的唯一标识符或别名。
IAM_token 需要。 您的 IBM Cloud 访问令牌。 在 curl 请求中包含 IAM 令牌的全部内容,包括承载器值。
For more information, see 读取访问令牌.
instance_ID 需要。 指定给您的 Key Protect 服务实例的唯一标识。
For more information, see 检索实例 ID.
键环 ID 可选。 钥匙所属钥匙圈的唯一标识符。 如果未指定,Key Protect将在与指定实例关联的每个钥匙圈中搜索钥匙。 建议指定钥匙圈 ID,以优化请求。
Note: The key ring ID of keys that are created without an x-kms-key-ring header is: default.
For more information, see 分组键.
correlation_ID 用于跟踪和关联事务的唯一标识。
加密数据密钥 需要。 原始打包操作返回的密文值。
additional_data 可选用于进一步确保密钥安全的附加验证数据 (AAD)。 每个字符串可含有最多 255 个字符。 如果您为首次缠绕调用提供了 AAD,则必须在随后的解缠绕或重缠绕调用中指定相同的 AAD

Important: The Key Protect service does not save additional authentication data. 如果您提供了 AAD,请将数据保存到安全位置,以确保在随后的拆包或重包请求中可以访问和提供相同的 AAD。

新封装的数据加密密钥,原始密钥版本 keyVersion) 与所提供的密文和最新密钥版本相关联的 rewrappedKeyVersion) 关联的最新密钥版本将在 响应实体内容。 以下 JSON 对象显示返回值示例。

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

针对未来包络加密操作存储并使用新的 ciphertext 值,从而通过最新根密钥保护数据。

可选验证

Verify that the key was successfully rewrapped by base64 decoding the ciphertext value.

$ 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"
}