php防范时序攻击的办法
什么是时序攻击?
在密码学中,时序攻击是⼀种侧信道攻击,攻击者试图通过分析加密算法的时间执⾏来推导出密码。每⼀个逻辑运算在计算机需要时间来执⾏,根据输⼊不同,精确测量执⾏时间,根据执⾏时间反推出密码。
如果是⽤普通的 == 来进⾏⽐较,那么两个字符串是从第⼀位开始逐⼀进⾏⽐较的,发现不同就⽴即返回 false,那么通过计算返回的速度就知道了⼤概是哪⼀位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。
所以php中为了应对这种情况,可以使⽤hash_equals函数。
摘抄⼀段php⼿册上的信息:位字符串是什么
hash_equals ( string $known_string , string $user_string ) : bool
⽐较两个字符串,⽆论它们是否相等,本函数的时间消耗是恒定的。
本函数可以⽤在需要防⽌时序攻击的字符串⽐较场景中,例如,可以⽤在⽐较密码哈希值的场景。
<?php
$expected  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('apple',  '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($expected, $correct));//true
var_dump(hash_equals($expected, $incorrect));//false
>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。