アプリケーションにおけるパスワードの保管方法について

アプリケーションにおけるパスワードの保管方法について
スポンサードリンク
Advertisement

 

どーも、現役エンジニアのえーちゃん(@e_jtest)です。

 

最近のもっぱらの話題は宅ふぁいる便の個人情報の流出事件ですね。

 

流出も問題ですが、エンジニア的にはパスワードが平文で保管されていたという点が最も驚いた部分です。

 

パスワードに限らず、個人情報を暗号化したりするのはサービスとして普通に行うことではあるのですが、世の中のサービス全てが対応しているわけではないということですね。

 

ということで、自分への教訓としても書いておこうかなと思ったので、パスワードの保管方法について書いてみました。

 

スポンサードリンク
Advertisement

 

 

アプリケーションにおけるパスワードの保管方法について

 

基本的にアプリケーションやWebサービスを利用するにあたっての個人情報というのはデータベースに格納されています。

 

プログラムがデータベースへ接続し、そこから情報を取ってきてブラウザ(画面)に表示しているわけですね。

 

宅ふぁいる便の件で問題だったのが保管方法でしょう。

 

何が問題なのか?と思う方に向けて解説していきます。

 

パスワードはハッシュ化して保管するのが普通である

 

サービスにログインする際にユーザー名、パスワードを入力すると思いますが、基本的にパスワードはデータベースにそのままの状態で入っていることはありません。

 

ユーザーが入力したパスワードはハッシュ化するのが基本です。

 

ハッシュ化ってなんぞや?という方は以下の例をみてください。
「password」という文字列をハッシュ化した例が以下になります。

 

例:パスワードを「password」とした場合

ハッシュ化する → 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

 

ハッシュ化には様々な方式がある(今回はSHA1方式)ので、一概にこうなるとは言えないですが、このように暗号みたいになるんですね。

 

こうしてハッシュ化したものをデータベースに格納しておくことで、元々の「password」という文字列をわからなくしているのです。

 

 

ハッシュ化と暗号化は違う

 

「なるほど、ハッシュ化っていうのは暗号化するってことか」と思う方もいるかもしれないですが、ハッシュ化は暗号化ではありません。

 

ハッシュ化とは「不可逆変換」するということです。難しく言いましたが、簡単に言うと元には戻せない状態にするということです。

 

ハッシュ化された文字列というのは元には戻せません。だからパスワードをハッシュ化して保管するのです。

 

じゃあどうやってログインの認証をしているかというと、ユーザーが入力した文字列を同じハッシュ化方式でハッシュ化して一致するかをチェックしています。

 

なので元の文字列が何なのかは入力した人以外はわかりません

 

では暗号化とはなんなのかというと、暗号化した文字列は復号することができます。

 

復号とはなにかというと、元に戻すということです。

 

鍵がなければ元には戻せないですが、元に戻すことが可能です。

 

まあ暗号化というくらいですから、元の情報がわからなくなっては本末転倒です(笑)

 

このようにハッシュ化は元には戻せませんが、暗号化は元に戻せるという点で異なります。

 

スポンサードリンク
Advertisement

ユーザーとして気をつけるべきポイント

 

開発者目線で語ってきましたが、一般ユーザーがアプリケーションやWebサービスを使う際に気をつけることを書いておこうと思います。

 

パスワードリマインダーが設置してあるサービスは使わないこと

 

パスワードリマインダーってなにかというと、メールアドレスを入力すると、そのメールアドレスにパスワードを送ってくれるようなものです。

 

これは何が問題かと言うと、先ほども言ったようにハッシュ化されているのであれば復号は不可能です。

 

にもかかわらずメールで送ってくれるということはハッシュ化されていないことが考えられます。

 

最近のWebサービスでは、パスワードを忘れた場合は再設定するように促されると思います。

 

「なぜ再設定しなきゃいけないんだ・・・教えてくれよ・・・めんどくさい・・・」とユーザーの方は思うかもしれないですが、ハッシュ化されていたら誰にもわからないので教えられないのです。

 

なのでパスワードを忘れた場合はユーザーに再設定させるのが普通です。元のパスワードを教えるなんてことはしません。

 

 

メールにパスワードを載せてくるサービスを使わない

 

これもパスワードリマインダーと同様ですが、登録したパスワードをメールに記載するのは推奨されません。

 

一時的なパスワードであればまだ良いですが、自分で設定したパスワードを記載するようなサービスは使わない方が良いです。

 

セキュリティに対する意識が低いサービスと判断しても良いでしょう。

 

また、確認画面などにパスワードを表示するようなサービスも同様です。

 

基本的にユーザーが入力したパスワードというのはどこにも表示されないというのがベターです。

 

最近のWebサービスでは「*****」のように表示されることがほとんどだと思います。(一部宅ふぁいる便のような例外はありますが)

 

余談ですが、日本のwebサービスは確認画面というものが用意されていることがほとんどですが、海外のサービスでは確認画面は無いことが多いです。

 

スポンサードリンク
Advertisement

まとめ

 

ということで、宅ふぁいる便が話題になっていたのでちょうど良いと思い書いてみました。

 

ユーザーからは情報がどのような形で保管されているのかはわからないので、不安になる方は多いと思います。

 

今回お話ししたような、パスワードリマインダーやパスワードを記載するようなサービスを避けるだけでも情報漏洩というのは防げるかなと思います。

 

私も普段はWebサービスの開発を行なっているので改めて心に留めておこうと思いました。

 

 

以上、アプリケーションにおけるパスワードの保管方法についてでした。