在创建密码时,我们应该如何关注暴力攻击



暴力攻击在现实世界中有效吗?我使用过的几乎每一项需要密码的服务都有某种类型的保护措施,可以防止尝试多个密码。此外,这如何转化为数据加密?

暴力,也称为穷举密钥搜索-是一种可以在多个攻击向量上工作的方法

您所描述的是通过服务进行身份验证来攻击服务。这里的服务充当守门员,可以通过限制你的尝试等来防止攻击。

然而,这只是系统的一个攻击向量:

如果攻击者通过其他方式访问用户数据库,该怎么办?他现在能利用这些知识访问服务吗?

如果该服务的所有者愚蠢到可以存储明文密码。。。哎哟但我们假设密码的存储方式至少使用了一个单向函数,比如散列函数

让我们看看发生了什么变化。。。

我们可以在密码猜测方面进行尽可能多的尝试,只要我们可用的计算资源允许。。。

这里唯一剩下的看门人是猜测密码的复杂性

如果我们只需要检查value==hash(密码),我们可以很容易地看到,除了暴力之外,还有其他有效的攻击方法。。。

但你特别要求使用暴力,所以让我们假设我们的密码是咸的。。。

value==hash(密码,salt)。。。再也没有彩虹桌了。。。但这仍然很糟糕,因为我们可以非常快速地计算并并行化。。。剩下的限制因素是硬件。。。如果我们投入一些(租用的?…被黑客入侵的?)具有足够核心/GPU的数字运算系统。。。我们用暴力破解密码的速度有多快。。。让我们在这里做一个小数学。。。

假设我们有一个系统来完成我们的工作。。。每秒大约进行1000000次密码猜测。。。假设我们的密码的熵约为42位。。。大约是一个9个字母的小写密码。。。需要多长时间?

大约51天,如果攻击者知道允许的字符池(在我们的情况下是较低的alpha),则可以保证肯定的猜测

你可以假设在50%的时间后,正确猜测的概率是50%,所以……不会很长。。。

但情况越来越糟。。。我们假设一台机器。。。如果我们多买/多租/多砍,规模会扩大吗?当然。。。让我们假设10000台机器。。。

我们可以简单地除以10k。。。我们现在只剩下7分21秒。。。

从云提供商那里租用1万台机器10分钟要花多少钱。。。作为一个例子(我们没有指定哈希函数的复杂性,所以这个例子可能不在每秒猜测的范围内,但你会看到它的进展)。。。一个a1.xlarge的amazonec2点播实例大约每小时花费10美分。。。我们需要它。。。10分钟。。。所以除以6。。。我们想要1万个节点。。。约170美元。。。让我们四舍五入。。。200美元作为的粗略估计

所以。。。如果我们想租用计算资源,它们已经以相对较小的成本大量可用。。。现在想想恶意软件捕获计算资源

所以。。。所有的计算资源都在坏人一边。。。我们能做什么?

我们可以让猜测变得更加困难。。。

如果我们将密码复杂性从上面的42位增加到。。。比方说字母数字的下限和上限,长度为16个字符。。。这是一个大约96位的熵。。。我们的小机器每秒有1000000次猜测,大约需要25万亿年才能找到我们的密码(保证……如果它没有故障,有足够的功率,你能找到一种方法让它在几十亿年后度过太阳的尽头……但那是另一回事)

但回到了现实世界。。我们采用另一种云设置,每秒可以猜测100000000000000个密码。。。10k倍于我们之前计算的10k机器的尺寸。。。我们需要2500万年才能有保证的成功。。。50%的时间后可能会成功。。。那么,为什么这不能抵消那些额外的54位熵的增加呢。。。指数增长。。。多一点就加倍努力。。。

除了增加熵之外,我们还可以做的另一件事是增加猜测的计算复杂性

如果我们像hash(hash(…))一样将我们的hash函数链式进行可变数量的循环,我们可以增加计算结果所需的时间。。。

对于常规登录,登录时间是10ms还是250ms并不重要,但对于攻击者来说,这一差异意味着他必须承担25倍的计算资源,或者需要25倍的时间。。。没有我们的熵增加那么强大,但仍然。。。对我们这边来说,这是一个可以测量的效果,成本很低

当谈到数据加密时,我们通常不谈论密码,而是谈论加密密钥。。。几个字节的熵。。。在这个级别上,它基本上与上面的计算相同。。。在80到90比特左右,它相当坚硬和昂贵。。。大约40。。。哇,它开着。。。

有趣的是,当你必须使用密码来加密某些东西时。。。如何从密码中获取所需的密钥字节?哈希?可能但是怎么做呢?

好的是。。。其他人在我们面前也有同样的问题。。。这就产生了像PBKDF2(密码派生密钥派生函数……你可以把它看作一个具有可变长度输出的哈希函数……它创建了一个伪随机比特流,你可以根据需要取多少比特……通常是对称密码的密钥大小)

PBKDF2有一个圆形参数来增加计算时间。。。所以基本上。。。它和上面的是一样的

最新更新