我应该使用哪种加密方法?

CMi*_*cea 4 encryption rsa aes

我需要一个系统来交换非常秘密的数据(源代码是商业秘密).我会使用Crypto ++,所以实际上我可以使用所有加密算法,虽然我更喜欢使用行业标准.

目前我正在考虑这些方法:

  1. 让服务器生成2048/4096位RSA密钥,将公钥发送到客户端,让客户端加密数据然后将其发送到服务器.
  2. 使用像Diffie-Hellman这样的密钥交换方法(Diffie-Hellman-Merkle是正确的)来交换AES-256密钥.
  3. 启动TLS连接并直接告诉服务器AES密钥.

你认为我应该使用哪种方法?只要合理,我就不关心表现; 安全是最重要的.如果没有,请提出另一种方法.

PS:我可能会使用对称算法进行链接,比如AES-Twofish-Serpent.

编辑:任何推荐的软件必须在不限制专有使用的许可证中.LGPL是必须的限制.这排除了GPL.

Rem*_*anu 11

不要开发自己的密钥交换和/或密钥配置协议.这是历史上破坏大多数产品的原因,除非你是一个cryoptographer(不是具有加密经验的程序员),否则你可能会错.

使用现成的协议,如SSL/TLS.例如.使用RSA密钥对初始化TLS以进行相互身份验证和AES会话密钥听起来适合您所描述的内容

更新

布鲁斯施奈尔:

"一位同事曾告诉我,世界上充斥着由阅读应用密码学的人设计的不良安全系统"

erickson在他的帖子中已经为你提供了大量证据,说明为什么设计自己的密钥配置和管理协议是有缺陷的.感谢过度自信的开发人员,我只是想把这个问题归结为为什么Mallory还活着并且做得很好:

您设计了您建议的方案,客户端使用公钥加密并将文档发回给您.事情很有效,但是1年后证书即将到期.您使用包含您希望用户签名的公钥的新证书向您的客户发送电子邮件,以便为您加密文档.您不知道的是,在过去的4个月中,您的ISP管理员收到了通过远程计算机路由所有IP流量的贿赂.您的电子邮件在分发之前被截获,您的附加证书将被另一个证书替换.您的所有客户现在都在发送为其他人的私钥加密的超级秘密文件.应用程序解密每个应用程序,将其存储,然后使用您的公钥对其进行加密,并将流量转发给您.您甚至不知道发生了什么,直到访问客户网站时,您发现他使用的证书不是您分发的证书.

您在帖子中提到链式算法的选项.没有人会蛮力你.你的弱点将是密钥管理,攻击将采取某种形式的社会工程来愚弄某人正在使用错误的密钥,或者陶醉私钥(再次,贿赂还有很长的路要走).业界一致协议有步骤,以防止人在这方面的中间人攻击,它们可能依赖于识别指定按键的使用和信任当局PKI基础,他们补充证书吊销列表检查步骤,以验证等等等等只是"我加密的公共密钥,你用私人解密'不保密.

  • 关于从头开始构建的注释的+1. (2认同)