外观
关键交互流程
共通原则
- 每个流程同时设计正常、空、失败、弱网、取消和系统终止状态。[MUST]
- 失败后尽量保留用户已输入内容;安全阻断不得通过“继续”静默绕过。[MUST]
- 主密码、假密码和备份密码只在本地使用;文案不暗示它们参与账户登录。[MUST]
- 安全机制只描述用户可见行为与边界,底层协议、KDF 和格式化编排由对应线路与 ADR 决定。[已验证事实]
F-01 首次启动与身份创建
- 欢迎页提供“创建身份”“连接私有服务器”“恢复备份”三个任务入口。[建议]
- 创建身份前先选择官方实例或私有实例;不得先创建可跨实例复用的身份。[MUST]
- 私有实例支持输入 HTTPS 地址或扫描部署二维码。校验页显示实例名称、域名、指纹摘要、协议兼容状态和注册策略。[MUST]
- 校验失败时按证书无效、不可达、协议不支持、指纹变化或注册关闭给出不同原因;不提供关闭证书校验的继续入口。[MUST]
- 创建过程中显示本地生成身份、向实例注册和完成三个阶段;不要使用“正在上传密钥”等误导文案。[建议]
- 完成页显示完整 VMax 地址、当前实例和“分享二维码”主操作,再进入备份提示。[MUST]
空与失败: 无网络时保留已输入地址;扫描权限拒绝后允许手动输入;应用被终止后重新进入时根据实际持久化状态恢复或重新开始,不显示半完成身份。[MUST]
F-02 联系人验证
远程添加
- 输入完整地址;先解析 ID 与实例短码。
- 若实例未配置,提示导入并核验实例;不静默把联系人添加到当前实例。[MUST]
- 发送固定长度的联系人请求,未成为联系人前不允许夹带任意附件。[MUST]
- 接收方可接受、拒绝或阻止;拒绝不向发送方暴露详细原因。[MUST]
- 接受后展示“已固定密钥”状态;精确的用户可见命名见 D-PROD-01。[待总控决策]
二维码验证
- 扫码读取地址、实例标识、身份公钥指纹和协议版本。[MUST]
- 逐项校验;任何字段不匹配立即停止,不把部分成功显示为已验证。[MUST]
- 成功后显示对方名称、指纹摘要和实例,用户确认后升级验证状态。[建议]
- VoiceOver 用完整语句读取状态,不逐字符朗读整段指纹;提供按组浏览和复制。[建议]
密钥变化
会话顶部显示阻断式警告,原验证状态立即降级;发送动作进入确认或禁用状态,直到用户查看原因并重新核验。警告不得只靠红色表达,也不得被普通消息滚动带走。[MUST]
F-03 一对一聊天
发送与弱网
- 点击发送后立即生成本地消息项,状态为“正在发送”。
- 服务端持久化密文信封后变为“已发送”;接收端成功解密并 ACK 后变为“已送达”。
- 已读回执开启且对方打开会话后才显示“已读”。[MUST]
- 网络失败时保留消息与顺序,显示“发送失败,点按重试”;自动恢复与手动重试必须幂等。[MUST]
- 身份密钥变化、协议不支持和普通网络失败使用不同状态与恢复动作。[MUST]
空状态
新会话没有消息时显示联系人验证状态和一条不夸大安全性的提示,例如“开始对话前,可先核对安全码”。不要显示“绝对安全”或暗示已完成核验。[MUST]
长按与详情
- 长按先显示六种反应,再显示回复、复制、转发、删除和显示详情;菜单不遮挡被选消息。[MUST]
- 转发是新消息,必须重新加密并生成新消息 ID;删除默认只删除本地。[MUST]
- 详情可显示状态时间、截断消息 ID、协议版本、密码套件名称、联系人验证状态、实例名称、队列 TTL、服务器删除声明和大小元数据。[MUST]
- 详情不得显示私钥、根密钥、链密钥、消息密钥、原始密文或完整认证标签。[MUST]
F-04 加密备份与恢复
创建备份
- 身份创建后 24 小时内开始提醒,但不阻断聊天;提供创建、稍后和关闭提醒。[建议]
- 先说明默认包含身份、联系人、验证状态、恢复材料和设置;消息历史默认不包含,需单独选择。[MUST]
- 用户设置独立备份密码并再次确认;明确说明密码不上传、忘记后无法恢复。[MUST]
- 导出前完成本地加密;系统分享面板接触的只能是加密包。[MUST]
- 完成页提醒外部备份不受 App 内格式化影响,并建议用户自行保管。[MUST]
恢复
- 选择备份包后先做格式与完整性校验,再请求密码并解密。[MUST]
- 密码错误或包被篡改时使用中性错误,不泄露内部字段或部分内容。[MUST]
- 展示目标实例与旧设备风险;MVP 不承诺自动吊销无法访问的旧设备。[MUST]
- 用户确认后恢复;若默认未包含消息历史,完成页明确说明“身份与联系人已恢复,旧消息未包含在此备份中”。[MUST]
F-05 主密码、假密码与空白空间
统一锁屏
- 冷启动、超时返回和用户主动锁定后显示同一密码输入页;页面不提示存在两类密码。[MUST]
- 主密码正确后进入真实空间;假密码正确后进入独立空白空间;其他输入统一提示“密码不正确”。[MUST]
- Face ID 只作为真实空间的可选快捷解锁;用户始终可以选择输入密码。[MUST]
- 输入、命中结果和错误次数不得进入网络、分析或可识别日志。[MUST]
空白空间
自然呈现“尚未创建身份”或“暂无会话”,不显示“伪装模式”“假密码”“正在擦除”、真实实例、备份、通知、badge 或搜索结果。[MUST]
格式化关闭时,退出或重新锁定后仍可用主密码进入真实空间。格式化开启并完成后,主密码不再恢复原数据。[MUST]
F-06 启用与触发本地格式化
启用
- 设置 → 安全 → 双密码与伪装 →“假密码触发格式化”;默认关闭。[MUST]
- 重新输入主密码。
- 展示不可逆影响清单:会删除本机关键密钥和 App 可控数据;无法物理覆写闪存;不会删除 Files、iCloud Drive 或其他外部备份;服务端密文仍按 TTL 处理。[MUST]
- 第二次明确确认,不能用普通开关误触完成。[MUST]
触发
只有完整、精确匹配已配置假密码并成功验证时才触发。普通错误、空输入、Face ID 失败、取消、退后台和系统终止都不得触发。[MUST]
触发后界面只能表现为中性启动过程并最终进入自然空白空间;不得出现“已触发假密码”“正在擦除真实数据”或可识别的伪装事件。[MUST]
F-07 删除身份
- 从个人资料进入删除身份,先说明身份、联系人、消息和未导出恢复材料的影响。
- 提示外部备份不会被删除。
- 要求生物识别或设备认证,并再次明确确认。[MUST]
- 完成后回到首次启动状态;不得残留通知、badge、最近搜索或可进入的旧页面。[MUST]
待总控决策
D-FLOW-01 备份提醒节奏
- 选项 A:24 小时内固定重复提醒,直到完成或关闭。 达成率可能更高,但容易形成干扰。
- 选项 B:基于关键时机提醒,例如首次联系人建立后、首次消息送达后和第 24 小时。 更贴近价值时刻,但逻辑更复杂。
- 推荐:B,并设置频率上限。 不阻断聊天,同时在用户理解身份价值后提示。
- 验证办法: Beta 比较完成率、关闭提醒率和负面反馈;分析事件只记录提醒动作和结果,不记录身份或消息内容。
D-FLOW-02 格式化耗时期间的中性反馈
- 选项 A:保持普通 App 启动画面,完成后进入空状态。 伪装最强,但耗时过长时可能被误判为卡死。
- 选项 B:显示中性“正在准备”进度,不说明真实动作。 可解释性更好,但不同耗时可能暴露状态。
- 推荐:A 作为目标,若真机最坏耗时超过普通启动容忍阈值再采用 B。 以实测而非猜测决定。
- 验证办法: 在不同数据量、低电量、存储紧张和强制终止场景测量耗时与可观察差异,并进行旁观者识别测试。