IBM Cloud Docs
打包密钥

打包密钥

您可以使用根密钥管理和保护加密密钥,方法是使用 IBM® Key ProtectAPI 和控制台。

When you wrap a 数据加密密钥用于加密存储在应用程序中的数据的密钥。 with a 根键一种对称打包密钥,用于对存储在数据服务中的其他密钥进行加密和解密。 (DEK), Key Protect 结合多种算法的优势,保护您的加密数据的隐私性和完整性。 加密数据的完整性。

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

使用控制台包裹按键

如果您已经拥有Key Protect实例,并希望使用图形界面加密 DEK,则可以使用IBM Cloud控制台。

导入或创建 自己的密钥 后、 完成以下步骤,使用密钥封装数据:

  1. 登录 IBM Cloud控制台

  2. 菜单中选择 资源列表,查看资源列表。

  3. 从 IBM Cloud 资源列表中,选择您供应的 Key Protect 实例。

  4. 从密钥列表中选择要用来封装数据的根密钥。

  5. 单击 图标,然后单击信封加密选项,打开侧面板。 确保选择了“缠绕键”选项。

  6. 您可以选择是让Key Protect封装您的数据,还是根据需要提供自己的base64编码明文和附加身份验证数据 (AAD) 来封装数据。 请注意,如果您选择提供自己的明文和 AAD,则必须在解包数据时提供。 如果您没有创建 AAD 和基 64 编码明文的经验,建议的做法是选择Key Protect选项,允许我的包装钥匙封装您的数据。

  7. 单击缠绕键按钮。

使用 API 打包密钥

可以使用在 Key Protect 中管理的根密钥来保护指定的数据加密密钥 (DEK)。

在服务中指定根密钥后,可以通过对以下端点发出 POST 调用以高级加密方式来打包 DEK。

https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/wrap
  1. 检索您的身份验证凭据,以便在服务中使用密钥。

  2. 复制要管理和保护的 DEK 的密钥资料。

    如果您的 Key Protect实例、 您可以通过 GET /v2/keys/<keyID_or_alias> 请求检索特定密钥的密钥材料

  3. 复制要用于打包的根密钥的标识。

  4. 运行下面的 curl 命令,用包裹操作保护密钥。

    $ curl -X POST \
        "https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/wrap" \
        -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 '{
                "plaintext": "<data_key>",
                "aad": [
                    "<additional_data>",
                    "<additional_data>"
                ]
            }'
    

根据下表替换示例请求中的变量。

描述在Key Protect 中封装指定密钥所需的变量。
变量 描述
区域 需要。 地区缩写,如 us-south 或 eu-gb,表示Key Protect实例所在的地理区域。 有关更多信息,请参阅区域服务端点
keyID_or_alias 需要。 要用于包装的根键的唯一标识符或别名。
IAM_token 需要。 您的 IBM Cloud 访问令牌。 在 curl 请求中包含 IAM 令牌的全部内容,包括承载器值。 更多信息,请参阅 检索访问令牌
instance_ID 需要。 指定给您的 Key Protect 服务实例的唯一标识。 更多信息,请参阅 检索实例 ID
键环 ID 可选。 钥匙所属钥匙圈的唯一标识符。 如果未指定,Key Protect将在与指定实例关联的每个钥匙圈中搜索钥匙。 建议指定钥匙圈 ID,以优化请求。 注:创建的密钥不带 x-kms-key-ring 标头,其密钥环 ID 为:默认。更多信息,请参阅 分组密钥
correlation_ID 可选。用于跟踪和关联交易的唯一标识符。
data_key 可选项.您要管理和保护的 DEK 的关键材料。 明文值必须使用base64编码。 有关关键材料编码的更多信息,请参阅 关键材料编码。 要生成新的 DEK,请省略明文属性。 服务会生成随机明文(32 个字节),打包该值,然后在响应中返回生成的值和打包的值。 生成和封装的值都是base64编码,需要解码后才能解密密钥。
additional_data 可选:用于进一步确保密钥安全的附加验证数据 (AAD)。 每个字符串可含有最多 255 个字符。 call.Important: Key Protect服务不会保存额外的身份验证数据。 如果提供 AAD,请将数据保存到安全位置,以确保您可以在随后的解包请求期间访问并提供同一 AAD。

在响应的 entity-body 中,会返回打包的数据加密密钥,其中包含 Base64 编码的密钥资料。 响应体还 还包含用于封装所提供明文的密钥版本 ID。 明文的密钥版本 ID。 以下 JSON 对象显示返回值示例。

{
    "ciphertext": "eyJjaXBoZXJ0ZXh0IjoiYmFzZTY0LWtleS1nb2VzLWhlcmUiLCJpdiI6IjRCSDlKREVmYU1RM3NHTGkiLCJ2ZXJzaW9uIjoiNC4wLjAiLCJoYW5kbGUiOiJ1dWlkLWdvZXMtaGVyZSJ9",
    "keyVersion": {
        "id": "02fd6835-6001-4482-a892-13bd2085f75d"
    }
}

如果在发出打包请求时省略 plaintext 属性,服务会以 Base64 编码的格式返回生成的数据加密密钥 (DEK) 和打包的 DEK。

{
    "plaintext": "Rm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdv",
    "ciphertext": "eyJjaXBoZXJ0ZXh0IjoiYmFzZTY0LWtleS1nb2VzLWhlcmUiLCJpdiI6IjRCSDlKREVmYU1RM3NHTGkiLCJ2ZXJzaW9uIjoiNC4wLjAiLCJoYW5kbGUiOiJ1dWlkLWdvZXMtaGVyZSJ9",
    "keyVersion": {
        "id": "12e8c9c2-a162-472d-b7d6-8b9a86b815a6"
    }
}

The plaintext value represents the unwrapped DEK, and the ciphertext 值代表包装后的 DEK,两者都是base64编码。 该 keyVersion.id value represents the version of the root key that was used for wrapping.

如果想让 Key Protect 代表您生成新的数据加密密钥 (DEK),您也可以在发出打包请求时传入空主体。 在响应的 entity-body 中,会返回生成的 DEK(其中包含 Base64 编码的密钥资料)以及打包的 DEK。