2012-03-14 33 views
12

我已经在bcrypt潮流了一段时间了,但我在回答一个简单的唠叨问题时遇到了麻烦。对于大型网站,bcrypt是否可行?

想象我有一个相当成功的网站在美国.. 10万活跃用户,每个有需要平均在一个典型的美国企业一天之内2至3认证尝试活动模式(12小时,当你包括时区)。这是每天250,000个验证请求,或每秒约5.8次验证。

一个关于bcrypt整齐的事情之一就是你调整它,所以随着时间的推移它扩展为硬件做,以保持领先的饼干。一个常见的调整就是让它在每个哈希创建时只需要超过1/10秒的时间......让我们假设每个哈希达到.173秒。我选择了这个数字,因为它恰好发生了这样的事情:每个散列每秒钟消耗17.3秒,每秒散列约5.8个散列。换句话说,我假设的网络服务器从字面上来说花费了所有的时间,而只是对用户进行身份验证。没关系实际上做任何有用的工作。

为了解决这个问题,我将不得不要么调bcrypt一路下跌(不是一个好主意),或者获得一个专用的服务器只是做认证,而不是其他。现在想象一下这个网站在增长,并增加了10万个用户。突然之间,我需要两台服务器:再一次,除了认证外什么也不做。甚至不要开始考虑负载峰值,因为你在一天中有轻微和繁忙的时段。

正如我现在看到它,这是这些问题,将是不错的一个,和bcrypt仍然是值得的麻烦。但我想知道我是否在这里错过了一些明显的东西?一些微妙的东西?或者任何人都可以指向一个众所周知的运行整个服务器场的网站,只是为了他们网站的认证部分?

+1

这是可行的,如果你有钱。由于带宽和处理能力所需的百分比增加很少,因此一些站点并不认为全HTTPS可行。但是其他大型网站在强制实施仅限HTTPS的政策方面没有问题。这取决于您的预算和优先事项。 – 2012-03-14 05:58:19

+0

这不是专门用于身份验证的服务器:它是一个核心。 – 2012-03-14 11:28:03

+0

@彼得 - 它不仅仅是一个核心。否则,黑色帽子可能会在显卡问题上抛出更多并行硬件。 – 2012-04-26 18:07:05

回答

5

即使你调整bcrypt只取1/1000秒,这仍然比简单的哈希慢很多,但是一个快速而肮脏的Perl基准测试表明,我不是很新的计算机可以计算出约300,000每秒SHA-256哈希值。

是,1000和30万之间的差异只有8位,但仍然是安全保证金的8位,你不会有其他方式,而这种差距只会增加如CPU变得更快。

此外,如果您使用scrypt而不是bcrypt,即使迭代计数降低,它仍会保留其内存硬度属性,这仍然会使得暴力破坏难以并行化。

+0

是的,即使是1/10000秒也会更好,目标是防止每秒钟计算数百万个值。当然,您可以在短时间内开始并在稍后调整此值,以便估算影响。 – martinstoeckli 2012-03-14 12:33:15