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

发布时间:2026/10/16 5:36:32

lolPing房间如何做到端到端加密:scrypt、AES-256-GCM与Nostr中继全解析 【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/10/16 5:36:32

Python对象引用机制详解:告别‘指针’误区

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 5:31:32

8086汇编子程序设计:数制转换实战与堆栈平衡原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 6:41:34

上海松江别墅室内甲醛检测方案设计:方法学与布点参数解析

摘要:别墅类住宅因楼层多、房间功能复杂、定制木作用量大,其室内甲醛检测方案与普通住宅存在显著差异。本文从方法学选择、布点参数设计、CMA资质核验(含2026年"一单一库"新规下的报告出具规则)、典型误差来源四个维度&…

2026/10/16 6:41:34

九元航空 black_box

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口 等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间点击头像看简介…

2026/10/16 6:41:34

black_box 同盾算法分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口 等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间点击头像看简介…

2026/10/16 6:41:34

论文写作工具链:编辑器与LaTeX发行版组合实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 6:36:34

PDF补丁丁 PDF 字体嵌入完整指南:方块字与缺字一次修好

PDF补丁丁 PDF 字体嵌入完整指南:方块字与缺字一次修好 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://g…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/16 0:01:11

Cephadm实战指南:Linux系统工程师的生产级Ceph集群部署与排障

简介:本资源是一份完整的Ceph分布式存储系统中文技术文档合集,面向Linux系统运维工程师、云平台架构师及存储方向开发者,帮助读者系统掌握Ceph集群的部署、配置与运维核心能力。文档覆盖对象存储(RGW)、块设备&#xf…

2026/10/16 0:01:11

ITK中SpatialObject几何体系解析:坐标系、变换与管道集成

1. 空间对象的定位:为什么 ITK 需要一套几何描述体系很多刚开始接触 ITK 的朋友,包括我自己,最初都是被它的图像滤波、配准、分割这些“正统”功能吸引进来的。等真正上手做点实际项目,比如把分割出来的器官边界做量化分析、给血管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