Tee*_*kin 56 security passwords algorithm md5 password-hash
众所周知,单向加密是加密数据库中用户密码的便捷方式.这样,即使数据库管理员也无法知道用户的密码,但必须输入密码,使用相同的算法对其进行加密,然后将结果与数据库中的加密密码进行比较.这意味着确定密码的过程需要大量的猜测和大量的处理能力.
看到计算机变得越来越快,数学家们仍然在开发这些算法,我想知道考虑到现代计算能力和加密技术哪一个是最安全的.
我几乎已经使用MD5几年了,我想知道是否还有更多我应该做的事情.我应该考虑不同的算法吗?
另一个相关问题:字段通常需要多长时间才能使用这样的加密密码?我必须承认我几乎一无所知加密,但我假设MD5哈希(作为一个例子)可能更长,并且可能需要更多的处理能力才能破解.或者字段的长度根本不重要,只要加密密码首先适合它?
mol*_*olf 59
警告:由于这篇文章是在2010年编写的,因此GPU已被广泛部署到暴力密码哈希中.价格适中的GPU 每秒可运行100亿个 MD5.这意味着即使是一个完全随机的8个字符的字母数字密码(62个可能的字符)也可以在6小时内强制使用.SHA-1只稍微慢一点,需要一天时间.您的用户密码要弱得多,(即使使用腌制)也会以每秒数千个密码的速度下降.散列函数设计得很快.你不希望这个用于密码.使用scrypt,bcrypt或PBKDF-2.
MD5在1996年被发现较弱,不应再用于加密目的.SHA-1是常用的替代品,但也有类似的问题.在SHA-2家族的散列函数的当前替换 SHA-1的.SHA-2的成员分别称为SHA-224,SHA-256,SHA-384和SHA-512.
目前,几个哈希函数竞争成为SHA-3,这是下一个标准化的加密哈希算法.将在2012年选出一名获胜者.这些都不应该被使用!
对于密码哈希,您也可以考虑使用像bcrypt这样的东西.它被设计得足够慢以使大规模暴力攻击变得不可行.您可以自己调整慢度,以便在计算机变得更快时使速度变慢.
警告: bcrypt基于较旧的双向加密算法Blowfish,目前存在更好的替代方案.我不认为bcrypt的加密哈希属性是完全可以理解的.如果我错了,有人会纠正我; 我从来没有找到一个可靠的来源,从加密的角度讨论bcrypt的属性(除了它的缓慢).
可能有点令人放心的是,冲突风险对于密码散列的影响要小于对公钥加密或数字签名的影响.今天使用MD5 对于SSL来说是一个糟糕的想法,但对密码散列并不是同样灾难性的.但如果你有选择,那就选择一个更强大的选择.
使用良好的哈希函数不足以保护您的密码.您应该将密码与长且密码随机的盐一起散列.如果可能,您还应该帮助您的用户选择更强的密码或密码短语.更长久总是更好.
要增加密码强度,您应该使用更多种类的符号.如果密码中有8-10个字符,则很难破解.虽然延长它会使它更安全,但只有使用数字/字母/其他字符.
SHA1是另一种散列(单向加密)算法,它较慢,但具有较长的摘要.(编码的消息)(160位)其中MD5只有128位.
然后SHA2更安全,但使用的更少.