由于国内网络安全做的太差,经常发生被脱裤的事件,比如最近的网易邮箱(via 乌云 ),所以只好用 1password 这类密码管理软件,实现一站一密。昨晚半夜冻醒了,刷推刷到了这个:1password-leaks-your-data,整个人吓醒了 =_=# 作者有点标题党,脱水版可以参见 reddit 的 这篇文章 ,大意是 1password 的旧密码库格式叫 agilechains,大体是 json 结构,里面只有密码是加密的,密码项的名字和 URL 并未加密。官方提到历史原因,早期计算能力弱,只好加密关键部位。官方推出的密码库更新指南在此:Switching to OPVault format

但是,今天折腾了大半天,发现官方指南其实并没有考虑到同步的情况。我在 Win,iOS,以及 Mac OS X 上都有使用 1password,使用 dropbox 进行同步。官方对新的数据格式 OPVault 有版本要求,所有设备的 1password 都需要升级。升级完成后,官方没有办法直接转换到 OPVault 上来。需要先导出一个纯文本 1pif 格式,完全不带加密,然后创建一个新库,选择新的 OPVault 格式,再导入刚刚的 1pif 文件。因为之前已经有和 dropbox 同步,于是 1password 就自作主张将 dropbox 目录里的老库和新库合并,结果所有密码变成两份。。。由于 Dropbox 的版本控制只针对文件而非目录,我还要一个一个文件的回滚,崩溃了。。

以 win 平台为例,正确做法应该是这样:先停掉 dropbox 的同步。删掉 dropbox 里的备份文件,如果是 iOS 创建的 Dropbox 备份,文件位置在 Apps/1Password/1password.agilechains。然后创建新的密码库,格式选择 OPVault,文件保存在 Apps/1Password/1password.opvault。将原来的主密码库导出一个纯文本 1PIF 文件,然后删掉原来旧格式的主密码库,如果 UI 没有提供接口,就退出 1password,直接搜索所有的 1password.agilechains 来删除。删除时,注意使用 Eraser 来清理数据,不然就会犯陈冠希老师的错了。在新格式的 OPVault 里导入原来的 1PIF 文件,大致检查一下数量对不对,有没有漏的,没有的话就可以用 Eraser 将这个最容易泄密的 1PIF 干掉了。一切准备停当,可以打开 dropbox 同步,dropbox 这时候应该自动将新密码库上传上去了。

win 平台处理完,其他平台可以参考同样流程。不要依赖 1password 自己的同步,只要记住文件到了,密码库就在手上,利用 dropbox 完成同步即可。先把 iOS 的卸载掉,再重新安装,选择我是已有密码库的用户,导入 dropbox 里的密码库就搞定了。Mac OS X 稍微有点麻烦,直接删除 app 不会删除备份,而且貌似 1password 5 是使用了 sqlite 来作本地数据缓存。我们需要在 Finder 里,前往文件夹 ~/Library/Application Support/1Password 4, 删除里面的数据。最新的 OS X EI Capitan 取消了安全清除废纸篓,可以用命令行的 srm 代替。然后再打开软件,就可以像 iOS 一样,选择已有的密码库来操作了。