首页 / 资讯中心 / 文章详情

lolPing房间如何做到端到端加密:scrypt、AES-256-GCM与Nostr中继全解析

lolPing房间如何做到端到端加密:scrypt、AES-256-GCM与Nostr中继全解析 ★ FEATURED ARTICLE
【免费下载链接】lolPingLeague of Legends ping wheel for your Windows desktop. Hold Alt, drag, and ping anywhere, with the original animations and sounds.项目地址https://gitcode.com/gh_mirrors/lo/lolPing点击查看免费下载lolPing 是一款让《英雄联盟》信号ping出现在整个桌面的工具按住 Alt 拖动即可在任何应用上方发出带原声动画的信号。多人房间功能允许朋友之间互相看到对方的信号而所有房间消息都经过端到端加密——即使信号要绕经公网 Nostr 中继中继方也只能看到无法解读的密文。这篇文章完整解析 lolPing 房间加密的技术路径从房间码出发经过 scrypt 密钥派生、AES-256-GCM 加密最终通过 Nostr 公网上线带你看清每一层是如何守护你的 ping 的。一、为什么房间信号需要端到端加密 在 lolPing 的Settings → Room页面创建一个房间会得到类似PING-7KQ4M-2HXTR的房间码。把它发给朋友后每个人的屏幕上都会出现对方的信号位置按各自分辨率等比换算和昵称。房间有两条网络路径同一局域网通过 UDP 直连走 src/main/lanTransport.ts不同网络加密数据包被封装成 Nostr 事件经由 6 个免费公共中继转发走 src/main/relayTransport.ts。第二条路径意味着你的数据要路过第三方服务器。如果信号内容明文传输中继运营方就能看到你 ping 了什么、在哪 ping、你叫什么名字。所以 lolPing 选择了端到端加密数据在发送方就变成密文只有持有房间码的人能解开。二、房间码一个敢念出口的密码房间码是整套加密体系的根。它的生成规则在 src/shared/roomCode.tsCrockford Base32 编码字母表0123456789ABCDEFGHJKMNPQRSTVWXYZ刻意去掉了 I、L、O、U避免口头传递时 B/8、O/0 混淆10 位字符9 位随机 1 位校验位Luhn mod 32 校验位能捕获任何单字符输错以及大多数两位交换错误——输错一个字母加入时会直接提示mistyped而不是静默失败。解析逻辑 parseRoomCode() 还很宽容聊天消息里夹带、全角字符、O/I 误输成 0/1 都能识别出来方便你直接把朋友发的整段话贴进Join from clipboard。三、从房间码到密钥scrypt 派生的门道 拿到 10 位标准码后deriveRoomKeys() 用两步把它变成两套密钥第 1 步scrypt 慢哈希生成主密钥。参数是N 2^15, r 8, p 1盐值固定为lolping/room/v1输出 32 字节主密钥。为什么不用普通哈希因为中继订阅话题relay topic也是从房间码派生的。如果派生函数计算太快攻击者拿到一个 topic 后就能大规模离线暴力和房间码对账。scrypt 是内存密集型函数memory-hard每次尝试都要占用 32 MB 内存把猜码这件事在经济上直接判了死刑。第 2 步HKDF-SHA256 把主密钥拆成两个专钥。派生标签用途msgmsgKeyAES-256-GCM 的消息加密密钥永不离开主进程sig-roomrelayTopic64 位十六进制的中继订阅话题这就是one key, one job原则即使其中一个用途的密钥泄露也不会牵连另一个。而且relayTopic本身就是 64 位随机值的十六进制——没有房间码的人看到它和看一串雪花噪点没有区别。四、AES-256-GCM一个信号包是如何被加密的每条消息presence 成员信息、ping 信号、emote 表情、bye 离开通知在 src/main/roomCrypto.ts 中被seal()打包格式只有四种字段拼起来[ 0x01 格式标记 ][ 12 字节随机 nonce ][ AES-256-GCM 密文 ][ 16 字节 auth tag ]三个关键设计点每条消息一个全新随机 noncerandomBytes(12)。GCM 模式下 nonce 重用是灾难性的随机 nonce 把这个问题彻底绕开格式标记字节同时作为 AAD附加认证数据。接收端open()会校验这个字节防止攻击者用格式合法的别的东西替换真实包GCM 自带完整性校验。密文被篡改哪怕一个比特16 字节 auth tag 校验就会失败open()直接返回null丢弃——加密与防篡改一次到位。包体有硬上限MAX_PACKET 1200字节更大的包既不会发送也不会被读取这既是 UDP 友好的尺寸控制也天然限制了单包体积攻击面。五、Nostr 中继只运密文的公共邮筒 跨网络时加密包如何送达答案是把每个 ≤1200 字节的密封包 base64 编码后装进一个Nostr 事件里src/main/nostrEvent.tskind 24747落在 Nostr 的 ephemeral临时事件区间 20000–29999。按协议约定中继只转发、不落盘会话结束后不留任何历史tagx relayTopic所有成员订阅同一话题一次 publish 全员可见成员之间互相看不到 IP每次加入房间都现生成一对 secp256k1 密钥用 NIP-01 规范对事件签名。签名只是满足中继的防冒名要求真正的安全由房间自己的加密体系负责——所以密钥用完即弃中继清单src/main/relays.ts 里的 6 个公共中继是用 tools/relay-probe 从 16 个候选里筛出来的能接受 kind 24747、30 秒内 5 事件/秒无限流、10 分钟持续连接不掉线。任何成员只要和另一个成员共享一个可用中继就能互通。代码里还留了一条兼容性铁律未来版本必须保留旧列表里至少 3 个中继否则新旧版本互相找不到。六、隐私边界中继到底能看到什么中继能看到中继看不到内容—✅ ping 内容、emote、昵称全是密文身份你的 IP 地址、一个匿名的 64 位房间话题✅ 房间码、成员列表行为你何时在发消息✅ 发了什么局域网成员之间只能看到彼此的内网 IP。如果完全不想让数据碰公网把设置里的Allow internet connections关掉即可房间退化为纯局域网模式。七、纵深防御重放、限速与成员管理 ️加密只是第一层。src/main/roomManager.ts 上还叠了几道闸序列号防重放每条消息带seq序号配合 replayGuard.ts 识别并丢弃重放的旧包中继限速共享中继上每位发送者限 5 包/秒、突发 10 包——因为一次 publish 全员可见公共中继对流量极其敏感接收限制设置页可给每个成员单独调收到的 ping/emote 上限还能静音单人或整个房间房间容量 8 人踢人方式退出后重建新房间。八、代码地图想深挖从哪读起 模块文件职责加密核心src/main/roomCrypto.tsscrypt 派生 AES-256-GCM 密封/开启房间码src/shared/roomCode.ts生成、校验、容错解析消息协议src/shared/roomProtocol.tspresence/ping/emote/bye 定义与校验成员管理src/main/roomManager.ts路由选路、限速、超时踢人中继传输src/main/relayTransport.ts加密包 ↔ Nostr 事件中继清单src/main/relays.ts6 个经过实测的公共中继测试tests/main/relayRoom.test.ts、tests/shared/roomCode.test.ts房间协议与加密测试架构细节路径选择、超时参数、中继判活策略在 docs/design.md 有完整论述单机组一台电脑想体验房间的话可以用 tools/room-peer 脚本扮演一个随机 ping 的假成员试试。一句话总结 lolPing 的加密哲学房间码是唯一秘密——scrypt 让它算不快HKDF 让它一分两用AES-256-GCM 让内容密不透风Nostr ephemeral 事件让密文不留痕。你只需要把 10 个字符告诉朋友剩下的数学来处理。赞分享【免费下载链接】lolPingLeague of Legends ping wheel for your Windows desktop. Hold Alt, drag, and ping anywhere, with the original animations and sounds.项目地址https://gitcode.com/gh_mirrors/lo/lolPing点击查看免费下载相关推荐深度解析Aegis Authenticator安全架构AES-256-GCM与scrypt如何守护你的2FA密钥深度解析Aegis Authenticator安全架构AES 256 GCM与scrypt如何守护你的2FA密钥 Aegis Authenticator 是一移动开发安全如何无信任地验证 Obsidian Sync 端到端加密从密钥派生到 AES-256-GCM 解密实操附 defuddle 提取验证指南如何无信任地验证 Obsidian Sync 端到端加密从密钥派生到 AES 256 GCM 解密实操附 defuddle 提取验证指南 本文以 Obsi后端Apache Pulsar 端到端加密PIP-4实战指南基于 ECDSA/RSA 与 AES-256-GCM 的消息加解密实现Apache Pulsar 端到端加密PIP 4实战指南基于 ECDSA/RSA 与 AES 256 GCM 的消息加解密实现 本文以 Apache Pu消息队列流处理后端微服务消息路由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站