![]() | 1 summic 2022-01-26 11:27:18 +08:00 Wire 群聊的实现是牺牲效率,保障安全性。缺点是群人数限制,超过两百人就很难用了 https://github.com/wireapp/proteus |
2 delpo 2022-01-26 12:50:29 +08:00 via Android ‘‘牺牲安全性共用密钥’’ 个人不觉得共用密钥牺牲了安全性,身为群聊的一个成员知道群聊的密钥不是很正常的吗 |
![]() | 4 dingwen07 2022-01-26 13:30:30 +08:00 最安全的就是每条消息都对每个参与者加密,参与者数量上升后理论上性能会变得低下。 也可以在每次有成员变动后,都重新用非对称加密方式交换群组共享的对称式密钥。 也不知道之前宣称安全的 Signal 、Tok 怎么做到上百人端对端加密群组的。 |
![]() | 5 Rocketer 2022-01-26 13:33:53 +08:00 via iPhone 群聊不就是共享内容吗?一个人泄露密钥,就像一个人给其他人看群聊内容一样,不就应该全看见吗? |
6 delpo 2022-01-26 13:58:44 +08:00 @maichael 你的问题我感觉是矛盾的 比如说我们实现了这样的一个系统,使得某个人 A 的密钥泄露了以后,其他人之间的会话还是安全的。攻击者有了 A 泄露的密钥,因为 A 是群聊的一员,无论系统加密的方法是什么样,所以 A 可以获取所有消息,那么攻击者也可以获取群聊的所有信息。很明显没有办法实现你所谓的“安全” |
![]() | 7 KagurazakaNyaa OP @delpo 那这就导致了一个问题,你实际上无法简单地把人移除出群聊,因为你除了维护参与人列表之外你还必须负责密钥的轮替,而密钥轮替和再分发的方式就很成问题 |
![]() | 8 KagurazakaNyaa OP 而如果是通过对每个通信单独加密就不需要处理公用密钥对的轮替和再分发问题,只需要简单地添加和删除公钥和对应的用户列表就可以处理参与者的增减 |
![]() | 9 KagurazakaNyaa OP @maichael 不止是这个问题,还有密钥对的分发和再分发问题,只要整个过程需要传输私钥就是不安全的,理想状态是整个过程都只有公钥和已加密的数据在传输,而私钥始终在本地 |
![]() | 10 maichael 2022-01-26 14:23:26 +08:00 ![]() |
11 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 就是自动轮转,每当一个人退出会议后所有人自行派生出新密钥并用其进行加密通信 |
12 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 加密不增加。 外要提的是,端到端加密只源件有意,商件再怎端到端加密,只要客端不是源,就有意。 |
13 duke807 2022-01-26 19:05:05 +08:00 我上面提的 AES key 是所有成共用的 AES key 的更新要充一下,增成的候 再提一下,不支持邦式的 IM 通都是垃圾 |