ハッシュ化について

はじめに

習うより慣れろ派のCCENTぎりぎり芸人です。
今回はハッシュ化についてです。本記事はコマンドライン上の具体例、特徴の解説、実用例解説という流れでまとめました。
元来、ハッシュはHDDのある程度大きなサイズのファイルを検索したり破損していないかを手っ取り早くチェックするために考案されました。
インターネットの発達に伴い、パスワードの秘匿化やダウンロードファイルのサムチェックに使われるようになった歴史があります。

コマンドライン上の具体例

実際に’test’や’tesu’などの文字列をハッシュ化してみました。ご自身のPCでも試してみてください。同じ値が出力されるはずです。

Linuxには標準でmd5やSHA256sum等、ハッシュ化コマンドがあります。痒い所に手が届く感が好きです。便利です。

特徴の解説

1.固定長である
どんなサイズのデータを入力しても、出力されるハッシュ値の文字数は変わりません。これにより元データの大まかなサイズさえもわからなくなります。
本当に’a’という一文字でもシェイクスピア全話でも同じ長さにします。
他方、この固定長がために後述のハッシュ値の衝突が起きてしまいます。
SHA1sumは160ビットのハッシュ値、SHA256sumは256ビットのハッシュ値を出力します。

2.復元不可能
数学では一方向性関数と言います。出力された値から、元のデータはわかりません。これを実現するためには剰余式を使った数式を設計します。

3.ハッシュ値の衝突の可能性がある
まったく異なるデータをハッシュ化した時に、そのハッシュ値がかぶる(衝突)ことがあります。
「鳩ノ巣の原理」というもので簡単に説明できます。鳩が5匹、巣が4つで鳩は全匹がどこかの巣に収まっている場合、どこかの巣に必ず2匹以上いることになりますよね。
ただし、具体例で示したように一文字ずれただけでもハッシュ値は大幅に値が変わるように設計されています。しかし何らかのデータのハッシュ値と、かぶるハッシュ値を持つデータがこの世に存在しうることは確かです。

実用例

実際に使用する場面を説明します。

・SNSなどのIDパスワード認証
運営側は、会員登録の段階でパスワードをハッシュ化してDBに保存します。ログインがあった場合は入力された文字列をハッシュ化して比較します。正しい入力であれば同じハッシュ値なはずですし、誤っていれば異なるハッシュ値です。
パスフレーズをハッシュ化して保存することで、万一漏洩した場合でも内容を知ることはできません。
パスワードは自由な文字数で設定しますが、ハッシュ値は固定長なのでログイン処理の簡単化・高速化が期待できます。

コメント

  1. CCENTぎりぎり芸人 より:

    めちゃくちゃわかりやすい解説ですね!

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください