Skip to content

0.17.0-rc.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Aug 01:50
· 4 commits to master since this release

预发布版本。请勿在唯一的真实 Vault 上使用。

rc.1 的 iOS 与 Android 实机自检已完成,两份报告都是 0 条不安全
这一版修掉的是那次实测暴露出来的自检判定逻辑本身的缺陷


修了什么

自检的判定逻辑写错了

rc.1 的报告顶部会挂着「⚠️ 存在实测与规则不一致」,iOS 上四行标红。逐条看下来
没有一条是危险的——错的是判据。

原实现用「实测 == 预言」的严格相等。这个判据是错的:

规则比现实更严完全安全,只是多拦一次。
真正危险的只有一个方向:规则比现实宽松——我们以为两个名字不同、
文件系统认为相同,于是后写的静默覆盖先写的。

iOS 的文件系统是大小写敏感的,我们的规则仍判碰撞,也就是比现实更严——
最安全的方向,却被标成了红色。而一份大部分是红色的报告等于没有报告:
真出问题的那一行会被淹掉。

现在是三档判定:

判定 含义
✓ 安全 规则与现实一致,或比现实更严
△ 受限 设备接受某个名字而规则拒绝它 → 该文件在部分设备上不同步,不丢数据
✗ 不安全 规则比现实宽松 → 可能静默覆盖。只有这一类需要立刻处理

碰撞类与可创建性类分开判定:后者的危险方向是反的(规则接受而设备建不出来 →
写入会失败),原来两类混用同一个判据也是错的。

报告里新增「判定的含义」一节——读报告的人得知道该不该慌。


rc.1 实测带来的其他更新

README 用实测数据替换了推测

iOS 与 Android 在两项关键行为上完全相反

iOS Android
大小写 敏感 不敏感
Unicode 归一 会归一 不归一

这正好是「碰撞规则为什么不按平台分支」最有力的论据——按本地平台判断,
这两台设备会对「两个名字是不是同一个文件」给出相反答案,然后互相覆盖。
我们的规则取所有平台里最严的一套(小写化 + NFC 归一 + 去尾随点空格),
因此在两台行为相反的设备上都是「一致或更严」。

原子替换那条也改成实测结论:已测的五个平台(Windows / Linux / macOS /
iOS / Android)全部支持原子安装,因此退化路径是安全网而不是日常行为。

跨平台 CI

新增 ubuntu / macos / windows 三平台矩阵,每次推送都在真实文件系统上验证
路径规则。这一路上抓到一个只在 macOS 的 bash 3.2 上出现的解析 bug——
$VAR 后紧跟全角字符时,变量名会把那个字符的首字节吃进去。靠推理是想不到的。


rc.1 已包含、此版沿用

  • 大小混淆(LSE4 信封 + 填充桶,默认关闭)
  • 时间混淆(上传对齐窗口 + 抖动,mtime 量化,默认关闭)
  • 不可原子替换平台的退化路径修复(远端更新此前根本收不到)
  • 每个请求上报 X-Client-Version,服务端 obsync migration preflight 据此
    确认「所有设备都升级了吗」

已知限制

  • 大小混淆不覆盖元数据信封(LSM1)与分享名信封(LSN1)
  • 时间混淆不隐藏「你在某个窗口里到底有没有编辑」——那需要持续的掩护流量,
    本插件不做,也不暗示自己做了
  • LSE4 需要 v0.17+ 客户端才能读。开启大小混淆前请确认所有设备都已升级
  • 网络盘 / 云同步盘仍不支持作为 Vault 位置

安装

BRAT 添加 KJoner/litesync
并勾选包含预发布版本。服务端对应 v0.17.0-rc.1