我有一个数据库,我正在从存储纯文本密码转换为用密码哈希替换它们。是否建议采取额外的步骤使用SQL Server列加密来防止攻击者提取哈希值?
我试图防止的攻击形式是攻击者使用一个众所周知的密码列表与我的数据库用户表的副本相结合,只是通过散列众所周知的密码列表并将结果与存储的哈希。他们可能获得一定比例的成功,并且在用户之间重复使用密码的正常级别,他们将能够使用用户电子邮件地址/登录密码破解来尝试身份盗用。
最初我考虑过密码散列是足够的,但是想知道它的最佳做法是加密哈希列以防止表的物理副本(通过任何不正常的方法)能够用于这种类型的攻击。
我的问题是这是否是最佳或常见的做法"在DBA中。这可以应用于已知数据字段的任何哈希存储,但在这种情况下,它保存在SQL Server数据库中。
答案 0 :(得分:2)
使用随机盐在HMAC上迭代大约100毫秒的持续时间(盐需要与哈希一起保存)。使用password_hash,PBKDF2,Bcrypt等功能。重点是让攻击者花费大量时间通过暴力破解密码。
请参阅OWASP(开放式Web应用程序安全项目)Password Storage Cheat Sheet 请参阅Security Stackexchange上的How to securely hash passwords, The Theory。
即使使用含有随机盐的HMAC也只是散列是不够的。在我的笔记本电脑上,我可以通过SHA-512运行一个20字节的密码,并在1us以下进行比较,只需一个SHA-512哈希,我就可以每秒尝试1,000,000个密码。
有关详细信息,请参阅:
密码列表SecLists。
信息安全password-cracking-tools
Arstechnica How I became a password cracker。