ダブル SHA-256(SHA-256d)ハッシュ生成ツール
Bitcoin で使われるダブル SHA-256(SHA-256d)、つまりバイナリの SHA-256 ダイジェストに対する SHA-256 を計算。16進入力とバイト順反転に対応し、ブラウザー内で動作します。
すべてブラウザ内で実行されます。データがアップロードされることはありません 。
ダブル SHA-256(SHA-256d)とは?
ダブル SHA-256(SHA-256d とも書きます)は、入力を SHA-256 でハッシュ化し、得られた32バイトのバイナリダイジェストをもう一度 SHA-256 でハッシュ化します。Bitcoin が、ブロックヘッダー、トランザクション ID、マークルツリー、Base58Check のチェックサムに使っているハッシュです。このツールは、ブロックエクスプローラーが表示するのと同じように、バイト順を反転した結果も表示できます。
ダブル SHA-256(SHA-256d)の使い方
- ハッシュ化するテキスト にデータを入力します。Bitcoin のデータ構造の場合は、入力エンコーディングで 16進数のバイト列 を選び、シリアライズされたヘッダーやトランザクションを貼り付けます。
- 通常の文字列をハッシュ化する場合は、エンコーディングを テキスト (UTF-8) のままにします。
- ブロックエクスプローラーや Bitcoin Core が表示する値(txid / ブロックハッシュ)を得るには、バイト順を反転 にチェックを入れます。
- 出力形式 を選び、コピー をクリックします。
例
Bitcoin genesis block header (Hex bytes): 0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c, Reverse byte order on
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
有名なジェネシスブロックのハッシュです。バイト順を反転しない場合の出力は 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000 です。
ダブル SHA-256(SHA-256d)を使うべき場面
Bitcoin のブロックヘッダーやトランザクション ID を手作業で確認したいとき、Base58Check のチェックサム(SHA-256d の先頭4バイト)を計算したいとき、ほかのプロトコルの SHA-256d の値を再現したいときに使います。パスワードには使わないでください。また、仕様が素の SHA-256 を求めている場合も使わないでください。結果が異なります。ダイジェストの16進テキストをもう一度ハッシュ化しても SHA-256d にはなりません。
ダブル SHA-256(SHA-256d)の仕組み
このツールは SHA-256(SHA-256(data)) を計算します。重要なのは、2回目の SHA-256 が、最初のダイジェストの64文字の16進文字列ではなく、32バイトの生のバイト列に対して実行される点です。多くのオンラインツールがここを間違えています。Bitcoin は32バイトの結果をリトルエンディアンの数値として扱うため、先頭に0が並ぶおなじみのブロックハッシュは、ダイジェストのバイト順を反転したものです。バイト順を反転 オプションはまさにそれを行います。
一般的な使用例
- 80バイトのヘッダーから Bitcoin のブロックハッシュを検証する
- 生のシリアライズされたトランザクションからトランザクション ID(txid)を計算する
- Base58Check アドレスや WIF 鍵の4バイトのチェックサムを計算する
- 開発中に、マイニングやウォレットの実装を相互検証する
セキュリティ注意事項
SHA-256d の衝突耐性は SHA-256 と同等です。パスワードハッシュではありません。パスワードには Argon2、scrypt、bcrypt を使ってください。すべてのハッシュ計算はブラウザー内でローカルに行われます。
よくある質問
なぜ Bitcoin は2回ハッシュ化するのですか?
Satoshi が SHA-256d を採用したのは、単一の Merkle–Damgård 構造のハッシュに対する長さ拡張攻撃への対策だった可能性が高いです。衝突の見つけにくさが SHA-256 自体より高まるわけではありませんが、現在ではプロトコルに固定されています。
結果がブロックエクスプローラーと一致しないのはなぜですか?
よくある原因は3つです。ヘッダーを 16進数のバイト列 ではなくテキストとして入力した、2回目のハッシュを生のダイジェストではなく16進文字列に対して行った、バイト順を反転していない、のいずれかです。エクスプローラー形式のハッシュには バイト順を反転 にチェックを入れてください。
"abc" のダブル SHA-256 は何ですか?
UTF-8 入力で通常のバイト順の場合は 4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358 です。