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
    ?>
  • 相关阅读:
    spring cglib final @Transactional
    【转】电商架构
    logback发邮件配置
    @Reference不支持继承
    jmap jstack
    dubbo线程池
    C# 爬虫框架实现 流程_爬虫结构/原理
    C# 爬虫框架实现 流程_各个类开发
    C# 爬虫框架实现 概述
    作用域 作用域链 闭包 思想 JS/C++比较
  • 原文地址:https://www.cnblogs.com/tudou1223/p/11506574.html
Copyright © 2011-2022 走看看