kakke18’s blog

ゆるふわ学生エンジニア

なぜパスワードを忘れると再設定しなければならないのか

これを読んでいるあなたも一度はパスワードを忘れて再設定をしたことがあるでしょう。「再設定なんて面倒だからパスワード教えてよ」と怒りに震えたこともあるでしょう。では、なぜパスワードを再設定しなければならないのか。それはパスワードがハッシュ化されて保存されているからです。

ハッシュ関数

ハッシュ(hash)とは、「切り刻む」や「細かくする」という意味です。ハッシュ関数とは、任意長のメッセージを入力すると、あたかもランダムであるような固定長の値(ハッシュ値)を出力する特別な関数です。

任意長とは、そのまま「任意の長さ」という意味です。つまり、任意長のメッセージとは、「文字数は何でも良い文字列」ということになります。一方、固定長のメッセージとは、「文字数がある値に固定された文字列」のことです。

ハッシュ化の例

難しそうな言葉ばかりで嫌気が差すと思うので、例を示しましょう。 下の表は、SHA1というハッシュ関数によってハッシュ化された例です。

任意長のメッセージ 固定長のメッセージ
hoge 31F30DDBCB1BF8446576F0E64AA4C88A9F055E3C
hogehoge 3B2C6C10D0E78072D14E02CC4C587814D0F10F3A
hogehogehogehoge 947C3CBB22FDDE06BA8E1460B91C41D5B92FFD0C

「hogehoge」のハッシュ値は、「hoge」のハッシュ値を2つ繋げた値とはなっていないですし、どんな長さのメッセージでも必ず40文字の固定長のメッセージになっていますね!

暗号化との違い

ここまで読んできて「ハッシュ化って暗号化のことじゃないの?」と思われた方もいると思います。実は、ハッシュ化と暗号化は全くの別物です。暗号化とは、元データを復元可能なデータに変換しているのに対して、ハッシュ化は復元不可能なデータに変換しています。

つまり、暗号化は暗号化した後に復号することにより元データを得ることが出来ますが、ハッシュ値からは元データを得ることは出来ません。

20190209220150

パスワードを再設定しなければならない理由

ここでようやく本題に戻ります。パスワードを再設定しなければならない理由は、パスワードがハッシュ化されて保存されているからと冒頭で述べました。つまり、保存されているあなたのパスワードのハッシュ値からあなたのパスワードを知ることは不可能なのです。

まとめ

今回は、パスワードを忘れてしまった時にパスワードを再設定しなければならない理由について書いてみました。「ハッシュ」という知識を持っているだけでなく、このように日常の疑問と紐付けて自分の頭で考えることが勉強の醍醐味ですよね。

本ブログは、『暗号技術のすべて』という本を参考にしました。間違いなど見つけましたら赤子に教えるように優しく教えてください。お願いします。