

ハッシュ化とは、可変長の入力データから固定長の出力を生成する処理です。これは、ハッシュ関数(ハッシュアルゴリズムとして実装される数学的手法)を用いて実行されます。
すべてのハッシュ関数が暗号技術を用いるわけではありませんが、暗号用ハッシュ関数は暗号資産の根幹を成しています。これにより、ブロックチェーンや分散型システムは高いデータ完全性とセキュリティを実現できます。
従来型と暗号用、いずれのハッシュ関数も決定的です。決定的とは、入力が同じであればハッシュアルゴリズムが常に同じ出力(ダイジェストまたはハッシュ)を返すことを意味します。
多くの場合、暗号資産のハッシュアルゴリズムは一方向関数として設計されており、膨大な計算資源や時間がなければ逆算できません。つまり、入力から出力を得るのは容易ですが、出力から入力を特定するのは非常に困難です。入力の特定が難しいほど、ハッシュアルゴリズムは安全と見なされます。
ハッシュ関数ごとに出力サイズは異なりますが、各ハッシュアルゴリズムの出力サイズは常に一定です。たとえば、SHA-256は256ビットの出力のみ、SHA-1は160ビットのダイジェストのみを生成します。
例として、「ExampleText」と「exampletext」をBitcoinで採用されているSHA-256ハッシュアルゴリズムで処理してみます。
| Input | Output (256 bits) |
|---|---|
| ExampleText | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
| exampletext | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
最初の文字の大文字・小文字の違いという小さな変更でも、まったく異なるハッシュ値が得られます。ただしSHA-256を使う限り、出力は常に256ビット(64文字)の固定長です。入力サイズが異なっても同じです。また、両単語を何度アルゴリズムにかけても、出力は必ず一定です。
同じ入力をSHA-1ハッシュアルゴリズムで処理した場合、以下のような結果になります。
| Input | Output (160 bits) |
|---|---|
| ExampleText | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
| exampletext | e58605c14a76ff98679322cca0eae7b3c4e08936 |
なお、SHAはSecure Hash Algorithmsの略称です。SHA-0やSHA-1、SHA-2グループやSHA-3グループを含む暗号用ハッシュ関数群を指します。SHA-256はSHA-2グループに属し、SHA-512なども同グループです。現在、SHA-2およびSHA-3系のみが安全と見なされています。
従来型のハッシュ関数は、データベース検索や大規模ファイル解析、データ管理など幅広い用途に使われます。暗号用ハッシュ関数は、メッセージ認証やデジタルフィンガープリントなど情報セキュリティ分野で広く利用されています。Bitcoinでは、ハッシュ関数がマイニングの本質を担い、新しいアドレスや鍵の生成にも関与します。
ハッシュ化の強みは、膨大な情報処理において発揮されます。たとえば、大きなファイルやデータセットをハッシュ化してその出力でデータの正確性や完全性を迅速に検証できます。これは、ハッシュ関数が決定的だからこそ、入力から常に簡潔な出力(ハッシュ)を生成できるためです。この方法で大量データの保存や記憶が不要となります。
ハッシュ化はブロックチェーン技術の中でも特に有効です。Bitcoinのブロックチェーンでは、マイニングを中心とした多くの処理でハッシュ化が使われます。実際、ほぼすべての暗号資産プロトコルが、トランザクション群をブロック化し、ブロック間を暗号的に連結してブロックチェーンを形成するのにハッシュ化を活用しています。
暗号技術を用いるハッシュ関数は、暗号用ハッシュ関数と呼ばれます。これを破るには膨大なブルートフォース攻撃が必要です。誰かが暗号用ハッシュ関数を「逆算」するには、出力に対応する入力を試行錯誤で見つける必要があります。ただし、異なる入力が同じ出力を生成する「コリジョン(衝突)」が起きることもあります。
暗号用ハッシュ関数が安全と評価されるには、コリジョン耐性、プレイメージ耐性、セカンドプレイメージ耐性の3つの特性を備える必要があります。
これらの特性を3つの短い文でまとめます。
コリジョンとは、異なる入力が同じハッシュを出す現象です。誰かがコリジョンを発見するまでは、そのハッシュ関数はコリジョン耐性があるとされます。すべてのハッシュ関数は入力が無限・出力が有限のため、コリジョンは必ず存在します。
コリジョン耐性とは、コリジョン発見の確率が極めて低く、発見には膨大な計算が必要な状態を指します。SHA-256のような強力なハッシュ関数は、この耐性が高い例です。
SHA-0およびSHA-1グループはコリジョンが発見されているため、現在はSHA-2およびSHA-3グループのみがコリジョン耐性を持つと考えられています。
プレイメージ耐性は一方向関数の概念に関係します。特定の出力を生んだ入力を見つける確率がごく低い場合に成立します。
この特性は、攻撃者が出力から入力を推測する場合に関係します。コリジョンはどの入力でもよく、2つの異なる入力が同じ出力を生成する場合です。
プレイメージ耐性は、ハッシュ化したメッセージのみで真正性を証明し、情報自体を公開せずに済むため、データ保護に有効です。実際、多くのサービスやWebアプリでは、パスワード自体ではなくそのハッシュ値を保存・利用しています。
セカンドプレイメージ耐性は、コリジョン耐性とプレイメージ耐性の中間的な性質です。セカンドプレイメージ攻撃は、既知の入力と同じ出力を出す特定の別の入力を見つけることです。
この攻撃は、ランダムな2入力ではなく、特定の入力に対して同じハッシュを出す別の入力を探します。
つまり、コリジョン耐性があればセカンドプレイメージ攻撃にも耐性がありますが、コリジョン耐性があってもプレイメージ攻撃(出力から入力発見)は依然可能です。
Bitcoinのマイニングには、残高照会、トランザクションの入出力結合、ブロック内のトランザクションをMerkle Treeにまとめるなど、多くの工程でハッシュ関数が使われます。Bitcoinブロックチェーンの安全性が高い主な理由の一つは、マイナーが次のブロックの有効な解を見つけるために多数のハッシュ演算を行う必要がある点です。
具体的には、マイナーは候補ブロックのハッシュ値を生成するために数多くの入力を試します。有効なブロックとして承認されるには、生成したハッシュ値が所定数の0で始まる必要があります。この0の数がマイニング難易度で、ネットワークのハッシュレートによって調整されます。
ハッシュレートとは、Bitcoinマイニングに投入されている計算能力です。ネットワークのハッシュレートが上がれば、Bitcoinプロトコルは自動的にマイニング難易度を調整し、平均ブロック生成時間が10分前後になるよう保ちます。逆に、マイナーが減ってハッシュレートが大きく低下すると、難易度が下がり、平均生成時間が再び10分になるまでマイニングが易しくなります。
なお、マイナーはコリジョンを見つける必要はありません。有効な出力(所定数の0で始まるハッシュ)は複数あり、ブロックごとに複数の正解が存在します。マイナーはそのうち1つを見つければよく、これはマイニング難易度で決まります。
Bitcoinマイニングは高コストであるため、マイナーが不正を行う動機はありません。不正をすれば大きな経済的損失を被るだけです。多くのマイナーがブロックチェーンに参加することで、ネットワークはより大規模かつ強固になります。
ハッシュ関数は、特に大量データを扱う際に不可欠なコンピュータサイエンスのツールです。暗号技術と組み合わせることで、ハッシュアルゴリズムは多様なセキュリティや認証手段を提供できます。このため、暗号用ハッシュ関数は暗号資産ネットワークに不可欠であり、その特性と動作原理の理解は、ブロックチェーン技術に関心を持つすべての人に役立ちます。
ハッシュ化は、任意のサイズのデータを固定長の出力に変換する関数です。ブロックチェーンでは、データの完全性とセキュリティを確保するために、固有のフィンガープリントを生成します。ごく小さなデータの変化でも全く異なるハッシュとなるため、検証や暗号的保護に最適です。
ハッシュ関数は、入力データを数学的アルゴリズムで処理し、固定長の出力を生成します。同じ入力は必ず同じ出力を返す決定性を持つため、暗号技術において再現性と信頼性を実現します。
ハッシュ化は、データ完全性検証、デジタル署名、パスワード認証、ブロックチェーンのセキュリティ保護に活用されます。データ改ざんを防ぎ、暗号システムでの本人確認を実現します。
ハッシュ化は固定長の出力を生成し、不可逆でデータ完全性検証に用います。暗号化は可逆でデータ機密の保護に利用されます。ハッシュ化は復号できませんが、暗号化は正しい鍵で復号が可能です。
優れたハッシュ関数は、コリジョン耐性(衝突回避)、微細な変更に対する耐改ざん性(出力が大きく変化)、高速な検索効率を備えている必要があります。
代表的なハッシュアルゴリズムにはMD5、SHA-1、SHA-256があります。MD5は128ビットのハッシュ値を生成しますが、既知の脆弱性があります。SHA-256は256ビットのハッシュ値を生成し、より高い安全性を持ちます。SHA-1は非推奨です。SHA-256は堅牢性とコリジョン耐性の高さから、ブロックチェーンで広く利用されています。











