gpt4 book ai didi

cryptography - 多次加密(MD5)可以提高安全性?

转载 作者:行者123 更新时间:2023-12-04 05:23:04 34 4
gpt4 key购买 nike

我看到有人用 MD5 多次加密用户密码以提高安全性。我不确定这是否有效,但看起来不太好。那么,有意义吗?

最佳答案

让我们假设您使用的哈希函数将是一个完美的单向函数。然后你可以像 "random oracle" 一样查看它的输出,其输出值在有限的值范围内(MD5 为 2^128)。

现在如果多次应用哈希会发生什么?输出仍将保持在相同范围内 (2^128)。就像你在说“猜猜我的随机数!”二十次,每次都在想一个新的数字——这并不会使猜测变得更难或更容易。没有比随机更“随机”的了。这不是一个完美的类比,但我认为它有助于说明问题。

考虑到暴力破解密码,您的方案根本不会增加任何安全性。更糟糕的是,您唯一可以“完成”的事情就是通过引入一些可能来利用散列函数的重复应用来削弱安全性。这不太可能,但至少可以保证你肯定不会赢得任何东西。

那么为什么这种方法仍然没有完全消失呢?这是因为其他人认为有数千次迭代而不是只有 20 次。为什么这是一件好事,减慢算法速度?这是因为大多数攻击者会尝试使用字典(或 rainbow table 使用常用密码获得访问权限,希望您的一个用户疏忽大意使用其中之一(我很内疚,至少 Ubuntu 在安装时告诉我) ). 但另一方面,要求您的用户记住假设 30 个随机字符是不人道的。

这就是为什么我们需要在易于内存的密码之间进行某种形式的权衡,但同时又要让攻击者尽可能难以猜测它们。常见的做法有两种,salts并通过应用某些函数的大量迭代而不是单次迭代来减慢过程。 PKCS#5是一个很好的例子。

在您的情况下,应用 MD5 20000 而不是 20 次会显着降低使用字典的攻击者的速度,因为他们的每个输入密码都必须经过散列 20000 次的普通程序才能仍然用作攻击。请注意,此过程不会影响如上所示的暴力破解。

但是为什么使用盐更好呢?因为即使您应用散列 20000 次,机智的攻击者也可以预先计算大型密码数据库,对每个密码进行 20000 次散列,从而有效地生成专门针对您的应用程序的自定义彩虹表。完成此操作后,他们可以很容易地攻击您的应用程序或使用您的方案的任何其他应用程序。这就是为什么您还需要为每个密码生成高成本,以使此类彩虹表无法使用。

如果您想真正安全,请使用 PKCS#5 中所示的 PBKDF2 之类的东西。

关于cryptography - 多次加密(MD5)可以提高安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869129/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com