安全网络传输的最佳实践

时间:2014-03-28 13:43:47

标签: android security encryption cryptography

我正在为Android构建一个安全的消息传递应用程序,主要是作为一种学习体验。 该应用程序将允许服务器所在的一个或多个人之间进行加密通信 将永远无法以纯文本格式查看邮件内容。

以下是我的协议的一个示例,我想知道它是否合适或是一种可怕的方式,因为我只是学习密码学最佳实践。

下面我们有客户A和B,A希望私下与B沟通

  1. A&当他们上线时与服务器进行B握手
  2. 服务器发送A& B其RSA公钥(RSA 2048位定期更新)
  3. 客户A& B每个都生成密钥对,加密其公钥并发送到服务器
  4. 客户端A打包邮件,收件人(B),其公钥,元数据和服务器的密钥publickey +此数据包
  5. 客户端使用服务器公钥加密所有这些并发送到服务器
  6. 服务器解密,读取收件人地址,检查哈希值,然后用B&#39的公钥重新加密数据包并发送
  7. B解密消息
  8. 我不确定这是否安全,双重加密的原因是让MITM攻击更难获得A或B的公钥,以便他们可以错误地发送消息或拦截任何有价值的东西。

    有关更好的方法,或建议改进的任何意见?

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用一个众所周知,开发和广泛使用的体系结构,如HTTPS,并避免自己重新创建。

可以使用自签名证书来实施,也可以购买一张保险。

更新的 一个非常好的阅读链接,说明为什么你应该避免编写已经编写并经过充分测试的密码术:Showcasing bad cryptography

答案 1 :(得分:0)

有些观点引起我的注意:

  • 使用公钥/私钥进行通信效率不高。安全通信的常用方案是:

    • 使用非对称协议来商定对称密钥
    • 使用对称协议保护以下通信
  • 为什么要加密公钥?没有意义,因为他们是“公开的”。

  • 定期更新Sever公共(和私人)密钥有什么意义?
  • 我很难理解4中做了什么:你能开发它吗?

另外,正如@blue所说,这是加密中的第一条诫命:

  

不要自己实施加密系统

学习它并没有什么坏处,但是如果你想做一些非常安全的事情,你想要使用经过良好考验的协议和库:https,open ssl,...