云同步与备份

端到端加密同步架构

Netcatty 的云同步专为对安全极度敏感的用户设计。我们假设 云提供商是不可信的。无论你同步到私有的 GitHub Gist 还是 Google Drive 文件夹,我们都将该存储视为公共公告板。

加密架构

在任何数据字节离开你的设备之前,它都会经过严格的加密流程。

1. 主密钥

你的同步安全完全取决于你的 主密码

  • 派生: 我们使用 PBKDF2-HMAC-SHA256 进行 600,000 次迭代,并使用随机的 32 字节盐值 (Salt)。
  • 结果: 这产生了一个 256 位的对称密钥(主密钥)。
  • 存储: 当应用打开时,此密钥 仅保留在内存 (RAM) 中。当你锁定应用或退出时,它会被丢弃。

2. 有效负载 (Payload)

当你触发同步(或触发自动同步)时,Netcatty 会:

  1. 序列化你的保险库 (包括主机、身份、代码片段、规则、已知主机和设置)。
  2. 使用主密钥通过 AES-256-GCM (伽罗瓦/计数器模式) 加密 JSON 二进制大对象 (blob)。
  3. 附加用于完整性检查的身份验证标签 (Tag)。

3. 传输

只有这个不透明的、加密的二进制 blob 会被上传到提供商。

  • GitHub Gist: 在机密 Gist 中上传为名为 netcatty-vault.json 的文件。
  • Drive/S3/WebDAV: 以二进制文件形式上传。

零知识

即使黑客入侵了你的 Google Drive,或者 GitHub 员工扫描了你的 Gist,他们也只能看到随机噪音。由于没有你的主密码,这些数据在数学上与垃圾数据无异。

提供商设置详解

GitHub Gist (推荐给开发者)

使用机密 Gist 作为存储后端。

  1. 在 GitHub 上生成 个人访问令牌 (Personal Access Token, Classic)
  2. 权限 (Scopes): 仅勾选 gist。不需要其他权限。
  3. 将令牌粘贴到 Netcatty 中。
  4. Netcatty 将搜索现有的 netcatty.sync gist 或创建一个新 gist。

S3 兼容存储 (AWS / MinIO / R2)

非常适合自托管用户。

  • Endpoint: 完整 URL(例如 https://s3.us-east-1.amazonaws.comhttps://play.min.io)。
  • Region: 你的存储桶所在区域。
  • Access Key / Secret Key: 你的 IAM 凭据。
  • Bucket Name: 目标存储桶名称。

WebDAV (Nextcloud / ownCloud)

  • URL: 完整的 WebDAV 端点(例如 https://cloud.myserver.com/remote.php/dav/files/user/)。
  • Username / Password: 你的基础认证 (Basic Auth) 凭据。

同步逻辑

Netcatty 使用“最后写入者胜 (Last-Write-Wins)”策略,并具备时间戳感知能力。

  • 下载: 当你打开 Netcatty 时,它会检查云端文件的“最后修改”时间戳。如果云端版本比本地新,它会下载并提示进行合并。
  • 上传: 当你保存更改时,它会上传一个新版本。

冲突解决

如果你在笔记本电脑(离线)上编辑了主机 A,在台式机(在线)上编辑了主机 B,然后连接笔记本电脑:

  1. Netcatty 检测到“分歧 (Divergence)”。
  2. 它在内存中解密云端版本。
  3. 对比 JSON 树。
  4. 合并非冲突的更改(主机 A 和主机 B 都会保留)。
  5. 如果两个地方都编辑了主机 A,则本地时间戳最新的版本胜出。

灾难恢复

场景:你的笔记本电脑丢了。

  1. 在新机器上安装 Netcatty。
  2. 前往 设置 > 同步
  3. 选择你的提供商并进行身份验证。
  4. Netcatty 将提示 “发现现有的同步数据”
  5. 关键步骤: 输入你的 主密码
    • 注意: Netcatty 尚不知道密码是否正确。它会尝试解密 blob。
    • 成功: 你的保险库瞬间出现。
    • 失败: “解密失败”。你必须重新尝试。

主密码找回

没有“找回密码”邮件。如果你丢失了主密码,云端加密的 blob 就是一堆废料。你的数据将无法找回。