国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦>學(xué)習(xí)電腦>網(wǎng)絡(luò)知識>網(wǎng)絡(luò)技術(shù)>

    如何正確地使用加密與認(rèn)證技術(shù)(4)

    時間: 恒輝636 分享

      0x04 認(rèn)證

      如上所述,認(rèn)證旨在提供信息的完整性(我們指顯著抗篡改能力),而這證明它來自預(yù)期的源(真實性)。這樣做的典型方法是,為信息計算一個密鑰散列消息認(rèn)證碼(HMAC的簡稱),并將信息與它連結(jié)。

      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

      );

      }

      重要的是,這里使用一個適當(dāng)?shù)墓9ぞ撸鏗MAC,而不僅僅是一個簡單的散列函數(shù)。

      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;

      }

      我在這兩個函數(shù)名前面加了unsafe,是因為它們還是易受到一些缺點的危害:

      Timing Attacks

      Chosen Prefix Attacks on MD5 (PDF)

      Non-strict equality operator bugs (largely specific to PHP)

      現(xiàn)在,我們有點接近我們強(qiáng)大的對稱加密認(rèn)證的目標(biāo)。目前仍有幾個問題,如:

      如果我們的原始信息以空字節(jié)結(jié)尾會發(fā)生什么?

      有沒有一個比mcrypt擴(kuò)展庫默認(rèn)使用的更好的填充策略?

      由于使用AES,有哪些通信方面是易受攻擊的?

      幸運的是,這些問題在現(xiàn)有的加密函數(shù)庫中已有了解答。我們強(qiáng)烈推薦你使用現(xiàn)有的庫,而不是寫自己的加密功能。對于PHP開發(fā)人員來說,你應(yīng)該使用defuse/php-encryption(或者libsodium)。

    如何正確地使用加密與認(rèn)證技術(shù)(4)

    0x04 認(rèn)證 如上所述,認(rèn)證旨在提供信息的完整性(我們指顯著抗篡改能力),而這證明它來自預(yù)期的源(真實性)。這樣做的典型方法是,為信息計算一個密鑰
    推薦度:
    點擊下載文檔文檔為doc格式
    168319