何か着ていればいいよ

ソフトウェア技術者の日常や技術の話を書こうと思います。

Webシステムでアカウントのパスワードの暗号化の話

Internet上に公開しているWebアプリケーションを開発している人間にとっては当たり前の事かもしれませんが、自分は今まで業務システムや制御系が多かったので最近になって初めてちゃんと考えた表題の件。
とりあえず、備忘録としてまとめておこう。

前提となる環境

  • Webシステムでアカウントを独自に管理している場合
  • 特に古いシステムではパスワードを平文で保持していることがある
    • 社内LAN内だから大丈夫?
    • 本当に?
    • 当初外部公開しない前提で作ったシステムが変遷の末公開システムになるとか…

考え方

上記の環境に対して、その状況ではユーザーアカウントのパスワードに以下のような推移で問題がある。

  • SQL Injection等の脆弱性について穴を塞ぐのは基本。
  • ただし、パスワードが漏洩してしまった時のことも想定したほうが良い
    • 漏洩への対策が暗号化
  • なぜパスワードを暗号化するのか?
    • DB等に侵入される, SQL Injectionの脆弱性を突かれるなどの結果パスワードが漏洩してもパスワードを悪用されづらい
  • 暗号化?
    • 基本的にはパスワードに不可逆的な変換をかけておく
    • 自分はHash(MD5)しかやったことない。他に何かやり方あるのかな?

よくある事態

パスワードを平文で保持しているようなシステムでありがちな状況とその対策

  • 工数が取れない場合
    • セキュリティリスクを主張しても受け入れられない
    • 端的に言えば金が出ない場合
    • 一度は提案して工数がとれないからそうなっていないという証跡を残す
    • "なんでやってないんだ!こんなの常識だろ!"と怒り出す御仁がいないとも限らない。

書き出してみたらいつもの通り当たり前の話。 でも、その当たり前が出来てない現場が2014年になってもまだまだあるんだな…。