生成
首次启动在 Rust 引擎内生成 Ed25519 身份密钥。私钥不进入 Dart 层(ADR-005)。
SECURITY MODEL · 可验证,非承诺
成熟度阶梯与威胁表。独立审计完成前,本站不展示任何审计徽章或假 PDF(ADR-010)。
Handshake
四步走完才有会话密钥。任何一步不满足,连接直接终止。
mDNS 或扫码得到候选设备。此时的候选没有身份声明,一律不可信。
交换 X25519 临时公钥,并用 Ed25519 长期密钥签名整段握手 transcript。
双方核对同一组 SAS 短数字并各自确认。任一侧不一致即终止,不留半信任状态。
HKDF-SHA256 派生 AES-256-GCM 会话密钥。长期密钥只签名、不进 KDF。
Key lifecycle
长期身份与会话密钥严格分离:前者只签名,后者用完即弃。
首次启动在 Rust 引擎内生成 Ed25519 身份密钥。私钥不进入 Dart 层(ADR-005)。
交给平台安全存储:Keychain / DPAPI / Android Keystore。导出即失败。
长期密钥只用于签名握手 transcript,不参与任何密钥派生。
每次连接用 X25519 临时密钥 + HKDF-SHA256 派生,连接结束即丢弃。
设备 id 由公钥派生,可逐设备撤销,不影响其它已配对设备。
Threats
第三列是我们做不到的事。写出来比藏起来有用。
| 威胁 | 防御 | 残余风险 |
|---|---|---|
| 同网嗅探 | AES-256-GCM 应用层加密 | 端点被控仍可读明文 |
| 伪造发现 | 扫码载荷验签 + SAS 双向确认 | 社会工程诱导人去确认 |
| 未信任方发文件 | 引擎直接拒绝 FileOffer | 已信任侧发来恶意文件 |
| 中继窥视 | E2EE;中继默认关闭 | 中继仍可见元数据(时间 / 大小) |
| 回放与篡改 | 全帧 AEAD + nonce 协议化 + 计数器 | 实现缺陷(我们也可能写错) |
| 供应链 | 公布 SHA-256 + 平台签名说明 | 构建链被攻破时失效 |
Maturity
进度是我们自己评估的,不是第三方结论。
进行中
核心路径已覆盖
未开始 — 完成后才挂徽章
流程草案
Limits
这几条不随时间消失,属于模型边界而非待办清单。
对方设备被完全控制时,明文在终点是可读的。任何 E2EE 都止步于此。
SAS 是为了让你核对,不是为了替你判断。被诱导确认等于把信任交出去。
中继不知道内容,但知道谁在什么时候传了多大的东西。
ADR-010:独立审计落地之前,本站不展示任何审计徽章或伪造的 PDF。
目标响应:72 小时内确认收悉。请将可复现细节发至 security@ 邮箱。