オン ザ・ブロックチェーン

ビットコインの説明によく出てくるハッシュ(Hash)って何?

calendar

 ビットコイン、及び、ブロックチェーンの説明で、ハッシュ(Hash)っていうのがよく出て来ます。ハッシュが何なのか分かっていないとビットコインの詳しい仕組みは理解できませんので、よく分からない人は参考にしてみて下さい。簡単です。

スポンサーリンク

関数とは

 ハッシュっていうのは、ハッシュ関数のことなのですが、そもそも関数とは何かというと、何かの数値を変換する為のルールのことです。

 例えば、中学校とかで習ったと思いますが、

f(x) = 2x

fが関数です。この関数は与えられた値を2倍に変換して出力します。この関数に3を放り込めば6が出力され、15を放り込めば30が出力されるっていうだけの話です。

ハッシュ関数とは

 で、ハッシュ関数というのもあるルールに従って与えられた数値を変換します。実際の変換ルールについては式で簡単に表せるようなものではないのですが、ハッシュ関数の特徴を言葉で説明するなら簡単です。

  • どんな値を放り込んでも、決まった桁数(文字数)の数値になる。
  • 出てきた値から元の値を逆算することはできない。

 これだけです。

 一般的にハッシュ関数に放り込むのは、何らかの文字列です。まあ、文字もコンピュータにとっては、ただの数値なので同じことです。で、出力されるのは0〜fまでを一桁とする16進数で表された数値です。

2dc4630988fa6bf452d856ace4b

みたいな感じです。数値ですがアルファベットが入っているので文字列だと捉えた方が自然かも知れません。

 つまり、言い方を変えると、何らかの文字列をハッシュ関数に入れるとバラバラの文字列(0からf)になって出てくるというわけです。

 ハッシュ関数によって出力された値をハッシュ値と言います。また、ある文字列からハッシュ値を得ることをハッシュ化すると言います。

 どんな文字を入れても、ランダムに0〜fの文字を並べだけのようなバラバラの文字列になりますが、もちろん決まった法則に従って変換しているので、再現性はあります。同じ文字列を入力すれば必ず同じハッシュ値を得られます。

 「あ」という一文字を入れようとも、1万文字の文章を丸ごと放り込もうとも、得られるハッシュ値は全く同じ文字数になります。

 また、入力値が似ているからと言って、ハッシュ値が似ることはありません。SHA-256というハッシュ関数を使って試してみましょう。↓

私はビットコインを100BTC持っている。のハッシュ値↓
5DF9167DA45590BC4B770D43013850A77720790258A4B5151579F2060996CC44

私はビットコインを200BTC持っている。のハッシュ値↓
434C087C20F0DFE3FB111B840EEE47FBA005018AECAEE85989496B21897201A7

 100が200に変わっただけで、全くバラバラなハッシュ値になっているのが分かると思います。

 ちなみに、をハッシュ化してみると↓
DBC879E139DA5B0AF3C7C16508DD528C5127A678C64209FA5AE0413498FEA509

 どんな入力値であろうと、とにかくバラバラな値が同じ桁数で出力されるのがハッシュ関数の大きな特徴です。
オンラインSHA256ハッシュジェネレータというサイトでいろいろ試すことができますのでご興味のある方は試してみてください。

 そしてもう一つ大事なのが、ハッシュ値から元の入力値を逆算することは不可能だと言うことです。

 どんな解析機を使っても、5DF9167DA45590BC4B770D43013850A77720790258A4B5151579F2060996CC44という文字列が、「私はビットコインを100BTC持っている。」のハッシュ値であることを計算によって導くことはできません。

 一方で、5DF9167DA45590BC4B770D43013850A77720790258A4B5151579F2060996CC44が、「私はビットコインを100BTC持っている。」のハッシュ値であることを確かめるのは誰でも簡単にできます。

 この一方向性の特徴を利用して、ビットコインのみならず様々な場面でハッシュ関数は使われています。

ハッシュ関数の衝突耐性

 ハッシュ関数には、SHA-256や、SHA-512等、いろんな種類があり、それぞれ出力されるハッシュ値の桁数(文字数)が違います。

 入力値のパターンは無限にあると言えますが、出力値は桁が決まっている以上、有限です。なので、理論上は入力値が違うにも関わらず同じハッシュ値が得られることがありえます。違う入力値から同じハッシュ値が出てしまうことを「衝突する」と表現します。

 得られるハッシュ値の桁数が多ければ多いほどハッシュ値が衝突する確率は低くなると言えます。ハッシュ値が衝突してしまう確率が低いことを衝突耐性が高いと表現します。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




管理人

Nobuo

Nobuo

仮想通貨に興味があるただの人です。モナコインが好きなのでMonazon.jpを作りました。よろしくです。