ハッシュ関数を分かりやすく説明する




この記事は約 9分24秒で読み終わります

ハッシュ関数を分かりやすく説明する

ブロックチェーン技術・仮想通貨の盛り上がりに乗じて、注目を浴びているハッシュ関数

ハッシュ関数は、用途等によって

  • チェックサム
  • 誤り訂正符号
  • 暗号学的ハッシュ関数 等々

異なった形で設計・最適化されています。

チェックサム・・・
データの信頼性を確認するためのチェック方法。
チェックサムを使った検査では、

  • データの送り手側が決められた計算方法によって算出した値
  • データの受け手側が同一の計算方法によって算出した値

が一致するかどうかを調べます。

誤り訂正符号・・・
データに符号誤り(エラー)が発生した場合にそれを

  • 検出
  • 検出し訂正(前方誤り訂正)

する検査方法のこと。

この記事では、特段の記述がない限り、ブロックチェーン技術等々で使われている暗号学的ハッシュ関数(以下、ハッシュ関数)の

  • ハッシュ関数のそれぞれの用語
  • ハッシュ関数の特徴
  • ハッシュ関数の種類

それぞれについて説明していきます。

スポンサーリンク

ハッシュ関数

ハッシュ関数

ハッシュとは?関数とは?

まず、

  • ハッシュ(hash)
  • 関数(function)

それぞれの言葉の意味から見ていきましょう。

ハッシュ(hash)

ハッシュ(hash)は英単語です。

日本で生活する中でも、

  • ハッシュド・ポテト(hashed potato)
  • ハッシュド・ビーフ(hashed beef)

という言葉を使用したり、聞いたりしたことはありませんか。

ハッシュ(hash)を邦訳すると、
名詞

  • こま切れ肉料理
  • 寄せ集め

動詞

  • (肉を)細かく切る
  • めちゃくちゃにする
  • 台無しにする

コンピュータ界で使われるハッシュ関数ハッシュに一番近い意味は、「めちゃくちゃにする」になります。

関数(function)

関数という言葉は、中学・高校の数学の単元の1つにあり、馴染みのある言葉かも知れません。

  • コンピュータ界の関数
  • 数学における関数

それぞれ、少し意味合いが異なるのでそれぞれ説明していきます。

数学における関数とは、ある決まった値を与えると何らかの値を返すような式の事を指します。

例えば、
Y = a(定数) ✖️ X という一次関数の式があるとします。

  • Y ➡️ 何らかの値
  • a ➡️ 定数
  • X ➡️ ある決まった値

この式に

  1. 定数 a5
  2. ある決まった値であるX2を代入
  3. すると、何らかの値を返すY10に決まります

次に、コンピュータ界の関数について説明します。

コンピュータ界の関数とは、目的の計算をするための

  • あらかじめ用意されている数式
  • 面倒な計算や複雑な計算を1つの数式で簡潔に記述出来る計算の仕組み

になります。

  • Microsoft社のExcel
  • オープンソースのLibre Office Calc

の利用者は馴染みがあると思います。

関数(Function)は、

  • 引数(arguments)をインプットする事で
  • アウトプットとして戻り値(Return value)が返ってきます。

関数

コンピュータ界の関数を、数学における関数に無理矢理合わせると

  • ある決まった値 = 引数(arguments)
  • 何らかの値 = 戻り値(Return value)

となります。

例として、SUM関数を見てみましょう。
SUMは日本語で合計という意味です。

SUM関数引数

  • 3
  • 7
  • 9

とインプットすると、アウトプットとして19という戻り値が返ってきます。

SUM関数

ハッシュ関数

  • ハッシュ(hash)
  • 関数(function)

それぞれの意味が理解出来た所で、いよいよハッシュ関数について見ていきます。

ハッシュ関数・・・
任意長のビット列から規則性のない固定長のビット列を生成する関数

少し日本語が難しいですが、要は

  • 短い単語やどんなに長い文章(任意長のビット列)を引数として入力すると
  • 規則性のない一定の長さの文字列(規則性のない固定長のビット列)として戻り値が返ってくる

という事です。

ハッシュ関数

  • 引数 ➡️ 入力値
  • 戻り値 ➡️ ハッシュ値

と呼びます。

具体的な例を見てみましょう。

ここでは、ハッシュ関数SHA-256を用います。

ハッシュ関数には、アルゴリズムによって色々な種類のハッシュ関数があります。(ハッシュ関数の種類については後述します)

アルゴリズム(algorithm)・・・コンピュータで計算を行うときの「計算方法」の事

ハッシュ関数SHA-256

  1. 入力値として、「明日の天気は晴れです。」と適当な文章をインプットします。
  2. アウトプットであるハッシュ値として、「0757F7CC9CCD0DACF3C54FDD0D9B78F7EB46F4167B41795323B11EBFCF07BD93」という規則性のない文字列が返ってきます。

ハッシュ関数・SHA-256

上記では、入力値適当な文章をインプットしたので、次は入力値適当な単語をインプットしてみましょう。

ハッシュ関数SHA-256

  1. 入力値として、「パソコン」と適当な単語をインプットします。
  2. アウトプットであるハッシュ値として、「5F52EF058B01108A527E2A64BBEC5E6F40026088F2E58135739468B6F9DA307F」という規則性のない文字列が返ってきます。
ハッシュ関数SHA-256

