【问题标题】:Encrypting a file with RSA in Python without storing any password在 Python 中使用 RSA 加密文件而不存储任何密码
【发布时间】:2011-09-16 23:32:33
【问题描述】:

我在帖子Encrypting a file with RSA in Python 中也问过类似的问题,但这个问题有不同的内涵。

我正在使用 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

你觉得这个方案怎么样?提前谢谢你!

【问题讨论】:

  • 看起来您正在使用 RSA 作为临时密码散列算法。我认为这不会给你买任何东西。您可以在 Google 上搜索基于密码的加密 (PBE) 和 PKCS#5,以查看更多标准方案,然后再提交您的方案。
  • 这个方案的一个问题是使用公钥算法加密只需要公钥。如果您只希望私钥能够加密,则需要进行签名,而不是加密。如果您将一半密钥存储在磁盘上,您可以存储加密的 AES 密钥并使用密码来解密该密钥,但正如 GregS 所说,在这种情况下,基于密码的加密更有意义。
  • @101100:和@GregS:谢谢您的回答!您可以使用相同的公钥或私钥进行加密,PyCrypto 从私钥生成公钥。我还检查了 PKCS#5,我会看看我是如何实现的。

标签: encryption public-key-encryption


【解决方案1】:

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

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

非对称密钥常用如下:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多