使用aws_encryption_sdk为Python安全存储KMS加密输出

时间:2018-09-24 19:33:29

标签: python django encryption aws-kms

我想加密一个oauth访问并刷新令牌以存储在我的Postgres数据库中,以便以后在Django项目中使用。我正在使用Python aws_encryption_sdk,并调用加密函数,遵循此处的示例:https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/python-example-code.html。我可以使用以下方法和类似的解密方法成功地加密和解密令牌。

    ciphertext, encryptor_header = aws_encryption_sdk.encrypt(
        source=access_token_plaintext,
        key_provider=master_key_provider
        )
    print('Ciphertext: ', ciphertext)

现在,我想将密文存储在附加到用户的模型字段中,这样我就可以为用户进行api调用,而无需他们重新进行身份验证。但是,尽管密文成功包含了加密的access_token,但它也包含我的AWS ARN +明文形式的明文,因此存储密文似乎无法实现加密的全部目的。

密文是一个字节对象,因此很难提取仅加密的令牌文本,这就是我一直在尝试的方法。

有更好的方法吗?将我的ARN存储为密文字节对象的一部分是否安全?我需要将所有这些存储在单独的数据库中吗?

当我打印密文时,这是我得到的响应类型:

    b'\x01\x00{\x03\x0cencryption_context_example_string\x00\x0cencryption_context_example_match\x00\x15aws-crypto-public-key\abcdefghighlmnopqrstuvwxyz/1234567==\x00\x01\x00\x07aws-kms\x00Karn:aws:kms:region_name:account-number:key/ABCD1234-ABCD-1234-A1B2-ABCD1234\x00\xcd...'

0 个答案:

没有答案