url中的哈希值及其字符串比较在php中受到定时攻击


Hash in url and string comparison thereof subject to timing attack in php?

我正在审核密码重置电子邮件系统的安全性。 这是标准的,使用指向电子邮件的链接,如下所示:

example.com/password-reset?code=Ik5S7eubvs79nxFCNx04Vdn5RNfb%2BUJRhC0khoHtuHU%3D

该代码 url 解码为 bcrypt 哈希,该哈希与请求密码重置时数据库中生成的哈希匹配(过期超时为 24 小时)。

我相信这种方法是非常标准的,但是,阅读有关该主题的这篇文章:https://blog.jcoglan.com/2012/06/09/why-you-should-never-use-hash-functions-for-message-authentication/,作者提到,在对两个字符串进行常规==比较时隐含了一种时序攻击,理论上任何此类比较都将被优化为逐个字符检查并根据第一个不匹配的字符进行拒绝。 然后,这将允许攻击者"行走"暴力通过字符串,最终建立匹配。 不过,这实际上是php中的安全问题吗?

我猜在 php 中,由于网络延迟和 == 操作的快速速度,这种定时攻击在微不足道的短字符串上几乎是不可能的,因为在东西接管网络的时间中,它总是会被随机噪声掩盖。 显然,对于我的情况,修复时间很短(比较哈希的哈希或类似可怕的东西),但我对此是否真的是我需要注意的务实问题感兴趣。

我认为定时种子是一个糟糕的选择,即使您的哈希值很短并且与特定用户相关联。你需要确信你的源代码被泄露了(即使它没有)。我会改用 openssl_random_pseudo_bytes()。您还应该限制用户请求密码重置的能力(例如,每天/每周/等不超过多次)