nostr:note12ylcdswfame8rhf3dfnmyya0wqcpzw72rpthhtttcuahc32jrzks42xtmw
以上就是当前一对一聊天的安全翘楚。
接着写下加密群聊。
我们想要的加密群聊是只有群成员才能加解密消息的端对端加密群。微信群这种通过中心化服务器控制群权限、无端对端加密、始终有一个“官方”可以监控所有群的方案不在我们讨论范围之内。
从两个人的一对一聊天到三个人的群聊是非常不一样的。现在还没有完美的加密群聊方案,目前主要有以下四种实现方式(我只了解到这四种,欢迎补充)。
1、群发模拟出群聊。
一个成员在此模式的群发言,实际上他是在给其他群员发送了一对一私信,在用户界面显示成群聊。假设一个群有10个人,一个群成员发送一条群消息,实际上他是给另外9个成员发送了9条不同的加密消息。
这种方案适合小群。它的优点是直接继承一对一聊天的安全性,简单粗暴。缺点是可扩展性差,不适合人数很多的大群。
2、共享群密钥模式。
在这种模式下,所有的群成员共享一个密钥,所有成员都用它加密和解密群消息。
这种方案适合人数更多一些的群。当群成员发生变动时,例如踢掉某个捣乱的成员,需要更新共享密钥。这种情况下,更新共享密钥效率不够高,可以理解为复杂度为O(N),复杂度和群人数成正比。
3、sender key solution。
在这种模式下,假如一个成员刚加入一个有99人的群,他首先把自己在这个群要用到密钥发给另外99人。后面他在这种群的发言用这个密钥加密,其他成员用这个密钥解密即可。还可以更进一步,他可以对这个密钥做哈希计算,用得到的新密钥加密下一条消息,其他成员也同样操作,然后用新的到的密钥来解密他的消息。
这个方案的难点也是出在群成员变更的情况下,如果有个成员被发现是叛徒,把他踢掉后,所有成员都要互换新的密钥(通过一对一私聊方式)。可以理解为复杂度为O(N^2)。
WhatsAPP的群聊用的是此方案。
(我没有理解为什么会有这个方案,不知道它和共享群密钥模式相比,有什么优势。有懂行的,欢迎评论。)
4、MLS ( Messaging layer security )
这是一个还在制定中的加密群聊方案。制定MLS的组织制定过TLS(transport layer security),几乎只要上网就会不知不觉用到它。MLS方案小组的成员包括一些大的互联网公司,例如facebook和推特,还有一些高校。
MLS目标是为5万人的大群做加密方案。群成员到达万人,前面几个方案就力所不及了。方案2和3在群成员出现变更时,复杂度太高了。
MLS也是共享一个群密钥,所有成员用它加解密消息。特殊之处是,MLS的做法是通过一棵特殊的群成员二叉树方式,把交换更新群共享密钥的复杂度降到O(logN),从而能支持更多的人数。