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

Vis*_*ese 4 encryption android cryptography rsa

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

我就是这么想的

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

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

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

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

所以我的问题是

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

请帮我弄清楚这个概念

dsp*_*els 7

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

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

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

实际上应如何实施?

您要实现的目标是使对话伙伴共享相同的密钥。通常公认的方法是使用(椭圆曲线)Diffie-Hellman密钥交换。建立共享机密后,我们可以使用适当的AEAD方案开始在客户端之间进行通信。

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

因此,基本上,服务器仅充当客户端的中继。无论如何,使用TLS与服务器连接仍然是一个好主意。

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

  • 向前保密(通过输入密钥)
  • 重播攻击
  • 客户的匿名
  • 冒充其他客户
  • 等等

最后,您确实想实现一个经过严格审查的协议,例如OMEMOAxolotl,但是我想这对于教育项目来说是遥不可及的。

  • 有什么框架可以让这件事变得更容易吗? (2认同)