我对AWS Cloud环境比较陌生,所以我的知识总体上是有限的。如果这些是简单的直接问题和询问样品,我会向前道歉。
我也在环顾四周以获取更多信息但却找不到多少信息。也许我在寻找一个错误的东西。任何帮助将不胜感激。
我正在尝试使用 AWS KMS 加密我的应用中的一个数据元素。完成文档后,我的理解如下:
我的代码如下:
AWSKMS awsKmsClient = AWSKMSClientBuilder.standard().build();
GenerateDataKeyRequest keyRequest = new GenerateDataKeyRequest()
.withKeyId("alias/MyKeyAlias")
.withKeySpec("AES_256");
GenerateDataKeyResult dataKeyResponse = awsKmsClient .generateDataKey(keyRequest );
System.out.println("Plaintext Data Key: " + dataKeyResponse.getPlaintext());
System.out.println("Ciphertext Data Key: " + dataKeyResponse.getCiphertextBlob());
文档说要使用"明文"数据密钥加密我的数据和删除"明文"数据密钥。
我的第一个问题是:如何使用"明文"加密我的数据?数据键?
我无法在文档中找到有关如何执行此操作的位置。或者使用哪种API。有一个" 加密" AWSKMSClient类中的方法,但只能与 CMK的KeyID 一起使用,而不能与数据键一起使用。或者我理解错了吗?
然后文档还说存储 加密数据和" ciphertextblob "数据密钥。 这在AWS KMS术语中称为信封加密。我无法弄清楚我该怎么做。在这方面的任何帮助将受到高度赞赏。
根据文档,我们需要采取以下步骤进行解密:
使用存储的" ciphertextblob"获取"明文"的数据键数据密钥。
使用以上"明文"数据密钥用于解密数据。
我对此也有几个问题,如下所示:
存储加密数据的最佳方法是什么?" ciphertextblob "数据库中的数据键?
如何获得" 明文"数据密钥来自存储的" ciphertextblob"数据键?
最后,如何使用"明文"解密我的数据?数据密钥我在上面的步骤中得到了什么?
如果您能为上述问题提供示例代码,我将不胜感激。或者请指出我正确的方向来实现上述目标。
谢谢。
答案 0 :(得分:2)
您可以使用Java Cryptography Extension(JCE)来加密或解密数据。我不确定存储数据ciphertextblob数据密钥和加密数据的最佳方法是什么,但我认为它应该取决于您的应用程序和要求。要从ciphertextblob获取明文数据密钥,您需要调用KMS Decrypt API,即使用CMK解密ciphertextblob数据密钥并获取明文数据密钥。
您应该使用AWS Encryption SDK并且不必担心这些问题:)
可以找到示例代码here。
答案 1 :(得分:1)
我的第一个问题是:如何使用"明文"加密我的数据?数据键?
您可以使用默认加密功能,因为我看到您正在使用Java,您可以查看my encryption blog。
然后文档还说要存储加密数据和" ciphertextblob"数据密钥。这在AWS KMS术语中称为信封加密。我无法弄清楚我该怎么做。在这方面的任何帮助将受到高度赞赏。
存储您的密文(加密数据)和" ciphertextblob"从generateDataKey操作返回的数据键。如何存储您的数据取决于您(本地磁盘,S3,DB,其他服务..)。
" ciphertextblob"数据密钥稍后将用于从kms请求普通加密密钥,以便您可以解密数据
根据文档,我们需要采取以下步骤进行解密:
使用存储的" ciphertextblob"获取"明文"的数据键数据密钥。
使用上面的"明文"数据密钥解密数据。
实际上,解密操作从" ciphertextblob"返回明文数据加密密钥,因此您可以解密您的数据(再次 - 数据加密/解密完全取决于您,但强烈建议你使用一些安全的标准,如AES)
存储加密数据的最佳方法是什么?" ciphertextblob"数据库中的数据键?
请注意加密数据是二进制的,因此您可以将它们视为已编码(例如base64),因此最好的方法是将它们存储为文本(varchar)。
我如何获得"明文"数据密钥来自存储的" ciphertextblob"数据键?
调用decrypt()操作 - 它从" ciphertextblob"
返回普通数据加密密钥最后,我如何使用"明文"解密我的数据?数据密钥我在上面的步骤中得到了什么?
再次使用默认的加密功能:)