哈希游戏- 哈希游戏平台- 哈希游戏官方网站
本文针对数据库存储安全性现状与哈希算法进行了探讨和研究,明确了MD5的碰撞性在算法上与在应用上的实质性区别,并指出了传统哈希算法与加盐哈希算法在某些应用场景下的误区,总结了安全的加盐哈希算法应用,并利用Python编程还原哈希过程且对其进行验证。近一步,在上述安全加盐哈希算法的基础上改进了哈希函数,利用PBKDF2算法进行迭代计算,使得哈希过程变得非常缓慢,同样利用Python编程还原哈希过程且进行对其验证,并说明了该机制的实施可以使得利用计算机群进行字典或者暴力猜解的速度也慢到没有实用价值。
以上二者究其根本并无太大差异,并且通过安全的随机盐设置可以达到抵御大部分黑客使用彩虹表猜测及通过个人计算机进行暴力破解的威胁。但近一步假设,攻击者利用成本巨大的超级计算机群进行暴力猜解的话,那该算法被破解也将并非难事。因此,可以再如上算法的基础上近一步改进,减缓哈希的计算速度,再次提高破解成本,如此可以利用BCrypt或 PBKDF2算法。该类算法的特点均为采用一种称为key扩展(key stretching)的技术。
随着计算机和网络的迅速发展,数据库应用越来越广泛。信息加密及用户认证机制对于用户数据的保护更显得至关重要。国外的学者Piyush Gupta(2014)从密钥、程序块、循环等方面对比了SHA与MD5算法[1]。国内研究人员对传统用户口令认证加密算法进行了研究。其中,刘洪民(2014.5)在“MD5算法在用户口令认证中的应用”中提出了通过加密过程变换、局部修改方法以保证MD5算法在应用中的安全性[2]。赵光亮(2015年)在“基于MD5算法安全性研究发展及分析”中提出了通过加盐、多次加密等方法提高传统MD5算法安全性[3]。
可以看出使用PBKDF2哈希算法并将迭代次数设置为10000次后,计算13条密码的时间已经增加至将近2s,其相较普通的SHA1加盐哈希算法,计算时间得到大幅增加,这就意味着黑客在进行暴力破解时所花费的时间成本将会大到难以测量。为了直观的对比两种哈希算法的哈希时间,本文利用两种算法分别哈希一定数量的密码值。如表4所示,分别测试500、1000、5000、10000、20000个密码数据并记录所需的哈希时间,单位秒。
这里盐的生成,我们需要使用密码学上可靠安全的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator,CSPRNG)来生成。本文利用Python编程语言分别编写了单纯sha1哈希算法与通过os.urandom模块进行加盐sha1哈希算法的两个应用,并对存储密码的同一文本进行哈希,得到结果如图2所示。可以从单纯进行sha1哈希的密文输出中看出,对同一字符串进行哈希得到的结果相同,那么黑客就可以通过排列查到一个用户数据库中重复率最高的密文,而这个密文对应的密码就很有可以是用户设置的弱密码,从而通过查询彩虹表或反向查询较容易地得出这个密码的原文。
【摘 要】随着信息技术的快速发展与渗透,数据库应用越来越广泛.但伴随着近期CSDN、如家、汉庭甚至小米论坛所涉及的数据泄露事件,也表明了数据库存储的安全性问题日显突出.论文首先介绍了数据库存储安全的现状,区分了MD5的碰撞性在算法与在应用上的根本区别.然后,指出了传统MD5哈希算法与加盐哈希算法在某些应用场景下的误区,总结了安全的加盐哈希算法应用.最后,通过PBKDF2迭代算法对加盐哈希算法应用流程进行优化,利用Python编程还原哈希过程,并通过测试验证了该种慢速哈希算法的应用,可以使利用高性能硬件进行字典或者暴力破解的速度慢到没有实用价值.
根据上述结果大致推算,利用PBKDF2哈希算法,假设黑客在破解1000万个密码所花费的时间大约增加到了至少约25.3天,这可以以令黑客望而却步,也在极大程度上增加了黑客利用暴力破解或字典攻击所花费的时间成本。与此同时,每个密码仍使用不足1秒的时间进行加密,所以不会对用户体验产生什么影响。但由于用户密码存储的数据哈希主要用于Web应用中使用Key扩展hash函数,考虑到有大量的计算资源用来处理用户认证请求。在使用Key扩展的哈希函数,迭代次数的设置还是应该结合自己服务器的计算能力和预计每秒需要处理的认证请求次数进行参考。
下面就是算法的执行过程,对于一个明文,算法将其与随机串连接后送入基础加密算法,得到一个加密串,再将加密结果与随机串连接,送入基础加密算法……如此迭代执行至达到预设的迭代次数为止。其中,迭代次数C决定了伪随机函数生成一个主密钥所需的迭代次数。这个值决定了输入密码的密钥生成时间,在用户可以接受这个时间长度下,迭代次数设置的越大越安全。对于普通用户而言,迭代次数建议至少为1000次。而对于一些极其重要的密码或者对于一些计算能力强大的系统,迭代次数设置为10,000,000次比较合适。其中,该算法中输入、参数、输出的对应值如表1-3所示。