Wispr 首次联系为什么必须"接受"才能开聊:密钥交换的技术原因
现象
当有人第一次在 Wispr 中给你发消息时,你收到的不是正常消息,而是一条"联系请求"——内容类似"[用户名] 想与你建立加密会话",旁边有一个"接受"按钮。
你必须点击"接受",之后双方才能开始正常收发加密消息。
这不是好友验证,也不是反垃圾机制——这是加密协议的技术要求。
为什么需要这一步
问题的本质:公钥交换
Wispr 使用 VOBP 加密协议建立端到端加密会话。加密的前提是:你的设备和对方的设备各自持有对方的公钥,这样才能用对方的公钥加密消息。
那对方怎么拿到你的公钥?
两种公钥分发策略
策略 A:自动上传到服务器(Signal、WhatsApp 路线)
- 注册时自动把公钥上传到服务器
- 服务器帮你管理"谁的公钥是什么"的映射表
- 查找联系人时服务器返回对方的公钥
- 问题:如果你想确认服务器给你的公钥是不是真的对方的,需要手动比对安全码
策略 B:P2P 握手交换(Wispr VOBP 路线)
- 公钥不上传中央服务器
- 两台设备在建立连接时直接互相交换公钥
- "接受"按钮就是这次 P2P 握手成功的确认
Wispr 选择了策略 B——这是 P2P 直连架构的自然延伸:如果公钥不经过服务器中转,就需要设备之间直接交换。
技术流程详解
对方发起第一条消息
↓
对方设备 → 发送包含自己公钥的会话请求 → 你的设备
↓
你的设备收到请求,弹出"接受"按钮
↓
你点击"接受"
↓
你的设备 → 发送包含自己公钥的响应 → 对方设备
↓
双方现在互相持有对方的公钥
↓
可以正常收发加密消息了 ✅
在你点击"接受"之前,你的设备没有对方的公钥,所以哪怕对方的消息已经送达,你的设备也无法解密——从技术上讲,那条消息就是一段看不懂的随机密文。
和好友验证有什么区别
| 维度 | Wispr 首联接受 | 微信/QQ 好友验证 |
|---|---|---|
| 目的 | 交换加密公钥,建立加密会话 | 社交关系确认 |
| 验证通过后 | 双方互持公钥,可加密通讯 | 双方加为好友,可见朋友圈等 |
| 拒绝的影响 | 对方无法给你发加密消息 | 对方无法加你为好友 |
| 是否重复 | 只需要第一次做,之后不用 | 每次新好友都要 |
| 技术本质 | 密码学握手 | 社交关系管理 |
安全验证:区块链锚点
VOBP 协议在这个过程中还有一个额外的安全机制:当你和对方完成密钥交换、建立会话时,会话元数据会被记录到区块链上。
如果之后你怀疑有人可能在中间劫持了会话(中间人攻击),可以通过对比区块链上记录的会话公钥指纹来验证——如果指纹匹配,说明对方的公钥确实是他本人发布的,没有被替换。
这个机制值得改进吗
从用户体验的角度,"首联需要接受"这一步确实会让人困惑——很多人第一次用 Wispr 都会以为这是某种奇怪的好友验证,甚至因为看不懂而放弃。
但从安全的角度,这正是 Wispr 对 P2P + 零服务器可见性承诺的必然代价:你不能既要求公钥不经过服务器中转,又要求自动完成密钥交换。 两者不可兼得。