BLOG(小ネタ)

ビットコインにも活用される暗号学的ハッシュ関数とは?わかりやすく解説

どうもshoto です。

ビットコインやイーサリアムなど暗号技術を活用した仮想通貨やブロックチェーンが話題となっています。

そして重要な暗号技術の1つに「ハッシュ関数」というものがあるのですが、このハッシュ関数についてイマイチよく分からない方も多いと思います。

このハッシュ関数という技術は様々な利用用途があります。

例えば仮想通貨ビットコインではSHA-256というハッシュ関数アルゴリズムが実装されており、演算量証明させることでブロックチェーンの改ざんを難しくしています。

いまいちピンとこないと思いますので今回はそんな「ハッシュ関数」についてわかりやすく解説していきたいと思います。

ハッシュ関数とは

ハッシュ関数とは入力値に対して全く別の出力値を出力する関数のことをいいます。

ハッシュ関数はデータの簡略化やデータ構造検索高速化、改ざんなどの検出に利用されることが多いです。

また、クレジットカードやパスワードなどをハッシュ化することでサービス提供者側にそれらの情報を知られないようにする施策としても活用されます。

例えばCoinHack-Labというパスワードを入力した場合、ハッシュ関数は16進数の固定長に暗号化出力するなどです。

ハッシュ関数

ハッシュ関数の特徴

ここでハッシュ関数の特徴として以下の3つをおさえておきましょう。

  • 入力値に対して必ず同じ出力値となる

  • 出力値から入力値の推測が不可能

  • 固定長出力が可能
  • まず、ハッシュ関数では入力値に対して必ず同じ出力値になります。

    例えば「CoinHack-Lab」という入力値があった場合、「b04649f6」という出力値を出力したとします。

    次に「CoinHack-Lab1」という入力をした場合、ハッシュ関数は「2cbbf315」という全く別の出力値を出力します。

    要するに1文字でも入力値が異なれば出力値は全く違ったものとなるということです。

    そして出力値から入力値が推測ができない不可逆性も1つの特徴です。

    せっかくパスワードをハッシュ化しても、ハッシュ値からパスワードを推測されては意味がありませんよね!

    また最後の特徴としてハッシュ値は固定長出力であることです。

    ハッシュ関数では入力値がどんなに長かろうが短かろうが必ず出力桁数(バイト数)は同じとなります。

    ここでビットコインに実装されるハッシュ関数アルゴリズム「SHA-256」を例に固定長出力をみてみましょう。

    ビットコインハッシュ関数アルゴリズム「SHA-256」

    ビットコインでは「SHA-256」というハッシュ関数アルゴリズムが使用されていますが、SHA-256はバイト長が32バイトなので64桁のハッシュ値を出力します。

    例えば、「CoinHack-Lab」という入力値に対して「e863d36c 24ada694 fa77454b 33e8f9b9 545d372a ae251e87 79fc25df 16943fed」という64桁のハッシュ値を出力します。

    そしてこれは入力値が少ないもしくは多い文字数でも必ず64桁の16進数固定長が出力されるハッシュ関数アルゴリズムです。

    これがアルゴリズムで決まった固定長、すなわち決まった桁数の出力を返すという意味です。

    ということでハッシュ関数について解説しました。

    ハッシュ関数はその機能的特徴を活かす事で様々なことに活用できるという事が分かります。

    なのでハッシュ関数を理解する上で「入力値に対して必ず同じ出力値となる」、「出力値から入力値の推測が不可能」、「固定長出力が可能」という3点の特徴をおさえておけばOKです!


    記事にBitcoinを投げ銭する!
    %d人のブロガーが「いいね」をつけました。