覚えておきたいこと、忘れないようにメモメモ

テクノロジー

ハッシュ値とは具体的になに?特徴や利用例をご紹介

投稿日:

インターネットでデータを送受信するときに、受信途中でデータが壊れていると律儀に
「データが壊れています」
と表示されますよね。

長時間かけてダウンロードしたのにー!
…と泣きたくなるときもありますが(笑

パソコンは送られてきたデータが壊れているとどうやって気づいているのでしょうか。
キーワードは「ハッシュ値」です。

スポンサーリンク

ハッシュ値とは具体的になに?

どんなデータでも、パソコン上では「0」「1」の羅列で表現されています。
例えば、キーボードで「ichi」と打つと、パソコン上では
「01101001011000110110100001101001」
というコンピュータ語(?)に変換されて保存されます。

「人が認識する文字」と、「0」「1」の対応は、世界標準のASCII(アスキー)コードという取り決めで決められています。

たとえば「ichi」だと、
i:01101001
c:01100011
h:01101000
という対応関係があります。
「ichi」のたった4文字を表すのに
「01101001011000110110100001101001」
…長蛇の列ですね。

容量が重たいファイルでは、それだけ多くの「0」「1」が使われている状態になります。
データの送信途中で誤って一箇所が壊れてしまう(0が1となる)と、送信結果が変わってしまいます
また、データが多いほど、途中でデータが壊れても気づくことが難しいです。

送信側「ichimemo」:0110100101100011011010000110100101101101011001010110110101101111
受信側「ichimmmo」:0110100101100011011010000110100101101101011011010110110101101111
(0が1になっている箇所が1箇所あるため、送信時は「ichimemo」ですが、受信時は「ichimmmo」となってしまいます。
しかも間違っている場所になかなか気づきません。)

このように桁数が長くなるほどデータの確認は確認が大変なので、短く表記しなおした値が欲しいところです。
このようにデータを短く表記しなおした値をハッシュ値といいます。
ハッシュ値は、入力前の値の桁数より短い長さの桁数にランダムに変換されたデータといえます。

ハッシュ値は桁数の長い任意のデータ(入力データ)をハッシュ関数と呼ばれる特殊な計算式に代入することで得られます。

入力:任意のデータ(ichimemo333)

ハッシュ関数

出力:ハッシュ値(ha5646)
(桁数の短いランダムデータに変換される)

ハッシュ値の特徴は?

桁数を減らしてくれるハッシュ値には、以下の3つの特徴があります。

①出力結果から入力データを推測できない

ハッシュ関数はランダムな値が出力されます。そのため、出力結果からもとのデータを逆算することは困難です。

スポンサーリンク

上の例でいうと、「ha5646」の値から「ichimemo333」の値に逆変換することはできません。
ichimemo333 → ハッシュ関数 → ha5646
ですが、「ha5646」を同じハッシュ関数に再入力しても、
ha5646 → ハッシュ関数 → 34wa
のようにもっと桁数が小さくなる値となり、元の「ichimemo333」に復元できません。

②入力データが変わると出力結果も異なる

入力データが一文字異なるだけで、出力結果は全く異なるハッシュ値が算出されます

上の例でいうと、「ichimemo433」のように一文字異なるだけで、出力結果は「ghpajp」のようにha5646とは全く異なるハッシュ値となります。

ichimemo333 → ハッシュ関数 → ha5646
ichimemo433 → ハッシュ関数 → ghpajp

③同じ入力データを同じハッシュ関数に代入すると、同じハッシュ値が出力される

異なる入力データでは異なる結果となりますが、
同じ入力データをハッシュ関数に代入した場合は、何度でも同じ結果を得られます
もちろん、入力データは同じでも代入するハッシュ関数が異なると、異なる結果となります。

ハッシュ値の利用例は?何に使うの?

話は戻りますが、ハッシュ値はインターネットでファイルを送受信する際に破損改ざんチェックとして使われています。

★送信側
ファイルを送るときに、あるハッシュ関数でファイルのデータを基に計算したハッシュ値を一緒に送ります。

送信データ
・ファイルのデータ(ichimemo_filedata.txt)
・ファイルのデータを基にしたハッシュ値aragta352…
 (ichimemo_filedata.txt→ハッシュ関数①→aragta352…)

★受信側
送られてきたファイルに対して送信時と同じハッシュ関数を使ってハッシュ値を計算します。
送信側から送られてきたハッシュ値と、受信側で計算したハッシュ値は同じ値になるはずです。
仮に計算結果が異なっていればファイルの破損や改ざんがあったことになります。

受信データ
・ファイルのデータ(ichimemo_filedata.txt)
・ファイルのデータを基にしたハッシュ値aragta352…

受信したファイルのデータに対してハッシュ関数①によりハッシュ値を計算。

ichimemo_filedata.txt→ハッシュ関数①→aragta352…
となれば、受信データのハッシュ値と同じなので破損や改ざんは無し。

ichimemo_filedata.txt→ハッシュ関数①→hapo0042…
のように、受信データのハッシュ値と異なるハッシュ値が計算された場合は、ハッシュ値の特徴②「入力データが変わると出力結果も異なる」のため、送信中になんらかの破損や改ざんがあったと考えられます。

まとめ

いかがでしょうか。
ハッシュ値の特徴をもう一度おさらいです。

①出力結果から入力データを推測できない。
②入力データが変わると出力結果も異なる。
③同じ入力データを同じハッシュ関数に代入すると、同じハッシュ値が出力される。

ハッシュ値の特徴をうまく活用することで、計算量を減らしつつ破損や改ざんを確認できるんですね。
他にも、今話題のブロックチェーンやタイムスタンプなんかでもハッシュ値が利用されています。

スポンサーリンク

-テクノロジー
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ブロックチェーンの仕組みを簡単に説明。改ざんや複製は難しいの?

スポンサーリンク 今さら感はありますが、ビットコインなどの仮想通貨の売買が流行っています。 仮想通貨とはブロックチェーンによる分散型台帳技術を使っているそうですが、 ブロックチェーン? 分散型台帳技術 …

【図解あり】マイニングのアルゴリズムは?同時にナンスを発見した場合や難易度とは

スポンサーリンク ブロックチェーンとは、データ群から一定数のデータをまとめてブロックにして、すでに作成済みのブロック群につなげていく作業です。 ブロックを作る際には、前のブロックと今回のブロックをつな …

ブロックチェーンのブロックの構造!中身で使われるnonce(ナンス)とは?

スポンサーリンク ブロックチェーンを調べるにあたって、ブロックチェーンの特徴や利点などは各種本やHPに載っていたので調べやすかったのですが、ブロックチェーン内部で個々のブロックがどのように計算されてい …

//リサーチアルチザンの解析用