跳转到内容

同步与密钥 ​

同步传输加密记录。解密、本地索引与检索在用户设备上完成;服务端不需要模型或账户解密密钥。

flowchart LR
  A["设备 A:密钥 + SQLite"] <-->|"加密记录"| Server["服务端:认证 + Postgres"]
  Server <-->|"加密记录"| B["设备 B:密钥 + SQLite"]
模式行为
本地未配置远程连接
自动Runtime 在支持的写入后调度同步
手动显式运行 rsrs sync

RSRS_NO_AUTOSYNC 覆盖账户的 client.json 设置。非零值禁用自动同步。显式 sync 等待本次同步尝试完成。

记录处理 ​

机制用途
脏记录 / outbox保留等待确认的本地编辑
有序服务端 cursor下载更改,不依赖设备时钟
Tombstone同步删除意图
保留版本保留冲突及历史,供审阅
本地特征产物可重建的检索数据,与加密内容 revision 分离

冲突决策与服务端恢复见同步 v2。

密钥所有权 ​

flowchart TD
  Secret["Super 密码 + Account Secret"] --> Wrap["密钥派生与封装"]
  Wrap --> URK["用户根密钥"]
  URK --> Data["本地数据与 embedding 加密密钥"]
  Data --> Records["加密记录"]
变更效果
登录密码更改身份认证凭据
重置 super 密码重新封装根密钥,不改写全部记录
新设备需要身份认证与必要的密钥恢复材料
退出登录遵循 logout --help;删除本地身份与撤销远程 session 分离

旧 v1 恢复使用原登录密码与 Account Secret,没有独立的 super 密码。上面的封装图描述有独立 super/恢复因素的账户;不要为 v1 恢复要求替代 super 密码。普通登录保留 vault 版本及加密读写格式。只有显式命名空间迁移才改写选中的副本,并保留原因素与来源。

服务端在 POST /api/self/vault 存储不透明 vault versions 1 至 4。首次上传恢复材料时发送 If-None-Match: *,仅创建不存在的 vault。若已有另一 vault,服务端返回 412 并保留它;客户端必须读取并验证,不可覆盖。无效字段、版本或不受支持的条件返回 400。未带条件的请求保留原 upsert 行为,不适合首次恢复初始化。

服务端的可选信封目前仅为提案、尚未发布:它将新增 wrapped_urk_server 与 server_urk_nonce,即同一 URK 在服务端 KMS 信封密钥下的第二层不透明封装,使持有信封密钥的宿主机可在设置 RSRS_SERVER_KEK 时无需 super 密码解包 URK。已发布的服务端尚不接受也不返回这些字段。已记录的基线 POST /api/self/vault 接受 kdf_salt、wrapped_urk、urk_nonce 及可选的 version。

后续服务端版本还接受可选的 operation 和 expected_key_generation。有意重新封装同一 URK 时,使用 operation=rewrap_same_urk 和当前 expected_key_generation,以保留 passkey;客户端必须先解锁已有 URK,因为服务端无法比较不透明密钥。更改内容的旧式 upsert 可能推进密钥代次并使 passkey 失效。使用这些字段前,请检查已部署服务端版本的契约。

该提案尚未完成,不构成发布或部署承诺。旧服务端会忽略未知 JSON 字段、仅存储不含信封的 vault。生产者发布后,本页与契约才会把这些字段记为受支持。

迁移凭据、Account Secret 及 session 文件应保持私密。不要加入仓库,也不要通过普通插件 payload 发送。

备份 ​

备份包含的内容恢复前提
export明文记录保护导出文件
backup本地 SQLite 数据库保留匹配的密钥材料
密钥恢复材料账户秘密或封装密钥访问材料与数据库备份独立保存

替换活动数据库前,先停止对应 runtime 并遵循已安装版本的恢复流程。依赖备份前,先验证恢复副本。