tnzx-project/tnzx-protocol

GitHub: tnzx-project/tnzx-protocol

这是一个通过加密货币挖矿流量实现弹性加密通信的开放协议套件,解决在受限网络中的安全通信问题。

Stars: 0 | Forks: 0

# TNZX 协议套件 [![测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e7351ff93b071952.svg)](https://github.com/tnzx-project/tnzx-protocol/actions/workflows/tests.yml) **用于在加密货币挖矿流量上实现弹性加密通信的开放协议。** ![Alice 和 Bob 通过 Stratum 池交换端到端加密消息](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/00ed8ef141071953.png) ![CLI 演示 — 池日志(左)仅显示幽灵份额和 0x05 帧;解密后的对话(右)](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/84c2079782071954.png) *左侧:Stratum 池仅看到幽灵份额(`nonce=aa...`)和加密帧(`type=0x05`)。右侧:Alice 和 Bob 交换敏感消息 — 仅在端点解密。池运营商无法读取、过滤或选择性地阻止内容。运行它:在 [tnzx-pool-demo](https://github.com/tnzx-project/tnzx-pool-demo) 中执行 `node run-demo.js`。* ## 这是什么? 关键创新是 **挖矿网关**:通信带宽与工作量证明数学绑定。您必须挖矿才能通信。这在一个机制中创造了抗垃圾性、经济可持续性和通信弹性。 ## 架构 ``` graph TB subgraph "Application Layer" A1[Chat] A2["DNS (planned)"] A3["Services (planned)"] A4["Falo (design)"] end subgraph "SDK — @tnzx/sdk" B1["VS3Client — high-level API"] B2["StratumClient — TCP transport"] B3["E2E Crypto — XChaCha20-Poly1305"] B4["Ghost Share Encoder"] end subgraph "Protocol Primitives (reference-impl)" C1["Stego Encoder/Decoder — VS1 · VS2 · VS3"] C2["Encrypted Envelope — type hidden inside 0x05"] end subgraph "Pool Side (separate repo)" D1["Stratum Pool / VS3 Proxy"] D2["Mining Gate — PoW access control"] end A1 & A2 & A3 & A4 --> B1 B1 --> B3 B1 --> B2 B2 --> B4 B3 --> C2 B4 --> D1 C1 -.->|"used by pool"| D1 D2 -.->|"enforces PoW"| D1 ``` ## 交互式学习 **[打开交互式协议浏览器](https://tnzx-project.github.io/tnzx-protocol/learn/)** — 以可视化方式逐步浏览协议流程。查看 Alice 和 Bob 如何交换密钥、通过幽灵份额发送加密消息,以及挖矿网关、代理模式和 DPI 抗性如何工作。无需服务器 — 在浏览器中运行。 **[打开消息流演示](https://tnzx-project.github.io/tnzx-pool-demo/demo.html)** — 完整消息流的动画演练:挖矿网关、密钥交换、加密传递、幽灵份额、信封可视化。 ## 工作原理 ``` sequenceDiagram participant Alice participant Pool as Stratum Pool participant Bob Note over Alice,Bob: Key Exchange (automatic) Alice->>Pool: Ghost share [KEY_EXCHANGE + Alice pubkey] Pool->>Bob: Job notification with VS3 frame Bob->>Pool: Ghost share [KEY_EXCHANGE + Bob pubkey] Pool->>Alice: Job notification with VS3 frame Note over Alice,Bob: Encrypted messaging Alice->>Alice: encrypt(msg, Bob_pubkey) Alice->>Pool: Ghost shares [type 0x05 ENCRYPTED] Note right of Pool: Pool sees only opaque
0x05 frames — cannot
read content or type Pool->>Bob: Job notification with VS3 frame Bob->>Bob: decrypt(payload, Bob_privkey) Note over Alice,Bob: Pool sees normal mining traffic ``` ## 威胁模型 Visual Stratum 旨在保护在标准安全通信渠道(Signal、Tor、VPN)在网络层被阻止或指纹识别的环境中的通信。 **它保护谁:** - 在受限网络条件下工作的记者、活动家和人权捍卫者 - 在具有深度包检测(DPI)阻止已知隐私工具的环境中的用户 - 任何需要通过封装通道通信且该通道不能在没有经济后果的情况下被选择性阻止的人 **它防御什么:** - **ISP 级别的 DPI** — 通过协议指纹对流量进行分类和阻止 - **池运营商监控**(消息是端到端加密的;池无法读取内容) - **被动网络观察者** — 监控流量模式(挖矿流量提供掩护) - **垃圾邮件和女巫攻击** — 针对通信通道(挖矿网关需要真实的工作量证明) **它不防御什么:** - **设备被入侵**(端点上的恶意软件在加密前看到明文) - **国家级信号情报** — 进行每连接哈希验证(幽灵份额的工作量证明为零,并且可被验证每个份额哈希的观察者检测到) - **全局流量分析** — 通过时间关联发送方/接收方挖矿会话 - **恶意池运营商(中间人)** — 密钥交换目前未经身份验证(首次使用信任)。主动修改流量的池运营商可以注入假公钥,然后读取加密消息。已计划实现经过身份验证的密钥交换。 - **阻止所有挖矿流量**(政府可以并且已经完全禁止加密货币挖矿,例如中国 2021 年) **假设:** 1. 挖矿流量未被全球阻止(它具有合法的经济用途) 2. 对手执行协议分类,而不是每份额哈希验证 3. 哨兵 HMAC 模式已启用(传统的 0xAA 很容易被检测到) 4. 消息内容使用端到端加密(传输层提供隐匿性,而非保密性) 完整安全分析请参见设计论文(第 7 节,附录 A)。 ## 项目状态 此存储库包含协议规范、设计论文和参考实现。项目正在积极开发中。某些组件已进行生产测试;其他组件处于设计阶段。 | 组件 | 状态 | 备注 | |------|------|------| | Stratum 封装嵌入(VS1/VS3-Monero) | **已实现并测试** | 参考实现中的核心编码器/解码器 | | Stratum 封装嵌入(VS2 比特币风格) | **已规范;在池演示代理中演示** | 通过 extranonce2 编码;不在参考实现中 | | 端到端加密(X25519 + XChaCha20-Poly1305) | **已实现并测试** | 会话和单次模式,重放保护 | | 加密类型信封 | **已实现并测试** | 所有帧在外部使用 0x05 ENCRYPTED | | 挖矿网关(PoW 门控访问) | **已实现并测试** | 状态机,自适应阈值 | | 开发者 SDK(`@tnzx/sdk`) | **已实现并测试** | VS3Client, StratumClient, 40 个测试 | | HMAC 哨兵(抗 DPI) | **已实现并测试** | 用 HMAC 标签的 nonce 替换可检测的 0xAA | | VS3 代理(中间件,任何池) | **已实现并测试** | 位于任何未修改的矿工和任何标准 Stratum 池之间。已在 HashVault(Monero)和 Braiins(Bitcoin)生产池中验证。参见 [tnzx-pool-demo/poc/](https://github.com/tnzx-project/tnzx-pool-demo/tree/master/poc) | | VS3 感知池(参考 Stratum 服务器) | **已实现并测试** | XMRig 兼容的 Stratum 服务器,具有原生幽灵份额检测、帧重组和消息路由。参见 [tnzx-pool-demo/src/](https://github.com/tnzx-project/tnzx-pool-demo/tree/master/src) | | PNG LSB 通道(VS1) | **已存档** | 仅为概念验证;已被 Stratum 通道取代 | | WebSocket / HTTP/2 通道 | **已规范** | 设计完成,不在参考实现中 | | 多通道自适应路由 | **已规范** | 设计完成,不在参考实现中 | | LZ4 压缩 | **已规范** | 设计完成,不在参考实现中 | | Falo(匿名协调) | **设计阶段** | 身份层原型;ZK 证明、环签名尚未实现 | | 独立安全审计 | **待定** | 内部审查已完成;尚未进行第三方审计 | ## 协议 | 协议 | 版本 | 描述 | 状态 | |------|------|------|------| | [Visual Stratum 1](protocols/vs1/) | 1.0 | 通过 HTTPS 的 PNG LSB 数据编码 | 已存档 | | [Visual Stratum 2](protocols/vs2/) | 2.0 | 挖矿网关 + Stratum 嵌入 | 已规范;在池演示代理中演示 | | [Visual Stratum 3](protocols/vs3/) | 3.0 | 多通道自适应传输 | 部分实现(仅 Stratum 通道) | | [Falo](protocols/falo/) | 0.1 | 通过 ZK 证明实现匿名协调 | 设计阶段 | ### 演进 ``` VS1 (2025) VS2 (2026) VS3 (2026) PNG-based encoding → + Mining Gate → + Multi-channel transport (design) 45 KB per image + Stratum embedding + Adaptive mode selection (design) HTTPS only + Economic model + Timing decorrelation (design) + Anti-spam via PoW ``` ## 关键创新 ### 1. 封装式挖矿通信 Visual Stratum 通过让 TNZX 增强型矿工(vs-miner)在工作量证明搜索之前,将特定字段字节约束为有效载荷值,从而在 Stratum 份额字段中编码有效载荷字节。VS 感知池提取有效载荷;非 VS 池正常处理份额(或者如果它是低于难度阈值的幽灵份额,则拒绝它)。标准的未修改 XMRig 不实现 VS 编码。 ``` Bitcoin-style V2 share (vs-miner, extranonce2 preset before mining): Normal: { nonce: "a1b2c3d4", extranonce2: "00000001" } VS2: { nonce: "a1b2XX00", extranonce2: "0000XXYY" } ↑payload nibble ↑ 2 payload bytes preset before PoW search Monero V3 ghost share (vs-miner, no PoW required): Normal valid share: { nonce: "a1b2c3d4", result: "" } VS3 ghost: { nonce: "aa48656c", result: "", ntime: "hihi XXYY" } ↑ sentinel 3 payload bytes ↑ TNZX ext field ``` Stratum 通道不可检测性的信息论论证在设计论文(第 7.2 节)中。PNG 通道需要单独的统计检测分析。 ### 2. 挖矿网关(工作量证明门控通信) 通信需要主动挖矿。这同时解决了三个问题: - **抗垃圾性**:每条消息都有真实的计算成本 - **可持续性**:挖矿费用为基础设施提供资金 - **掩护流量**:挖矿流量具有经济动机且全球分布 ### 3. 多通道自适应传输(设计) VS3 规定了在具有不同隐匿性/带宽权衡的四个通道之间分发消息。参考实现目前仅涵盖 Stratum 通道。完整的多通道架构在设计论文中指定。 | 通道 | 带宽 | 隐匿性 | 方向 | 实现 | |------|------|--------|------|------| | Stratum 份额 | 3–5 B/份额(Monero, vs-miner) · 7 B/份额(比特币风格, vs-miner) | 最高 | 上传 | **参考实现** | | PNG 图表(LSB) | 45 KB/图像 | 最高 | 下载 | 已规范 | | WebSocket | 50 KB/s | 高 | 双向 | 已规范 | | HTTP/2 流 | 100 KB/s | 高 | 双向 | 已规范 | ### 4. Falo:匿名协调(研究) 一种使用零知识证明、环签名和 Merkle 树成员资格进行匿名群组协调的设计。参见 [papers/falo/](papers/falo/) 获取完整设计文档。Falo 是一个研究方向,而非生产协议。 ## 安全属性 | 属性 | 机制 | 状态 | |------|------|------| | **保密性** | XChaCha20-Poly1305 | 已实现,已测试 | | **密钥交换** | 使用临时密钥的 X25519 ECDH | 已实现,已测试 | | **前向保密** | 每条消息使用新密钥对(单次模式) | 已实现,已测试 | | **重放保护** | 具有 5 分钟 TTL 的 Nonce 跟踪 | 已实现,已测试 | | **不可检测性(Stratum)** | 与掩护流量在统计上无法区分 | 已实现;信息论论证 | | **不可检测性(PNG)** | 具有受控噪声的 LSB | 已规范;正式的统计分析待定 | | **抗垃圾性** | 挖矿网关(PoW 门控访问) | 已实现,已测试 | | **独立审计** | — | 待定 | ## 论文 - [Visual Stratum — 协议设计、规范和安全分析](papers/visual-stratum/) — 描述已实现和已规范的组件。(论文标题保留既定的学术术语;项目级元数据见 CITATION.cff。) ### 研究笔记 - [Falo — 匿名弹性协调](papers/falo/) — 关于通过挖矿通道进行零知识群组协调的设计文档。核心加密模块(环签名、ZK 证明)处于设计阶段。特别令人感兴趣的是:第 10 节探讨了匿名组织的人类心理学。 ## 参考实现 在 [`reference-impl/`](reference-impl/) 中提供了一个 Node.js 参考实现。它包括: - 封装编码器/解码器(VS1/VS2/VS3 Stratum 嵌入) - 端到端加密(X25519 + XChaCha20-Poly1305 + HKDF + 重放保护) - 挖矿网关验证(PoW 门控访问控制) - 紧凑会话加密(原型)— 基于计数器的 HKDF 和 ChaCha20-Poly1305,开销为 32 字节,而标准为 88 字节(减少 64%) - 加密类型信封(`wrapTypedPayload`/`unwrapTypedPayload`)— 所有帧在线路上显示为 `0x05 ENCRYPTED` - 测试套件:3 个套件共 90 个测试(`node test.js` + `node crypto/test-xchacha20.js` + `node crypto/test-compact-session.js` — 无外部依赖项) **不包含在参考实现中**(在论文中指定,计划用于未来版本): - PNG LSB 编码通道 - WebSocket 和 HTTP/2 传输通道 - LZ4 压缩和填充 - 多通道路由和时间解相关 - 虚拟流量生成 ## SDK — `@tnzx/sdk` [![npm](https://img.shields.io/npm/v/@tnzx/sdk)](https://www.npmjs.com/package/@tnzx/sdk) ``` npm install @tnzx/sdk ``` 一个开发者 SDK,将协议原语封装成高级 API,用于在 TNZX 上构建应用程序。 **快速开始**(10 行代码): ``` const { VS3Client } = require('@tnzx/sdk'); const client = new VS3Client({ pool: 'host:3333', wallet: '4...' }); client.on('ready', () => console.log('Connected')); client.on('peer', ({ wallet }) => client.send(wallet, 'Hello TNZX')); client.on('message', ({ text }) => console.log(text)); client.connect(); ``` **两层 API:** | 层级 | 类 | 用例 | |------|----|------| | 高级 | `VS3Client` | 自动密钥交换,自动加密,事件驱动消息传递 | | 低级 | `StratumClient` | 手动帧控制,自定义 MSG_TYPEs,池集成 | **还导出:** `encryptOneShot`, `decryptOneShot`, `generateKeyPair`, `buildVS3Frame`, `hmacSentinel`, `MSG_TYPE` 零外部依赖项。Node.js >= 18。6 个套件共 40 个测试。参见 [`packages/sdk/examples/`](packages/sdk/examples/) 获取可运行的示例。 ## 测试向量 互操作性测试向量在 [`test-vectors/`](test-vectors/) 中提供,适用于所有协议版本。 ## 池实现 此存储库包含协议规范和*客户端*组件(编码、加密、挖矿网关验证)的参考实现。*池端*实现 — 一个 VS3 感知的 Stratum 服务器和一个 VS3 中间件代理 — 在一个单独的存储库中: **[tnzx-project/tnzx-pool-demo](https://github.com/tnzx-project/tnzx-pool-demo)** — VS3 感知池 + 代理 POC 它包括: - `src/stratum-demo.js` — XMRig 兼容的 Stratum 服务器,具有幽灵份额检测、帧重组和双向消息路由功能(约 730 行) - `poc/vs3-proxy.js` — VS3 中间件代理,可与任何未修改的 Stratum 池配合使用(约 830 行) - 测试套件:代理拦截、HMAC 哨兵验证、DPI 隐写分析(卡方检验) - 来自生产池测试的带时间戳的记录(Monero 的 HashVault,Bitcoin 的 Braiins) 池演示在本地运行,无需 Monero 守护程序,无需外部依赖项。两方可以使用三个终端窗口通过池交换消息。 ## 与现有系统的比较 此表比较的是设计属性,而非部署成熟度。Tor 和 Signal 是经过实战检验的系统,拥有多年的独立审计和庞大的用户群 — 这是 Visual Stratum 不具备的优势。 | 系统 | 流量不可检测 | 无需 KYC | 抗垃圾性 | 自我资助 | 成熟度 | |------|--------------|----------|----------|----------|--------| | Tor (+obfs4) | 伪装 | 是 | 否 | 资助 | 20 多年,经过广泛审计 | | Signal | 否(可识别) | 电话号码 | 否 | 资助+基金会 | 10 多年,已审计 | | I2P | 部分 | 是 | 否 | 捐赠 | 20 多年,部分审计 | | Bitmessage | 广播 | 是 | 部分 | 否 | 10 多年,未审计 | | **Visual Stratum** | **经济掩护** | **是** | **是(PoW)** | **是(挖矿)** | **新(2025 年),尚未审计** | Visual Stratum 的优势是流量不可检测(真实的挖矿流量,而非合成的掩护)。其当前的劣势是用户群小,没有独立审计,且需要主动挖矿。我们认为诚实地承认这些限制对于一个面向高风险环境用户的项目至关重要。 ## 应用 参见 [APPLICATIONS.md](APPLICATIONS.md) 了解预期用例 — 记者、活动家、人权捍卫者以及在受限网络条件下运作的人群。 ## 许可证 LGPL-2.1。参见 [LICENSE](LICENSE)。 ## 引用 ``` @misc{tnzx2026vs, title={TNZX Protocol Suite: Encapsulated Communication over Cryptocurrency Mining Traffic}, author={TNZX Project}, year={2026}, url={https://github.com/tnzx-project/tnzx-protocol} } ``` ## 联系方式 - 协议问题:tnzx@proton.me - 安全问题:参见 [SECURITY.md](SECURITY.md)
标签:MITM代理, 自定义脚本