ネットワークのセキュリティとデータの整合性検証では、HMAC(ハッシュベースのメッセージ認証コード)は、一般的に使用される効果的な技術です。ハッシュ関数とキーを組み合わせて、メッセージの整合性とアイデンティティ認証を確認します。 PHPの組み込みHash_hmac()関数は、HMACを生成するための便利なツールを提供しますが、この記事では、より基本的なHash()関数を使用してHMACを手動で実装する方法を紹介します。
HMACの核となるアイデアは、メッセージの前後にキーをスプライスし、スプライスの後に文字列をハッシュすることです。単純なハッシュ値と比較して、HMACはメッセージが改ざんされなくなり、簡単に偽造されないことを効果的に防ぐことができます。
HMAC計算式:
HMAC(key, message) = hash((key ⊕ opad) || hash((key ⊕ ipad) || message))
で:
||接続操作を意味します
bitiveビットワイズxorを示します
Opadは外部塗りつぶし、0x5c繰り返し塗りつぶしです
iPadは内部塗りつぶし、0x36繰り返し塗りつぶしです
以下は、php hash()関数を使用してHMACを手動で実装する方法を示しています。
<?php
function hmac_hash($algo, $key, $data) {
$blocksize = 64; // ほとんどhash関数ブロックサイズはです64バイト
if (strlen($key) > $blocksize) {
$key = hash($algo, $key, true); // キーが長すぎる場合,初めhash固定長のバイナリ文字列を形成します
}
$key = str_pad($key, $blocksize, chr(0x00)); // サイズをブロックするキーを入力します
$ipad = str_repeat(chr(0x36), $blocksize);
$opad = str_repeat(chr(0x5c), $blocksize);
$inner = $key ^ $ipad;
$outer = $key ^ $opad;
$inner_hash = hash($algo, $inner . $data, true); // 内側のハッシュ,出力バイナリ形式
$hmac = hash($algo, $outer . $inner_hash);
return $hmac;
}
// テスト
$key = "secretkey";
$message = "The quick brown fox jumps over the lazy dog";
echo "HMAC-SHA256: " . hmac_hash('sha256', $key, $message);
?>
上記のコードでは、SHA-256アルゴリズムを使用して、メッセージとキーでHMAC計算を実行し、16進文字列を返します。
より効率的で安全なPHPに付属するHASH_HMAC()関数を使用することをお勧めします。
一般に、キーの長さはハッシュブロックサイズと同じであることをお勧めします。
バイナリ出力(3番目のパラメーターがtrueに設定されている)を使用することは、スプライシング操作を助長します。
HMACは主にメッセージ認証に使用されており、キーを安全に管理する必要があります。
PHPには既に便利なHasH_HMAC()関数がありますが、HMACを実装するために基本的なHash()関数を使用する原則を理解して習得することで、安全なハッシュメカニズムをよりよく理解し、安全なプログラミング機能を改善するのに役立ちます。
もっと知りたい場合は、 https://gitbox.net関連のリソースにアクセスできます。