安全构造密码的两种方法
这是两种我本人常用的方法:
种子法
所谓种子法,就是将作为“种子”的字符串进行散列运算的结果当作密码的办法。
散列运算:又称哈希(HASH)运算,让任意长度的字符通过散列函数运算之后输出固定长度的值,因难以逆向找出规律而常被称作“指纹”或“摘要”,常用于校验文件完整性。由于是函数所以具备相同明文对应相同散列值的特性,且极小概率会发生不同明文对应同样散列值的“碰撞”现象。常见算法有MD5
、SHA-256
等等。还没听懂就自己搜吧
对于需要密码的东西,比如一个账号,你需要为此账号构建一个种子。例如一个使用邮箱114514@gmail.com
注册的用户名为senpai
的Github
账号,我便可以构造种子为:
1 | 114514gmailsenpaigithub |
然后对其进行散列运算(以Windows
操作系统和MD5
算法为例):
先搞一个文本文档比如叫hash.txt
(爱叫什么叫什么,散列值只和文件内容有关)扔到用户文件夹即C:\User\yourUsername
底下(为什么是用户文件夹?当然是因为我这种懒人不想在命令行里多打一串路径,顺带一提,去掉文件扩展名.txt
还能再省四下)。
然后使用编辑工具(如记事本 notepad.exe
)将种子写入文本文档,请你留意记事本右下角标注的当前使用编码,通常为UTF-8
,字符串的编码不同会使求得的散列值不同,如果你要在其他系统、其他环境、其他工具之类的地方登录这个账号则仍需确保使用UTF-8
。
接下来去开始菜单里找到附件/命令提示符
打开或者按下Windows徽标建+R
后输入cmd
并回车,在接下来出现的命令行窗口中使用certutil
命令,规则为:
1 | certutil -hashfile <\文件路径\文件名> <散列算法> |
用md5
算法算当前目录(用户目录)下的hash.txt
的话,即为:
1 | certutil -hashfile hash.txt MD5 |
回车之后便会计算出文本文档中字符串的散列值,114514gmailsenpaigithub
的结果为e8d398d47992f73a87524bd2ad3ced56
。
如果你想让它变得更复杂(其实没多大必要,因为这个长度已经够长了),可以考虑用certutil -encode
算一下base64
,结果会变成这个样子6NOY1HmS9zqHUkvSrTztVg==
,对就是浏览器帮你生成的所谓高强度密码的那个样子。(请注意,base64
不属于散列算法,结果可逆)
「看起来很麻烦。」所以你应当这么做:这个文本文档你就留在那里,每会要输入密码就把种子输入进去,最好再在桌面放个快捷方式。命令行这边呢?直接把命令存到文本文档里并把扩展名改称.bat
使之成为批处理文件,通俗点讲就是只要点开就能运行预先写好的命令。这样一来,步骤就只有两步了。
更简单便捷的方法当然是使用网上各种在线计算散列值的工具,平常校验文件完整性时当然可以用,不过鉴于是要构造密码,还是脱机最好。
搞这一套的好处在哪呢? 使用这种方法,能在不怎么需要单独记住密码的情况下搞出相当复杂的密码(而且种子可以弄得非常短、非常好记,并不影响结果的长度),如果你选用了其他散列算法,结果还能更长。敌人只要不知道你通过何种规律(你完全可以啥规律也没有)构造种子、不知道你使用了哪些散列、加密之类的算法,就无法重现你的密码,且不能寄希望于暴力破解。
缺点: 只能在正在使用电脑的时候/手边有电脑的时候使用,且比单纯的输入至少需要多花一个复制粘贴的步骤。
好长一串句子法
这种方法适用于所有需要输入密码的情况,较前者增加了像「Veracrypt加密操作系统的Bootloader]、「BIOS开机硬盘锁」之类没法求散列的场景。
前文提到的那种base64
字符串的格式,即有大小写字母又有数字还有符号,这便是「安全专家」们一直以来教导人们所做的,它的主要作用有两个:
- 增加使用字典进行暴力破解的难度
- 让你记不住,卖给你密码管理器赚大钱
字典可以理解为包含各种常用与密码的字符串的合集,敌人会利用字典加速密码的破解,因此使用数字和符号代替原本的字母会显著提升使用字典进行破解的难度,同时会极大程度伤害你的脑细胞存量并使你每次输入密码时感到痛苦不堪,因此这种密码通常不会太长。实际上,好几个(起码得四五个吧)英文单词组成的长密码能在拥有远超奇形怪状式密码的前提下大大降低你耗费的记忆力。
这种方法要考虑两个方向,一种是有规律的单词但十分离谱的长度(即长句子),在有长度限制的地方则应当考虑偏向随机拼凑的少量单词,这两种方向均有利于将被暴力破解的风险降到极低,极低就是指那种有生之年根本破不出来所以还不如把你抓起来施加大记忆恢复术来的快的那种极低。通常来说六七个单词就足够,但如果不巧你这个密码保护的是个大鱼,是那种有几率招致专政机关亲手降下天遣的情况,没准还应该考虑再加点。
给两个示例:
titokhrushchevbrezhnevhuadeng
(铁托赫鲁晓夫勃列日涅夫华邓)downwiththemordernrevisionism
(打倒现代修正主义)
这就是好记到能一口气打出来但是没什么人会寄希望于暴力破解的那种密码。
对了,既然敌人放弃暴力破解你的密码了,那真给你来大记忆恢复术怎么办?答案很简单,只要你根本没记住任何东西就行。具体如何操作,且听下回分解。
参考文献