cSHAKE128 ハッシュ生成ツール

関数名 N、カスタマイズ文字列 S、任意の出力長で cSHAKE128 を計算。NIST SP 800-185 のサンプルで検証済みで、ブラウザー内で動作します。

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

通常は空のままにします。cSHAKE を基に定義される関数のために NIST が予約しています。

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

cSHAKE128

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

cSHAKE128 ハッシュ生成ツールとは?

cSHAKE128 は、NIST SP 800-185 で定義された SHAKE128 のカスタマイズ可能版です。関数名 N とカスタマイズ文字列 S を加えることで、同じメッセージでも用途が異なれば無関係な出力になります。このツールでは、N、S、出力長を設定できます。

cSHAKE128 ハッシュ生成ツールの使い方

  1. ハッシュ化するテキスト に入力を入力または貼り付けます。入力するたびにダイジェストが更新されます(空欄のときは空入力のハッシュが表示されます)。
  2. 入力エンコーディング を選びます。テキスト (UTF-8) は文字を UTF-8 としてハッシュ化し、16進数のバイト列 や Base64 はデコードした生のバイト列をハッシュ化します。
  3. 出力長(ビット) を設定します(既定は 256)。
  4. 必要に応じて 関数名 (N)(通常は空)と カスタマイズ文字列 (S)(アプリケーション名やプロトコル名など)を入力します。
  5. 出力形式(16進の小文字、16進の大文字、Base64)を選び、コピー をクリックします。

例

入力
Data 00010203 (Hex bytes), N empty, S = "Email Signature", 256 bits
出力
c1c36925b6409a04f1b504fcbca9d82b4017277cb5ed2b2065fc1d3814d5aaf5

NIST SP 800-185 の cSHAKE サンプル #1 です。

cSHAKE128 ハッシュ生成ツールを使うべき場面

ドメイン分離が必要なとき、つまり同じデータから用途ごとに複数のハッシュを導出したいとき(鍵導出のラベル、プロトコルのトランスクリプト、タグ付きハッシュなど)に cSHAKE128 を使います。カスタマイズが不要なら素の SHAKE128 を、秘密鍵が関わる場合は KMAC128 を使ってください。N は NIST が定義した関数のために予約されているため、通常のアプリケーションでは S だけを使います。

cSHAKE128 ハッシュ生成ツールの仕組み

cSHAKE128(NIST SP 800-185)は、ドメイン分離を加えた SHAKE128 です。メッセージの前に bytepad(encode_string(N) || encode_string(S), 168)、つまり関数名 N とカスタマイズ文字列 S(それぞれビット長が前置されます)を吸収し、そのうえで SHAKE の 1111 ではなくサフィックス 00 でパディングします。N と S の両方が空の場合、cSHAKE128 は SHAKE128 と等しいと定義されています。N や S の値が異なれば、互いに独立した関数になります。N と S はテキストとして入力され、UTF-8 でエンコードされます。

一般的な使用例

  • NIST SP 800-185 の cSHAKE テストベクターを再現する
  • 1つの入力から、コンテキストごとに別々の値を導出する
  • cSHAKE を基にした KMAC、TupleHash、ParallelHash を実装またはデバッグする
  • アプリケーション固有のラベルを付けてプロトコルメッセージをハッシュ化する

セキュリティ注意事項

cSHAKE128 は SHAKE128 と同様に128ビットのセキュリティを提供します。カスタマイズ文字列は公開情報であり、鍵ではありません。認証には KMAC128 を使ってください。計算はブラウザー内でローカルに行われます。

よくある質問

N と S の両方が空の場合はどうなりますか?

定義上、cSHAKE128 は SHAKE128 と等しくなります。abc を 256 ビットで計算すると 5881092dd818bf5c… となり、SHAKE128 と同じ結果です。

N と S の違いは何ですか?

N(関数名)は、「KMAC」や「TupleHash」のように NIST が定義した関数のために予約されています。S はアプリケーションが自由に使えるカスタマイズ文字列です。実際には S を設定し、N は空のままにします。

N と S はどのようにエンコードされますか?

UTF-8 のバイト列として、ビット長(left_encode)を前置したうえで、SP 800-185 の規定どおりにレートの長さまでパディングされます。

他のカテゴリを見る