NTT DATA

DATA INSIGHT

NTTデータの「知見」と「先見」を社会へ届けるメディア

絞り込み検索
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
background-image-careers
2017年9月14日技術ブログ

パスワードはハッシュ化するだけで十分?

2016年はパスワード流失のニュースが相次ぎました。また2017年7月には流出したパスワードが悪用されたとみられる事例も報道されています。「暗号化」や「ハッシュ化」しておけば安全だったのに、と思われたでしょうか?今回はパスワード流出事例や、パスワード保存時の対策について取り上げます。

2016年9月、米ヤフーから5億件以上のハッシュ(※1)化されたパスワードを含むユーザーアカウント情報が流出(※2)、さらにDropboxから6,800万件以上(※3)のパスワードが流出していたと報道されました。パスワードが流出しても、「暗号化」や「ハッシュ化」されていれば問題ないのでは、と思われた方もいるかもしれません。ところが、暗号化やハッシュ化されたパスワードから元のパスワードが割り出されてしまう事例は多数確認されています。

  1. ※1 ハッシュ(ハッシュ値)
    任意の文字列から規則性のない値を生成するアルゴリズムにより算出した値。同じ入力値からは常に同じ出力値が算出され、さらにハッシュ値から元の入力値は割り出せないため、パスワードの保存や改ざん検知のために利用される。
  2. ※2 THE WALL STREET JOURNAL, “米ヤフー、アカウント5億件以上の個人情報流出”
    http://jp.wsj.com/articles/SB10616159211553144711104582330273808817542(外部リンク)
  3. ※3 ITmedia, “Dropboxのアカウント情報流出、被害は6800万件超に”
    http://www.itmedia.co.jp/enterprise/articles/1609/01/news073.html(外部リンク)

1.事例

(1) Adobe Systems

2013年10月、約3,800万人のIDと暗号化されたパスワードが流出し(※4)、そのわずか1ヵ月後、本件を調査したセキュリティ企業が、使用者数の多かった上位100の暗号化パスワードを割り出しました(※5)。同セキュリティ企業のCEOは、その原因を以下のように説明しています。
「Adobeがハッシュよりも対称鍵暗号を選び、ECBモード(※6)を選択し、全てのパスワードに同じ鍵を使っていたことや、ユーザーが平文で保存していたパスワード推測のヒントがあったおかげ」(※7)

  1. ※4 ITmedia, “Adobeへのサイバー攻撃、不正アクセスの影響は3800万人に”
    http://www.itmedia.co.jp/enterprise/articles/1310/30/news044.html(外部リンク)
  2. ※5 ITmedia, “Adobeの情報流出で判明した安易なパスワードの実態、190万人が「123456」使用”
    http://www.itmedia.co.jp/enterprise/articles/1311/06/news040.html(外部リンク)
  3. ※6 ECB(Electronic Codebook)モード
    対象文字列を一定長に分割して処理を行う暗号化方式で用いられるアルゴリズムの一つ。入力文字列と暗号鍵が同じ場合、暗号化後の文字列は常に同じになる。
  4. ※7
    http://www.itmedia.co.jp/enterprise/articles/1311/06/news040.html(外部リンク)

(2) LinkedIn

2016年5月、LinkedInから2012年に流出したパスワードが1億1,700万人を超えていたことが判明しました(※8)。ハッシュ化されていたにも関わらずパスワードはハッカーフォーラムに投稿され、20万件以上の悪用が報告されています(※9)。
「パスワードの保存状態はSHA-1を使ってハッシュ化されているものの、強度を高めるためのソルトは行われていなかった」(※10)

  1. ※8 ITmedia, “LinkedInの2012年の情報流出、新たに1億1700万人のパスワードが闇市場で流通”
    http://www.itmedia.co.jp/enterprise/articles/1605/19/news067.html(外部リンク)
  2. ※9 ITpro, “Linkedinのパスワードが流出、650万件がハッカーフォーラムで公開との報道”
    http://itpro.nikkeibp.co.jp/article/NEWS/20120607/400824/?rt=nocnt(外部リンク)
  3. ※10
    http://www.itmedia.co.jp/enterprise/articles/1605/19/news067.html(外部リンク)

(3) Ashley Madison

