パソコンとネットワーク|on Note

パソコン・ネットワーク・データ通信に関する記事

on Note

ハッシュ関数

ハッシュ関数とは、与えられたデータを、固定長の不規則な値に変換する関数である。

得られる不規則な値は、データの要約としての意味を持ち、様々な場面で利用されている。

ハッシュ関数での戻り値をハッシュ値といい、数字の並びになるハッシュ値は、16進数で表記することが多い。

コンピュータ内では全てのデータを「0」と「1」だけの2進数で管理している。

16進数表記のハッシュ値もまたデータであり、コンピュータ内部では2進数で管理している。

ハッシュ関数の特徴

  • 出力する値のデータ長は変わらない。非常に大きなデータを入力しても、出力するハッシュ値のデータ長は変わらない。逆に、どんな小さなデータを入力しても出力するデータ長は同じ。
  • 入力が同じ値なら出力するハッシュ値も必ず同じになる。ハッシュ関数のアルゴリズムはいくつか存在するが、「出力するハッシュ値が同じになる」のは同じアルゴリズムを用いた場合に限る。アルゴリズムが異なれば、たとえ入力したデータが同じでもハッシュ値は異なる。
  • 非常によく似た、わずかしか違わないデータの入力でも、出力するハッシュ値は大きく異なった値となる
  • 全く別のデータを入力しても、同じハッシュ値になることが低確率ながらある。これをハッシュ値の衝突という。
  • ハッシュ値から元のデータに逆算することは事実上不可能。データの、入力と出力の流れは一方向で、この点が暗号化と大きく違う所。

正真性を提供するハッシュ関数

インターネット経由でソフトウェアを入手したとする。このソフトウェアは間違いなく作成者が作ったものだろうか。入手する経路の途中で、悪意ある者が悪質な仕掛けをしていないだろうか。

セキュリティを意識したプログラム提供者の場合、書き換えられることを防ぐ為、プログラムを広範囲に公開すると共に、そのプログラムのハッシュ値を公開する場合がある。

プログラムを入手した者は、入手したファイルから自らハッシュ値を計算し、公開されているハッシュ値と比較する。この時に双方のハッシュ値が一致すれば、入手したソフトウェアは提供者のものであると確認できる。

ハッシュ関数は正真性完全性)を提供する暗号技術で、データの改ざんを検出できる。

ユーザのパスワード保存にもハッシュ関数が利用されている

ユーザが入力したパスワードをサーバに保存する時もハッシュ関数が用いられる。

パスワードをそのままサーバに保存すると、このサーバ内を盗み見した悪意ある第三者が、元のパスワードを容易に知ることができる。ハッシュ値として保存しておけば、たとえ盗み見されたとしても、逆算して元のパスワードを知ることは事実上不可能である。

パスワードの保存では、パスワードのハッシュ値をとり、その値のみを保存しておく。そして、ユーザがパスワードを入力した時に、その入力された値のハッシュ値をとり、データベースのハッシュ値と比較する。

メニュー