1

我在用 Python 中的 RSA 加密文件后问了一个类似的问题,但这个问题有不同的含义。

我正在使用 AES 加密文件,使用 RSA 加密 AES 密码。

唯一的区别是我真的不想存储 AES 密码。用户必须提供其 RSA 密钥的路径和密码。

那么你觉得这个方案怎么样?

path_to_RSA_key = ... # 用户给定
pwd = ... # 这将用于加密文件。也是用户给的。

rsa_enc = RSA.importKey(path_to_RSA_key)
# 使用 RSA 加密密码,保留最后 32 个字符
rsa_pwd = rsa_enc.encrypt(pwd)[-32:]
# aes,使用加密密码
aes_enc = AES.new(rsa_pwd, AES.MODE_CBC)

# 使用 AES 加密文件...
# 只存储加密文件
# 不要以任何方式存储密码,不要存储 RSA 密钥的路径

另一种选择是经典方案,当您生成随机密码时,使用随机密码使用 AES 加密文件,使用 RSA 加密随机密码并仅存储加密结果。

如果你真的需要知道我为什么需要这个,这是我的一个项目,http://code.google.com/p/scrambled-egg

你觉得这个方案怎么样?先感谢您 !

4

1 回答 1

1

似乎有些混乱。您提到您不想存储“密码”,但您使用的是 RSA 而不是对称算法。术语“密码”强烈暗示了对称加密中使用的共享秘密,而且您似乎非常努力地将 RSA 放入您创建的模型中。

我看到的问题是此功能可能不太适合您的计划使用。您的计划似乎侧重于对称密码。此外,以这种方式使用非对称密钥可能是个问题。我认为非对称加密用于加密随机数是有原因的;对于可以针对您建议的计划发起的攻击,它可能并不稳健。

非对称密钥通常使用如下:

  1. 生成一个纯随机的 32 个“字符”密钥并将其称为“nonce”。
  2. 用“nonce”加密消息并将其称为密文。
  3. 使用您的非对称密钥(可能是公钥,但您应该指定)加密“nonce”。
  4. 结果由密文和非对称加密的“nonce”组成。

解密只需要与用于加密的非对称密钥配对。

如果你是铁杆,你可以加密(使用 AES + 密码或类似的)可用于解密 nonce 的公钥或私钥并将其发送出去。可悲的是,这并没有真正提高 AES+密码的安全性,而且您正在大量增加消息中的膨胀。

于 2011-09-28T04:34:37.510 回答