Cryptography 使用md5或sha1进行的密码哈希仍然有效吗?

Cryptography 使用md5或sha1进行的密码哈希仍然有效吗?,cryptography,md5,sha1,password-hash,cryptographic-hash-function,Cryptography,Md5,Sha1,Password Hash,Cryptographic Hash Function,刚才我在一个金融项目工作。这里,团队正在考虑使用MD5进行密码散列。 但是,今天很容易复制要解密的SHA1或MD5密码,如果它们是复杂密码,则包括: 我的$uper$ecur3PAS$word+448,你可以使用一个在线页面来解密它,它就在那里。 中小型开发人员(包括我)使用那些散列方法,但我认为这还不足以提供数据库的安全性。 (不包括防火墙,网络安全,iptables等) 有人能告诉我解决此漏洞的更好方法是什么吗?您的想法是正确的,MD5和SHA1不应用于密码哈希。按照优先顺序,我建议如下:

刚才我在一个金融项目工作。这里,团队正在考虑使用
MD5
进行
密码散列
。 但是,今天很容易复制要解密的
SHA1
MD5
密码,如果它们是复杂密码,则包括:
我的$uper$ecur3PAS$word+448
,你可以使用一个在线页面来解密它,它就在那里。 中小型开发人员(包括我)使用那些
散列方法
,但我认为这还不足以提供数据库的安全性。 (不包括
防火墙
网络安全
iptables
等)


有人能告诉我解决此漏洞的更好方法是什么吗?

您的想法是正确的,MD5和SHA1不应用于密码哈希。按照优先顺序,我建议如下:

  • argon2
  • bcrypt
  • 刺耳
  • PBKDF2
如果您用您正在使用的语言/框架标记您的问题,我可以推荐特定的库或方法

还要注意的是,这里使用的不是加密这个词。这些是密码哈希算法,而不是加密算法。

根据,建议:

  • Argon2是密码哈希竞赛的获胜者,应被视为新应用程序的首选
  • PBKDF2,当需要在多个平台上获得FIPS认证或企业支持时
  • scrypt,其中抵抗任何/所有硬件加速攻击是必要的,但支持不是
  • bcrypt,其中PBKDF2或scrypt支持不可用
对于大多数与安全相关的用例,MD5和SHA1都不安全,因为可能会发现与这些算法的冲突。换句话说,给定一个输入及其散列值,就可以导出具有相同散列值的另一个输入

SHA-2组散列算法在许多安全用例中都是安全的,但在密码散列中却不安全,因为与上述算法相比,它们的速度非常快。性能是我们不希望密码散列的东西,因为这会使攻击者更容易通过在短时间内尝试各种密码来执行暴力攻击

因此,上述4种算法在内存、计算能力和时间方面都很昂贵。这些值通常是参数化的,以便在新技术随着时间的推移提高计算能力时,可以将它们调整到较高的值。因此,在使用这些算法时,正确选择功因数值非常重要。设置一个非常低的值可能会破坏目的

除此之外,还应使用盐

同样来自同一OWASP源:

  • 在创建每个存储凭证时生成唯一的salt(不仅仅是针对每个用户或系统范围)

  • 使用加密的强随机数据

  • 在存储允许的情况下,使用32字节或64字节的salt(实际大小取决于保护功能)
  • 方案安全性不依赖于隐藏、拆分或以其他方式隐藏salt
盐有两个用途:

  • 防止受保护窗体显示两个相同的凭据和
  • 在不依赖凭证复杂度的情况下,增加为保护函数提供的熵
第二个目标是使对单个凭证的预先计算的查找攻击和对总体的基于时间的攻击变得难以对付


嗯,这是一个一般性的问题。基本上,node/Js、python、c#和php对大多数堆栈溢出用户来说都是受欢迎和有用的。您的偏好顺序是您的偏好还是安全专家的偏好(或者两者兼而有之)?我想说两者,但公平地说,意见各不相同。一般认为(argon2,bcrypt,scrypt)>(PBKDF2)。但在这一主要群体中,意见往往各不相同。我认为,实际上,argon2、bcrypt或scrypt中的任何一个都很好。在散列密码时,冲突实际上不是问题,而是速度,正如您所提到的。更清楚地说,用GPU计算每秒200千兆MD5是可能的。