任意長の文字列から一意に決まる固定長の値
ビットコインにおいてブロックチェーンが事実上、改ざんできないことを保証するときに中心的な役割を果たしているのが1方向性ハッシュ関数です。
ハッシュ関数は任意長の入力メッセージに対して固定長のハッシュ値を出力する決定的関数であり、入力が異なればハッシュ値も異なります。
大きな2つのファイルが同一であるかどうかを判定する際に、全てのデータを比較することは非効率的であるため、それぞれのハッシュ値を比較して効率化を図るといった用途に用いられます。
満たすべき3つの性質
1方向性ハッシュ関数は、ブロック作成時に近道がないことを保証します。
つまり与えられたハッシュ値を持つような入力メッセージを求めることは計算量的に困難であるという性質を持つのです。
暗号で利用されるハッシュ関数は、1方向性を含め、次の3つの性質を満たしていなければなりません。
- 衝突困難性
- 原像困難性(1方向性)
- 第2原像困難性
ハッシュ関数SHA-256
ビットコインで利用しているハッシュ関数はSHA-256と呼ばれるもので、その仕様は米国の連保情報処理標準FIPS180-4に定められています。
ハッシュ値計算の流れ
ハッシュ関数は、任意長の入力メッセージに対して、固定長のハッシュ値を出力します。
また、ハッシュ関数は入力が少しでも異なると出力が全く異なるように設計されています。
つまりメッセージの局所的な違いが全体に伝搬されていくような構成となっています。