群聊中的非对称密钥加密

信息安全 加密 IOS 即时通讯
2021-08-27 13:08:10

我正在开发一个支持单用户聊天和群聊的聊天应用程序。

我们计划使用接收者的公钥加密单用户聊天中的消息,并使用接收者的私钥对其进行解密。

如果我们采用这种方法,那么在群聊的情况下我们将一无所知。

有什么想法吗?

3个回答

这取决于您对群组聊天使用的模型:

  • 点对点:需要用接收者的公钥对每条消息进行加密,分别发送给每个用户,营造群聊的“幻觉”。这将防止新的群组加入者看到以前的消息。
  • 客户端-服务器:您将“签名”的消息上传到服务器,并将它们加密给每个用户。

或者,您为该“组”创建一个密钥对并将私有副本发送给该组的所有成员,但我确定您已经看到了问题所在。

你最好的选择可能是有一个聊天会话的想法,并在会话期间使用会话密钥。对称加密比非对称加密更快、更安全,因此如果您让会话主机决定会话密钥,然后使用会话的每个成员的公钥对其进行加密并将其发送出去,那么每一方将拥有相同的会话密钥并且能够参与对话。

或者,您可以简单地为每个收件人加密消息,或为每个收件人设置唯一会话,但这是一个慢得多且处理器密集度更高的过程,尽管它仍然使用大致相同数量的数据,因为消息必须单独发送给每个收件人无论如何收件人(除非您使用基于服务器的中继)。

我不知道有什么标准的方式来实现你所要求的。但是,您可以将EFS(和其他类似软件解决方案)中使用的系统类型作为模型

  • 让某人创建群聊。创建者将生成一个仅对该特定聊天有效的唯一密钥。
  • 每条聊天消息都使用对称加密算法使用唯一的会话(聊天室)密钥进行加密。
  • 每次新客户加入时,他都必须向现有聊天成员询问密钥(您如何验证新客户的身份超出范围)。发件人正在使用新客户端的公钥对该聊天密钥进行加密。

这样做的主要问题是如何审查新客户端:显然,您需要以“强”方式执行该验证,因为一旦有人获得会话密钥,所有使用该密钥的过去和未来的消息都可以解密。

如果您的会话应该持续很长时间,那么在某些时候拥有一些用于密钥重新协商的机制可能会很有用。

此外,由于在该系统中,初始客户端决定加密密钥,因此您必须非常小心如何选择该密钥,以免使用简单密钥削弱整体安全性,并且您应该为其他方实施某种方式在对话中拒绝“弱”键(不强制重新协商,只是拒绝连接)