强密码与密码管理器 [foss-rev/password]

生活在数字时代的大家对于密码都是不陌生的。但凡涉及到注册账户的地方,通常都要求你创建一个密码来保护你的账户安全。如果你使用上文提到的GPG来创建了一个密钥对,它也会要求你设置一个密码(GPG交互信息中显示的单词是passphrase,秘密口令,这个单词的含义与密码password有一定区别,感兴趣的读者可以自行搜索)来保护你的私钥(因为你的私钥是存储在电脑硬盘上的,如果你不设置密码,那么这个私钥是以明文形式存储的,任何拿到你的电脑的人都能够获得你的私钥)。如果你使用GPG中的AES256对称加密一些文件,同样你也需要提供一个密码。

而密码这个加密手段有显而易见的缺点,就是容易被暴力穷举攻破。一些网站可能会在你尝试密码次数过多后暂时禁止登录,可以减少被暴力穷举的危险;而GPG私钥和对称加密的文件由于是保存在本地的文件,就极易被暴力穷举密码破解。攻击者通常会使用暴力穷举的程序来穷举你的密码,而穷举速度与攻击者运行穷举程序计算机的运算速度有关。考虑到现代计算机的运行速度都很快了,所以为了保证密码的安全,我们要求用于秘密工作的密码至少满足以下两点要求:

  1. 随机生成,40位以上,包含数字、大小写英文字母和ASCII码字符(如 ‘,’ ‘.’ ‘?’)。
  2. 为了防止一个密码泄露,连带其他所有信息的安全都受到威胁,不要在不同的地方使用相同的密码。

而满足以上两点要求的密码是无法通过记忆力来记住的,所以我们就需要密码管理器来帮助我们记下这些密码。

最原始的密码管理器可能就是纸和笔了,我们可以将密码记录在纸上。但这样做有许多缺点:首先费时费力,而且不方便备份(人工抄写容易出错),不方便在电脑上输入这些密码。而且如果只有少量密码还可以写在纸上,密码一旦多起来,用纸和笔就极难管理,反而不安全。

所以我推荐使用KeepassXC来作为电脑上的密码管理器。如果想要在安卓手机上使用,可以选择KeepassDX,这个软件与KeepassXC是完全兼容的。这个软件内置了可以生成符合各种要求的随机密码的生成器,同时还提供了一些备份同步的选项(纯离线备份同步,可以通过和其他同步工具搭配使用来实现在线同步,但是对于重要的密码不建议在线同步,做好离线备份即可)。

这个软件使用起来并不难,提供了足够的使用引导和快速开始文档。但是我需要做一些安全上的提醒。

  1. 解密数据库的时间至少设为2秒。时间越长意味着加密轮换的次数越多,你的密码数据库也就越安全。
  2. 数据库密码也要遵守上文提到的强密码原则,不能过于简单。**这个密码是你需要记住的唯一一个密码,丢失这个密码意味着丢失数据库中的全部内容!**你可以随机生成一个密码,然后把它抄写到纸上(在数据库创建成功后尝试用你抄写的密码来开启数据库,保证抄写无误后再添加其他密码到数据库中);也可以让密码中包含一些对你来说有意义,方便记忆或书写的内容(但不可以包含过于通用的内容,如“password”,“admin”或者你自己的生日等)。今后你还会多次输入这个密码,尝试在输入的同时记住这个密码。
  3. 还可以添加一些额外的验证手段用于开启数据库,例如文件密钥,或是加密介质(USB)等,感兴趣的读者可以自行探索。
  4. 密码数据库是以一个后缀为.kdbx的文件的形式存储在你的电脑硬盘上的。这个文件本身受到密码保护,你在打开数据库后的所有内容只会存在于电脑内存中,数据库锁定后会被释放(内存是易失性存储,断电后存储的所有内容都会消失)。所以.kdbx文件可以直接网络传输和存储在你的其他个人设备上,并且你也应该多备份这个文件来防止里面的密码丢失。USB和手机都是很好的备份设备。不要忘了定期更新你的备份!

现在,你可以着手把之前注册的账号的密码全部更换为强密码,并且存储到密码数据库中了。

将密码数据库备份到安全的(不会被警察从后台监控的)云服务器上有一个额外的好处:它能够使你具备一定程度的抗审问能力。如果你能够在被捕前将存储在本地设备上的所有密码数据库备份都删掉,只保留云服务器上的那个备份,那么当你被逼问密码时,你就可以说:“虽然我的确记得打开密码数据库的密码,但是我已经把所有密码数据库的备份都销毁掉了,而数据库中的密码我不可能凭记忆力记得住。”这应该能让警察认为对你进行“大记忆恢复术”是无效的。但如果你还想在被释放后恢复访问你存储在云上的的数据库,请务必在被捕前将云存储服务的登录方式和打开数据库的密码转交给安全的同志。那位同志也应该在该名同志被捕后修改他的网盘账户密码来防止他有可能记住密码并说出来。

同时推荐一个安全的云存储服务提供商:Filen。他们提供免费的10GB存储空间,足够保存密码数据库了。如果选用这个云存储服务商,那么可以将导出的主密钥(在创建账户时会要求你这样做)在被捕前转交给安全的同志。

同时还有一个我认为更安全的备份密码数据库的方案,但要求同志们较高的组织度并都能熟练掌握ssh等远程登录工具。就是搭建一个境外服务器用于统一管理所有同志的密码数据库,并且服务器的ssh远程登录方式应该设为只允许ssh密钥对登录。然后每名同志都创建自己的ssh密钥对(使用方式与GPG密钥对是类似的)用于登录该服务器。一旦得到了某名同志被捕的消息,其他能够登录的同志应立即把他的ssh公钥从服务器“已验证的密钥”文件中移除,这样该名同志的密钥对将不再能够用于登录这个服务器。在该名同志被释放后,其他能够登录的同志再将服务器上属于他的密码数据库给他,并让他创建新的密钥对用于登录该服务器。

以上方案供大家讨论,我觉得应该不是最优的方案。