bcrypt.compare容易受到定时攻击



在 Node.js Web 开发中,我认为使用 bcrypt 进行密码哈希和比较是一种常见的做法。bcrypt.compare容易受到定时攻击吗?

原始帖子:

这取决于你正在使用的bcrypt模块的实现。 bcrypt本身只是一个关键的派生函数,并没有指示应该如何进行比较。理论上,将哈希与朴素字符串进行比较===比较的bcrypt.compare函数可能会泄漏有关哈希的信息。

但是,假设您指的是 Node.js 中使用最广泛的 bcrypt 模块,则bcrypt.compare函数是使用时序安全CompareStrings函数实现的。此函数始终在中断之前比较哈希中的所有字符,这可以防止它显示比较失败的位置/时间。

重要更新:

上面喜欢的bcrypt.compare函数不再是定时安全的,但是这已经在各个地方进行了讨论(例如这里和这里),共识似乎是这无关紧要,因为bcrypt本身不容易受到定时攻击:

加密哈希函数的所需属性之一是原像攻击抗性,这意味着没有捷径生成一条消息,该消息在经过哈希处理时会生成特定的摘要。

最新更新