ブロックチェーン/レベル II · 仕組み/2.1 暗号技術/レッスン 1
ハッシュ関数とSHA-256
台帳を支える指紋
用意するものshasumまたはopensslがインストールされているターミナルオンラインSHA-256計算機1文字だけ異なる2つのテキストファイル
問い
- ファイルの1文字を変えるだけで、そのハッシュの約半分が変わるのはなぜでしょうか?
- 可能な入力は無限にあるのに出力は有限個しかないとしたら、衝突する2つの入力を見つけることが依然として計算上不可能なのはなぜでしょうか?
- 前身のSHA-1が破られたのに、SHA-256が安全だったのはなぜでしょうか?
探究
- 暗号学的ハッシュ関数は、任意の長さのデータを固定長のダイジェストに変換します。決定的であり、同じ入力からは常に同一の出力が得られます。計算は高速ですが、逆算することは計算上不可能です。この一方向性が原像耐性(プリイメージ耐性)を定義しています。攻撃者がハッシュ値しか持っていなければ、元のメッセージを導き出すことはできません。この不可逆性が、分散システム全体で完全性チェックや本人証明の安全性を支えています。
- SHA-256は、入力のサイズに関係なく256ビットの出力を生成します。入力が1バイトでも1ギガバイトのファイルでも、ダイジェストは常にちょうど32バイトです。長さが一定であるため、一貫した保存と比較が可能になります。この関数はデータを512ビットのブロック単位で処理し、64ラウンドの論理演算を行います。設計はMerkle–Damgård構造に従っており、圧縮関数をブロック間で連鎖させています。出力をかき混ぜているのは、この圧縮関数による攪拌処理です。
- アバランシェ効果は重要な特性で、入力の1ビットを反転させると出力ハッシュの約半分のビットが変化します。この感度の高さにより、ごくわずかなデータの破損や改ざんでもまったく異なるダイジェストになります。そのため、ハッシュ関数はファイルの完全性の検証や改変の検出に最適です。どれほど微細な変更でも、期待されるハッシュと計算したハッシュは一致しなくなります。
- 衝突耐性は最も厳しい要件です。誕生日限界(バースデイバウンド)により、同じハッシュを生成する2つの異なる入力を見つけるにはおよそ2^128回の演算が必要です。SHA-256では、この計算コストのため、現在のハードウェアによるブルートフォース攻撃は現実的ではありません。対照的に、SHA-1は2017年にGoogleとCWIの研究者によって実証された、SHAtteredとして知られる実用的な衝突攻撃の被害を受けました。この脆弱性により、セキュリティが重要な用途ではSHA-1からの移行を余儀なくされました。
- ビットコインはSHA-256を2回適用しており、これはダブルハッシュと呼ばれます。ブロックヘッダーとトランザクションIDはSHA-256でハッシュ化され、その結果がもう一度SHA-256でハッシュ化されます。サトシはこの選択理由を説明していません。よくある説明は、SHA-256のようなMerkle–Damgård型ハッシュの既知の性質である長さ拡張攻撃への対策というものです。チェーン上のすべてのブロックハッシュとトランザクションIDは、この2回のハッシュ処理の出力です。
- 任意のターミナルまたはオンラインツールを開き、文字列'MSTR Cat'のSHA-256ハッシュを計算してください。次に、1文字の大文字・小文字だけを変えた'MSTR cat'のハッシュを計算します。2つの64桁の16進数出力を比較してください。両者はまったく異なり、識別できるパターンは何も共有していません。この即座の食い違いは、アバランシェ効果が実際に働いている様子を示しています。わずか1ビットの変化でダイジェスト全体がかき混ぜられることから、この関数が入力に極めて敏感であることが確認できます。
重要な事実
- SHA-256は、入力のサイズにかかわらず固定長256ビットの出力を生成します。
- アバランシェ効果により、1ビットの変化でハッシュのビットの約半分が変わります。
- ブルートフォースでSHA-256の衝突を見つけるには、約2^128回の演算が必要です。
- SHA-1は2017年に実用的な衝突攻撃(SHAttered)によって破られました。
- ビットコインは、ブロックハッシュとトランザクションIDにダブルSHA-256を使用しています。
- SHA-256は、512ビットのブロックを64ラウンドにわたって処理します。
演習 九・六・三・一
9集めるコンピューティングで使用される9つのハッシュ関数またはチェックサムアルゴリズムを挙げてください。出力サイズと主な用途についても記載してください。
6まとめる9つをセキュリティ強度に基づいて6つのカテゴリーに分類してください:破られたもの、非推奨、汎用の標準、高セキュリティ用途の標準、高速化に特化したもの、その他。
3絞り込む6つのグループを、特定のアプリケーションでハッシュ関数が選ばれる3つの核心的な理由に絞り込んでください。
1結晶化する固定長のダイジェストによって可変長のデータの検証が可能になる仕組みを、1文で説明してください。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。