cSHAKE256 ハッシュ生成ツール

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

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

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

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

cSHAKE256

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

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

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

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

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

例

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

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

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

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

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

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

一般的な使用例

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

セキュリティ注意事項

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

よくある質問

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

定義上、cSHAKE256 は SHAKE256 と等しくなります。abc を 512 ビットで計算すると 483366601360a877… となり、SHAKE256 と同じ結果です。

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

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

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

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

他のカテゴリを見る