我正在寻找使用RSA和AES加密和签名邮件的标准方法。我理解在伪代码中发生的行为是这样的:
Alice向Bob发送秘密签名邮件的行为:
AES = random()
message' = encrypt(message, AES)
AES' = encrypt(AES, Bob's public RSA)
messageHash = hash(message')
signature = encrypt(messageHash, Alice's private RSA)
send(Bob, AES')
send(Bob, message')
send(Bob, signature)
Bob收到Alice发来的秘密签名邮件的行为:
AES', message', signature = split(input)
AES = decrypt(AES', Bob's private RSA)
messageHash = decrypt(signature, Alice's public RSA)
receivedMessageHash = hash(message')
messageHash == receivedMessageHash? --> bail out if unequal
message = decrypt(message', AES)
因此,Alice选择一个随机的AES密钥,用它加密消息并将其发送给Bob,以及加密版本的AES密钥以解密它和签名以证明她是创始人。
当然,还有其他设置,例如发送给多个人或不需要签名或类似,但我正在寻找这样的设置。也许我理解错误,上面的伪代码缺乏精确性或包含错误。它只是代表我对此事的粗略理解; - )
我可以自己一步一步地使用像Crypto
这样的Python库或像openssl
这样的Unix shell工具。
但我正在寻找一种标准的方法来做到这一点,而不必担心如何在接收消息时实现填充或伪代码中使用的split()
函数。我想必须有一个库或工具集或任何为我做这个的东西,甚至可以允许与执行类似任务的其他程序互操作。
问题:
我更倾向于坚持使用RSA和AES,并且可以选择使用任何其他选择的算法进行交换,但是也欢迎使用固定算法集的解决方案。
正如我所说,从Alice发送给Bob是我的第一个方法,但能够发送给多个接收器,我们会得到一个很好的奖励。
答案 0 :(得分:2)
您可以使用gnupg
加密并签署您要发送的内容。
正确加密是难的。所以基本上加密的第一个原则是“不要DIY”。
但如果必须,请先观看这些教程:the state of crypto in Python,what to do when you need crypto,crypto 101。