打包密钥
您可以使用根密钥管理和保护加密密钥,方法是使用 IBM® Key ProtectAPI 和控制台。
When you wrap a 数据加密密钥用于加密存储在应用程序中的数据的密钥。 with a 根键一种对称打包密钥,用于对存储在数据服务中的其他密钥进行加密和解密。 (DEK), Key Protect 结合多种算法的优势,保护您的加密数据的隐私性和完整性。 加密数据的完整性。
要了解密钥封装如何帮助您控制云中静态数据的安全性,请参阅 云安全,请参阅 使用信封加密保护数据。
使用控制台包裹按键
如果您已经拥有Key Protect实例,并希望使用图形界面加密 DEK,则可以使用IBM Cloud控制台。
导入或创建 自己的密钥 后、 完成以下步骤,使用密钥封装数据:
-
登录 IBM Cloud控制台。
-
从菜单中选择 资源列表,查看资源列表。
-
从 IBM Cloud 资源列表中,选择您供应的 Key Protect 实例。
-
从密钥列表中选择要用来封装数据的根密钥。
-
单击
⋯
图标,然后单击信封加密选项,打开侧面板。 确保选择了“缠绕键”选项。 -
您可以选择是让Key Protect封装您的数据,还是根据需要提供自己的base64编码明文和附加身份验证数据 (AAD) 来封装数据。 请注意,如果您选择提供自己的明文和 AAD,则必须在解包数据时提供。 如果您没有创建 AAD 和基 64 编码明文的经验,建议的做法是选择Key Protect选项,允许我的包装钥匙封装您的数据。
-
单击缠绕键按钮。
使用 API 打包密钥
可以使用在 Key Protect 中管理的根密钥来保护指定的数据加密密钥 (DEK)。
在服务中指定根密钥后,可以通过对以下端点发出 POST
调用以高级加密方式来打包 DEK。
https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/wrap
-
复制要管理和保护的 DEK 的密钥资料。
如果您的 Key Protect实例、 您可以通过
GET /v2/keys/<keyID_or_alias>
请求检索特定密钥的密钥材料。 -
复制要用于打包的根密钥的标识。
-
运行下面的
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>" ] }'
根据下表替换示例请求中的变量。
变量 | 描述 |
---|---|
区域 | 需要。 地区缩写,如 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。