时序攻击

Author Avatar
云璃 2018年06月17日

时序攻击

时序攻击属于侧信道攻击 / 旁路攻击 (Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度 / 加解密时芯片引脚的电压 / 密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。

举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。

密码破解复杂度成千上万倍甚至百万千万倍的下降。最简单的防御方法是:“发现错误的时候并不立即返回,而是设一个标志位,直到完全比较完两个字符串再返回”。

hash_equals

hash_equals是可防止时序攻击的字符串比较。

比如某段代码使用如下比较:

$code == $cache->code

两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回 false,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。

而使用hash_equals比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。

hash_equals($code, $cache->code)

本文链接:https://www.masterzc.cn/archives/77.html
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

Title - Artist
0:00