ビットコインを含む仮想通貨の仕組みを理解するために知っておきたいハッシュ関数について解説していきます。
この記事を読むと次のことを理解できるようになると思います。
- 暗号学的ハッシュ関数について
- ハッシュ関数SHA-256
- ハッシュ関数RIPEMD-160
ハッシュ関数のSHA-256とRIPEMD-160とはビットコインで利用されているものです。このハッシュ関数を用いたアドレス生成方法は以下の記事を参考にしてください。
Contents
ハッシュ関数とは
ハッシュ関数とは、暗号方式のひとつで、ある入力(インプット)に対して、全く別の値を出力(アウトプット)として返すのが大きな特徴です。入力には数字でも文字列でも関係なく使用できます。
ハッシュ化されたデータの事をハッシュ値と呼び、ウェブサービスでは基本的にパスワードがハッシュ化されています。
ハッシュ関数の特徴
同じ入力には同じ出力

同じ値に対して、同じ値が出力されます。入力が一文字でも異なれば出力が大きく異なります。
出力が固定長

入力はどんな長さになろうとも出力は固定長で返されます。例えば、ハッシュ関数SHA-256では256ビットのハッシュ値が返されます。
入力によって計算時間があまり変わらない

入力の長さによって出力が返されるまでの時間はあまり変わりません。
暗号学的ハッシュ関数とは

暗号学的ハッシュ関数は、ハッシュ関数のなかで、暗号など情報セキュリティの用途に適する暗号数理的性質を持つもののことを言います。
ここでは暗号学的ハッシュ関数の安全基準3つを確認していきます。
一方向性(原像計算困難性)

安全基準1は出力から入力を特定しがたいことです。ハッシュ値H(a)がわかっているとき、そこから入力のメッセージをさがすことが困難でなければなりません。
第二原像計算困難性(弱衝突耐性)

安全基準2は同じ出力になる入力を特定しがたいことです。入力aからハッシュ値H(a)が与えられているとき、この出力H(a)と衝突するような別の入力を見つけることが困難でなければなりません。
衝突困難性(強衝突耐性)

安全基準3は衝突が困難であることです。安全基準2と近いですが、H(a)=H(b)となるような2つの異なる入力aとbを探し出すことが困難でなければなりません。
ハッシュ関数の種類

SHA-256
SHA-256とは、NIST(アメリカ標準技術局)によって定義されて規格で、「Secure Hash Algorithm 256 bit」の略です。
SHA-256を通すことで、入力に対して256ビット(32バイト)のハッシュ値を得られます。
SHA-256はビットコインアドレスを生成する際に使われます。
入力値
「だっちー」
出力値(ハッシュ値)
「aa06f78029070471592d00b4a1e8f529cb9c8d10d683ee5f68a47acf549f004b」
RIPEMD-160
RIPEMDは「RACE Integrity Primitives Evaluation Message Digest」の略です。長さが160ビット(20バイト)のハッシュ値です。
ビットコインでは公開鍵をSHA-256でハッシュ化し、再度RIPEMD-160でハッシュ化しています。
入力値
「だっちー」
出力値(ハッシュ値)
「7d0388b7dd9290188a38142527f07577f68196ed」
まとめ
今回はハッシュ関数の概要を解説しました。まとめると、ハッシュ関数は次の特徴があります。
- 一方向性でハッシュ値から元データを探すのは困難
- 出力がぶつからない衝突耐性があること
このハッシュ関数を繰り返してビットコインのアドレスが生成されているわけですね。ビットコインアドレスのもとになっている公開鍵や秘密鍵などについては以下の記事を参考にしてください。