ブロックチェーンやビットコインの勉強をしていると馴染みのないワードが数多く出てきます。ハッシュやハッシュ関数もその1つで難しい印象をお持ちの方も多いのではないでしょうか。
しかし、ブロックチェーンの技術を学んでいく上で非常に重要な技術になっていることから、ここで要点をまとめたいと思います。
一方向性ハッシュ関数の特徴
- メッセージが1ビットでも異なればハッシュ値は変わる
- ハッシュ値からメッセージの逆算はできない
- メッセージの長さに限らず、ハッシュ値は常に固定サイズ
- ハッシュ値のサイズは小さい
1つずつ説明したいと思います。
メッセージが1ビットでも異なればハッシュ値は変わる
ハッシュ関数は、入力するメッセージが1文字でも違えば全く異なるハッシュ値が出力されます。
ハッシュ関数を用いたハッシュ値は、異なる入力に対して同様の出力が出るという衝突を避けることが最重要であり、その可能性は限りなく0に近いと言えます。
ハッシュ値からメッセージの逆算はできない
入力データをハッシュ値として出力することは容易にできるのですが、出力されたハッシュ値から入力値(メッセージ)の逆算はできないように設計されています。
これは一方向性ハッシュ関数という特性によるものです。
メッセージの長さに限らず、ハッシュ値は常に固定サイズ
入力データの文字数がどれだけ多くても、一定のサイズでハッシュ値が出力されることも入力値(メッセージ)の逆算を困難にしている要素になります。
ハッシュ値のサイズは小さい
入力データのメッセージサイズがどれほど大きくなっても、出力されるハッシュ値は扱いやすいように小さくなってなっています。
これはデータ容量が限られているビットコインにとっては非常に重要なことです。
安全なハッシュ関数の性質
安全なハッシュ関数であるためには、弱衝突耐性と強衝突耐性という2つの性質を持っている必要があります。
弱衝突耐性
攻撃者にハッシュ値(h)とメッセージ(m)が与えられたとしてそれをh(m)とします。攻撃者は与えられたh(m)から、h(m)=h(n)を満たすnを求めることができない耐性を言います。
よく誤解があるのですが、nを求めることができないのではなく現実的な時間軸では困難であることを示しています。
強衝突耐性
m≠nかつh(m)=h(n)を満たすm,nを求めることができないことを言います。
弱衝突耐性と強衝突耐性という名前からして弱衝突耐性の方が突破されやすいように思えるのですが、与えられたメッセージに対して衝突を与えなくてはいけない分、強い仮定を置いている問題でそのぶん突破が難しい性質です。また、強衝突耐性は過去に突破されてしまった事例があります。
ビットコインで使用されているハッシュ関数
ビットコインはSHA-256(*1)とRIPEMD-160(*2)という2種類のハッシュ関数が使用されています。
2つのハッシュ関数を重ねることを「ダブルハッシュ」と言います。そして、ビットコインではSHA-256をRIPEMD-160の入力値として2回通して使用することで安全を高めています。
*1 SHA-256:256ビットのハッシュ値を出力。ビット長が長ければ長いほどハッシュ衝突を避けることができますが、ビットコインのブロックチェーンでは計算速度や実装のしやすさ、安全性などのバランスを考慮しSHA-256を採用。
*2RIPEMD-160:160ビットのハッシュ値を出力。オリジナルのRIPEMDの強衝突耐性は破られているが、改良版であるRIPEMD-160に関しては現時点では破られていない。
Reference
おかげさまで現在お友達が1057名を突破しました。仮想通貨の最新情報や重要なファンダ情報などを「プッシュ通知」にて誰よりもはやくお届けします。
Follow @imai_ryoujihttps://platform.twitter.com/widgets.jsTweet
- 分析レポート
- Bitcoinについて
- Ethereum経済圏について
- ST(セキュリティートークン)について
- PoS型プラットフォームトークンについて
- ステーブルコインについて
- コンセンサスアルゴリズムについて
- トークン設計について
- 流通設計について
- CBDCについて
- 各インフルエンサーによる特化した情報
- Q&A項目の共有
- 基礎学習
- 掲示板
https://lounge.dmm.com/detail/761/