HMAC はどのハッシュ関数とも組み合わせられ(HMAC-SHA256 は 32 バイトのタグを出力します)、衝突耐性が破られたハッシュ関数と組み合わせても安全性が保たれます。HMAC-SHA1 が今も TOTP で使われているのはこのためです。ハッシュのブロックサイズ(SHA-256 では 64 バイト)より長い鍵は先にハッシュされ、短い鍵はゼロでパディングされます。鍵は、求めるセキュリティレベル以上のビット数のエントロピーを持つべきです。RFC 7518 §3.2 は、HS256 の鍵を 256 ビット以上とすることを求めています。
主な用途は、JWT の HS256/HS384/HS512、webhook の署名(たとえば GitHub の X-Hub-Signature-256 や Stripe の Stripe-Signature)、AWS 署名バージョン 4 によるリクエスト署名、HKDF と PBKDF2 の内部処理、TLS 1.2 のレコード MAC、TOTP/HOTP のコードです。タグの比較には定数時間の関数を使ってください。
HMAC は署名ではありません。すべての検証者が同じ鍵を持ち、そのタグを自分で生成できたはずなので、否認防止にはならず、検証者にトークンを発行させてはならない場面では使えません。HMAC 計算ツールを使うと、タグの計算と確認をローカルで行えます。