解包密钥
IBM® Key Protect结合多种算法的优势,保护加密数据的隐私和完整性。 通过使用IBM® Key Protect for IBM Cloud®API 和控制台,您可以拆开 数据加密密钥用于加密存储在应用程序中的数据的密钥。(DEK) 以访问其内容。API 和控制台访问其内容。 解包 DEK 会解密其内容并检查内容完整性,从而将原始密钥资料返回给 IBM Cloud 数据服务。
要了解密钥封装如何帮助您控制云中静态数据的安全性,请参阅 云安全,请参阅 使用信封加密保护数据。
使用控制台解包按键
如果你已经有一个Key Protect实例,并希望使用图形界面加密你的 DEK、 可以使用IBM Cloud控制台。
导入或创建 自己的密钥 后、 完成以下步骤,使用密钥封装数据:
-
登录 IBM Cloud控制台。
-
从菜单中选择 资源列表,查看资源列表。
-
从 IBM Cloud 资源列表中,选择您供应的 Key Protect 实例。
-
从密钥列表中选择用于封装数据的根密钥。
-
单击
⋯
图标,打开要拆封的 DEK 的选项列表。 -
单击“信封加密”选项打开侧面板。 如果“解包键”选项卡尚未突出显示,请选择该选项卡。
-
在相应字段中提供上述内容所需的任何文本,包括密码文本和您为解封 DEK 而在本地存储的任何其他数据。
-
单击“解开密钥”按钮。
使用 API 解包密钥
对服务发出打包调用后,可以通过对以下端点发出 POST
调用来将指定的数据加密密钥 (DEK) 解包以访问其内容。
https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/unwrap
包含相同密钥材料的根密钥可以解封相同的数据加密密钥 (WDEK)。 密钥 (WDEK)。
-
复制用于执行初始打包请求的根密钥的标识。
您可以在您的 Key Protect实例,方法是 检索您的密钥列表、 或访问Key Protect面板。
-
复制在初始打包请求期间返回的
ciphertext
值。 -
运行以下
curl
命令来解密和验证密钥材料 材料$ curl -X POST \ "https://<region>.kms.cloud.ibm.com/api/v2/keys/<keyID_or_alias>/actions/unwrap" \ -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>" ] }'
根据下表替换示例请求中的变量。
变量 | 描述 |
---|---|
区域 | 需要。 The region abbreviation, such as us-south or eu-gb , that represents the geographic area where your Key Protect instance resides.有关更多信息,请参阅区域服务端点。 |
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。 |
加密数据密钥 | 需要。 包装操作中返回的密文值。 |
原始密钥资料会在响应的 entity-body 中返回。 响应体 响应体还包含用于解包所提供密码文本的密钥版本 ID。 的密钥版本 ID。
返回的明文已进行base64编码。 有关 如何解码关键材料,请参阅 解码关键材料。 以下 JSON 对象显示返回值示例。
{
"plaintext": "Rm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdv",
"keyVersion": {
"id": "02fd6835-6001-4482-a892-13bd2085f75d"
}
}
如果 Key Protect 检测到您轮换使用用于解包和访问数据的根密钥,那么服务还会在解包响应主体中返回新打包的数据加密密钥 (ciphertext
)。 The latest key version (rewrappedKeyVersion
) that is associated with the new ciphertext
is also returned. 存储和使用新的
ciphertext
value for future envelope encryption operations so that your data is protected by the latest root key.
解码您的关键材料
当你打开数据加密密钥时,密钥材料将以base64 编码返回。 您需要在加密前解码密钥。
使用OpenSSL解码密钥材料
-
下载并安装 OpenSSL.
-
运行以下命令解码base64编码的密钥材料字符串 命令:
openssl base64 -d -in <infile> -out <outfile>
根据下表替换示例请求中的变量。
变量 | 描述 |
---|---|
档案 | base64编码密钥材料字符串所在文件的名称。 |
输出文件 | 命令运行后将输出解码密钥材料的文件名。 |
如果您想在命令行中直接输出解码后的材料,而不是输出文件 而不是文件,请运行命令
openssl enc -base64 -d <<< '<key_material_string>'
, where key_material_string is the returned plaintext from your unwrap request.