Day21-不能说的秘密(三)

前言

为了让使用者的密码更安全,昨天介绍了所谓的「加盐杂凑」,虽然加盐杂凑已经足够应付现今 CPU 的计算速度,就算要破解出原密码也要花很久的时间,但以後的 CPU 还会越来越快,说不定再过不了多少年就又快个十倍,因此今天要介绍其他更不容易被破解的演算法,让你的 API Server 用了他之後可以很久很久都不必再担心密码安全性的问题

SHA1 对 CPU 来说太简单了

追根究底,单纯的 SHA1、SHA256 这类的杂凑之所以不管用了,是因为这些杂凑演算法对 CPU 来说都太简单了,现在的电脑霹哩啪拉一下子就可以算个几万次

而且这些演算法在设计之时本来就有考虑到要让 CPU 快速运算,因为当时的电脑根本不够快,所以演算法本身当然是跑得越快越好,这样一来在以前运算能力还不够强的时代跑起来才不致於太慢

但时代已经不同了,以前对 CPU 来说还算有点难度的任务,现在简直是轻而易举,所以现在的 CPU 才可以用超快的速度去建表,进而破解出原本的密码

慢杂凑演算法

为了解决上述的问题,於是就有人发明了像 Bcrypt 这类的慢杂凑演算法。虽然 Bcrypt 的名字里面有个 crypt,但他并不是加密法,而是跟 SHA1 一样是杂凑演算法,唯一的差别是他计算很慢

计算慢有什麽好处呢?前面有提到 SHA1 的杂凑值之所以可以被反查出来,就是因为现今的电脑计算太快了,就连建个表反查也不需要太多时间。而 Bcrypt 则是可以透过设定叠代次数让计算速度变慢,以叠代五次的 Bcrypt 来说,他的计算速度大概比 SHA1 慢 1000 倍。也就是说,假如你原本用 SHA1 计算三天就能反查出所有使用者的密码,现在却要花大概八年的时间才可以。下图就是使用者的密码经过 Bcrypt 的结果,hash 出来总共有 60 个字元,很长很长

bc

当使用者要登入、注册时也是跟先前一样的做法,就把密码直接丢进去 Bcrypt 杂凑,虽然杂凑的过程会比 SHA1 慢一千倍,但整体而言单次杂凑还是非常快的,所以并不会有什麽问题

而且用 Bcrypt 还有另一个好处,因为以後电脑的运算速度还会更快,这时只要把叠代次数设定得更高就好了,叠代次数每增加 1 需要的时间就变两倍,所以只要叠代次数一直加上去,就非常非常难被破解

小结

以目前电脑的运算能力来说,身为网站的开发人员,至少要做到昨天提到的 加盐杂凑 才能保证使用者的密码不会轻易被破解,但因为运算速度只会越来越快,所以可以的话建议还是用今天讲的 Bcrypt 慢杂凑,才不会让使用者的密码暴露在风险之中

身为使用者,因为我们无法确定所有网站的後端都是用足够安全的方式保存密码,毕竟就连 Facebook 这麽大的公司都曾经存过明码。所以唯一能做的就是把密码设得复杂一点、不同网站使用不同的密码,并且用 KeePassBitwarden 这类的密码管理软件,才不会被那些烂网站雷到~


<<:  Rust-并行&并发(二)

>>:  TailwindCSS 从零开始 - 价目表卡片实战 - 基础卡片样式

[DAY-02] 没有规则 就是唯一规则

有句话是这样说的 好的管理就是不用管理 如果大家都自动自发的 那鼔能量会很令人敬佩 唷唷唷~~~ ...

Day18:今天我们来谈一下如何使用ShellPhish工具进行社交工程演练

Social engineering可以采取多种形式,包括网络钓鱼电子邮件,假冒网站 及冒名顶替。 ...

企划实现(12)

FB登入 第10步:开启 /app/res/values/strings.xml 档案。 FB会自动...

Day 16 编辑器 — VSCode

俗话说工欲善其事,必先利其器。当我们在进行程序编译时,总会选择自己最舒服的程序编辑器,今天来介绍一下...

[Day17] 团队管理:Check-in & Check-out

Check-in Check-in让成员有不同面向了解彼此的机会 文化的塑造与累积是每一天都在进行的...