ハッシュ関数とは?ハッシュ関数のアルゴリズムと種類
ブロックチェーン技術・仮想通貨の盛り上がりに乗じて、注目を浴びているハッシュ関数。
ハッシュ(hash)は英単語ですが、
- ハッシュド・ポテト(hashed potato)
- ハッシュド・ビーフ(hashed beef)
と日本で生活する中でも利用されている言葉です。
ハッシュ(hash)を邦訳すると、名詞では
- こま切れ肉料理
- 寄せ集め
という意味で使われ、動詞では
- (肉を)細かく切る
- めちゃくちゃにする
- 台無しにする
という意味になります。
コンピュータ界で使われるハッシュ関数のハッシュに一番近い意味は、「めちゃくちゃにする」になります。
この記事では、そのハッシュ関数の
- 仕組み・特徴
- 種類
について、それぞれ説明していきます。
ハッシュ関数の仕組み・特徴
ハッシュ関数の説明に入る前に、「関数」とはどの様なものなのか説明します。
関数
関数という言葉は、中学・高校の数学の単元の一つにあり、馴染みのある言葉かも知れません。
- コンピュータ界の関数
- 数学における関数
それぞれの意味合いは少し異なります。
数学における関数とは、ある決まった値を与えると何らかの値を返すような式の事を指します。
例えば、Y = a(定数) × X という一次関数の式があるとします。
- Y -> 何らかの値
- a -> 定数
- X -> ある決まった値
この式に
- 定数 a = 5
- ある決まった値であるX = 2
とそれぞれ代入すると、Yの値は10に決まります。
これが数学における関数になります。
一方、コンピュータ界の関数とは目的の計算をするための
- あらかじめ用意されている数式
- 面倒な計算や複雑な計算を1つの数式で簡潔に記述出来る計算の仕組み
になります。
- Microsoft社のExcel
- オープンソースのLibre Office Calc
の利用者は馴染みがあると思いますが、関数(Function)は、
- 引数(arguments)をインプットする事で
- アウトプットとして戻り値(Return value)が返ってきます。
コンピュータ界の関数を、数学における関数に無理矢理合わせると
- ある決まった値 = 引数(arguments)
- 何らかの値 = 戻り値(Return value)
となります。
例として、SUM関数を見てみましょう。
SUMは日本語で「合計」という意味です。
SUM関数の引数に
- 3
- 7
- 9
とインプットすると、アウトプットとして19という戻り値が返ってきます。
ハッシュ関数
ハッシュ関数とは、任意長のビット列から規則性のない固定長のビット列を生成する関数です。
少し日本語が難しいですが、
- 短い単語やどんなに長い文章(任意長のビット列)でも、それらを引数として入力すると
- 規則性のない一定の長さの文字列(規則性のない固定長のビット列)が戻り値として返ってくる
という事です。
- 引数 = 入力値
- 戻り値 = ハッシュ値
と呼びます。
具体的な例を見てみましょう。
ここでは、ハッシュ関数のSHA-256を用います。
ハッシュ関数には、アルゴリズムによって色々な種類のハッシュ関数があります。(ハッシュ関数の種類については後述します)
ハッシュ関数のSHA-256に
- 入力値として、「明日の天気は晴れです。」と適当な文章をインプット
- アウトプットであるハッシュ値として「0757F7CC9CCD0DACF3C54FDD0D9B78F7EB46F4167B41795323B11EBFCF07BD93」という規則性のない文字列
が返ってきます。
上記では、入力値に適当な文章をインプットしたので、次は入力値に適当な単語をインプットしてみましょう。
ハッシュ関数のSHA-256に
- 入力値として、「パソコン」と適当な単語をインプット
- アウトプットであるハッシュ値として「5F52EF058B01108A527E2A64BBEC5E6F40026088F2E58135739468B6F9DA307F」という規則性のない文字列
が返ってきます。
入力値(引数) | ハッシュ値(戻り値) |
---|---|
明日の天気は晴れです。 | 0757F7CC9CCD0DACF3C54FDD0D9B78F 7EB46F4167B41795323B11EBFCF07BD93 |
パソコン | 5F52EF058B01108A527E2A64BBEC5E6F 40026088F2E58135739468B6F9DA307F |
上記の例のように、ハッシュ関数・SHA-256の入力値に任意長のビット列の文章・単語である
- 明日の天気は晴れです。(11 桁)
- パソコン(4 桁)
をインプットすると、
- 0757F7CC9CCD0DACF3C54FDD0D9B78F7EB46F4167B41795323B11EBFCF07BD93
- 5F52EF058B01108A527E2A64BBEC5E6F40026088F2E58135739468B6F9DA307F
という64桁の規則性のない固定長のビット列がハッシュ値として返ってきます。
ハッシュ関数の特徴
ハッシュ関数は、
- 同じ入力値に対しては必ず同じハッシュ値が出力
- ハッシュ値から元の入力値に復元することは不可能
という特徴を持っています。
同じ入力値に対しては必ず同じハッシュ値が出力
入力値が同じであれば、誰が使っても必ず同じハッシュ値が出力されます。
一方、入力値が少しでも異なれば、出力されるハッシュ値は大きく異なります。
それ故に、ハッシュ値同士の関係性を分析、入力値を推測しようとしても全く意味がありません。
入力値(引数) | ハッシュ値(戻り値) |
---|---|
パソコン | 5F52EF058B01108A527E2A64BBEC5E6F 40026088F2E58135739468B6F9DA307F |
ハソコン | 1BAFE4552F7A3434C48580D85C059C7E F4F998E4679F8F73E4E115AC5D23874B |
ハッシュ値から元の入力値に復元することは不可能
ハッシュ値から入力値を求める事は不可能です。
つまり、ハッシュ関数は不可逆的な一方向の関数という事になります。
ハッシュ関数の種類
ハッシュ関数には多くの種類が存在しており、それはアルゴリズムの違いによるものです。
ここに代表的なハッシュ関数として
- MD5
- SHA-256
- SHA-512
- RIPEMD-160
を紹介します。
アルゴリズム | MD5 | SHA-256 | SHA-512 | RIPEMD-160 |
---|---|---|---|---|
ビット長(bit) | 128 | 256 | 512 | 160 |
バイト長(Byte) | 16 | 32 | 64 | 20 |
ハッシュ値の長さ(桁) | 32 | 64 | 128 | 40 |
ビット・バイトに関する記事はこちら
- チェックサム
- 誤り訂正符号
- 暗号学的ハッシュ関数 等々
異なった形で設計・最適化されています。
チェックサムとは、データの信頼性を確認するためのチェック方法です。
チェックサムを使った検査では、
- データの送り手側が決められた計算方法によって算出した値
- データの受け手側が同一の計算方法によって算出した値
が一致するかどうかを調べます。
誤り訂正符号とは、データに符号誤り(エラー)が発生した場合にそれを
- 検出
- 検出し訂正(前方誤り訂正)
する検査方法のことです。
MD5
Message Digest Algorythm 5の略です。
1991年にマサチューセッツ工科大学のロナルド・リベストによって開発されました。
MD5は同じハッシュ値を持つ入力値のペアが、普通のパソコンレベルで探索出来てしまう安全性が低いアルゴリズムです。
ハッシュ関数・MD5を実際に使ってみたい方はこちら
SHA-256
SHA-256は
- National Security Agency(NSA)によって設計
- Secure Hash Algorithm シリーズのハッシュ関数 SHA-2のバリエーションの中の1つ
- Secure Hash Algorithm のハッシュ値が256bitという意味
というハッシュ関数で、32bit CPUに最適化されています。
ハッシュ関数・SHA-256を実際に使ってみたい方はこちら
SHA-512
SHA-512は、
- National Security Agency(NSA)によって設計
- Secure Hash Algorithm シリーズのハッシュ関数 SHA-2のバリエーションの中の1つ
- Secure Hash Algorithm のハッシュ値が 512 bit という意味
というハッシュ関数で、64bit CPUに最適化されています。
ハッシュ値の長さが長い方がセキュリティ的な強度が高いですが、負荷が高くなります。
しかし、現状SHA-256でも必要十分な強度となっており、一般的にSHA-256が利用されています。
ハッシュ関数・SHA-512を実際に使ってみたい方はこちら
RIPEMD-160
RACE Integrity Primitives Evaluation Message Digest の略です。
1996 年にルーヴェン・カトリック大学の
- Hans Dobbertin
- Antoon Bosselaers
- Bart Preneel
によって開発されました。
RIPEMDは
- MD4の設計原理に基づいたもの
- SHA-1と同程度のパフォーマンス
- オープンな学術コミュニティによって開発され、特許による制限無し
というハッシュ関数です。
ハッシュ関数・RIPE_MD160を実際に使ってみたい方はこちら
以上、ハッシュ関数の
- 仕組み・特徴
- 種類
についての説明になります。
コメント