学习啦>学习电脑>网络知识>网络技术>

如何正确地使用加密与认证技术(4)

时间: 恒辉636 分享

  0x04 认证

学习啦在线学习网   如上所述,认证旨在提供信息的完整性(我们指显著抗篡改能力),而这证明它来自预期的源(真实性)。这样做的典型方法是,为信息计算一个密钥散列消息认证码(HMAC的简称),并将信息与它连结。

  function hmac_sign($message, $key)

  {

学习啦在线学习网   return hash_hmac('sha256', $message, $key) . $message;

  }

  function hmac_verify($bundle, $key)

  {

  $msgMAC = mb_substr($bundle, 0, 64, '8bit');

  $message = mb_substr($bundle, 64, null, '8bit');

  return hash_equals(

学习啦在线学习网   hash_hmac('sha256', $message, $key),

  $msgMAC

  );

  }

学习啦在线学习网   重要的是,这里使用一个适当的哈希工具,如HMAC,而不仅仅是一个简单的散列函数。

  function unsafe_hash_sign($message, $key)

  {

  return md5($key.$message) . $message;

  }

  function unsafe_hash_verify($bundle, $key)

  {

学习啦在线学习网   $msgHash = mb_substr($bundle, 0, 64, '8bit');

  $message = mb_substr($bundle, 64, null, '8bit');

学习啦在线学习网   return md5($key.$message) == $msgHash;

  }

  我在这两个函数名前面加了unsafe,是因为它们还是易受到一些缺点的危害:

  Timing Attacks

  Chosen Prefix Attacks on MD5 (PDF)

学习啦在线学习网   Non-strict equality operator bugs (largely specific to PHP)

  现在,我们有点接近我们强大的对称加密认证的目标。目前仍有几个问题,如:

学习啦在线学习网   如果我们的原始信息以空字节结尾会发生什么?

  有没有一个比mcrypt扩展库默认使用的更好的填充策略?

学习啦在线学习网   由于使用AES,有哪些通信方面是易受攻击的?

  幸运的是,这些问题在现有的加密函数库中已有了解答。我们强烈推荐你使用现有的库,而不是写自己的加密功能。对于PHP开发人员来说,你应该使用defuse/php-encryption(或者libsodium)。

如何正确地使用加密与认证技术(4)

0x04 认证 如上所述,认证旨在提供信息的完整性(我们指显著抗篡改能力),而这证明它来自预期的源(真实性)。这样做的典型方法是,为信息计算一个密钥
推荐度:
点击下载文档文档为doc格式
168319