# 胶易 1.2.0-alpha01 架构

## 一条消息怎样走

1. 发送手机先把明文写入本机加密数据库，状态为 `PENDING`。
2. 手机取得收件设备首次固定的公钥，生成 ECDH 共享秘密，经 HKDF-SHA256 得到 AES-256-GCM 密钥。
3. 手机加密正文并用 ECDSA 签名；同一条消息的密文先保存到本机，再上传。
4. 电脑 HTTPS 中继只保存密文包络和投递所需元数据。
5. 收件手机验明发送设备公钥、验签并解密，写入本机后才向中继确认。
6. 中继收到确认后删除密文；短期只保留消息摘要用于阻止网络重试产生重复投递。

网络重试始终复用已经保存的同一份密文。永久无效的出站消息标为 `FAILED`，坏签名或坏密文会在本机留下有限审计记录后从队列清走，不能堵住后面的正常消息。

## 身份与信任

- 每次新安装生成随机设备 ID 和显式 `secp256r1` 密钥对。
- 私钥以 PKCS#8 保存前先由 Android Keystore 的本机 AES-GCM 密钥加密。
- 登录令牌同样加密保存；服务端只保存令牌哈希。
- App 固定中继证书的 SHA-256 身份，不依赖局域网 DNS 名称。
- 联系人公钥采用 TOFU：第一次见到后本机固定，后续变化立即拒绝。

TOFU 不能替代双方人工核对安全码。正式版需要二维码或可读安全码核验，并升级到经过审计、具备前向保密和密钥轮换能力的会话协议。

## 中继边界

中继可以看到：设备公开名称、设备 ID、公开密钥、IP、发送/接收设备关系、时间和密文大小。

中继不接收消息正文。消息接口只允许 `message_id`、收件设备、IV、密文、签名和客户端时间；附加明文字段会被拒绝，日志也不记录请求正文。

## AI 设备

`C:\Users\jiaoyi\bridge` 是与 Android 使用同一注册、目录、加密、签名、收取和确认协议的电脑通信设备。当前测试处理器只回一条收件确认。以后部署模型时替换消息处理器即可；AI 只能看到明确发给这台设备的内容，不插入普通聊天输入框，也不替用户润色。

## 已验证

- HTTPS 证书固定、邀请注册和令牌鉴权；
- Android 真实注册和持续轮询；
- Android 与 Node 电脑设备跨实现 ECDH/HKDF/AES-GCM/ECDSA 互通；
- 双向消息、离线队列、幂等重试、ACK 删除和重复抑制；
- 服务端 SQLite `quick_check=ok`；
- Android 强制重编译、安装、冷启动和 Lint（0 errors）。

## 下一步

1. 固定公网域名或长期隧道，替换局域网硬编码地址；
2. 扫码加好友和安全码核验，不再公开整个邀请组目录；
3. 使用经过审计的双棘轮协议，加入前向保密、密钥轮换和多设备；
4. Android 后台唤醒、附件加密、群聊和正式发布签名；
5. 把实际 AI 服务接到 bridge 处理器，并为每个会话明确授权范围。

