salt盐值
什么是.salt盐值.
单向HASH算法是一个广泛应用的安全算法,被广泛用在登录验证、数字签名等场景。通过单向HASH算法,用户的密码能够在客户端被加密后存储到服务器端数据库中,有效的保护了用户的密码不被泄露。但是,采用单向HASH算法加密的密码,在服务器端的数据库中,同样很容易攻破,因为HASH算法是公开的且存在字典攻击等手段。因此为了加强密码的安全性,设计了.salt盐值.的概念。
.salt盐值.是如何保障密码安全
在数据库中保存密码时,常常将用户的密码和一个随机的字符串(即盐值)结合起来,加入HASH算法中。这个过程称为"加盐"。通过这种方式,即使攻击者获得了用户的密码,因为密码不同的用户,其加盐结果也不同,因此通过HASH算法生成的结果也不同,所以攻击者也无法轻易的破解出用户的原始密码。
盐值的内容需要足够复杂和随机,可以使用操作系统提供的随机数生成函数生成随机的盐值,通常采用非对称加密来对盐值进行加密以提高加密的复杂度,又防止盐值本身被攻击者获取利用。
.salt盐值.在密码验证和提高强度中的应用
在验证密码是否正确的时候,也需要使用到盐值。当用户输入密码后,使用相同的盐值、相同的HASH算法,得到加密后的密码,与数据库中保存的密文进行比较即可。
随着计算能力的提升,纯HASH算法的抵御力越来越弱,攻击者使用的字典也能在短时间内枚举出更多的密码。因此在设计密码策略时,可以考虑加强密码强度的方式,并使用盐值来加强密码的强度。
盐值只有在每个实例下都是不同的,这种差异使得可以有效地抵御许多种变量密码攻击,即攻击者将一些公共字符附加在密码上,以尝试许多常用的单词和数字组合。
盐值和密码存储
盐值和密码俩信息都需要在存储时候加密。数据库中经常盐值和密文分开存储,因此就意味着数据库中存储了两条记录,分别记录盐值和密码密文。
盐值和密码都要经过防盗链的秘密算法加密存储在数据库中,保证数据存储过程中数据的加密性。因此一般进行密码比对时需要先将提交的明文密码与用户数据表中找到的密文进行逐一比对。
盐值可能存在的缺陷
盐值通过加入随机字符串使得攻击者难以获得原始密码。但是,如果攻击者已经获取了口令库,可以事先计算出常见的盐值对应的破译表,从而得到加盐之后的原始密码。
因此,强的随机性是.salt盐值.设计的最大优势。如果salt的值不够复杂,意味着它可以自行被破解如不直接设为字符串比较,而设置一个算法,能自动生成并滋生足够的salt值,则是可行的安全设计。
结论
在保存密码时,使用盐值加密可以加强密码的安全性。种子值的随机性需要足够高,作为一种单向加密结构能够在一定程度上预装备非违法的担保。随机盐通常是更为安全的。因此安全的密码存储应该是这样的:随机生成一个盐值,用它对密码进行加密,并将盐和加盐后的密码储存在数据库中。这在双重身份验证等第一线安全防御措施中,非常的重要。