Commit Graph
7 Commits
Author SHA1 Message Date
lbl c2fd1ff870 refactor: remove panic-prone unwrap and expect calls 2026-08-23 12:04:40 +08:00
lbl de0183139d feat: add TAP device mode and Ethernet interoperability 2026-08-22 21:47:49 +08:00
lbl af42ff7fe6 refactor(crypto): nonce 与 AAD 职责分离
nonce 只承担唯一性职责:seq(随机起始计数器,现占满 4 字节,
每流约 43 亿包才回绕)+ src + dst;不再用 msg_type 覆盖 seq 低位。

AAD 承担认证职责:msg_type(byte0)/flags(byte2)/reserved(byte3),
即所有传输中不变且不参与 nonce 的头部字节;ttl(byte1) 中继会递减,
仍不认证。

线上协议头部布局不变,但 nonce 推导方式改变,与旧版本
(含 48ba12d)加密不互通。

新增测试 test_tampered_msg_type_rejected:篡改 msg_type 必须解密失败。
2026-08-20 22:54:38 +08:00
lbl 016165ff8e fix(crypto): flags/reserved 头部字节纳入 AAD 认证
chacha20_poly1305 加解密 AAD 为空,flags 字节(COMPRESSED/FEC/GATEWAY)
未经认证,中间人可翻转标志位造成不可检测的丢包/语义篡改。

AAD 取头部 byte2(flags)/byte3(reserved);ttl(byte1) 中继转发时会递减,
不纳入 AAD 以保持中继兼容。

注意:此改动与旧版本(AAD 为空)不兼容,新旧节点间无法互通加密包。

测试:
- test_tampered_flags_rejected: 翻转 flags 必须解密失败
- test_ttl_change_still_decrypts: ttl 递减不影响解密
2026-08-20 22:40:30 +08:00
lbl b0db6c9659 补充加解密跨版本兼容性测试
nonce 完全由包自带的头部字节计算,解密端不依赖发送端状态,因此
seq 修复与旧版本线上兼容。测试双向验证:旧版本(seq=0)加密的包新版本
可解密,新版本(递增 seq)加密的包按旧逻辑(仅读头部算 nonce)也可解密。
2026-08-20 21:44:50 +08:00
lbl 3c0532b4c5 修复加密 nonce 全局重用
PacketCrypto 的 nonce 由 msg_type+seq+src+dst 构成,但 seq 字段从未赋值,
同一 (msg_type,src,dst) 的所有包共用同一 nonce,AEAD 密钥流重用。

- PacketCrypto 增加 Arc<AtomicU32> 出站序号计数器(随机起始值,避免
  进程重启后相同密钥复用低序号段),encrypt_in_place 时自动分配 seq
- 补充 nonce 唯一性与 clone 共享计数器的测试
2026-08-20 21:33:37 +08:00
lbl b4301a8106 v2 2026-02-10 18:20:39 +08:00