Spring aware接口的作用是什么
228
2022-09-28
Using Improved d-HMAC for Password Storage 使用改进的d-HMAC进行密码存储(using btree 的作用)
翻译自: Computer and Information Science; Vol. 10, No. 3; 2017
ISSN 1913-8989 E-ISSN 1913-8997
Published by Canadian Center of Science and Education
密码是用于认证授权用户的最常见访问控制工具。密码的基本定义是一系列只有用户才能记住和知道的秘密字符,用于登录任何类型的信息系统(Forouzan,2008)。
密码的安全性意味着它必须能够抵抗字典攻击和暴力攻击,并且不能被攻击者猜测。为了对各种攻击具有如此强大的密码抵抗力(Hitachi,2016):1)密码必须由具有不同组合的大字母组成,如小写字母、大写字母、数字和特殊字符;2)密码长度应尽可能长,并且3)密码的复杂度必须非常高。
大多数人认为拥有一个强大的、不泄露的、不可猜测的密码可以保护他们,但他们错了!!因为许多人都知道,黑客能够用密码窃取数百万个帐户的攻击不是密码强度的结果,而是这些密码的存储方式(Hitachi,2016)。密码存储是整个密码访问控制系统的重要组成部分。用于此存储的技术必须设计为即使密码存储系统已受损,攻击者也不可能得出密码结论。
密码存储的历史
refer: SHA256或其它算法哈希后存储 c = Hash (p)
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。假如你设置的密码是123456,使用MD5后那数据库中存储的就是4QrcOUm6Wau+VuBX8g+IPg==,当用户登陆的时候,会把用户输入的密码执行MD5后再和数据库就行对比,判断用户身份是否合法,这种加密算法称为散列(哈希)。但是这种方式使用同一个密码进行哈希得到的密文始终是一样的,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个密文组合,然后与数据库中的摘要进行比对即可获得对应的密码,这个密文组合也被称为彩虹表(rainbow table)。
加盐后哈希存储 c = Hash (p || salt)
通过在密码任意固定位置插入特定的字符串,使其不再是人们常用的组合,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。用户密码+salt之后,进行哈希散列,再保存到数据库,数据库同时存储MD5值和salt盐值,验证正确性时使用salt进行MD5即可,这样可以有效应对彩虹表破解法。使用加盐,需要注意一下几点:
不能在代码中写死盐,且盐需要有一定的长度(盐写死太简单的话,可能被注册几个账号反推出来)每一个密码都有独立的盐,并且盐要长一点,比如超过 20 位。(盐太短,加上原始密码太短,容易破解)最好是随机的值,并且是全球唯一的,意味着全球不可能有现成的彩虹表给你用。
使用慢加密算法BCrypt, PBKDF2,SCrypt存储 c = Hash (“work factor”,p || salt) 使用 d-HMAC存储 d-HMACK(m) = h(K+ ⊕ d-opad, h(K+ ⊕ d-ipad, m))
d-HMAC算法图解
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~