SECURITY MODEL · 可验证,非承诺

安全模型

成熟度阶梯与威胁表。独立审计完成前,本站不展示任何审计徽章或假 PDF(ADR-010)。

帧加密
AES-256-GCM
密钥交换
X25519
设备身份
Ed25519
默认路径
Local

Handshake

一次握手里发生了什么

四步走完才有会话密钥。任何一步不满足,连接直接终止。

  1. 01

    发现

    mDNS 或扫码得到候选设备。此时的候选没有身份声明,一律不可信。

  2. 02

    密钥交换

    交换 X25519 临时公钥,并用 Ed25519 长期密钥签名整段握手 transcript。

  3. 03

    双向确认

    双方核对同一组 SAS 短数字并各自确认。任一侧不一致即终止,不留半信任状态。

  4. 04

    会话加密

    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

成熟度阶梯

进度是我们自己评估的,不是第三方结论。

T0

威胁建模与静态审查

进行中

T1

协议篡改 / 回放单测

核心路径已覆盖

T2

第三方独立审计

未开始 — 完成后才挂徽章

T3

持续披露与补丁 SLA

流程草案

Limits

我们做不到的事

这几条不随时间消失,属于模型边界而非待办清单。

端点被控,我们救不了

对方设备被完全控制时,明文在终点是可读的。任何 E2EE 都止步于此。

你自己确认错了

SAS 是为了让你核对,不是为了替你判断。被诱导确认等于把信任交出去。

中继看得到元数据

中继不知道内容,但知道谁在什么时候传了多大的东西。

审计未完成前没有徽章

ADR-010:独立审计落地之前,本站不展示任何审计徽章或伪造的 PDF。

CONTACT

安全披露

目标响应:72 小时内确认收悉。请将可复现细节发至 security@ 邮箱。

security@stealthsend.example

先装上,再决定信不信

客户端默认 Local 运行。想先看完再装,安全模型两分钟能读完。