kakke18’s blog

ゆるふわ学生エンジニア

なぜパスワードはハッシュ化されるのか

昨日のブログでパスワードは ハッシュ化されて保存されていると書きました。 では、なぜ暗号化ではなく、ハッシュ化されるのでしょうか。 それは、パスワードを保存するという目的の上では、ハッシュ化の方が優れているからです。

暗号とは

みんな大好きWikipediaには、このように記載されています。

暗号とは、セキュア通信の手法の種類で、 第三者が通信文を見ても特別な知識なしでは読めないように変換する、 というような手法をおおまかには指す。

つまり、暗号とは、特定の誰かのみに情報を伝達するための手段なのです。特定の誰かを判断するには、特別な知識が必要となります。これをといいます。

シーザー暗号

暗号の中で最も有名なのは、シーザー暗号という暗号です。 シーザー暗号とは、ガリア戦争(紀元前58年~紀元前51年にヨーロッパで起こった戦争)において、 古代ローマガイウス・ユリウス・カエサルが使用していた暗号です。 シーザー暗号は「それぞれの文字を3文字ずつずらす」 というとてもシンプルな仕組みで暗号化が可能です。

a b c d e f g h i j k l m n o p q r s t u v w x y z
d e f g h i j k l m n o p q r s t u v w x y z a b c

シーザー暗号は,このような対応表を用いて暗号化していました。「 i am bob」をシーザー暗号で暗号化すると、「L DP ERE」となります。

この時のとはどの知識のことを指すのでしょうか。 それは「3文字右にずらす」という知識です。 この暗号文「L DP ERE」は、「3文字右にずらす」という知識を知らない人には、 ランダムな文字列に見えますが、「3文字右にずらす」という知識を知っている人(鍵を持っている)には、 「i am bob」という情報を伝えることが出来ます(復号する場合には、3文字左にずらせば良い)。

なぜパスワードはハッシュ化されるのか

それでは、本題に戻ります。もし、パスワードを暗号化していたらどのような不都合が生じるでしょうか。 私は、大きく分けて2つあると思います。

  • 鍵の管理
  • 管理者にパスワードを見られてしまう

暗号化には、鍵(特別な知識)が必要となり、それを管理しなければなりません。 しかし、ハッシュ化にはそのようなものは必要ありません。 また、暗号化の場合は、ハッシュ化とは異なり復号することが可能です。 つまり、サイトの管理者など鍵を持っている人には、パスワードがバレてしまうということになります。 顧客などのパスワードを悪用しようとする管理者はいないと思いますが、 理論上それが出来てしまうことが問題なのです。

まとめ

  • 暗号化:情報の伝達 → 元の文字列に戻す必要
  • ハッシュ化:情報の秘匿 → 元の文字列に戻す必要

パスワードは認証さえできれば良いので、ハッシュ化の方が適している。