聊天应用程序的端到端加密

时间:2018-01-14 13:10:15

标签: android encryption cryptography rsa

我正在尝试构建一个仅用于教育目的的Android聊天应用程序。我想尝试实施端到端加密,以便我的邮件安全。我想过使用 RSA 作为加密方案(我是密码学领域的新手)

这就是我认为我应该这样做的,

  

第1步:在客户端和服务器端生成公钥和私钥。

     

第2步:交换公钥。 (这意味着服务器将拥有每个客户端的公钥)。

     

步骤3:使用服务器的公钥加密邮件并发送到服务器,反之亦然。

     

第4步:然后,服务器可以使用其私钥解密邮件。

所以我的问题是,

  
      
  1. 我如何存储私钥?
  2.   
  3. 这种方法的缺点是什么?
  4.   
  5. 如何实际实施?
  6.   

请帮我清除这个概念

1 个答案:

答案 0 :(得分:2)

您所描述的是端到端加密。

端到端意味着两个端点(客户端)之间的通信是加密的。整个想法是服务器永远不会读取或修改会话数据。

我将主要回答你的上一个问题,因为这可能是最相关的问题:

  

如何实际实施?

您希望实现的目标是让对话伙伴共享相同的密钥。普遍接受的方法是使用(椭圆曲线)Diffie-Hellman key exchange。在我们建立共享密钥后,我们可以使用合适的AEAD scheme开始在客户端之间进行通信。

请注意,这仍然容易受到中间人攻击,因此我们需要一种带外方法来验证两个客户端实际上共享相同的密钥。这通常通过手动比较键的散列值(example: Signal)来完成。

所以基本上服务器只作为客户端的中继。在任何情况下,使用TLS与服务器连接仍然是一个好主意。

请注意,我们未考虑以下主题:

  • 保密(通过重新加密)
  • 重播攻击
  • 客户匿名
  • 假冒其他客户
  • 等等

最后,您真的想要来实施经过彻底审查的协议,例如OMEMOAxolotl,但我想这很难实现用于教育项目。