27 哈希长度扩展攻击

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

哈希算法有很多,我们以MD5为例。首先MD5算法会对消息进行分组,每组64字节,不足64字节的部分用padding补齐。padding的规则是,在最末一个字节之后补充0x80,其余的部分填充为0x00padding最后的8字节用来表示需要哈希的消息长度。在对消息进行分组以及padding后,MD5算法开始依次对每组消息进行压缩,经过64轮数学变换。上一次压缩的结果,将作为下一次压缩的输入。

    长度扩展攻击的理论基础,就是将已知的压缩后的结果,直接拿过来作为新的压缩输入。在这个过程中,只需要上一次压缩后的结果,而不需要知道原来的消息内容是什么。

    为了避免潜在的安全隐患,在Drupal7中,我们不应该在代码中使用md5() sha1()函数,而应该使用更加安全的drupal_hash_base64()drupal_hmac_base64()

function drupal_hash_base64($data) {

  $hash = base64_encode(hash('sha256', $data, TRUE));

  // Modify the hash so it's safe to use in URLs.

  return strtr($hash, array('+' => '-', '/' => '_', '=' => ''));

}

    drupal_hash_base64使用了sha256算法,并使用base64进行编码,最后对哈希值作了字符替换,确保在URL中的安全性。


Drupal版本: