znk3r/hash-equals

hash_equals() 的兼容库,用于避免时间攻击

dev-master 2015-03-07 10:23 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:00:02 UTC


README

PHP 5.6 之前的版本对 hash_equals() 的实现

此函数是为了比较哈希字符串而创建的,以防止时间攻击。一些库有类似的实现,但作为更大包的一部分。

安装

通过 composer.json

"require": {
    "znk3r/hash_equals": "dev-master"
}

基本用法

在添加到 composer 后,此函数将自动可用(请记住运行 "composer update")

<?php

if (!hash_equals($storedHash, $userGeneratedHash)) {
    echo "The strings are different"; 
}

时间攻击

如 Pádraic Brady 在 2010 年的一篇文章中所描述的 [一篇来自 2010 年的文章] (http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/)

时间攻击是一种侧信道攻击形式,允许攻击者通过测量操作执行时间(通常基于攻击者推导的一组输入)来发现操作的一些秘密输入。

乍一看,这似乎是一项不可能的任务,但现实中并不需要太多思考就能意识到,许多 Web 应用程序在登录尝试期间可能以不同的方式处理现有的和非现有的用户名。不同的处理方式可能导致关于任何用户名有效性的几个方面的线索

这些攻击的实现很复杂,但已经被使用过几次。

在 PHP-5.6 中,添加了 hash_equals() 来帮助处理此类攻击,但该函数在旧版本中不可用,使它们容易受到攻击。

应使用此函数来减轻时间攻击,特别是在比较哈希时,但不应将其作为所有字符串比较的一般替代方案。