単語記事: ハッシュ

編集

ハッシュとは、あるデータが別のあるデータと一致しているかどうかを調べる際に使われる短いデータである。

曖昧さ回避

概要

ハッシュとは、データの確認や探索に用いる小さなデータの事である。ハッシュ値は元データを何らかのルールで要約したものと捉えることができる。

ハッシュはある特定アルゴリズムによって生成され、次のような場合に用いられる。

ハッシュはその利用のされ方から、同じデータに対しては同じハッシュが生成されなければならない。また、その他にも以下の用件を満たすのが望ましい。

圧縮と異なるのは、ハッシュは元となるデータが一致しているかどうかが分かれば良いので、データを復元できなくても良い点である。そのため、通常あるデータハッシュはそのデータを圧縮したものよりもかにデータ量が少ない。また、元データを復元できないことから、暗号化とも異なる。暗号化では暗号化で生成されたデータからパスワードを用いて復元できなければならない。

世の中には様々なハッシュアルゴリズムが存在するが、大まかに言うとデータ構造を作るためのハッシュと、暗号セキュリティで用いるハッシュ(暗号ハッシュという)があり、それぞれ特性が異なっている。

データ構造用のハッシュでは、良いハッシュを生成できるに越したことはないが、そのためにハッシュ自体の生成が遅くては本末転倒なため、性速度バランスを取ったアルゴリズムが使用される。また生成される値の範囲も狭く、大体は4バイト整数にまとめられる。例 Murmur Hash,Fowler-Noll-Vo hash,Jenkins hashなど。

一方暗号ハッシュでは、簡単にデータの衝突などが発生しては問題があるため、生成が遅くとも天文学確率でしか同じハッシュ値を生成しないような工夫が重視される。生成される値もデータ構造用にべると長く、16バイトから64バイト程度のものが使われる。また暗号ハッシュではハッシュの値から元のデータを予測できてはならないという要件が必要である(例えば似たデータから似たようなハッシュが出ると、近場を総当りで探すことによって元の値を見つけられてしまうため)。例 MD-5,SHA-1,256,512など。

簡単なハッシュの例

ハッシュがどういうものか理解するために、ごく簡単なハッシュの例を用いて説明しよう。

例えばハッシュアルゴリズムとして「文字列を一文字おきに取り出す」というものを考えよう。例えば、「ニコニコ動画」が元の文字列として与えられた場合、そのハッシュは「ニニ動」となる。このハッシュアルゴリズムを使って、「ニコニコ動画」という文字列が書かれたファイルが破損していないかどうかを確認できるようにするには、ハッシュである「ニニ動」という文字列が書かれたファイルハッシュファイルとして提供すればよい。ユーザダウンロードしたファイル文字列を一字おきに取り出してハッシュファイルの内容と同じになるかどうかを調べることでダウンロードが成功したことを確認できる。

実際にはこのハッシュアルゴリズムは、「ニニ動」というハッシュが与えられたときに元データを推測しやすい(すぐに「ニコニコ動画」が元データであることが分かる)うえ、ハッシュが「ニニ動」となる他の有効な文字列をすぐに生成できる(例えば「ニフニフ動画」)、ハッシュの長さが元データの長さに対して長すぎる(ハッシュが元データの半分にしかならない)など、ハッシュとしては十分に使い勝手が良いとは言えない。実世界で広く使われているハッシュアルゴリズムは、数学的にこれらの問題を解決している。

英単語「Hash」

英単として「hash」と言えば、「細切れ」「切り刻む」「小さくちぎる」「焼き直し」などの意味で使われている。これは、上記の「ハッシュ」のでもある。

また、「ハッシュビーフ」と言えば「牛肉の細切れをデミグラスソースで調理した料理」の名前として使われている。

ハッシュポテト」と言えば「細かくしたジャガイモ小麦粉を付けて油であげた物」をす。

関連項目


【スポンサーリンク】

携帯版URL:
http://dic.nicomoba.jp/k/a/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5
ページ番号: 4091958 リビジョン番号: 2273089
読み:ハッシュ
初版作成日: 09/07/19 23:35 ◆ 最終更新日: 15/10/11 01:24
編集内容についての説明/コメント: 暗号的ハッシュとデータハッシュを分けた
記事編集 / 編集履歴を閲覧
このエントリーをはてなブックマークに追加

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

ハッシュについて語るスレ

4 : ななしのよっしん :2010/10/25(月) 23:11:18 ID: SC/vCeBTKt
>同じデータに対しては同じハッシュが生成される
>異なるデータに対しては異なるハッシュが生成される
>ハッシュの長さは出来るだけ短い
1番と3番が間違いじゃないか?
同じデータに対しては同じハッシュが生成されないとハッシュとは呼べないし、ハッシュ値は短ければ短いほどよいというものでもない。むしろある程度長いほうがよい。
5 : ななしのよっしん :2011/02/05(土) 08:49:39 ID: pi0C/CaEkR
おもしれえほど かんたんに ひっかかったぜ。
ハッシュが ぶざまにも おっちんだ後だったしな!
6 : ななしのよっしん :2011/03/25(金) 18:04:39 ID: H89Necs1oE
ハッシュポテトは違うのか・・・?
7 : ななしのよっしん :2011/04/12(火) 13:12:46 ID: JS7xSXwV04
半年前の書き込みに対してアレだが
>>4
1はその通り。決定性が崩れたらハッシュではない。
3は誤り。強度が同じなら短い方が優秀。強度が必要だからこそ長くなる。
8 : ななしのよっしん :2011/05/03(火) 02:50:36 ID: maB0cAKUNu
>>6
もしかしてハッシュポテト

>>4,>>7
突っ込みサンクス。確かに1は必須で、それが分かりやすいように修正してみた。また間違いがあったら教えてほしい。
9 : ななしのよっしん :2013/03/19(火) 22:52:16 ID: 1Gy9Nodd5i
ハッシュテーブルに利用するハッシュアルゴリズムは、
MD5だSHA-1なんてデータの同一性チェックに使われるものと違い、
ハッシュ値の計算速度(コスト)とバラけ具合(質)のコスパが重要になる。
10 : ななしのよっしん :2014/05/09(金) 00:16:40 ID: R1HdVSKm2M
CRCは通常ハッシュに分類されません(衝突性が考慮されてないので)
あと、載ってるアルゴリズム暗号ハッシュに偏ってるのでハッシュテーブルアルゴリズムもあった方がいいかと
11 : ななしのよっしん :2016/04/21(木) 21:16:06 ID: jK5eU+HTV1
厳密に「異なるデータに対しては異なるハッシュが生成される」のだと圧縮になってしまうのでは…?
同じハッシュが生成される確率ができる限り小さい(偏りが小さい)ということなのだろうが
12 : ななしのよっしん :2016/09/03(土) 02:09:27 ID: R1HdVSKm2M
>>11
ハッシュは一方向関数だからハッシュだとしても圧縮とは異なる。まあ全な対応表をつくれば圧縮とみなせなくもないが。
13 : ななしのよっしん :2016/10/11(火) 13:51:02 ID: iadf1FVljo
鉄血のオルフェンズハッシュ・ミディ
ニコニコニューストピックス
  JASRAC許諾番号: 9013388001Y45123
  NexTone許諾番号: ID000001829