UsingImprovedd-HMACforPasswordStorage使用改进的d-HMAC进行密码存储
翻译自: 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: https://blog.csdn.net/dreaming9420/article/details/123622811
通过在密码任意固定位置插入特定的字符串,使其不再是人们常用的组合,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。用户密码+salt之后,进行哈希散列,再保存到数据库,数据库同时存储MD5值和salt盐值,验证正确性时使用salt进行MD5即可,这样可以有效应对彩虹表破解法。使用加盐,需要注意一下几点:
不能在代码中写死盐,且盐需要有一定的长度(盐写死太简单的话,可能被注册几个账号反推出来)使用慢加密算法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算法图解
每一个密码都有独立的盐,并且盐要长一点,比如超过 20 位。(盐太短,加上原始密码太短,容易破解)
最好是随机的值,并且是全球唯一的,意味着全球不可能有现成的彩虹表给你用。
版权声明
本文仅代表作者观点,不代表博信信息网立场。