云同步与备份
端到端加密同步架构
Netcatty 的云同步专为对安全极度敏感的用户设计。我们假设 云提供商是不可信的。无论你同步到私有的 GitHub Gist 还是 Google Drive 文件夹,我们都将该存储视为公共公告板。
加密架构
在任何数据字节离开你的设备之前,它都会经过严格的加密流程。
1. 主密钥
你的同步安全完全取决于你的 主密码。
- 派生: 我们使用
PBKDF2-HMAC-SHA256进行 600,000 次迭代,并使用随机的 32 字节盐值 (Salt)。 - 结果: 这产生了一个 256 位的对称密钥(主密钥)。
- 存储: 当应用打开时,此密钥 仅保留在内存 (RAM) 中。当你锁定应用或退出时,它会被丢弃。
2. 有效负载 (Payload)
当你触发同步(或触发自动同步)时,Netcatty 会:
- 序列化你的保险库 (包括主机、身份、代码片段、规则、已知主机和设置)。
- 使用主密钥通过 AES-256-GCM (伽罗瓦/计数器模式) 加密 JSON 二进制大对象 (blob)。
- 附加用于完整性检查的身份验证标签 (Tag)。
3. 传输
只有这个不透明的、加密的二进制 blob 会被上传到提供商。
- GitHub Gist: 在机密 Gist 中上传为名为
netcatty-vault.json的文件。 - Drive/S3/WebDAV: 以二进制文件形式上传。
零知识
即使黑客入侵了你的 Google Drive,或者 GitHub 员工扫描了你的 Gist,他们也只能看到随机噪音。由于没有你的主密码,这些数据在数学上与垃圾数据无异。
提供商设置详解
GitHub Gist (推荐给开发者)
使用机密 Gist 作为存储后端。
- 在 GitHub 上生成 个人访问令牌 (Personal Access Token, Classic)。
- 权限 (Scopes): 仅勾选
gist。不需要其他权限。 - 将令牌粘贴到 Netcatty 中。
- Netcatty 将搜索现有的
netcatty.syncgist 或创建一个新 gist。
S3 兼容存储 (AWS / MinIO / R2)
非常适合自托管用户。
- Endpoint: 完整 URL(例如
https://s3.us-east-1.amazonaws.com或https://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,然后连接笔记本电脑:
- Netcatty 检测到“分歧 (Divergence)”。
- 它在内存中解密云端版本。
- 对比 JSON 树。
- 合并非冲突的更改(主机 A 和主机 B 都会保留)。
- 如果两个地方都编辑了主机 A,则本地时间戳最新的版本胜出。
灾难恢复
场景:你的笔记本电脑丢了。
- 在新机器上安装 Netcatty。
- 前往 设置 > 同步。
- 选择你的提供商并进行身份验证。
- Netcatty 将提示 “发现现有的同步数据”。
- 关键步骤: 输入你的 主密码。
- 注意: Netcatty 尚不知道密码是否正确。它会尝试解密 blob。
- 成功: 你的保险库瞬间出现。
- 失败: “解密失败”。你必须重新尝试。
主密码找回
没有“找回密码”邮件。如果你丢失了主密码,云端加密的 blob 就是一堆废料。你的数据将无法找回。