关于盐值的理解

Posted zplsec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于盐值的理解相关的知识,希望对你有一定的参考价值。

 

1 密码哈希
  哈希算法任何数量的数据转换为无法反转的固定长度的“指纹”。即使原始输入的数据变化很小,但是其输出的结果相差很大。

     Hash“hello”)= 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b98

     Hash“hallo”)= 8756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238ff3f9e94bc3

  使用哈希之后,如何校验用户的用户名密码呢?
    用户创建一个帐户时。输入的密码被散列并存储在数据库中。

    当用户登录时,对其输入的密码散列,对照其实际密码(从数据库检索)。

    如果哈希匹配,则授予用户访问权限。如果不是,则告诉用户他们输入了无效的登录凭

    常用的较为安全的密码哈希算法:SHA256SHA512,等。

2 破解密码

  因为哈希算法,相同的输入时,会有一个相同的输出值。由此就出现了几种破解方法:

2.1字典和蛮力攻击

  这是最简单的密码猜解方法,对每个值进行哈希,然后与数据库泄露出的密码哈希值进行对比,如果相同,代表着密码被猜解。

  字典攻击:使用的字典一般含单词,词组,常用密码以及其他可能用作密码的字符串。

  蛮力攻击: 尝试所有可能的字符组合。

  虽然如果密码长度够长、复杂度较高,会给破解带来一些难度,但是没有办法完全阻止。

2.2 查找表

    查找表的思路是字典中,首先预置好哈希值。然后将实际密码的哈希值与之搜索对比。这是一种非常有效的方法,可以非常快速地破解许多相同类型的哈希。

  2.3 反向查找表

  这种攻击特别有效,因为许多用户通常使用相同的密码。所以可以对某个字符进行哈希,然后去数据库中进行查询此哈希值映射的用户名。

  例如:

  在用户的哈希列表中搜索哈希(password1...:匹配[小明,小花,小白]

  在用户的哈希列表中搜索哈希(password2...:匹配[李明]

 

3 加盐值

  首先可以通过一个场景了解盐值的作用:

  1、小明要注册某个网站,注册时密码填写password=123456。

  2、为了保证密码的复杂度,系统可以使用盐值。将小明输入的password和salt一起加密后存储。即最终存储的密码为:PASSWORD=123456+salt

 

  由于密码是由用户设定的,在实际应用中,用户设置的密码复杂度可能不够高,同时不同的用户极有可能会使用相同的密码,那么这些用户对应的密文也会相同,这样,当存储用户密码的数据库泄露后,攻击者会很容易便能找到相同密码的用户,从而也降低了破解密码的难度,因此,在对用户密码进行加密时,需要考虑对密码进行掩饰,即使是相同的密码,也应该要保存为不同的密文,即使用户输入的是弱密码,也需要考虑进行增强,从而增加密码被攻破的难度,而使用带盐的加密hash值便能满足该需求。

  3.1  加密存储

  输入: 密码字符串passWord

  输出:盐值 salt 、密码密文passWordHash

  可以将salt放到passWord前面作为前缀或放到passWord后面作为后缀得到新的字符串PS,即,PS = passwordsalt的组合串;

   密码密文passWordHash = Hash加密函数(PS );

3.2 密码校验

  输入: 密码字符串passWord

  输出:密码校验是否成功

  处理:

   1)、取出当前用户密码加密时使用的盐值salt

  2)、得到本次输入的密码passWordCur和盐值salt的组合字符串PS

  3)、得出本次输入密码的密文passWordHashCur= Hash加密函数(PS );

  4)、比较passWordHashCur和用户最初设置的密码密文passWordHash是否一致,如果一致,则校验成功,否则校验失败。

 

3.4 盐值的产生与存储

  盐值应该使用安全随机数生成;不能写死在代码中或者配置文件中、数据库中。而且对盐值的长度也应该有一定的要求,较短的盐值,仍然有被破解的风险。

 

参考:https://www.cnblogs.com/birdsmaller/

以上是关于关于盐值的理解的主要内容,如果未能解决你的问题,请参考以下文章

项目一学习框架SpringSecurity08_00_权限控制@Component放到IOC容器里面带盐值的加密

关于PING命令TTL值的理解

密码学中的“盐值 Salt”

(转) 密码学中的“盐值 Salt”

关于字节对齐的理解

关于Hog运算的理解求教