You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现E2EE端到端加密时如何防范MITM中间人攻击?

短校验码核验实现(主流E2EE产品通用方案)

  • 两端分别将自己的RSA公钥原始字节、接收到的对方公钥原始字节按固定顺序拼接,对拼接结果做SHA-256哈希运算,将最终哈希值转换为易读格式:可以是4组共16位十进制数字,也可以用BIP39词库映射为12个常用单词,两端生成的校验码必然完全相同。
  • 服务器替换任意一方公钥的情况下,两端拿到的对方公钥不一致,最终生成的校验码必然不匹配,即可判定存在中间人攻击。
  • 校验过程不需要通过服务器传输任何校验相关数据,仅需提示用户通过线下/第三方可信渠道(如电话、面对面核对)确认两端校验码一致即可,服务器全程无法获取校验码值,不存在泄露风险。
  • 要实现自动化核验可以加扫码能力:一端将最终哈希值生成二维码,另一端扫码直接比对本地生成的哈希值,全程不需要用户手动输入,也不经过服务器传输。

预签名公钥方案(无用户操作的自动化方案)

  • 在客户端代码中内置你预先生成的根RSA公钥,用户首次生成身份公钥后,离线提交给你用根私钥做签名,后续公钥随身份信息下发时同步携带该签名。
  • 客户端收到对方公钥时,先校验公钥的签名是否和内置根公钥匹配,校验通过才会使用该公钥加密数据,服务器即使替换公钥也无法伪造根私钥的签名,自然无法实现中间人攻击。
  • 该方案不需要用户做任何额外操作,适合面向普通用户的公开产品,缺点是需要你维护根签名服务,且用户需要信任你不会参与作恶。

WebRTC直传公钥补充方案

  • 现有Socket.IO服务仅用作WebRTC信令交换,不要在信令中传输公钥,等P2P数据通道建立成功后,直接通过端到端的P2P通道传输公钥,服务器完全无法接触到公钥内容,从根源上避免被篡改。
  • 可以在传输公钥时同步传输公钥的SHA-256哈希值,接收端校验哈希一致后再存储,避免传输过程中出现丢包或篡改。

公钥钉扎方案

  • 用户首次和对端通信成功后,将对端的公钥哈希持久化存储在本地,后续每次通信前先比对当前拿到的公钥哈希和本地存储的是否一致,出现不一致直接中断连接并提示风险,可防范服务器后续发起的中间人攻击。

内容的提问来源于stack exchange,提问作者Xtrendence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:57:02