来给密码加点“盐”
共 3418字,需浏览 7分钟
·
2021-04-28 02:53
来给密码加点“盐”
背景
什么是“盐”
Salt
),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。为什么要加“盐”
彩虹表
彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加salt的KDF函数可以使这种攻击难以实现。彩虹表是马丁·赫尔曼早期提出的简单算法的应用。
—— 摘自《百度百科》
用例子来说明加“盐”的意义
原始对照
uid | username | password |
100 | Jeremy | 123456 |
101 | Melissa | 654321 |
进阶的设计
uid | username | password |
100 | Jeremy | E10ADC3949BA59ABBE56E057F20F883E |
101 | Melissa | C33367701511B4F6020EC61DED352059 |
注:上面password列存储的是经过MD5散列计算得出的32位大写的计算结果
MD5(123456) = E10ADC3949BA59ABBE56E057F20F883E
MD5(654321) = C33367701511B4F6020EC61DED352059
•密码破解的利器——彩虹表(rainbow table) https://www.jianshu.com/p/732d9d960411
加“盐”的设计
uid | username | salt | password |
100 | Jeremy | 9eb8fd | 5830FA2FC5AF55D71363A9956387EE63 |
101 | Melissa | 7fb9ek | C33367701511B4F6020EC61DED352059 |
对上表的解读:
•上表中的 salt
是一个随机的6位字符串•password
的算法变更为 MD5( 密码明文
+ salt
)•MD5("123456" + "9eb8fd") = 5830FA2FC5AF55D71363A9956387EE63•MD5("654321" + "7fb9ek") = D925CC53A219768B128AE52DD2C3AFFD
•1234569eb8fd 末尾加盐•9eb8fd123456 头部加盐•1239eb8fd456 任意位置插入盐•129eb4568fd 任意位置分散插入盐•1234df8be956 任意位置倒序加盐
MD5(MD5(password + salt) + salt)
。正因为如此,多种的可能性极大的增加了破译的难度。最后
欢迎关注我的公众号“须弥零一”,原创技术文章第一时间推送。