🔐 CipherPulse · 暗流脉冲协议架构白皮书
1. 项目愿景与设计哲学
CipherPulse 是一套专为 高丢包、高延迟、非受控 网络环境(如跨境 VPS、IoT 边缘设备)设计的轻量级服务器遥测系统。
不同于传统的 Prometheus/Zabbix,CipherPulse 假设网络是恶劣的,节点是不可信的,并基于此前提构建了以下核心哲学:
🔕 聋子模式 (Deaf Mode)
Agent 采用单向广播设计,0 入站端口。从物理层面杜绝攻击者通过监控端口渗透服务器的可能。
🚀 UDP 优先 (UDP First)
放弃 TCP 的握手与重传机制,采用应用层 滑动窗口冗余 (Sliding Window Redundancy) 对抗丢包,实现”发射后不管”。
🛡️ 先锋令牌 (Token-First)
将鉴权前置到数据包头部,配合 Master 端内存缓存,实现纳秒级的抗 DDoS 解析能力。
🔐 动态握手 (TOTP-Handshake)
基于时间因子的动态密钥派生机制,结合严格的注册窗口,彻底解决密钥泄露导致的女巫攻击风险。
2. 系统架构
2.1 Agent (探针端)
职责: 采集系统指标 → 组装 UDP 包 → 多路单向广播
核心特性:
- Client-side HA: 支持向多个 Master IP 同时广播,实现客户端侧的高可用,无单点故障
- JIT Memory: 无配置文件落地,配置通过环境变量注入,硬盘无痕迹
- Resource: 目标 < 10MB 内存,CPU 占用 < 0.1%
2.2 Master (服务端)
职责: 接收 UDP → 安全过滤 → 冗余去重 → 批量落库
核心组件:
| 组件 | 职责 |
|---|---|
| Packet Filter | 基于 Token 和 Timestamp 的极速防火墙 (Fast Path) |
| Hot Pool | 内存环形队列 (RingBuffer),暂存最近 60 秒的高频数据 |
| Batch Dumper | 异步任务,每 10 秒将聚合数据写入 SQL 数据库 |
3. PulseProto 通信协议标准 (v1.1)
传输层: UDP
字节序: Big-Endian (网络字节序)
包大小: 控制在 MTU 安全值 (508 Bytes) 以内
3.1 类型 A:脉冲包 (Pulse Packet)
用途: 高频上报监控数据(1Hz)
鉴权: SessionToken + Strict Time Window + IP Binding
| Offset | Length | Field | Description |
|---|---|---|---|
| 0x00 | 8 | SessionToken | 会话令牌。Master 查表验证,并校验源 IP 是否匹配 |
| 0x08 | 4 | Timestamp | Unix 时间戳。Master 校验 abs(Now - TS) < 5s,超时丢弃 |
| 0x0C | 1 | Redundancy | 冗余度 N (固定为 3,包含 T, T-1, T-2) |
| 0x0D | 1 | SchemaID | 数据格式版本。支持未来扩展 (0x01: 基础,0x02: IO 增强) |
| 0x0E | Var | Payload | 3 组 MetricBlock 数据体 |
数据体结构 (SchemaID = 0x01) — 12 Bytes / 组
[0] uint8 : CPU 使用率 (0-100)
[1] uint8 : 内存 使用率 (0-100)
[2-3] uint16 : Ping 延迟 (ms)
[4-7] uint32 : 入网流量增量 (Bytes)
[8-11] uint32 : 出网流量增量 (Bytes)
3.2 类型 B:先锋包 (Pioneer Packet)
用途: 探针启动时的自动注册 / Token 过期重协商
加密: ChaCha20-Poly1305 + TOTP Key
| Offset | Length | Field | Description |
|---|---|---|---|
| 0x00 | 8 | NodeID | 机器指纹 (用于查找对应的解密密钥) |
| 0x08 | 16 | AuthTag | Poly1305 校验码。校验失败直接丢弃,不消耗 CPU |
| 0x18 | 12 | Nonce | 随机数 (防止重放) |
| 0x24 | Var | Encrypted | 密文 (含:申请的新 Token、Hostname、IP、OS info) |
4. 安全与抗攻击模型
4.1 动态握手流程 (TOTP Handshake)
为了防止 Global Deployment Secret 泄露导致全网风险,v1.1 引入动态密钥派生。
密钥派生:
TimeWindow = CurrentUnixTime / 30
DerivedKey = SHA256(GlobalSecret + TimeWindow)
验证逻辑:
Master 收到先锋包,分别计算 CurrentWindow 和 PrevWindow 的 Key 进行尝试。如果 AuthTag 验证通过,则解密 Payload。
注册开关 (Registration Switch):
Master 默认 拒绝所有先锋包。仅在管理员开启维护窗口 (Maintenance Window) 期间(如 5 分钟内),才允许新节点注册。
4.2 纵深防御体系 (Defense in Depth)
| 防御层级 | 针对威胁 | 防御手段 |
|---|---|---|
| L1 | 格式防御 / 解析炸弹 | 包长度不合法或 SchemaID 未知,直接丢弃 |
| L2 | 时效防御 / 重放攻击 | 检查 Timestamp。超过 ±5 秒的包直接丢弃 |
| L3 | 信任防御 / 借刀杀人 (DDoS) | TOFU 原则。Token 首次使用时绑定源 IP,后续 IP 变更即报警 |
| L4 | 签名防御 / 伪造握手 | 检查先锋包 AuthTag。无正确派生密钥无法伪造签名 |
| L5 | 限流防御 / 爆破 / 扫描 | 全局每秒仅限 5 个新注册;单 IP 频繁错误触发黑洞策略 |
5. 数据可靠性策略
滑动窗口冗余 (Sliding Window Redundancy)
为了在恶劣网络下保持监控曲线平滑,每个数据包携带当前秒 + 过去 2 秒的数据。
发送端: 维护一个长度为 3 的 RingBuffer,每次发送 [T, T-1, T-2]。
接收端:
- 收到包 N。如果 T-1 数据已存在(之前的包 N-1 到达了),忽略冗余数据
- 如果 T-1 数据缺失(之前的包 N-1 丢了),从包 N 中提取 T-1 并自动补全
效果: 容忍 66% 的连续丢包率,监控图表依然连续无断点。
6. 开发路线图
Phase 1: 核心验证 (Current Focus)
- 使用 Go 语言实现 pulse-proto 库 (Header/Payload 序列化)
- 实现 TOTP Key Derivation 算法
- 实现 UDP Server 原型,打印接收到的指标
Phase 2: Agent 构建
- 实现
/proc/stat读取与 ethtool 网卡流量采集 - 实现多 Master 轮询发送逻辑
Phase 3: Master 工程化
- 实现 RingBuffer 内存池与滑动窗口去重逻辑
- 集成 SQLite 持久化
Phase 4: 可视化
- 提供 Snapshot API
- 开发极简 HTML 前端展示
Copyright © 2026 CipherPulse Project
版本: v1.1 (Stable Draft)
代号: StarRiver
Slogan: 静水流深,暗流脉冲 (Still waters run deep, dark currents pulse within.)