群聊的端到端加密有什么实现方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KagurazakaNyaa
0.11D
V2EX    问与答

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

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

    比如说我们实现了这样的一个系统,使得某个人 A 的密钥泄露了以后,其他人之间的会话还是安全的。攻击者有了 A 泄露的密钥,因为 A 是群聊的一员,无论系统加密的方法是什么样,所以 A 可以获取所有消息,那么攻击者也可以获取群聊的所有信息。很明显没有办法实现你所谓的“安全”
    KagurazakaNyaa
        7
    KagurazakaNyaa  
    OP
       2022-01-26 14:19:20 +08:00
    @delpo 那这就导致了一个问题,你实际上无法简单地把人移除出群聊,因为你除了维护参与人列表之外你还必须负责密钥的轮替,而密钥轮替和再分发的方式就很成问题
    KagurazakaNyaa
        8
    KagurazakaNyaa  
    OP
       2022-01-26 14:20:36 +08:00
    而如果是通过对每个通信单独加密就不需要处理公用密钥对的轮替和再分发问题,只需要简单地添加和删除公钥和对应的用户列表就可以处理参与者的增减
    KagurazakaNyaa
        9
    KagurazakaNyaa  
    OP
       2022-01-26 14:21:54 +08:00
    @maichael 不止是这个问题,还有密钥对的分发和再分发问题,只要整个过程需要传输私钥就是不安全的,理想状态是整个过程都只有公钥和已加密的数据在传输,而私钥始终在本地
    maichael
        10
    maichael  
       2022-01-26 14:23:26 +08:00   1
    delpo
        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 就是自动轮转,每当一个人退出会议后所有人自行派生出新密钥并用其进行加密通信
    duke807
        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 加密不增加。

    外要提的是,端到端加密只源件有意,商件再怎端到端加密,只要客端不是源,就有意。
    duke807
        13
    duke807  
       2022-01-26 19:05:05 +08:00
    我上面提的 AES key 是所有成共用的

    AES key 的更新要充一下,增成的候

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

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

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


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


    这看着没什么问题鸭
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1210 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:27 PVG 01:27 LAX 10:27 JFK 13:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86