2015年9月、出会い系サイトAshley Madisonから流出したパスワードが、解読には何百年もかかると言われていたアルゴリズム「bcrypt」でハッシュ化されていたにも関わらず解読されました(※11)。
このサイトでは、ユーザーのパスワードを通常ログインだけではなく、自動ログインでも使用していました。自動ログインでは使用を推奨されないアルゴリズム「MD5」でハッシュ化保存していたため元のパスワードが割り出されたのです(※12)。

  1. ※11 ITmedia, “不倫サイトの流出パスワードを解読、強力ハッシュの突破に成功か”
    http://www.itmedia.co.jp/enterprise/articles/1509/11/news050.html(外部リンク)
  2. ※12 CynoSure Prime, “How we cracked millions of Ashley Madison bcrypt hashes efficiently”
    http://cynosureprime.blogspot.jp/2015/09/how-we-cracked-millions-of-ashley.html(外部リンク)

2.パスワード保存時の対策

(1)対象情報の明確化
ユーザー認証に利用するパスワードだけではなく、事例(1)のようなパスワード推測のヒントや、事例(3)のような自動ログイン用途と思われる情報など、流出した際にパスワードの割り出しに悪用される可能性のある情報は、パスワードと同等のセキュリティ対策を実施すべきです。また、本当にその機能が必要か、あらためて検討してみるのもよいでしょう。

(2)推奨ハッシュアルゴリズムの使用
事例(1)ではパスワードを暗号化して保存していました。この事例では、暗号化がパスワードを割り出されてしまった原因ではありませんが、パスワードと一緒に暗号鍵が流出していたとしたら?暗号鍵にアクセスできるシステム管理者がパスワードを解読しようとしたら?と考えると、パスワードはハッシュ化しておく必要があります。

また、事例(3)では推奨されていないハッシュアルゴリズムを使用したことが、パスワードを割り出されてしまった一因であると考えられます。ハッシュ化に利用するアルゴリズムを決める際には、米国国立標準技術研究所(NIST)が使用を認めているもの(※13)や電子政府推奨暗号リスト(※14)に掲載されているもの、SHA-2以降をお薦めします。最近では、グラフィックボード等を使った高速な攻撃手法に対抗するため、処理に一定の時間をかけられる変数を持っているアルゴリズム(Argon2、 PBKDF2、 scrypt、 bcrypt等)を使用することも有効とされています(※15)。

(3)ソルトの付与
レインボーテーブルを使った攻撃に対抗するためには、パスワードをハッシュ化する前に、パスワードにシステム側が決めた文字列(ソルト)を付与してから、ハッシュ化するのが有効です。この「ソルト」は以下の要件を満たしている必要があります。

  • ユーザーごとに異なる文字列とすること(OWASP(※16)では乱数の使用を推奨)
  • ある程度の長さを確保すること(OWASPでは32byte or 64byteを推奨)

上記の要件を満たすことで、元のパスワードが同じでも異なるハッシュ値となり、さらにハッシュ値の元となる文字列が長くなるため、攻撃にかかる時間を長くできます。

(4)ストレッチングの実施
ストレッチングとは、ハッシュ値の計算を数千回~数万回繰り返し行うことです。攻撃にかかる時間を長くできるため、グラフィックボード等を使った高速な解読手法への対抗策として有効です。しかし、サーバ負荷が増えるというデメリットもあるため、ストレッチングの回数は、サーバ負荷を考慮して検討する必要があります。

  1. ※13 NIST, “Federal Inf. Process. Stds. (NIST FIPS)”
    https://www.nist.gov/nist-pub-series/federal-inf-process-stds-nist-fips(外部リンク)
  2. ※14 CRYPTREC, “電子政府における調達のために参照すべき暗号のリスト”
    http://www.itmedia.co.jp/enterprise/articles/1509/11/news050.html(外部リンク)
  3. ※15 OWASP, “Password Storage Cheat Sheet”
    https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet(外部リンク)
  4. ※16 OWASP(Open Web Application Security Project)
    Webアプリケーションをセキュアにするためのドキュメントの整備、およびテストを行うためのツール開発などを行う非営利団体

3.まとめ

パスワードを保存する際には、暗号化かハッシュ化だけでなく、前述のような実装が必要です。上記の対策を実現可能なライブラリや関数(password_compatライブラリ、Spring Securityライブラリ等)が利用できる場合は、それらによるパスワード保存を推奨します。

また、ハッシュ値を解読する攻撃手法は日々進化しており、現時点で安全でも、いつ危険な状態になるかは分かりません。そのため、実装の変更が必要となることを考慮し、パスワード保存方法や二要素認証等の認証方式の変更についても、あらかじめ検討しておくとよいでしょう。

お問い合わせ