首页 > 解决方案 > AWS KMS 解密:如何配置 KMS 密钥?

问题描述

我对如何使用 AWS KMS 客户端解密密文 blob 感到有些困惑。这是 AWS Docs 中的一个示例:

// Encrypt a data key
//
// Replace the following fictitious CMK ARN with a valid CMK ID or ARN
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd- 
56ef-1234567890ab";
ByteBuffer plaintext = ByteBuffer.wrap(new byte[]{1,2,3,4,5,6,7,8,9,0});

EncryptRequest req = new 
EncryptRequest().withKeyId(keyId).withPlaintext(plaintext);
ByteBuffer ciphertext = kmsClient.encrypt(req).getCiphertextBlob();

// Decrypt a data key
//

ByteBuffer ciphertextBlob = Place your ciphertext here;

DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob);
ByteBuffer plainText = kmsClient.decrypt(req).getPlaintext();

解密方法中没有提供 KMS 密钥。这是否意味着 KMS 密钥以某种方式在密文 blob 中加密?如果是这样...

标签: amazon-web-servicesaws-kms

解决方案


您的示例来自加密和解密数据密钥

这些操作旨在加密和解密数据密钥。他们在加密操作中使用 AWS KMS客户主密钥(CMK),并且不能接受超过 4 KB(4096 字节)的数据。尽管您可能会使用它们来加密少量数据,例如密码或 RSA 密钥,但它们并非旨在加密应用程序数据。

CMK:

是在 AWS KMS 中创建的,并且永远不会让 AWS KMS 处于未加密状态。要使用或管理您的 CMK,您可以通过 AWS KMS 访问它们。

这些操作都使用您的 AWS 设置中配置的主密钥,而不是动态提供的密钥。使用 AWS 管理控制台来管理这些密钥。

使用encrypt 方法时,密钥 ID 存储在响应中:

{
   "CiphertextBlob": blob,
   "KeyId": "string"
}

它将在解密期间使用。


推荐阅读