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

ハッシュ化とは

1年以内に更新されました。
更新日 : 2019年08月07日

暗号化・復号に続き、ハッシュ化についての説明です。暗号化とハッシュ化を混同している情報があるため、暗号化とハッシュ化の違いも含めて解説します。

ハッシュ化とは、元のデータをハッシュ化するためのシステム(アルゴリズム)に通して、規則性のない固定された長さのデータを算出することです。算出されたデータをハッシュ値と言います。

規則性のない固定された長さのデータが算出されるため、ハッシュ化を暗号化と勘違いする人が多くいますが、暗号化とは、元のデータに戻すことのできる(復号できる)意味のわからないデータにすることです。

対して、ハッシュ化で算出されたデータから元のデータへは復号できません

また、同じデータから算出されるハッシュ化されたデータ(ハッシュ値)は常に同じになります。

ハッシュ化の特徴

ハッシュ化は以下の画像のような仕組みになります。

ハッシュ化には以下のような特徴があります。

  • ハッシュ値から元のデータに戻すことはできない
  • 同じデータを入れると必ず同じハッシュ値になる
  • 元のデータが少しでも異なると、ハッシュ値が大きく異なる

ハッシュ値から元のデータに戻すことはできない

ハッシュ値だけがある状態で、元のデータに戻すことはできません。このような変換を不可逆変換と言います。暗号化の場合には復号(元にもどす)できるため、可逆変換と言います。

ただし、元のデータが簡単な場合(短かったり、簡単に予測できるようなデータ)には、下記の「同じデータを入れると必ず同じハッシュ値になる」ことから、元のデータを特定することができてしまいます。

同じデータを入れると必ず同じハッシュ値になる

元のデータが「a」というデータ(元のデータ)をSHA256というハッシュ化するアルゴリズムに通すと、「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」というデータ(ハッシュ値)になります。

これは何度やっても「a」をSHA256に通せば「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」となります。

全く同じデータであれば、ハッシュ値は必ず同じハッシュ値になります。

元のデータが少しでも異なると、ハッシュ値が大きく異なる

例えば「a」というデータ(元のデータ)をSHA256というハッシュ化するアルゴリズムに通すと、「ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb」というデータ(ハッシュ値)になります。

次に「b」という似たようなデータをハッシュ化してみると、今度は「3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d」というハッシュ値になります。

元データが1文字でも異なれば、ハッシュ値は全く異なる結果になります。

ハッシュ化の利用場面

上記の特徴を活かせる場面が、パスワード情報の保存です。

パスワードは本来ユーザーだけが知るべき情報です。アプリケーション(情報を蓄えるシステム)の管理者ですら、ユーザーのパスワードは知るべきではありません。

どのようにパスワード情報をハッシュ化で活かすかを以下の流れで説明します。

  1. ユーザー登録
    ユーザーが入力したパスワードをハッシュ化してシステムに保存します。システム管理者はパスワードがハッシュ化された状態のものしか見れないため、元のデータには戻せません
  2. ユーザー認証
    ユーザーが実際にログインする場合には、入力されたパスワードをハッシュ化します。入力されたパスワードが、登録する際に入力したパスワードと完全に同じであれば、ハッシュ値が同じになるため本人であることの証明になります。

このようにすることでシステム管理者は元のパスワードを知ることができなくなります。

システムがハッキングされたりした場合でも、ハッシュ化されたデータをたくさん持っていたところで、元のパスワードがわからないため、実際のパスワード情報が漏れたことにはなりません。