HMAC-SHA256 ハッシュ生成
無料オンライン HMAC-SHA256 ハッシュ生成 ツール。100% ローカル処理 — データは端末の外に出ません。
結果がここに表示されます...
入力 → ハッシュを計算
Usage Guide
HMAC-SHA256について
HMAC-SHA256(Hash-based Message Authentication Code with SHA-256)は、SHA-256ハッシュ関数とキーメカニズムを組み合わせたキー付きハッシュメッセージ認証コードアルゴリズムです。IETF RFC 2104で標準化され、API署名、データ整合性検証、認証に広く使用されています。HMAC-SHA256はデータの整合性を検証するだけでなく、データソースを認証するため、現代のWebセキュリティにおけるコア技術となっています。
使用手順
HMAC-SHA256はキーとメッセージの2つの入力を必要とし、固定長の認証コードを生成します:
アルゴリズムの特徴
HMAC-SHA256はRFC 2104標準に基づき、以下の技術的特徴を持ちます:
ユースケース
HMAC-SHA256は認証とデータ整合性保証が必要なシナリオで広く使用されています:
FAQ
Q: HMAC-SHA256とSHA-256の違いは何ですか?
A: SHA-256 は一方向ハッシュ関数で、誰でも同じ入力のハッシュを計算できます。HMAC-SHA256はキーが必要で、キーを持つ者だけがHMAC値を生成・検証できます。 主な違い:SHA-256はデータの整合性(改ざんされたかどうか)のみを検証し、HMAC-SHA256は整合性とソースの真正性(認可された当事者からのものかどうか)の両方を検証します。 ユースケース:ファイル検証にはSHA-256を、API署名と認証にはHMAC-SHA256を使用します。
Q: HMAC-SHA256のキーはどのくらいの長さにすべきですか?
A: RFC 2104 はキー長をハッシュ関数の出力長以上にすることを推奨しています。HMAC-SHA256の場合、推奨キー長は≥256ビット(32バイト)です。 短いキー:キーが256ビット未満の場合、セキュリティは低下しますが有効です。 長いキー:キーが512ビット(SHA-256のブロックサイズ)を超える場合、まず256ビットにハッシュされ、追加のセキュリティは提供されません。 ベストプラクティス:256ビット(32バイト)のランダムキーを使用し、Base64またはHexエンコーディングで保存します。 パスワードジェネレーター を使用して高強度のキーを生成してください。
Q: API署名でHMAC-SHA256を使用する方法は?
A: 典型的なAPI署名フロー:1) 署名文字列の構築:リクエストパラメータを合意した形式で連結します(HTTPメソッド、URL、タイムスタンプ、リクエストボディなど)。2) HMACの計算:共有キーを使用して署名文字列のHMAC-SHA256を計算します。3) リクエストへの追加:HMAC値をリクエストヘッダー(X-Signatureなど)またはクエリパラメータに追加します。4) サーバー検証:サーバーは同じ方法でHMACを計算し、リクエスト値と比較します。例:AWS Signature V4、GitHub Webhooks(X-Hub-Signature-256)、Stripe(Stripe-Signature)。 注意:署名文字列の構築順序は厳密に一致させる必要があり、通常はパラメータをアルファベット順にソートします。
Q: HMAC-SHA256はリプレイ攻撃を防止できますか?
A: HMAC-SHA256自体はリプレイ攻撃を防止できません。攻撃者は正当なリクエスト(HMAC署名を含む)を傍受して再送信できます。 防御方法:1) タイムスタンプ:署名文字列にタイムスタンプを含め、サーバーは期限切れのリクエストを拒否します(例:5分以上前のリクエスト)。2) Nonce(乱数):各リクエストは一意の乱数を使用し、サーバーは使用済みNonceを記録して重複を拒否します。3) リクエストカウンター:クライアントはインクリメントカウンターを維持し、サーバーはデクリメントされたカウンターのリクエストを拒否します。 ベストプラクティス:タイムスタンプとNonceを組み合わせてリプレイ攻撃を防止しながら、サーバーでの大量のNonceセットの保存を避けます。AWS Signature V4とOAuth 1.0はどちらもこのアプローチを採用しています。
Q: HMAC-SHA256とJWTの関係は何ですか?
A: JWT(JSON Web Token) は複数の署名アルゴリズムをサポートしており、HS256がHMAC-SHA256です。JWTは3つの部分で構成されています:ヘッダー、ペイロード、署名。署名はbase64(header).base64(payload)に署名するためにHMAC-SHA256を使用し、トークンが改ざんされていないことを保証します。 利点:対称暗号化、高パフォーマンス、内部システムに適しています。欠点:キーはすべてのサービスで共有する必要があり、キー漏洩リスクが高くなります。 代替手段:RS256(RSA署名)またはES256(ECDSA署名)は非対称暗号化を使用し、より安全ですが若干パフォーマンスが低下します。
Q: HMAC-SHA256とHMAC-SHA512はどちらが優れていますか?
A: どちらも安全です。選択は具体的なニーズによって異なります。HMAC-SHA256:256ビット出力(64文字)、より良いパフォーマンス、より広い互換性、業界標準(AWS、GitHub、Stripeで使用)。 HMAC-SHA512:512ビット出力(128文字)、理論的により高いセキュリティ、64ビットシステムではHMAC-SHA256よりもさらに良いパフォーマンス、ただし長い出力はより多くの帯域幅とストレージを消費します。 推奨:ほとんどのアプリケーションでは、HMAC-SHA256が最良の選択です。より高いセキュリティ(政府の機密データ、長期有効な署名など)や64ビットサーバーでのパフォーマンスが必要な場合は、 HMAC-SHA512 を選択してください。
Use Cases
推奨:API署名検証
HMAC-SHA256はAPI署名の業界標準であり、AWS、GitHub、Stripe、PayPalなどの主要プラットフォームに採用されています。APIリクエストが認可されたクライアントから来ており、改ざんされていないことを保証し、RESTful APIセキュリティのコア技術です。典型的なフロー:クライアントは共有キーを使用してリクエストパラメータのHMACを計算し、サーバーはリクエストを処理する前に署名を検証します。
- ✅ HMAC-SHA256(業界標準、推奨)
- ✅ HMAC-SHA512(より高いセキュリティ)
- ✅ EdDSA (Ed25519) (非対称署名、より安全)
- ❌ HMAC-MD5を避ける(安全でない)
推奨:Webhook検証
GitHub、Slack、StripeなどのプラットフォームはHMAC-SHA256を使用してWebhookリクエストの真正性を検証します。Webhookを送信する際、プラットフォームは共有キーを使用してリクエストボディのHMACを計算し、リクエストヘッダー(X-Hub-Signature-256など)に追加します。受信者は同じ方法でHMACを計算して比較し、リクエストが攻撃者ではなくプラットフォームから来ていることを確認します。
- ✅ HMAC-SHA256(Webhook標準)
- ✅ タイムスタンプと組み合わせてリプレイ攻撃を防止
- ✅ HTTPSを使用してキーとデータを送信
- 💡 Webhookキーを定期的にローテーション
推奨:JWTトークン署名(HS256)
JWTのHS256アルゴリズムはHMAC-SHA256署名を使用してトークンが改ざんされていないことを保証します。内部システム(マイクロサービス通信など)に適しており、高パフォーマンスでシンプルな実装です。ただし、キーはすべてのサービスで共有する必要があり、キー漏洩リスクが高くなります。公開APIや高セキュリティシナリオでは、RS256(RSA)またはES256(ECDSA)非対称署名の使用を推奨します。
- ✅ HS256(内部システム、パフォーマンス優先)
- ✅ RS256 (公開API、セキュリティ優先)
- ✅ ES256(モダン標準、パフォーマンスとセキュリティのバランス)
- ❌ 公開APIでのHS256を避ける
推奨:キー導出(HKDF)
HKDF(HMAC-based Key Derivation Function) はHMAC-SHA256を使用してマスターキーから異なる目的(暗号化、認証、署名など)のための複数のサブキーを導出します。HKDFは TLS 1.3 の標準キー導出スキームであり、SignalやWhatsAppなどのエンドツーエンド暗号化アプリにも採用されています。
- ✅ HKDF-SHA256(TLS 1.3標準)
- ✅ HKDF-SHA512(より高いセキュリティ)
- ✅ Argon2 (パスワード導出、ブルートフォース耐性)
- 💡 異なる目的には異なるinfoパラメータを使用
推奨:CookieとセッションへのSigning
Webフレームワーク(Express、Django、Flaskなど)はHMAC-SHA256を使用してCookieとセッションに署名し、クライアントの改ざんを防止します。署名されたCookieの形式は通常value.signatureで、サーバーは署名を検証した後にのみCookieの内容を信頼します。これはステートレスセッション管理の基盤であり、サーバーサイドのセッションストレージのオーバーヘッドを回避します。
- ✅ HMAC-SHA256(Webフレームワーク標準)
- ✅ HttpOnlyとSecureフラグを使用
- ✅ 適切な有効期限を設定
- 💡 署名キーを定期的にローテーション
推奨:メッセージキューの整合性検証
RabbitMQ、Kafka、Redis StreamsなどのメッセージキューはHMAC-SHA256を使用してメッセージの整合性を検証し、送信中にメッセージが改ざんされていないことを保証できます。プロデューサーはメッセージ送信時にHMACを計算してメッセージに添付し、コンシューマーは処理前にHMACを検証します。これは金融取引や注文処理などの重要なビジネスシナリオで特に重要です。
- ✅ HMAC-SHA256(標準的な選択)
- ✅ メッセージIDと組み合わせてリプレイを防止
- ✅ TLSを使用して送信チャネルを暗号化
- 💡 メッセージキューの組み込みセキュリティメカニズムを検討
ベストプラクティスの推奨事項
- HMAC-SHA256はAPI署名と認証の業界標準であり、リクエストソースの検証が必要なすべてのシナリオに推奨されます。
- キーセキュリティは重要です:最低256ビットのランダムキーを使用し、HTTPSまたは暗号化された設定ファイルで送信し、定期的にローテーションし、アクセスを厳しく制限します。
- タイムスタンプとNonceを組み合わせてリプレイ攻撃を防止し、タイムスタンプウィンドウは5〜15分を推奨します。
- 公開APIや高セキュリティシナリオでは、HMAC-SHA256の代わりに非対称署名アルゴリズム(RS256、ES256など)の使用を検討してください。
- JWTのHS256は内部システムに適しています。公開APIはRS256またはES256を使用すべきです。