我在帖子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
您对该计划有何看法?提前谢谢!
答案 0 :(得分:1)
似乎有些混乱。您提到您不想存储“密码”,但您使用的是RSA,而不是对称算法。术语“密码”强烈暗示了对称加密中使用的共享密钥,看起来您正在努力使RSA适应您创建的模型。
我看到的问题是此功能可能不适合您的计划用途。您的计划似乎专注于对称密码。此外,使用非对称密钥这种方式可能是个问题。我认为非对称加密用于加密nonce是有原因的;对于像你提议的方案那样的攻击可能不会很强大。
非对称密钥通常按如下方式使用:
解密只需要与用于加密的非对称密钥配对。
如果你是硬核,你可以加密(使用AES +密码或类似)公钥或私钥,这些公钥或私钥可以用来解密现时并发送它。可悲的是,这并没有真正提高AES +密码的安全性,而且你正在大量增加消息中的膨胀。