设置密码时,牢记这几点
如果你有耐心看完了上面这一节,一定已经理解了,密码安全其实是一个「端到端」,即「客户端 – 传输层 – 服务端」三位一体的问题,只要其中某一个环节有问题,哪怕另外两个环节做得再好再安全,也是白搭。木桶理论在安全领域,实在是再适用不过了。
我们能做好的最重要的事情,其实用一句话来概括,就是永远只在可信的设备和可信的网络环境下进行密码操作。一旦到达服务器端,基本事情就已经不在我们掌控的范围内了。一家使用明文存储密码的公司一旦发生数据泄露,哪怕我们的密码设计得再复杂,设备和网络安全再周密,这一切也都是白搭。
不过,即使是这样,我们还是有一些措施,即使在服务器端发生问题时,最小化我们的损失。
1. 密码位数、大小写和特殊符号
密码越复杂,安全程度越高,这一假设的前提是你的本地设备和网络环境足够安全,否则就像我们前面所说的,密码再复杂,如果你本地有木马程序监听输入,那么一样是徒劳。
在保证本机和网络环境安全的前提下,如果网站的数据发生泄露,对方在暴力破解时,密码的复杂程度就直接对破解的效率和成本有关系,一般来说,位数越长,混杂得大小写和特殊符号越多,暴力破解的成本就越大。所以一定杜绝使用常见的、简单的密码,建议大家的密码尽量保持在 14 位以上、存在大小写字母和数字、并混杂有特殊符号(理论上特殊符号当然是越不常见的越好,甚至有人用 emoji 作为密码中的特殊符号)。
2. 在密码中加入网站特征值
如果最坏的情况发生了,密码泄露并被破解了,怎么才能不影响自己在其它平台的账号安全?当然是不同平台和网站有不同的密码是最安全的了,这样泄露的账号和密码不会直接影响到其它平台。不过考虑到实际情况,我们很难在每一个不同的平台上都更换一个新的账号和密码,要记住不是一件容易事。这时就可以考虑一个非常简单的策略:使用一个通用的基础密码,针对不同的网站,在前后或中间插入对应该网站的一个特殊值。比如我给自己设定的一个基础密码是 Jackson%!1128,那么当我在不同的平台注册时,可以加入不一样的后缀,例如注册百度时可以有 Jackson%!1128@baidu,注册少数派时则是 Jackson%!1128@sspai,以此类推。
好处是什么呢?首先显然如果你不打算借助一些密码管理工具,而使用脑子来记密码,又希望各个平台的密码有所不同时,这是一个简单可行的方法。其次,一旦你的密码被泄露了,你还很快能追查出到底泄露源是哪。你可能会觉得黑客会不会很聪明,知道在不同网站去替换我的后缀呢?这其实很难,首次加入了这些网站特征值后本身对破解造成了难度上的提升,而从另一个方面来说,黑客基本很少会关心茫茫密码中的个人,他既没兴趣也没精力来专门针对你进行一些特殊处理。如果还是不放心的话,可以考虑在这个策略上,再加入一些变化,比如我就不会直接使用 sspai,baidu 这样的网站特征值,而是使用这些网站名称的五笔首字母,例如 baidu 就是 dy,少数派则是 ioi。
3. 直接生成随机字符串
不知道到底设什么样的密码好?其实还有一个很简单的办法,像 Safari、Chrome 等浏览器就会在页面注册账号时智能地提供一个随机字符串作为密码选项。
好处就是,完全忘掉之前说的怎么设置一个复杂的密码规则,你只需要让浏览器自动生成就可以了。不过缺点也很明显,如果你在不同的平台上登录,是 Web 环境的话需要保证全平台统一同步,而如果注册的是某些 App 使用的账号,那么登录的时候就非常不友好了。