什么是目前最安全的单向加密算法?

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个密码.比这还要长,我打算自己编造密码,我不知道那些有什么熵. (6认同)
  • @molf我已经编辑了一个警告,关于MD5,SHA-1等可以使用GPU进行暴力强制的速度,以及这意味着密码存储不再可接受.请随时更改/还原/等. (3认同)

Mat*_*nit 10

好问题! 这个页面读起来不错.特别是,作者声称MD5不适合散列密码:

问题是MD5很快.它的现代竞争对手也是如此,例如SHA1和SHA256.速度是现代安全散列的设计目标,因为散列几乎是每个密码系统的构建块,并且通常在每个数据包或每个消息的基础上执行需求.

速度正是您在密码散列函数中不想要的.

然后文章继续解释一些替代方案,并推荐Bcrypt作为"正确的选择"(他的话,不是我的).

免责声明:我根本没有尝试过Bcrypt.考虑这是一个友好的建议,但不能用我自己的技术经验来支持.


Ton*_*ion 6

要增加密码强度,您应该使用更多种类的符号.如果密码中有8-10个字符,则很难破解.虽然延长它会使它更安全,但只有使用数字/字母/其他字符.

SHA1是另一种散列(单向加密)算法,它较慢,但具有较长的摘要.(编码的消息)(160位)其中MD5只有128位.

然后SHA2更安全,但使用的更少.

  • 我会注意到,在防御蛮力攻击方面,速度较慢实际上是一个*好处*. (7认同)