ブロックチェーンの暗号技術である「ハッシュ関数」はブロックチェーンの根幹をなしています。
ビットコインで使用されるハッシュ関数にはSHA-256、RIPEMD-160などがあります。
この難しそうな「ハッシュ関数」についてわかりやすくザックリ解説してみます。
ハッシュ関数とは
「ハッシュ関数」とはたくさんある暗号化技術の1つです。
パスワードのような人にバレたら困るようなデータがあり、これを暗号化する場合、このハッシュ関数とよばれる暗号化をすると、意味不明な文字列に変換することができます。
それではさっそくハッシュ関数を使ってみましょう!
ハッシュ関数の例
パスワード
「1234」
↓ (ハッシュ関数)
ハッシュ値
「03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4」
ここではパスワード「1234」をハッシュ関数を使って暗号化してみました。暗号化した文字列のことを「ハッシュ値」と呼びます。
もとの「1234」からは推測もできない意味不明な文字列に変換されました。
ハッシュ関数の特徴
元の文字列を探せない
長い暗号化されたハッシュ値からパスワード「1234」は推測できません。技術的にも元に戻すことはできないようです。これを一方方向で不可逆といいます。
ハッシュ関数の特徴として、暗号化されたハッシュ値から元の文字列を探すことはできず、不可逆であるという特徴があります。
同じ文字列は同じハッシュ値になる
先ほどのパスワード「1234」をもう一度ハッシュ関数にかけてみます。すると全く同じハッシュ値になりました。
これは同じ文字列であればハッシュ値は同じになるというハッシュ関数の特徴でもあります。
1文字でも違うと全然違うハッシュ値になる
今度はパスワードを「1233」に変えてみます。
パスワード
「1233」
↓ (ハッシュ関数)
ハッシュ値
「4654d793972c3b6a1d48fb0ab58d9cb0de46c3d33d605f9222c283dfaa12d420」
1文字変えただけですが、全然違うハッシュ値になってしまいました。1文字でも違うと全然違うハッシュ値になるというのもハッシュ関数の特徴の1つです。
ハッシュ関数の種類
ハッシュ関数にもいくつかの種類があります。ここでは代表的なハッシュ関数「SHA-256」、「RIPEMD-160」を紹介します。
SHA-256
「SHA-256」は「Secure Hash Algorithm 256 bit」の略です。長さが256ビット(32バイト)のハッシュ値となります。
上の例でハッシュ値を紹介しましたが、いずれもハッシュ関数は「SHA-256」を使用しました。
「SHA-256」は公開鍵からビットコインアドレスを作るときに使われます。
<例>
パスワード
- 「1234」
ハッシュ値
- 「03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4」
RIPEMD-160
「RIPEMD-160」は「RACE Integrity Primitives Evaluation Message Digest」 の略です。長さが160ビット(20バイト)のハッシュ値となります。
SHA-256より短いハッシュ値なので使いやすいんでしょうね。
ビットコインではSHA-256でハッシュ値にし、それをさらにRIPEMD-160でハッシュ値にします。これを「HASH160」と呼びます。
<例>
パスワード
- 「1234」
ハッシュ値
- 「cd9d379715cccc83fd8c8c2dc0730c6dd081bd35」
ビットコインアドレスを作る流れ
最後にビットコインアドレスを作る流れをみていきます。ハッシュ関数「SHA-256」、「RIPEMD-160」はここで使用されています。
公開鍵
↓
SHA-256
↓
RIPEMD-160
↓
160ビットのハッシュ値
↓
Base58Checkエンコード
↓
ビットコインアドレス
このような流れでビットコインアドレスが生成されます。
ハッシュ関数のまとめ
ここまで、ハッシュ関数とは、ハッシュ値とは、ハッシュ関数の特徴、SHA-256、RIPEMD-160についてまとめます。
- ハッシュ関数は暗号化の1種
- 暗号化した文字列をハッシュ値と呼ぶ
- ハッシュ値から元には戻せない
- ハッシュ関数は一方方向で不可逆
- ビットコインではビットコインアドレスの生成にハッシュ関数「SHA-256」「RIPEMD-160」が使用されている
以上、ブロックチェーンの暗号 ハッシュ関数(SHA-256、RIPEMD-160)をザックリ解説しました。
コメント