本当は怖いパスワードの話:ハッシュとソルト、ストレッチングを正しく理解する(1/4 ページ)
「パスワードはハッシュで保存すれば安全」と思われていますが、本当にそれだけで大丈夫なのでしょうか? この記事では、パスワードを安全に守るソルトやストレッチングといった手法について解説します(編集部)
PSN侵入の件から始めよう
今年のセキュリティの話題の中でも特に注目されたものとして、4月20日に起こったPSN侵入事件があります。5月1日にソニーが記者会見をネット中継したことから、ゴールデンウィーク中にもかかわらず多くの方がネット中継を視聴し、感想をTwitterに流しました。もちろん、筆者もその1人です。
このときの様子は、「セキュリティクラスタまとめのまとめ」を連載している山本洋介山さんが、Togetterでまとめています。
【関連記事】
4月版 PSNが全部話題を持ってった
http://www.atmarkit.co.jp/fsecurity/rensai/matome2011/05.html
PSNの会見まとめ - Togetter
Togetterのまとめを読むと、漏えいしたパスワードがどのように保護されていたかが非常に注目されていることが分かります。Togetterのタイムラインで、14:48ごろにいったん「パスワードは平文保存されていた」と発表されると、「そんな馬鹿な」という、呆れたり、驚いたりのつぶやきが非常に多数流れます。
しかし、15:03ごろに「パスワードは暗号化されてなかったがハッシュで保存されていた」と訂正が入ると、一転して「そうか、それなら問題ない」という空気に変わりました。その生々しい様子はTogetterのまとめから読むことができます。
しかし、本当にそうでしょうか。パスワードはハッシュで保存すれば安全なのでしょうか。本稿では、パスワードの安全な保存方法についての現状を説明します。
オンライン攻撃とオフライン攻撃
まず用語の説明から始めましょう。Webサイトに対する攻撃には、「オンライン攻撃」と「オフライン攻撃」の2種類があります。
オンライン攻撃というのは、ネット経由(多くの場合インターネット経由)でサーバに攻撃を仕掛けるものです。PSNのサーバに対して外部から侵入して情報を盗むという行為は、オンライン攻撃になります。
これに対してオフライン攻撃というのは、何らかの手段で持ち出したデータを攻撃者の手元で解析して、暗号解読などにより、読み出し可能な情報に戻すことをいいます。この時点では攻撃対象のサーバには接続していないのでオフライン攻撃、というわけです。
パスワードに対するオンライン攻撃とオフライン攻撃
パスワードに対する攻撃にも、オンライン攻撃とオフライン攻撃があります。
パスワードに対するオンライン攻撃は、ネット経由で認証画面に対して大量のパスワードを試行することで行われます。ネット経由であることから、極端に多くの回数を試すことはできないため、通常は辞書攻撃(Dictionary Attack)やジョーアカウント(Joe Account)に対する攻撃が使われるようです。辞書攻撃とはパスワードとして使われがちな語句を辞書として用意しておき順に試すもの、ジョーアカウントとはログインIDとパスワードが同一であるものを指します。
一方、パスワードのオフライン攻撃とは、何らかの手段で持ち出したパスワードデータから、暗号解読などにより元のパスワードを解読する行為を指します。パスワードを持ち出す手段としては、上記のオンライン攻撃のほか、内部犯行による持ち出しや、物理メディア(バックアップ媒体など)の盗難などがあります。
なぜパスワードを保護するのか
PSN事件後の発表では、利用者の個人情報は以下のように保護されていたとされています。
情報の種類 | 保存方法 | |
---|---|---|
パスワード | ハッシュ | |
クレジットカード番号 | 暗号化して別サーバに保存 | |
その他の個人情報(氏名、メールアドレスなど) | 平文 |
クレジットカード情報を暗号化する理由は明快です。クレジットカード番号を悪用される事件が現実に発生しており、その結果、利用者に金銭的な被害が及ぶからです。
では、パスワードを特別扱いする理由は何でしょうか。パスワードが漏えいしている状況では、ほかの個人情報も一緒に漏えいしている可能性が高いわけですから、個人情報保護のためというわけではなさそうです。
しかし、パスワードが漏えいすると、以下のような被害が利用者に及ぶ可能性があります。
- 利用者の権限による物品購入、送金など金銭的な被害
- 利用者の権限(名前)による投稿、変更、削除
- 利用者がパスワードを使い回ししている場合の他サイトへの被害の波及
このためパスワードについては、特別な保護を講じる場合が多いのです。
なぜ暗号化ではだめなのか
ここで次の疑問が生じます。パスワードは暗号化ではなく、ハッシュという形で保存する場合が多いのですが、なぜ暗号化ではなくハッシュなのでしょうか。現に、クレジットカード番号については暗号化されて保存されているので、同じように暗号化すればよいようにも思えます。
実は、パスワードの保護手段として暗号化が絶対だめ、というわけではないのですが、現実にはハッシュを利用した保存がよく用いられます。暗号化ではなく、ハッシュが利用される理由は以下の通りです。
もう一度PSN事件の例で説明しましょう。ソニーが米国下院に提出したレターによると、侵入者はroot権限を得たとされています。root権限が取られた状況では、すべてのファイル、プログラムのソース(Javaなどの場合は逆コンパイルを経て)、すべてのデータベースの内容を読まれる可能性があります。その状況下で暗号鍵を安全に保つことは困難です。
Index
本当は怖いパスワードの話
ハッシュとソルト、ストレッチングを正しく理解する
Page1
PSN侵入の件から始めよう
オンライン攻撃とオフライン攻撃
パスワードに対するオンライン攻撃とオフライン攻撃
なぜパスワードを保護するのか
なぜ暗号化ではだめなのか
ハッシュとは何か
ハッシュを用いた認証処理
ハッシュ保存されたパスワードに対するオフライン攻撃
オフライン辞書攻撃
オフライン総当たり攻撃
レインボーテーブルとは何か
安全なパスワードの保存方法の大前提
対策1:ソルト
対策2:ストレッチング
暗号化の併用も可能
ハッシュ保存により生じる課題
これからも最新動向のウォッチを
Copyright © ITmedia, Inc. All Rights Reserved.