piapia123
ja

SHA-3 / SHAKE / Keccak ハッシュ計算

エンコード

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

同じ置換の上に成り立つ3つのハッシュ族を一度に扱えます。実装は同一のコードで、違いはパディングの1バイトだけ、そして結果は互いに無関係です —— ここが最大の落とし穴で、SHA3-256 と Keccak-256 は別物です。NIST が 2015 年に SHA-3 を確定した際、パディングを 0x01 から 0x06 に変更しました。この1バイトのせいで両者のダイジェストはまったく異なります。Ethereum は最初から原版の Keccak-256 を使っており、コントラクトアドレス、トランザクションハッシュ、イベントの topic、ERC-20 のメソッドセレクタはすべてその上に成り立っています。SHA3-256 で照合すると、形式は完全に正しいのに誰も見覚えのない値が返ります。3つの族にはそれぞれの用途があり、ドロップダウンは族ごとに並べてあります。

機能

  • 10の変種:SHA3-224/256/384/512・SHAKE128/256・Keccak-224/256/384/512
  • SHAKE は出力長を指定できます(1〜512バイト)。他の変種は標準で固定です
  • 原版 Keccak と SHA-3 を別項目に —— Ethereum が使うのは前者です
  • 出力は16進数(大文字・小文字を切替可)または Base64
  • 日本語や emoji は UTF-8 バイトで計算し、openssl や Ethereum のツールと一致します
  • 内蔵実装なので、ブラウザがどの SHA-3 変種を提供するかに依存しません

使い方

  1. テキストを入力欄に貼り付けます
  2. 変種を選びます(Ethereum 関連なら Keccak-256)
  3. SHAKE を選んだ場合は出力長を設定します
  4. Ctrl/⌘ + Enter を押すか「実行」をクリックし、結果をコピーします

よくある質問

SHA3-256 と Keccak-256 は何が違うのですか?
パディングの1バイトだけで、結果はまったく別物になります。 どちらも同じ Keccak-f[1600] 置換と同じ 136 バイトのブロックサイズを使い、唯一の違いは吸収の最後に付けるバイトです。原版 Keccak は 0x01、NIST が確定した SHA-3 は 0x06 を付けます。たとえば空文字列では、Keccak-256 は c5d24601…、SHA3-256 は a7ffc6f8… になります —— どちらも形式は正しく、1バイトも共通しません。Ethereum は一貫して原版 Keccak を使うので、コントラクトアドレスやトランザクションハッシュを照合する際は必ず Keccak-256 を選んでください。
SHAKE とは何で、なぜ出力長を指定できるのですか?
SHAKE は拡張出力関数(XOF)です —— SHA-256 のように 32 バイトで固定されるのではなく、必要なだけいくらでも出力を絞り出せます。これは「切り詰め」ではなく、スポンジ構造そのものの性質です:ブロックを絞り出すたびに再度置換するので、いくらでも続けられます。1つの種から複数の鍵を導出する場面(KMAC や耐量子署名で多用されます)のように、可変長の出力が必要なときに適しています。ここでは上限を 512 バイトにしていますが、実際にはまず使いません。
10の変種のうち、どれを選べばよいですか?
用途で決まります。Ethereum やブロックチェーン関連は必ず Keccak-256 です(SHA3-256 ではありません)。NIST 標準に沿った新しい設計では、必要な長さに応じて SHA3-224/256/384/512 を選び、中でも 256 が最も一般的です。可変長の出力(鍵導出、乱数の拡張)が必要なら SHAKE128(高速)か SHAKE256(余裕が大きい)を選びます。Keccak-224/384/512 は、古いシステムの再現や実装同士の比較以外ではほとんど使いません。
SHA-3 は SHA-256 より安全ですか?移行すべきですか?
現時点では不要です。SHA-256 に実用的な攻撃はなく、SHA-3 の価値は構造がまったく別である点にあります:SHA-2 は Merkle–Damgård 構造、SHA-3 はスポンジ構造で、弱点が重なりません。つまり SHA-3 は「SHA-2 に問題が生じたときの退路」であって、「今より強い」という話ではありません。新しいシステムではどちらでも構いませんが、SHA-256 のほうが互換性とハードウェア対応で有利です。

関連ツール