@
thisismr2 这样的描述还是有点模糊,由于细节你是没法全部表述清楚的,我也不可能很快地完整理解整个系统的结构,所以没法下确定性的判断。
但总之
1. 预设服务器不可能攻破并不十分可靠,无论是逻辑缺陷还是旁站业务还是侧信道都有可能从中提取信息,相比之下终端反而安全很多,甚至在考虑存在 0day 的情况下通常也需要 1-click 才会发生入侵
2. C 和 S 不需要共享任何信息,作为攻击者,他的做法可以分别获取想要的信息再重建关联。再说了,「 C 泄露的 K 是 S 上的某个通信密钥」这个关联已经很强了
3. TLS 只能保证链路安全,无法保证端点上的安全,除非 S 是一个单纯的流量转发器,不解析 TLS 中的内容,那么信道没有在 S 上落地,可以认为在 S 点上安全,但描述并非这么回事。
4. A 和 B 的认证 cookie 没有没有包含在信道建立的步骤中,因此没有作用,除非你的设计是登录后创建的信息与 AEAD 加密的 key 强关联,那么登录状态能同时保证消息完整且可认证,这样是可以确认消息只能由持有登录状态的人发出/解出的。
我就假设一个攻击手段好了
1. 想办法批量获取全网的 C ,记录在线时间和 K ,记录为 R
2. 在 S 上取得一组 AB 通信记录,查询对应时间区间的 R ,用 R 对应的 K 解密
如果你真的非要假设 S 绝对安全 —— 安全是基于可信的。S 安全意味着 S 可信,那么你其实不用避免 S 得知 K ,因为 S 理应拿着 K 也不会做任何事。
如果你不担保这点,就是在假设 S 存在「主动向 C 获取 K 来解密他自己正在中转的消息的行为」的可能性,这是你系统设计外的非预期行为,如果系统设计要考虑容许这个非预期也就意味着还要容许诸如「 S 中转的消息被泄露」之类的其它非预期。所以我对你「假定 S 安全」的前提持怀疑态度。