情報廃棄物最終処分場

情報の芥溜にも何か使い道があるかもしれない。Webと鉄道とバイクと音楽が好きな人の情報置き場

パスワードの暗号化・認証をPHPを通して学んだ(パクリまとめ)

tl;dr

認証はOpenIDとかソーシャルログイン使う。
だめならフレームワーク使う。

内容

契機

今日もPHPの講習を受けに行っていたが、ユーザー管理の実装で、
「今回はユーザー管理が主眼だから、パスワードについては簡単に実装するよ!
本ちゃんのシステムでは絶対にやらないでね!」
といった内容の記述があり、
このパスワードの認証について気になったので調べてみた。

しらべたこと

ちなみに使っていたテキストでは、sha1でハッシュ化したものをパスワードとしてMySQLにINSERTしていた。
(ハッシュ化とは、不可逆に文字やファイルを変換するもの。暗号化は復号ができるもの。) sha1:文字、データを40桁の16進数にハッシュ化する。

同じものであれば、出力されるハッシュは同じになる。そのため、ファイルが正しいものであるかの判断に使われることもある。
ただ、下記の記事のように、GoogleSHA1に勝った(超意訳)という話もあり、セキュリティ上心配だそうな。

www.itmedia.co.jp

で、PHPでは選択肢に出てくるのが、password_hash()関数。
これはハッシュ化する度に、違うハッシュが吐き出されるというもので、認証にはpassword_verify()という専用関数を用いるそうな。
でも、このpassword_hashについても、やはり限界はあるわけで。

結論、餅は餅屋

結局、100%の安全なんてものはないわけですが、極めて安全に近いのは、セキュリティを専門にしたものを使うという手段なわけです。
その手段としては、

  • OpenIDやソーシャルログインを使う
    認証についてはプロにやっていただき、我々はトークンのみ頂いてお仕事させていただきます。
  • フレームワークを使う
    クラウドを毛嫌いするような社長とかがいるような会社なら、自社実装にするしかありませんね。
    公式の関数で足りないならフレームワーク。これも専用のものを使うと安心ですね。

参照というか丸パクリ元

qiita.com

ナウいエンジニアについての記事(戸田奈津子訳)でもお世話になってます。