如果你不知道的话,就找个开源的专业方案用。這裡面的东西非常非常多,稍有疏忽就会给攻击者可趁之机

最新提问 3月 15 分类:吐槽 | 用户: 匿名-7518

本文主旨: 数学, 编程, 密码学, 哈希函数

如果你不知道的话,就找个开源的专业方案用。

這裡面的东西非常非常多,稍有疏忽就会给攻击者可趁之机。

举例来说,比较两个hash值,一般人可能会用“==”逐字/字节比较;但对重要的系统,这是不允许的。

因为“==”相关代码在编译成机器码后,会包含“条件跳转”指令,这就会导致“比较”这个操作所消耗的时间因比较的内容而异——比如密码“123456”和“passw0rd”消耗的时钟周期数很可能是不一样的。

对一个有耐心、有准备的攻击者,哪怕其它任何方面固若金汤,这个“比较操作消耗时间的差异”也可以给他提供一些信息,使得他知道“既然这个人的密码在比较时消耗的时间是xx纳秒,那么它就不可能在这500万个里面”。

要隐藏这个时间差异,通常的做法是“用异或操作替代==”。

诸如此类的细节非常非常多;为了简化论述,我只能在主贴中忽略大量细节,尽量只把关键部分讲清楚。

总之,加密是一个相当专业的领域,千万不要看了一招两式就闭门造车。
发表于 3月 15 用户: 白纸无字Zonciu
如果只是单纯的多散列几次,那么做多少次跟做一次都是一样的,因为你整个系统所有用户密码都映射到了同一张彩虹表上,只要算一张表就可以破解所有密码。

加随机盐散列的作用是使得每一个用户密码分别对应不同的彩虹表,也就是说每破解一个用户密码都要重新生成一张彩虹表。

你所说的md5^10(text)在概念上称为慢hash,例子有bcrypt等,原理就是通过提高散列次数来提高生成彩虹表所需的算力资源。

不过这种做法如果是在服务端做计算的话用户一多服务器CPU就打满了,另一种做法是前端慢hash,详情自己搜索。
发表于 3月 15 用户: 匿名-8230
提取到盐的话,因为他现成的彩虹表之类没法用,所以必须重新针对这个盐计算彩虹表,这是需要较长时间的。

然后,如果你的盐是一个定值的话,那么虽然重新计算彩虹表消耗巨大(比如几天、几周甚至几个月);但一旦计算完毕,你系统里的几百万用户就…

所以还是值得的。

所以,加固定盐会给黑客造成点小麻烦,但还不够安全。

反之,如果加了随机盐,那么黑客就必须给每个用户计算彩虹表。

这个消耗就非常恐怖了,甚至可以说是“得不偿失”。

不过,如果用户用了简单密码,那就什么都救不了他了。

相关问题