端到端加密群聊注意事项

信息安全 安全设计 端到端加密
2021-09-02 23:27:35

我正在考虑使用群聊功能构建一个简单的端到端加密聊天。请记住,1)这只是一个实验,可以帮助我更多地了解密码学;2)我是一个不起眼的程序员,而不是了解所有密码和复杂加密方案的安全专家。

我的第一个想法是:

  • 单人对话(两人):每个客户端生成一个公钥/私钥对并将公钥发送给服务器。每次有人与另一个人交谈时,他们只需从服务器获取收件人的公钥并使用该密钥加密消息。稍后接收者可以用他们的私钥解密它们;
  • 聊:当有人开始群聊时:
    1. 创建聊天的用户会生成一个公钥/私钥对(我们称之为启动器);
    2. “starter”从服务器获取参与者的所有公钥,并与他们加密聊天的私钥;
    3. “启动者”将加密的聊天私钥发送给每个参与者;
    4. 现在,每个参与者都可以发送加密消息(通过使用聊天的公钥对其进行加密)并使用聊天的公钥解密来自其他人的消息。
    5. 如果有人从聊天中添加或删除,则会使用上述相同的过程生成和分发新的聊天公钥/私钥对。

关注群聊:这个实现有什么缺点?这是解决问题的合理且安全的方法吗?

2个回答

全面的

我建议您使用混合加密

它比使用“仅非对称加密”(公私钥)更高效。当您使用非对称加密对很长的消息进行加密时,甚至可能会出现一些问题。

服务器永远不应该知道对称密钥。它的主要任务是保证消息的传输。

2方-E2EE

两方之间的第一个“消息”是通过非对称加密交换对称密钥。这是为了提高所有后续消息的性能(对称加密和解密比非对称加密更快)。

多方 E2EE

这基本上与 2 方端到端加密的工作方式相同。最简单的方法是这样的:

  1. 群聊管理员创建(随机)对称密钥。
  2. 管理员通过非对称加密将此对称密钥发送给组的每个接收者。
  3. 然后使用此对称密钥对所有进一步的消息进行加密和解密。
  4. 如果有新方加入该组,则此对称密钥也可以发送给该方,如果您不关心这些成员也可以解密以前的消息。如果您不希望他们解密较旧的消息,则重复 1. 步骤。
  5. 如果一方离开该组,则重复 1. 步骤。

编辑:我可能还应该补充一点,它肯定有更多细节,但这显示了基本的功能。

没有必要重新发明轮子或设计自己的加密协议,因为缺乏经验可能会出现缺陷。

由于为大型聊天应用程序(如WhatsApp /Snapchat/Telegram)实施端到端加密的复杂性,消息层安全性 (MLS)是密码学学院的一个趋势。

学院接受了多个提案,其中一些已经在WhatsAppSignal等现实世界的应用程序中实施。WhatsApp 使用噪声协议,而 Signal 使用的是自己的协议,也称为 Signal。

根据Nadim Kobeissi(和团队)最近取得的发展进展,噪声协议框架目前是任何想要实现基于 DH 密钥交换而不是 TLS 的安全端到端协议的现实世界应用程序的最佳选择.

我强烈建议您观看以下关于噪声协议框架和噪声资源管理器的真实世界加密讲座,我相信这将极大地启发您:

噪声协议框架| | 特雷弗·佩林 | RWC 2018

Noise Explorer:任意噪声协议的全自动建模和验证