PeerConnect
2026-11-12
简单描述一下这个项目
两个应用,一个房间。中继什么也读不到。 PeerConnect 是一个开放协议,通过 WebSocket 中继给两个应用建立私密、可靠的通道。中继既读不到、也伪造或重放不了它们之间的任何消息,而且什么都不存储。
网站:https://peerconnect.dev/
用在哪里
- 钱包 ↔ 网页应用
- 手机 ↔ 电脑
- 设备 ↔ 设备
- 你 ↔ 你自己的服务(服务在 NAT 后面,不用开端口)
和 WebRTC 比:不需要信令、STUN、TURN,始终走普通的 WebSocket 中继,另外还提供配对、持久身份和可靠投递。和 WalletConnect 比:它是通用的,不只服务钱包。
特点
- 不信任中继:端到端加密并认证,中继只能看到消息大小和时间,看不到内容和密钥。
- 无状态:没有数据库,房间只在双方连着时存在。
- 可靠、有序、恰好一次:消息编号、确认,断线后重发。发送方自己就是队列。
- 邀请会过期:配对完成后双方换到新的配对 ID,泄露的二维码或链接就没用了。
- 任何语言都能实现:公开规范 + 测试向量,还提供
llms.txt让 AI agent 照着实现。
原理
- 邀请方随机生成 32 字节的房间密钥 S,由它派生出 psk、邀请 ID 和房间 ID。
- 邀请是
中继地址#base64url(S ‖ 邀请方身份公钥),用二维码、链接或粘贴的方式交给对方。 - 加入方用 Ed25519 签名中继下发的 nonce,然后双方跑一次
Noise_IKpsk1_25519_ChaChaPoly_SHA256握手;邀请方记住加入方的身份,双方换到由 X25519 共享密钥算出的配对 ID。 - 之后的消息用 ChaCha20-Poly1305 加密,单帧最大 64 KiB,单条消息最大 16 MiB,断线可以续传。
协议提供机密性、完整性、双向认证、前向保密和身份隐藏,但不保证可用性。
快速上手
没有 SDK,拿到 token 后按规范实现自己这一端:
# 试用 token,不用注册,有效两小时
# 每个端用自己的 token 连接
# wss://relay.peerconnect.dev/v1/<room id>?token=<token>
中继也可以自己部署:Cloudflare Workers(每个房间一个 Durable Object)、Docker,或者 cargo install peerconnect-relay。
状态
协议还是 v1 草案,测试很充分但没有经过外部审计,线上格式可能还会变,暂时不要用来保护高价值资产。公共中继只用于测试,不保证可用性。
开源
MIT 协议:github.com/atshelchin/peerconnect,包含 Rust 参考实现(无 I/O 的状态机)、编译成 WebAssembly 的 JS 版本和测试向量。