由于国内网络安全做的太差,经常发生被脱裤的事件,比如最近的网易邮箱(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一样,选择已有的密码库来操作了。