zoukankan      html  css  js  c++  java
  • php防范时序攻击的办法

    什么是时序攻击?

    在密码学中,时序攻击是一种侧信道攻击,攻击者试图通过分析加密算法的时间执行来推导出密码。每一个逻辑运算在计算机需要时间来执行,根据输入不同,精确测量执行时间,根据执行时间反推出密码。

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

    所以php中为了应对这种情况,可以使用hash_equals函数。

    摘抄一段php手册上的信息:

    hash_equals ( string $known_string , string $user_string ) : bool

    比较两个字符串,无论它们是否相等,本函数的时间消耗是恒定的。

    本函数可以用在需要防止时序攻击的字符串比较场景中, 例如,可以用在比较 crypt() 密码哈希值的场景。

     

    <?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
    ?>
  • 相关阅读:
    字典的key都可以是什么
    groupby 的妙用(注意size和count)

    希尔排序
    TCP和UDP
    闭包(python)
    快速排序
    mysql t4模板_Model
    vue前端性能优化
    系统稳定性问题总结
  • 原文地址:https://www.cnblogs.com/tudou1223/p/11506574.html
Copyright © 2011-2022 走看看