今日は、ちょっとしたシステム構築を発注するときに重要なポイントとなる、顧客情報管理の話題を。テーマは「お客さんのパスワードをどう保存するか」です。
そうなると、あなたのサイトのセキュリティ問題が原因で、ユーザーはさらに他のサービスでも被害を受けてしまうことになります。作ったのがシステム会社でも、ユーザーに対して責任を負うのはWeb担当者のあなたですから、抱えるユーザー数が多ければ多いほど漏洩時の二次被害が増え、対応が複雑になってしまいます。
また、第三者による侵入がなくても、システム管理者がお客さんのパスワードをのぞき見できる状態になっている点も問題です。
では、どうすればいいのでしょうか。システム発注時に、次のような仕様を含めておくことです。
---------------------------------------------------------------------------
ユーザーが指定したパスワードは生の値としてデータベースに保存せず、ソルト付きで生成した不可逆のハッシュ値(メッセージダイジェスト)として保存し、その情報で認証する仕組みにすること(可逆形式の暗号化も禁止)
---------------------------------------------------------------------------
まっとうな技術者ならば、この指示だけで意味を理解するはずです。逆に言うと、この指示で意味がわからない場合は、そこには発注しないほうがいいと判断してください。
これはどういう指示かというと、登録時にユーザーが指定したパスワード(A)を、ある特殊なハッシュ化という処理(B)を行って得られるハッシュ値(C)をデータベースに保存するのです。その後、ユーザーがログインする際には、ユーザーがパスワード(A')を入力したら、同様にハッシュ化の処理(B)を行って入力されたパスワードのハッシュ値(C')を作り、それがデータベースに保存されているハッシュ値(C)と同じならば正しいパスワードが指定されたと認めるのです。
パスワードとハッシュの例
Aを処理した結果のCの値をデータベースに保存しておく。Cの値からAの値は推測できない。
ハッシュ化というのは特別な処理で、Bの処理内容がわかったとしても、CからAはへは変換できません。ですから、万が一システムに侵入されても、侵入者には元のパスワードはわかりませんし、Cのハッシュ値は御社のシステム専用ですのでこれを利用して他のサービスにログインすることはできません。
こうすることで、データベース内には生パスワードを保存せず、ユーザーの指定したパスワードでログインできる仕組みができます。
続きは会員限定です。無料の読者会員に登録すると続きをお読みいただけます。
- 会員登録 (無料)
- ログインはこちら
関連記事
2008.09.26
2010.04.20
安田 英久
株式会社インプレスビジネスメディア Web担当者Forum編集長
企業のウェブサイト活用やウェブマーケティングに関するメディア「Web担当者Forum」(http://web-tan.forum.impressrd.jp/)を運営しています。