ZeroToken MVP 面向自愿参与的成年好友、可信局域网和可信房主。网络参与者仍不能直接修改权威状态,但本版本不试图抵御被完全控制的客户端、恶意房主、进程注入或操作系统管理员。
真实调用局的 Key 生命周期如下:
Windows CredUI 密码栏
↓
Rust Zeroizing<String> 内存
↓
GET https://api.deepseek.com/user/balance
↓
终局时单次 POST /chat/completions
↓
请求结束或应用退出时清零
- Key 输入由 Rust 调用 Windows 原生凭据界面完成,Vue、DOM 和 WebView JavaScript 从不接收 Key。
- Key 不通过房主或任何 WebSocket 消息传输,不写入凭据管理器、配置文件、数据库或日志。
- HTTP 客户端只允许 HTTPS,生产代码没有自定义 Provider 地址入口,并拒绝跨域重定向。
- 余额详情只通过本机 Tauri 调用返回给本机界面;房主只看到布尔值
key_ready。 - 内存清零降低普通残留风险,但不能抵御拥有调试、转储或内核权限的本机攻击者。
房间开始时,本机授权记录绑定房间 ID、玩家 ID、模式、随机种子承诺和开局时全票批准的 Prompt 哈希。收到结算请求后,输家设备依次验证:
- 请求确实发给本机玩家,房间模式一致且仍在 5 分钟窗口内。
- 终局公开种子的 SHA-256 与开局承诺相同。
- 使用公开事件记录重放全部发牌、目标牌、行动和六槽转轮,得到完全相同的唯一胜负。
- Prompt 内容与哈希一致,并且属于内置卡或开局前获全票的自定义 Prompt。
授权在 Provider 请求发出前标记为已消费。401、402、429、5xx、超时、内容过滤和流中断均不会自动重试。
- 每房在内存中生成新的自签名 TLS 证书,房间结束后销毁。
- mDNS 和邀请串提供 SHA-256 证书指纹;客户端使用自定义 Rustls 验证器固定该指纹。
- 界面将指纹前 16 个十六进制字符分组为安全码,玩家应通过口头或面对面方式比对。
- mDNS 会公开房间名、模式、人数上限、当前人数和安全码给同一局域网;房间码不会通过 mDNS 广播。
- 完整邀请串包含可加入房间的地址、房间码和指纹,应只发给本局好友。
- 聊天、Prompt 和 AI 输出全部通过 Vue 文本插值或
<pre>纯文本渲染,不使用v-html,不执行 Markdown。 - 聊天、Prompt、AI 输出和事件历史只存在当前进程内存,房间关闭后不持久化。
- 默认日志只记录组件级状态和错误码;不记录 Key、Prompt、聊天、生成输出、房间码或重连令牌。
- CSP 默认只允许应用自身资源与 Tauri IPC。Tauri capability 仅启用核心默认权限,以及注册/注销隐私全局快捷键所需的两项精确权限。
真实局会把最终选中的 Prompt 发送到 DeepSeek,并把生成纯文本广播给所有房间成员。内置系统指令要求内容友好、虚构、简洁并标注为 AI 生成,但内容过滤不能替代参与者判断。玩家不应输入现实隐私、受保护信息或违法内容。
官方协议要求妥善保管 API Key,并由开发者及终端用户对输入与下游用途负责:
- 没有代码签名,安装时可能出现 SmartScreen 提示。
- 房主退出会立即关闭房间;没有主机迁移或独立服务器。
- 断线超过 60 秒会按逃跑结束牌局,不执行强制 API 调用。
- 不包含互联网 NAT 穿透、云中继、账号系统、商业支付、自动更新和反作弊。
- 当前价格估算是版本化展示值,实际账单以 DeepSeek 为准;每次发布都必须重新核对官方价格页。