使用Python在RSA中加密文件而不存储任何密码

时间:2011-06-17 07:28:20

标签: encryption public-key-encryption

我在帖子Encrypting a file with RSA in Python中提出了类似的问题,但这个问题有不同的含义。

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

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

那你怎么看待这个计划呢?

path_to_RSA_key = ... # Given by the user
pwd = ... # This will be used to encrypt the file. Also given by user.

rsa_enc = RSA.importKey(path_to_RSA_key)
# Encrypt the Password with RSA, keep the last 32 characters
rsa_pwd = rsa_enc.encrypt(pwd)[-32:]
# Aes, with the encrypted password
aes_enc = AES.new(rsa_pwd, AES.MODE_CBC)

# Encrypt the file with AES...
# Store only the encrypted file
# Don't store the password in any way, don't store the path to RSA key

替代方案是经典方案,当您生成随机密码时,使用随机传递使用AES加密文件,使用RSA加密随机密码并仅存储加密结果。

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

您对该计划有何看法?提前谢谢!

1 个答案:

答案 0 :(得分:1)

似乎有些混乱。您提到您不想存储“密码”,但您使用的是RSA,而不是对称算法。术语“密码”强烈暗示了对称加密中使用的共享密钥,看起来您正在努力使RSA适应您创建的模型。

我看到的问题是此功能可能不适合您的计划用途。您的计划似乎专注于对称密码。此外,使用非对称密钥这种方式可能是个问题。我认为非对称加密用于加密nonce是有原因的;对于像你提议的方案那样的攻击可能不会很强大。

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

  1. 生成一个纯随机的32字符键并将其称为“nonce”。
  2. 使用“nonce”加密邮件并将其称为密文。
  3. 使用非对称密钥加密“nonce”(可能是公钥,但您应该指定)。
  4. 结果由密文和非对称加密的“nonce”组成。
  5. 解密只需要与用于加密的非对称密钥配对。

    如果你是硬核,你可以加密(使用AES +密码或类似)公钥或私钥,这些公钥或私钥可以用来解密现时并发送它。可悲的是,这并没有真正提高AES +密码的安全性,而且你正在大量增加消息中的膨胀。