入力値(引数) ハッシュ値(戻り値)
明日の天気は晴れです。 0757F7CC9CCD0DACF3C54FDD0D9B78F
7EB46F4167B41795323B11EBFCF07BD93
パソコン 5F52EF058B01108A527E2A64BBEC5E6
F40026088F2E58135739468B6F9DA307F

上記の例のように、ハッシュ関数SHA-256入力値任意長のビット列の文章・単語である

  • 明日の天気は晴れです。(11 桁)
  • パソコン(4 桁)

をインプットすると、

  • 0757F7CC9CCD0DACF3C54FDD0D9B78F7EB46F4167B41795323B11EBFCF07BD93
  • 5F52EF058B01108A527E2A64BBEC5E6F40026088F2E58135739468B6F9DA307F

という64 桁の規則性のない固定長のビット列ハッシュ値として返ってきます。

ハッシュ関数の特徴

ハッシュ関数の特徴として大きく

  1. 同じ入力値に対しては必ず同じハッシュ値が出力
  2. ハッシュ値から元の入力値に復元することは不可能

同じ入力値に対しては必ず同じハッシュ値が出力

入力値が同じであれば、誰が使っても必ず同じハッシュ値が出力されます。

同じ入力値に対しては必ず同じハッシュ値が出力

入力値が少しでも異なれば、出力されるハッシュ値は大きく異なります。
それ故に、ハッシュ値同士の関係性を分析、入力値を推測しようとしても全く意味がありません。

同じ入力値に対しては必ず同じハッシュ値が出力

入力値(引数) ハッシュ値(戻り値)
ソコン 5F52EF058B01108A527E2A64BBEC5E6
F40026088F2E58135739468B6F9DA307F
ソコン 1BAFE4552F7A3434C48580D85C059C7E
F4F998E4679F8F73E4E115AC5D23874B

ハッシュ値から元の入力値に復元することは不可能

ハッシュ値から入力値を求める事は不可能です。

つまり、ハッシュ関数不可逆的な一方向の関数という事になります。

ハッシュ値から元の入力値に復元することは不可能

ハッシュ関数の種類

ハッシュ関数には多くの種類が存在しており、それはアルゴリズムの違いによるものです。

ここに代表的なハッシュ関数として

  • MD5
  • SHA-256
  • SHA-512
  • RIPEMD-160

を紹介します。

ハッシュ関数SHA-256

アルゴリズム MD5 SHA-256 SHA-512 RIPEMD-160
ビット長(bit) 128 256 512 160
バイト長(Byte) 16 32 64 20
ハッシュ値の長さ(桁) 32 64 128 40

ビット・バイトに関する記事はこちら

コンピュータが動く仕組み【ビット・バイト】
コンピュータが動く仕組み【ビット・バイト】 コンピュータが動く仕組みは2進数が基本です。 2進数についてはこちら 僕たちが普段生活している世界では10進数を使っているので、2進数はしっくりこないと思います。 ...

MD5

Message Digest Algorythm 5の略です。

1991 年にマサチューセッツ工科大学のロナルド・リベストによって開発されました。

MD5は同じハッシュ値を持つ入力値のペアが、普通のパソコンレベルで探索出来てしまう安全性が低いアルゴリズムです。

ハッシュ関数・MD5を実際に使ってみたい方はこちら

http://www.convertstring.com/ja/Hash/MD5

SHA-256

  • National Security Agency(NSA)によって設計
  • Secure Hash Algorithm シリーズのハッシュ関数 SHA-2のバリエーションの中の1
  • Secure Hash Algorithm のハッシュ値256 bit という意味

32 bit CPU に最適化されています。

ハッシュ関数・SHA-256を実際に使ってみたい方はこちら

http://www.convertstring.com/ja/Hash/SHA256

SHA-512

  • National Security Agency(NSA)によって設計
  • Secure Hash Algorithm シリーズのハッシュ関数 SHA-2のバリエーションの中の1
  • Secure Hash Algorithm のハッシュ値512 bit という意味

64 bit CPU に最適化されています。

ハッシュ値の長さが長い方がセキュリティ的な強度が高いですが、負荷が高くなります。

しかし、現状SHA-256でも必要十分な強度となっており、一般的にSHA-256が利用されています。

ハッシュ関数・SHA-512を実際に使ってみたい方はこちら

SHA512ハッシュ - オンラインSHA512ハッシュジェネレータ
SHA512ハッシュ。文字列のSHA512ハッシュを作成するためのオンラインツール。 SHA512のメッセージがこの無料のオンラインSHA512ハッシュユーティリティを使用して、任意の文字列からダイジェストを生成します。

RIPEMD-160

RACE Integrity Primitives Evaluation Message Digest の略です。

1996 年にルーヴェン・カトリック大学の

  • Hans Dobbertin
  • Antoon Bosselaers
  • Bart Preneel

によって開発されました。

RIPEMD

  • MD4の設計原理に基づいたもの
  • SHA-1と同程度のパフォーマンス
  • オープンな学術コミュニティによって開発され、特許による制限がありません

ハッシュ関数・RIPE_MD160を実際に使ってみたい方はこちら

RIPE MD160ハッシュ - オンラインRIPE MD160ハッシュジェネレータ
RIPE MD160ハッシュ。文字列のRIPE MD160ハッシュを作成するためのオンラインツール。 RIPE MD160メッセージは、この無料のオンラインRIPE MD160ハッシュユーティリティを使用して、任意の文字列からダイジェストを生成します。

コメント