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

问题描述 投票:3回答:1

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

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

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

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

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

步骤4:然后,服务器可以使用其私钥来解密消息。

所以我的问题是,

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

请帮我清楚这个概念

android encryption cryptography rsa
1个回答
4
投票

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

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

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

这应该如何实施?

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

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

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

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

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

最后,你真的想要实施一个经过彻底审查的协议,如OMEMOAxolotl,但我想这对于一个教育项目来说已经很遥远了。

© www.soinside.com 2019 - 2024. All rights reserved.