首页 文章

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

提问于
浏览
53

众所周知,单向加密是加密数据库中用户密码的便捷方式 . 这样,即使数据库管理员也无法知道用户的密码,但必须输入密码,使用相同的算法对其进行加密,然后将结果与数据库中的加密密码进行比较 . 这意味着确定密码的过程需要大量的猜测和大量的处理能力 .

看到计算机变得越来越快,数学家们仍然在开发这些算法,我想知道考虑到现代计算能力和加密技术哪一个是最安全的 .

我几乎已经使用MD5几年了,我想知道是否还有更多我应该做的事情 . 我应该考虑不同的算法吗?

另一个相关问题:字段通常需要多长时间才能使用这样的加密密码?我必须承认我几乎一无所知加密,但我假设MD5哈希(作为一个例子)可能更长,并且可能需要更多的处理能力才能破解 . 或者字段的长度根本不重要,只要加密密码首先适合它?

7 回答

  • 0

    警告:由于这篇文章是在2010年编写的,因此GPU已被广泛部署到暴力密码哈希中 . 价格适中的GPU每秒可运行100亿个MD5 . 这意味着即使是一个完全随机的8个字符的字母数字密码(62个可能的字符)也可以在6小时内强制使用 . SHA-1只稍微慢一点,需要一天时间 . 您的用户密码要弱得多,(即使使用腌制)也会以每秒数千个密码的速度下降 . 散列函数设计得很快 . 你不希望这个用于密码 . 使用scrypt,bcrypt或PBKDF-2 .

    MD5 在1996年被发现是弱者,而 MD5 用于加密目的 . SHA-1 是常用的替代品,但has similar problems . SHA-2 family哈希函数是SHA-1的当前replacement . SHA-2的成员分别称为SHA-224,SHA-256,SHA-384和SHA-512 .

    目前,有几个哈希函数are competing to become SHA-3,下一个标准化的加密哈希算法 . 将在2012年选出一名获胜者 . 这些都不应该被使用!

    For password hashing ,您也可以考虑使用bcrypt之类的东西 . 它被设计得足够慢以使大规模暴力攻击变得不可行 . 您可以自己调整慢度,以便在计算机变得更快时使速度变慢 .

    Warning: bcrypt基于较旧的双向加密算法Blowfish,目前存在更好的替代方案 . 我不认为bcrypt的加密哈希属性是完全可以理解的 . 如果我从加密的角度来看我的属性(除了它的缓慢),有人会纠正我 .

    可能有点令人放心的是,冲突风险对于密码散列的影响要小于对公钥加密或数字签名的影响 . 今天使用MD5对于SSL来说是一个terrible idea,但对密码散列并不是同样灾难性的 . 但如果你有选择,那就选择一个更强大的选择 .

    使用良好的哈希函数not enough来保护您的密码 . 您应该将密码和salts一起散列为长和cryptographically random . 如果可能,您还应该帮助您的用户选择更强的密码或密码短语 . 更长久总是更好 .

  • 57

    好问题! This page是一个很好的阅读 . 特别是,作者声称MD5不适合散列密码:

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

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

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

  • 1

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

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

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

  • 6

    腌制密码始终是一种额外的防御

    $salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
    $hashed = md5( $userPassword . $salt );
    
  • 3

    看到计算机变得越来越快,数学家们仍在开发这些算法

    RSA加密是安全的,因为它依赖于非常难以分解的大数字 . 最终,计算机将足够快地在合理的时间内计算数字 . 为了保持领先,你使用更大的数字 .

    但是,对于大多数网站而言,散列密码的目的是使有权访问数据库的人读取密码,而不是提供安全性 . 为此,MD5很好1 .

    这里的含义是,如果恶意用户获得对整个数据库的访问权限,则他们不需要密码 . (前门上的锁不会阻止我进入窗户 . )


    1仅仅因为MD5是"broken"并不意味着你可以随时反转它 .

  • 10

    除了是加密安全的单向函数之外,用于密码保护的良好散列函数应该难以暴力 - 即设计缓慢 . scrypt是该地区最好的之一 . 从主页:

    我们估计,在现代(2009)硬件上,如果花费5秒计算派生密钥,对scrypt的硬件暴力攻击的成本大约是针对bcrypt的类似攻击的成本的4000倍(找到相同的密码),比对PBKDF2的类似攻击大20000倍 .

    也就是说,从常用的哈希函数中,对SHA系列中的任何事物进行几千次迭代,对于非关键密码来说是非常合理的保护 .

    此外,总是添加一个盐,使得无法分享努力,一次强制许多哈希 .

  • 3

    NIST目前正在举行竞选,以选择新的哈希算法,就像选择AES加密算法一样 . 因此,这个问题的答案在几年内可能会有所不同 .

    您可以查看提交内容并自行研究,看看是否有您想要使用的内容 .

相关问题