工具分类

随机与安全

密码、随机抽取和文件哈希

指南真正安全的密码密码强不强取决于什么,最新的规范对长度、复杂度要求和定期改密码怎么说,哈希和随机抽签又和它有什么关系。

随机这件事很容易在细节上出错。教科书上的做法是取一个随机数、再对列表长度取余,但这样会让某些选项的概率略高于其他选项;浏览器里常用的 Math.random 也不是为安全用途设计的。这一栏的每个工具都从浏览器的密码学随机数生成器取值,并用「拒绝采样」消除取余带来的偏差,保证每一种结果出现的概率完全相同。页面上会解释具体是怎么做的,因为「相信我,它是随机的」不算解释。

生成的秘密不离开页面

在服务器上运行的密码生成器,按定义就已经见过你的密码。这里的生成器在你的浏览器里运行,生成的任何内容都不会被发送、记录或保存,关掉标签页就没了。哈希计算也一样:文件在本地读取、在本地计算。要核对一个大文件下载是否完整,或者核对一份私密文档是否和公布的校验值一致,这是唯一说得通的做法。

老老实实地衡量强度

很多密码强度指示器奖励的是错误的东西,比如在一个很好猜的单词里加一个符号。密码生成器用熵来衡量强度,也就是按当前设置一共可能生成多少种等概率的密码,再在一个写明的、刻意悲观的攻击者假设下,换算成大致的破解时间。这样每一项设置的实际作用就一目了然:多加四个字符,比加上符号的作用大得多。

  • 密码生成:可以自选字符集的随机密码,以及用 EFF 词表组成的口令短语。
  • 随机抽签:从名单里抽人、打乱顺序、平均分组,或者转一个大家都看得见的转盘。
  • 哈希计算:文本和文件的 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512,并能自动和期望值比对。

收录 MD5 和 SHA-1,是因为很多下载页面仍在公布这两种校验值,而不是因为它们安全。哈希计算页面会说明不同算法分别适合什么用途。

课堂点名、年会抽奖、分组讨论,这类需要当众证明公平的场合,可以把随机抽签切到全屏模式投到大屏幕上。结果在转盘开始转之前就已经由随机数确定,动画只是展示过程。

密码强在哪里

随机生成的密码之所以强,靠的是长度和随机性,而不是字符种类多。从全部 94 个可打印字符里随机抽取,每个字符约贡献 6.55 比特;而给一个 12 位的字母数字密码加上符号,总共只多出约 7 比特。「真正安全的密码」这篇指南解释了背后的算术,总结了 NIST SP 800-63B-4 的最新要求:作为唯一凭证的密码至少 15 位、不得强制组合规则、不得定期强制修改;也说明了哈希的正确用途是校验下载的文件,而不是存储密码。指南还解释了为什么让密码无法被猜中的随机源,同样能让抽签结果公平。

让密码更好用的两个选项

「排除易混淆字符」会去掉 0、O、o、1、l、I 以及几个容易看错的符号,适合需要念给别人听或者照着纸条输入的密码;字符集因此从 94 个减少到 84 个,损失的强度多加一位就能补回来。「每类至少一个」则保证密码里至少有一个数字和一个符号,用来应付仍然强制要求这些的网站。

↵ 打开 · Esc 关闭