ハッシュ化とは
更新日 : 2019年08月07日
暗号化・復号に続き、ハッシュ化についての説明です。暗号化とハッシュ化を混同している情報があるため、暗号化とハッシュ化の違いも含めて解説します。
ハッシュ化とは、元のデータをハッシュ化するためのシステム(アルゴリズム)に通して、規則性のない固定された長さのデータを算出することです。算出されたデータをハッシュ値と言います。
規則性のない固定された長さのデータが算出されるため、ハッシュ化を暗号化と勘違いする人が多くいますが、暗号化とは、元のデータに戻すことのできる(復号できる)意味のわからないデータにすることです。
対して、ハッシュ化で算出されたデータから元のデータへは復号できません。
また、同じデータから算出されるハッシュ化されたデータ(ハッシュ値)は常に同じになります。
ハッシュ化の特徴
ハッシュ化は以下の画像のような仕組みになります。

ハッシュ化には以下のような特徴があります。
- ハッシュ値から元のデータに戻すことはできない
- 同じデータを入れると必ず同じハッシュ値になる
- 元のデータが少しでも異なると、ハッシュ値が大きく異なる
ハッシュ値から元のデータに戻すことはできない
ハッシュ値だけがある状態で、元のデータに戻すことはできません。このような変換を不可逆変換と言います。暗号化の場合には復号(元にもどす)できるため、可逆変換と言います。
ただし、元のデータが簡単な場合(短かったり、簡単に予測できるようなデータ)には、下記の「同じデータを入れると必ず同じハッシュ値になる」ことから、元のデータを特定することができてしまいます。
同じデータを入れると必ず同じハッシュ値になる
元のデータが「a」というデータ(元のデータ)をSHA256というハッシュ化するアルゴリズムに通すと、「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」というデータ(ハッシュ値)になります。
これは何度やっても「a」をSHA256に通せば「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」となります。
全く同じデータであれば、ハッシュ値は必ず同じハッシュ値になります。
元のデータが少しでも異なると、ハッシュ値が大きく異なる
例えば「a」というデータ(元のデータ)をSHA256というハッシュ化するアルゴリズムに通すと、「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」というデータ(ハッシュ値)になります。
次に「b」という似たようなデータをハッシュ化してみると、今度は「3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d」というハッシュ値になります。
元データが1文字でも異なれば、ハッシュ値は全く異なる結果になります。
ハッシュ化の利用場面
上記の特徴を活かせる場面が、パスワード情報の保存です。
パスワードは本来ユーザーだけが知るべき情報です。アプリケーション(情報を蓄えるシステム)の管理者ですら、ユーザーのパスワードは知るべきではありません。
どのようにパスワード情報をハッシュ化で活かすかを以下の流れで説明します。
- ユーザー登録
ユーザーが入力したパスワードをハッシュ化してシステムに保存します。システム管理者はパスワードがハッシュ化された状態のものしか見れないため、元のデータには戻せません。 - ユーザー認証
ユーザーが実際にログインする場合には、入力されたパスワードをハッシュ化します。入力されたパスワードが、登録する際に入力したパスワードと完全に同じであれば、ハッシュ値が同じになるため本人であることの証明になります。
このようにすることでシステム管理者は元のパスワードを知ることができなくなります。
システムがハッキングされたりした場合でも、ハッシュ化されたデータをたくさん持っていたところで、元のパスワードがわからないため、実際のパスワード情報が漏れたことにはなりません。
タグ
-
前の記事
共通鍵暗号・公開鍵暗号とは
-
次の記事
ソルトとは