使用RSA和AES加密/解密;标准是什么?

时间:2016-05-08 21:50:48

标签: python bash unix encryption cryptography

我正在寻找使用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()函数。我想必须有一个库或工具集或任何为我做这个的东西,甚至可以允许与执行类似任务的其他程序互操作。

问题:

  1. 上面描述的设置是否可行且典型?或者它是否包含任何逻辑错误,缺陷或可攻击的方面?
  2. 我的用例是否有标准格式,我应该坚持(某些RFC,PKCS,...)以保持与其他程序的互操作性,如果是,那么哪些软件可用作Unix命令行工具或作为Python库能够处理这个标准吗?
  3. 我更倾向于坚持使用RSA和AES,并且可以选择使用任何其他选择的算法进行交换,但是也欢迎使用固定算法集的解决方案。

    正如我所说,从Alice发送给Bob是我的第一个方法,但能够发送给多个接收器,我们会得到一个很好的奖励。

1 个答案:

答案 0 :(得分:2)

您可以使用gnupg加密并签署您要发送的内容。

正确加密是难的。所以基本上加密的第一个原则是“不要DIY”。

但如果必须,请先观看这些教程:the state of crypto in Pythonwhat to do when you need cryptocrypto 101