Repository navigation
v2.4.0 前向保密,网页可核验
隐匿对话 v2.4.0:前向保密,网页可核验
与 2.x 兼容:暗号、房间地址都不变,新旧版本可以在同一个房间里。
前向保密(协议 v3)
- 每人进房时在浏览器里生成临时密钥(ECDH P-256),公钥用暗号密钥封好后再发出,服务器看不懂也伪造不了。
- 每条消息用一次性钥匙加密(HMAC 链,用过即丢);有人离开、掉线或被移出,留下的人全部换钥匙。
- 临时密钥只在网页内存里:事后拿到暗号,也解不开当时录下的密文。
- 安全码:侧栏显示 6 位数字,由每个人的临时公钥算出;大家核对一致,就说明中间没有人被调包。
- 丢消息提示:中间有消息没送到(断网或被服务器丢弃),会提示少了几条。
- 新旧共存:房间里有旧版本的成员,或服务器是旧版本时,全员自动退回旧方式,侧栏和对话里明确提示「暂未启用前向保密」;旧版本的人离开后自动恢复。服务器故意丢掉密钥消息,也只能造成这种看得见的退回。
- 服务器只多转发两样看不懂的东西:密钥帧(单独限额,不受 6 秒间隔限制)和消息序号。
网页可核验
- 部署和构建时生成
/integrity.json:网页每个文件的 SHA-256,用发布密钥(server/release-key.pem)签名。 node scripts/verify-site.mjs <网址> [--min-version 2.4.0]从外部核对一个正在运行的网站:清单签名、每个文件的哈希、页面引用的脚本有没有清单以外的。- GitHub 上的
site-watch每 6 小时替 chat.freedom8964.com 核对一次。 - 外部核对看不到「只对某个人下发改过的代码」;担心这一点请用安卓 App 或离线包(网页随安装包签名发布)。
安卓
- 联网版 App 2.3.0 同步发布,内置本版网页:android-online-v2.3.0。
测试
单元测试 57 项(三系统);浏览器端到端测试 101 项,加上 v3 专项测试(三人房间、离开换钥、模拟旧版客户端加入和离开),在本地、Cloudflare 运行时和线上都已通过;安卓 WebView 83 实测通过。
⚠ 自己部署的 Docker / 离线包升级后,旧版网页的标签页需要刷新才会用上 v3。升级会断开当时的聊天。
🤖 Generated with Claude Code