HMACハッシュの使い方のまとめ

Last Updated on: 2018年8月13日

最近、HMACハッシュ(hash_hmac)の使い方を書いてきたのでまとめです。

HMACハッシュの使い方

基本的なHMACハッシュの使い方です。HMACを使うと、文字列連結で作るハッシュ値より安全なハッシュ値を取得可能です。文字列連結は使わず、HAMCハッシュを使うべきです。

https://blog.ohgaki.net/how-to-use-hash_hmac

文字列(ハッシュ)の安全な比較方法

ハッシュ値が鍵となっているケースは多いです。この場合、ハッシュ値の比較はhash_equals関数を使わなければ、タイミング攻撃に脆弱になります。

https://blog.ohgaki.net/hash-string-safe-comparison

URL/URI別+有効期限付きのCSRF対策

HMACハッシュを利用すると、全てのURIに同じCSRFトークンを使う必要はありません。URI固有かつ有効期限付きのCSRFトークンをデータベース無しで利用可能です。

https://blog.ohgaki.net/advanced-csrf-token-by-hmac-hash

安全なAPIキーの送受信方法

HMACハッシュを利用すると、APIキーをそのまま使わずにAPIキーのバリデーションが可能です。

https://blog.ohgaki.net/secure-api-key-with-hash-hmac-hkdf

弱い鍵を強い鍵に変える方法

HMACハッシュを使うと弱い鍵から強い鍵を作ることが可能です。(ユーザー入力のパスワード、AES128用の鍵からAES256の鍵を作る、など)

https://blog.ohgaki.net/derive-strong-key-by-hash-hmac

パスワード付きURL/URIを作る方法

HMACハッシュを使うとパスワード付き(+有効期限付き)のURLを作れます。

https://blog.ohgaki.net/url-with-password-using-hash-hmac

有効期限付きURL/URIを作る方法

HMACハッシュを使うと有効期限付きのURLを作れます。Amazon S3のPre Signed URLも同じ仕組みです。

https://blog.ohgaki.net/url-with-timeout-using-hash-hmac

serialize()/unserialize()を安全に使う方法

HKDFやHMACを使うとunserialize()も安全に行えます。

https://blog.ohgaki.net/how-to-use-php-serialize-unserialize-with-security

関連 – パスワードのハッシュ化

HMACは弱いパスワードから強いパスワードを作れますが、ユーザーが入力したパスワードを保存する場合はHMACではなくhash_password()を使うべきです。

https://blog.ohgaki.net/password_hashing

https://blog.ohgaki.net/password_hash-important-limitation