KMAC128 メッセージ認証コード生成ツール

鍵(テキストまたは16進)、カスタマイズ文字列、出力長を指定して KMAC128 メッセージ認証コードを計算。NIST SP 800-185 のサンプルと一致します。

8 の倍数で 8〜16384 ビット。

ドメイン分離用の任意のラベル(例: アプリ名)。文字列が異なると無関係な出力になります。

鍵が空です。秘密鍵がなければ KMAC は認証として機能しません。

KMAC128

すべてブラウザ内で実行されます。データがアップロードされることはありません。

KMAC128 生成ツールとは?

KMAC128 は、NIST SP 800-185 で定義された Keccak ベースのメッセージ認証コードで、HMAC に相当する SHA-3 版です。秘密鍵、任意のカスタマイズ文字列、出力長を与えると、鍵を持つ人だけが計算できるタグを生成します。このツールは、テキストまたは生のバイト列の KMAC128 を計算します。

KMAC128 生成ツールの使い方

  1. メッセージ にデータを入力します。バイナリデータの場合は、入力エンコーディングで 16進数のバイト列 または Base64 を選びます。
  2. 秘密鍵 を入力し、その 鍵のエンコーディング(テキスト (UTF-8) または16進数のバイト列)を選びます。
  3. 必要に応じて カスタマイズ文字列 (S) を入力し、出力長(ビット) を変更します(既定は 256)。
  4. 出力形式 を選び、コピー をクリックしてタグを使います。

例

入力
Message 00010203 (Hex bytes), key 404142…5E5F (32 bytes, hex), S = "My Tagged Application", 256 bits
出力
3b1fba963cd8b0b59e8c1a6d71888b7143651af8ba0a7070c0979e2811324aa5

NIST SP 800-185 の KMAC サンプル #2 です。

KMAC128 生成ツールを使うべき場面

SHA-3 を基盤とするシステムでメッセージの認証や鍵導出を行うとき、また仕様書や別の実装にある KMAC タグを検証するときに KMAC128 を使います。相手側が HMAC-SHA256 を想定している場合、KMAC は相互運用できません。その場合は HMAC を使ってください。空の鍵や推測しやすい鍵は使わないでください。MAC の強度は鍵の強度で決まります。

KMAC128 生成ツールの仕組み

KMAC128(NIST SP 800-185)は、関数名を「KMAC」とした cSHAKE128 です。まず bytepad(encode_string(K), 168)、つまりブロック全体にパディングした鍵を吸収し、次にメッセージ、続いて要求された出力長 L の right_encode(L) を吸収して、L ビットを絞り出します。L が入力の一部になっているため、同じデータの256ビットの KMAC と512ビットの KMAC は無関係です(SHAKE とは異なります)。スポンジ構造のおかげで、単純な鍵プレフィックス方式でも安全であり、KMAC には HMAC のような入れ子構造が不要です。

一般的な使用例

  • NIST SP 800-185 の KMAC テストベクターを検証する
  • 別の言語で書かれた KMAC 実装をデバッグする
  • SHA-3 ベースのプロトコルで、API やメッセージの認証タグを生成する
  • テスト用に、KMAC を KDF(SP 800-108 方式)として鍵を導出する

セキュリティ注意事項

KMAC128 は、鍵がランダムで16バイト以上の場合に、最大128ビットのセキュリティを提供します。新しい秘密鍵を使い、自分のコードではタグを定数時間で比較してください。信頼できないツールに本番の鍵を貼り付けないでください。このツールはローカルで動作し、何も送信しません。

よくある質問

KMAC128 は HMAC とどう違いますか?

HMAC は、SHA-2 の長さ拡張の問題を避けるためにハッシュを二重に包みます。Keccak は長さ拡張攻撃を受けないため、KMAC はパディングした鍵を前置するだけです。両者の結果に互換性はありません。

出力長を変えると、すべてのビットが変わるのはなぜですか?

出力長 L が入力にエンコードされるため、256ビットと512ビットの KMAC は独立した値になります。短いほうは長いほうの先頭部分にはなりません。

バイナリの鍵はどう入力すればよいですか?

鍵のエンコーディング を 16進数のバイト列 にして、鍵を16進で貼り付けます(スペースも使えます)。テキスト (UTF-8) の場合は、文字そのものが鍵のバイト列として使われます。

鍵はどこかに送信されますか?

いいえ。鍵とメッセージはブラウザー内だけで処理されます。

他のカテゴリを見る