我现在正在处理一个金融项目。团队考虑使用MD5
来进行密码哈希
。
但是,今天很容易复制SHA1
或MD5
密码进行解密,即使它们是像My$uper$ecur3PAS$word+448
这样的复杂密码,你也可以使用在线页面进行解密。
小型和中型开发者(包括我)使用这些哈希方法
,但我认为这不足以提供对数据库的安全保障。(除了防火墙
、网络安全
、iptables
等)。
有人能给我一些关于如何解决这种漏洞的线索吗?
我现在正在处理一个金融项目。团队考虑使用MD5
来进行密码哈希
。
但是,今天很容易复制SHA1
或MD5
密码进行解密,即使它们是像My$uper$ecur3PAS$word+448
这样的复杂密码,你也可以使用在线页面进行解密。
小型和中型开发者(包括我)使用这些哈希方法
,但我认为这不足以提供对数据库的安全保障。(除了防火墙
、网络安全
、iptables
等)。
有人能给我一些关于如何解决这种漏洞的线索吗?
- Argon2是密码哈希竞赛的获胜者,并应视为新应用程序的首选;
- 如果需要FIPS认证或在许多平台上需要企业支持,则使用PBKDF2;
- 如果需要抵抗任何/所有硬件加速攻击但不提供支持,则使用scrypt。
- 如果没有PBKDF2或scrypt支持,则使用bcrypt。
对于大多数安全相关用例,MD5和SHA1都不安全,因为可以找到这些算法的碰撞。换句话说,给定一个输入及其哈希值,可以推导出具有相同哈希值的另一个输入。
SHA-2哈希算法组在许多安全用例中是安全的,但在密码哈希方面不是,因为与上述算法相比,它们非常快速。我们不希望密码哈希具有高性能,因为这会使攻击者尝试广泛范围的密码并在短时间内进行暴力攻击变得更容易。
上述4种算法因此在内存、计算能力和时间方面都是昂贵的。这些值通常被参数化,以便随着时间的推移,可以将它们调整为高值,以提高计算能力。因此,在使用这些算法时,选择正确的工作因素值非常重要。设置一个非常低的值可能会使目的失败。你的想法是正确的,MD5和SHA1都不应该用于密码哈希。我建议按照以下顺序使用:
如果您标记您所使用的语言/框架,我可以推荐特定的库或方法。
另外,请注意这里不应该使用“加密”一词。这些是密码哈希算法,而不是加密算法。