问题描述
我正在尝试使用 Google Cloud Key Management Service (KMS) python API 加密机密和敏感数据。我注意到在加密后的每次迭代中,精确输入文本的相同密钥会生成不同的加密密文。我的意思是,对于相同的输入文本,我得到不同的加密密文。
我的问题是,
- 为什么加密的密文被改变了?如何为相同的输入获取相同的加密密文/值?
- 如何控制加密密文的长度?
这是我使用的python代码
from google.cloud import kms
client = kms.KeyManagementServiceClient()
name = 'projects/sandBox/locations/global/keyRings/encryptdecrypt-keyring/cryptoKeys/encryptdecrypt-key_v01/cryptokeyversions/1' #CryptoKey info
plaintext = b'hello123' # The data to encrypt
enc1=client.encrypt(request={'name': name,'plaintext': plaintext})
参考:
- jupyter notebook screenshot
- https://cloud.google.com/kms/docs/encrypt-decrypt
- https://googleapis.dev/python/cloudkms/1.4.0/gapic/v1/api.html
解决方法
是的,系统在加密相同的输入时会生成不同的密文。这是大多数加密系统的重要安全控制;它可以防止攻击者让您加密特定消息 M 的攻击,以便他们可以确定他们手中的密文 C 是否也是同一消息 M 的加密副本。
有些系统提供一致的加密输出;该属性称为 Deterministic Encryption。但是,我建议在选择机制之前咨询密码学专家;这些工具很棘手。
我们对加密密文的确切长度不作任何承诺;如果您需要可预测,我想更多地了解我们为何以及如何提供帮助。
感谢您使用 GCP 和 Cloud KMS!