ForHosting KIT · 開発者向けツール

WebhookのHMAC署名を検証する手順

HMAC-SHA256などのアルゴリズムと署名が入るヘッダー名を入力すると、生の本文の保持、署名対象の再構成、一定時間での比較、再送の確認まで、8つの手順が順番に表示されます。ブラウザで無料で使えます。

  • 無料
  • ブラウザで動作
  • 登録不要
  • データは端末の外に出ません
ご利用方法 ウェブAPIメールTelegramアプリ 近日

実装や監査に結果を利用し、時刻形式、符号化、再送許容範囲は公式資料でご確認ください。

提供元が署名したバイト列から始めます

解析前の受信バイト列をそのまま保持してください。指定ヘッダー名の大文字小文字は区別せず、値は厳格に検証します。提供元の文法に従い、欠落、空値、予期しない重複、不正形式を拒否し、秘密鍵は保護された管理領域に保存してください。

正しい順序で再構成、計算、比較します

署名対象を正確に再構成してください。生の本文だけの場合も、時刻、区切り、本文の場合もあります。規定の順序と符号化を守り、秘密鍵と正規化済みアルゴリズムでHMACを計算します。

両署名を同じ長さのバイト列に復号し、定時間比較を使用してください。不正な符号化や長さの違いは検証失敗です。

暗号検証を受理条件の一部として扱います

一致するHMACは秘密鍵の保有を示しますが、メッセージの新しさや一意性までは保証しません。推奨時間枠を適用し、受理済みイベントIDを保存して処理を冪等にしてください。規定の重複期間で秘密鍵を更新します。

処理前に拒否し、一般的なエラーを返し、安全な理由コードだけを記録してください。本文改変、期限切れ、不正ヘッダー、誤った秘密鍵、再送をテストします。

既存の連携を監査する

本文取得、HMAC計算、定時間比較、再送対策の順序をご確認いただけます。

セキュリティ試験を準備する

ヘッダー欠落、本文改変、不正署名、期限切れ、再送の異常系試験を作成します。

対応するアルゴリズムは何ですか?

HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512です。それ以外は入力エラーになります。

正しいHMACだけで再送を防げますか?

いいえ。 署名時刻を検証し、提供されるイベントIDを重複排除してください。

なぜ署名は一定時間で比較する必要があるのですか?

通常の比較では、応答時間の差から署名のどこまでが一致したかが漏れるおそれがあるためです。両方の値を同じ長さのバイト列に変換し、時間差の出ない比較を使います。長さや変換が合わない場合は検証失敗として扱います。

秘密鍵やメッセージ本体を入力する必要はありますか?

いいえ、必要ありません。手順の作成に使うのはHMACのアルゴリズムと署名ヘッダー名だけなので、秘密鍵やメッセージ、署名はお使いの受信側システムの中に留まります。

受信した本文をそのまま保持する必要があるのはなぜですか?

読み込みや整形の処理で空白や並び順、改行が変わると、内容が同じに見えても署名が一致しなくなるためです。検証が終わるまでは、届いたままのバイト列で計算してください。

このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/security/webhook-signature-verify-steps

Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。

curl -X POST https://api.kit.forhosting.com/security/webhook-signature-verify-steps \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"algorithm":"HMAC-SHA256","header_name":"X-Webhook-Signature"}'
{
  "algorithm": "HMAC-SHA256",
  "header_name": "X-Webhook-Signature"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "security.webhook_signature_verify_steps",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

Webhook署名の検証は、フレームワークによる本文の変更、緩すぎるヘッダー解析、通常の文字列比較による時間情報の漏えいなど、境界部分で失敗しがちです。この機能は、提供元のHMACアルゴリズムとヘッダー名を、正確で順序立った確認リストに変換します。ペイロード、秘密鍵、署名は不要です。

提供元が署名したバイト列から始めます

JSONの再シリアル化は空白、順序、エスケープ、Unicode、改行を変える場合があります。

新しいWebhookエンドポイントを実装する

実装前にアルゴリズムとヘッダーを確認可能な手順へ変換します。

実際のWebhookを検証しますか?

いいえ。実装手順のみを生成し、ペイロード、秘密鍵、署名は要求しません。

生のリクエスト本文が必要なのはなぜですか?

解析と再シリアル化でバイト列が変わり、正しい署名が無効になるためです。

Webhookの秘密鍵を送信しますか?

いいえ。必要なのはアルゴリズムとヘッダー名だけです。秘密鍵は保護環境に保存してください。

APIリクエストの料金はいくらですか?

1件あたり$0.002です。決定論的なブラウザー実装は秘密鍵を送信せずに動作します。

KITの完全なドキュメントを見る →