password_verify如何防止定时攻击



PHP文档页面表示password_hash((返回算法、成本和salt作为返回哈希的一部分。我假设cost意味着执行比较的最长时间,因此password_verify((可以返回一个恒定的时间,而不管匹配的数量如何。是这样吗?

否。password_verify将需要重复与password_hash相同的散列,并且为此它需要使用与用于创建散列的password_hash相同的参数。这些参数都嵌入到散列中,cost就是其中一个参数。开销通常通过重复哈希来决定哈希的速度,但不同的哈希算法之间的确切含义可能不同。

CCD_ 4还对两个散列进行恒定时间比较以避免定时攻击;这也许就是你混淆了这个概念的原因。通常,当比较两个字符串是否相等时,一旦发现差异,就可以停止比较。此可能通过尝试不同的密码并查看比较其哈希所需的不同时间来向攻击者提供一些信息。恒定的时间比较确保始终比较整个字符串,每次花费相同的时间。

password_verify以所谓的长度恒定时间返回,使其免受定时攻击。

除此之外,由于请求时间的巨大自然变化,在开放互联网上进行亚秒定时攻击即使不是经常不可能,也是很困难的。本地网络和共享数据中心更容易受到影响。

它必须是一个非常有针对性的攻击,一个像样的限速器将阻止大多数攻击。

最新更新