本文へスキップ
buybitcoinsmart

用語集 / マイニングとコンセンサス

SHA-256

別名はSHA256です。

SHA-256とは?
SHA-256は、任意の長さの入力を受け取り、何度実行しても同一で、事前に予測できず、逆算も不可能な32バイトの指紋を返します。

ビットコインは、ほぼあらゆる場面でこの1つの関数に依存しています。ブロックハッシュ、トランザクションID、マークルツリー、アドレスのチェックサム、そしてシードフレーズのチェックサムです。出力は256ビットで、64文字の16進数として表示され、およそ1.2×10の77乗個の値の空間から取り出されます。これが、コインがどこかへ送られる前に、入力ミスのあるアドレスを検出する計算の仕組みです。

仕組み

SHA-256は入力を512ビットの塊に分割し、それぞれを64ラウンドのシフト、回転、加算によって撹拌します。

撹拌される状態は32ビットの8つのワードで、最初の8つの素数の平方根の小数部分から取った定数で初期化されます。一方、64個のラウンド定数は最初の64個の素数の立方根から取られます。重要なのはその由来です。隠された理由で誰かが選べた数ではないという点で、この設計はバックドアがないと主張する根拠にしています。このアルゴリズムは米国国家安全保障局(NSA)が作成し、NISTが2001年に公開しました。現在の仕様はFIPS 180-4です。

ビットコインが実際に手に入れているのは3つの性質です。この関数は決定論的であるため、どこにあるどの機械でも同じバイト列から同じダイジェストを導き出します。雪崩効果があるため、入力の1ビットを反転させると出力ビットのおよそ半分が変わり、両者を結び付けるパターンはありません。そして逆方向に実行されることに耐えます。ダイジェストから入力を復元する方法も、同じダイジェストを共有する2つの入力を作り出す方法も、総当たりより速くは見つかっていません。SHA-1は2017年2月に実用的な衝突が発見されて破られましたが、これには研究者たちに膨大な計算量がかかり、SHA-2にはまったく影響しませんでした。

ビットコインがこの関数を1度だけ呼ぶことはほとんどありません。ブロックヘッダー、トランザクションID、マークルノード、ピアツーピアメッセージのチェックサムは、いずれも2回計算する方式を使っており、ダイジェストをもう一度ハッシュします。アドレスのハッシュは別の経路を取り、SHA-256のダイジェストにRIPEMD-160を適用します。レガシーアドレスの20バイトのペイロードはここから来ています。Taprootはまたパターンを打ち破りました。BIP340は、ドメイン分離用のプレフィックスを付けてSHA-256を1回だけ呼ぶタグ付きハッシュを定義しており、ある目的の署名を別の目的に再利用できないようにしています。

どこで目にするか

ブロックエクスプローラーにある64文字の16進数文字列はすべてSHA-256の出力です。サポート窓口に貼り付けるトランザクションIDや、長いゼロの連続で始まるブロックハッシュも含まれます。後者は、ターゲットを満たしたヘッダーがどのような姿かを示しています。

コインを保有するときに直接関係する場所が2つあります。シードフレーズにはこの関数で作られたチェックサムが付いています。12個の単語は、128ビットの乱数に、その乱数のSHA-256ダイジェストから取った4ビットのチェックサムを加えたものを符号化しているため、1語を間違えたフレーズは、空のウォレットを黙って開くのではなく、およそ16回に15回は拒否されます。レガシーアドレスにも同様の防御があり、SHA-256を2回計算して得た4バイトのチェックサムによって、ランダムな入力ミスが有効なアドレスを生み出す確率はおよそ43億回に1回になります。

マイニング機器はほかの何のためにも存在しません。ASICはこの1つの関数だけを計算し、それ以外は計算しないチップです。ビットコインのマイナーが別のアルゴリズムで構築されたチェーンに転用できないのはそのためであり、「SHA-256コイン」という表現が分岐(フォーク)の一族全体を指すのもそのためです。ただし、これらすべてには限界があります。チェックサムは入力ミスのあるアドレスを検出するものですが、マルウェアが完全に有効で自分のものではないアドレスにすり替えたものは決して検出できません。

混同しやすい用語

よくある質問

量子コンピューターはSHA-256を破れるのでしょうか?

一般に言われるような意味では破れません。知られている量子アルゴリズムは、公開鍵暗号を弱めるほどにはハッシュ探索を弱めないため、ビットコインで危険にさらされているのは署名方式であり、ハッシュ関数ではないと考えられています。

ビットコインはなぜデータを2回ハッシュするのですか?

2回ハッシュするのは、長さ拡張攻撃に対するSatoshi Nakamotoの予防措置でした。長さ拡張とは、ダイジェストだけを知っている者が1回の計算を継続できるという弱点です。ほとんどコストがかからず、その種の攻撃を完全に排除できます。

次に読む

関連用語

マイニングとコンセンサスのその他の用語

このページを英語で読む