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
XiLingHost OP @delpo 那这就导致了一个问题,你实际上无法简单地把人移除出群聊,因为你除了维护参与人列表之外你还必须负责密钥的轮替,而密钥轮替和再分发的方式就很成问题
|
8
XiLingHost OP 而如果是通过对每个通信单独加密就不需要处理公用密钥对的轮替和再分发问题,只需要简单地添加和删除公钥和对应的用户列表就可以处理参与者的增减
|
9
XiLingHost OP @maichael 不止是这个问题,还有密钥对的分发和再分发问题,只要整个过程需要传输私钥就是不安全的,理想状态是整个过程都只有公钥和已加密的数据在传输,而私钥始终在本地
|
10
maichael 2022-01-26 14:23:26 +08:00 1
|
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 通訊都是垃圾 |