群聊的端到端加密有什么实现方案?

2022-01-26 11:09:44 +08:00
 XiLingHost
刚才在 /t/830661 中聊到了端到端加密,现在的端到端加密似乎比较好实现的都是一对一的私聊
而群聊的端到端加密似乎最常见的实现都是要么牺牲安全性用共享密钥,要么牺牲性能把群聊转换为一系列单聊对每条消息分别使用每个成员的公钥进行加密
有任何其它的方案吗?
3821 次点击
所在节点    问与答
14 条回复
summic
2022-01-26 11:27:18 +08:00
Wire 群聊的实现是牺牲效率,保障安全性。缺点是群人数限制,超过两百人就很难用了
https://github.com/wireapp/proteus
delpo
2022-01-26 12:50:29 +08:00
‘‘牺牲安全性共用密钥’’
个人不觉得共用密钥牺牲了安全性,身为群聊的一个成员知道群聊的密钥不是很正常的吗
maichael
2022-01-26 13:17:13 +08:00
@delpo #2 “牺牲安全性”应该指的是一旦有一个人泄露密钥了,这个群的所有聊天都“不安全”了。
dingwen07
2022-01-26 13:30:30 +08:00
最安全的就是每条消息都对每个参与者加密,参与者数量上升后理论上性能会变得低下。
也可以在每次有成员变动后,都重新用非对称加密方式交换群组共享的对称式密钥。
也不知道之前宣称安全的 Signal 、Tok 怎么做到上百人端对端加密群组的。
Rocketer
2022-01-26 13:33:53 +08:00
群聊不就是共享内容吗?一个人泄露密钥,就像一个人给其他人看群聊内容一样,不就应该全看见吗?
delpo
2022-01-26 13:58:44 +08:00
@maichael 你的问题我感觉是矛盾的

比如说我们实现了这样的一个系统,使得某个人 A 的密钥泄露了以后,其他人之间的会话还是安全的。攻击者有了 A 泄露的密钥,因为 A 是群聊的一员,无论系统加密的方法是什么样,所以 A 可以获取所有消息,那么攻击者也可以获取群聊的所有信息。很明显没有办法实现你所谓的“安全”
XiLingHost
2022-01-26 14:19:20 +08:00
@delpo 那这就导致了一个问题,你实际上无法简单地把人移除出群聊,因为你除了维护参与人列表之外你还必须负责密钥的轮替,而密钥轮替和再分发的方式就很成问题
XiLingHost
2022-01-26 14:20:36 +08:00
而如果是通过对每个通信单独加密就不需要处理公用密钥对的轮替和再分发问题,只需要简单地添加和删除公钥和对应的用户列表就可以处理参与者的增减
XiLingHost
2022-01-26 14:21:54 +08:00
@maichael 不止是这个问题,还有密钥对的分发和再分发问题,只要整个过程需要传输私钥就是不安全的,理想状态是整个过程都只有公钥和已加密的数据在传输,而私钥始终在本地
maichael
2022-01-26 14:23:26 +08:00
delpo
2022-01-26 14:42:16 +08:00
@XiLingHost 其实现有的 IM 都有现成的解决方案,比如说 signal 的:
https://signal.org/blog/private-groups/
这是 signal 的群聊实现,用户 A 发送的每条消息都使用一个临时生成的对称密钥 K 加密,而密钥 K 通过一对一的 e2ee 会话发送给每一个群聊人员,而加密后的消息只需要发一份给服务器,服务器负责转发给每个人,这样就可以节约流量。如果收到了某个人 B 退出或者被踢出群聊的信息,以后只要不把临时密钥 K 发送给 B ,就可以保证后续消息 B 无法解密。
至于这个博客中说的最后一种模型,实际上视频会议中用得比较多,比如说 jitsi 就是自动轮转,每当一个人退出会议后所有人自行派生出新密钥并用其进行加密通信
duke807
2022-01-26 18:35:48 +08:00
我覺得無論是 私聊 還是 羣聊,都應該使用 RSA 類型的對方的 pub key 加密分發 AES 類型的對稱密碼,然後用 AES 加密數據內容,因爲大數據用對稱加密效率高。

任何一個管理員(私聊的話,雙方都是管理員),都可以主動更新 AES key ,用各成員的 RSA pub key 加密分發。
AES key 可以定時(或者根據聊天條數)更新,除非所有管理員都不在線才延遲更新。

至於安全性,羣聊本來就必然存在風險,譬如某個成員的 RSA private key 不小心泄漏,或者該成員故意截圖外發。
使用上述 AES 加密並不會增加風險。

額外要提的是,端到端加密只對開源軟件有意義,商業軟件再怎麼聲稱端到端加密,只要客戶端不是開源,就沒有意義。
duke807
2022-01-26 19:05:05 +08:00
我上面提的 AES key 是所有成員共用的

AES key 的更新時機還要補充一下,增減成員的時候

再提一下,不支持聯邦式的 IM 通訊都是垃圾
LxExExl
2022-01-27 13:02:05 +08:00
@maichael #3

“一旦有一个人泄露密钥了,这个群的所有聊天都“不安全”了。”

那么同理,私聊 1 对 1 的时候,如果这个人泄露密钥了,那么这个人的所有聊天就都“不安全了”。


再抬杠一下,如果一个人把自己的银行卡密码泄露了,那么这个人的银行卡里的钱就不安全了。


这看着没什么问题鸭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830674

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX