目次
はじめに
IT業界で働くSE(システムエンジニア)やPG(プログラマ)であれば常識的な話といえるパスワードの取り扱い。パスワードは暗号化してデータベースに保存しておけば良いくらいの認識の人も多いのではないでしょうか。
スポンサーリンク
本記事では、分かっているつもりでも意外に知らない事が多いパスワードの取り扱いについて、実際に起きたパスワード流出の事例から、安全にパスワードを保管するにはどうすれば良いのかをまとめてみました。
暗号化とハッシュ化の違い
たまに暗号化とハッシュ化を同じだと言う人がいますが、暗号化とハッシュ化は違います。
暗号化は平文のデータを暗号アルゴリズム(RSA、DSA、DES、AES等)を使用して暗号化していきます。暗号化する際は鍵を使用します。鍵を使用する事で暗号化されたデータを復元する事が出来るのです。
ハッシュ化は平文のデータをハッシュ関数(md5、sha1、sha2等)を使用してハッシュ値と呼ばれる規則性のない固定長の値を求め、その値によって元のデータを置き換えていきます。暗号化との大きな違いは元に戻すことが困難なところです。
暗号化は元に戻す為の鍵があり、元に戻す事が前提の方式です。元に戻す必要がある「機密情報」などを取り扱う時などに使用します。それに比べてハッシュ化は元に戻す必要のないパスワードの保管などで使用する事が一般的です。
スポンサーリンク
パスワード流出事例
「宅ふぁいる便」平文パスワード流出
2019年1月に大阪ガス100%子会社のオージス総研(大阪市)が提供するファイル転送サービス「宅ふぁいる便」が480万件のメールアドレスとパスワードが漏洩したと発表しました。
そしてパスワードは暗号化されていないという事実が判明しています。2019年にまだパスワードを平文で保管しているシステムがあるという事実に驚きが隠せない事例となりました。
参考URL:https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/01661/
米Adobe Systems暗号化パスワード流出
2013年10月米Adobe Systemsのネットワークが不正アクセスされて大量のユーザー情報などが流出した事を発表しました。
パスワードは暗号化されたいたが、「123456」のような簡易なパスワードを使っているユーザーが大量にいた事実が判明しています。パスワードが推測された理由は「Adobeがハッシュよりも対称鍵暗号を選び、ECBモードを選択し、全てのパスワードに同じ鍵を使っていたことや、ユーザーが平文で保存していたパスワード推測のヒントがあったおかげ」だと説明しています。
参考URL:https://www.itmedia.co.jp/enterprise/spv/1311/06/news040.html
LinkedInハッシュ化パスワード流出※ソルトなし
2012年にビジネスSNS「LinkedIn」のユーザーのパスワードなどの情報が流出した事を発表しました。
流出したLinkedInのユーザー約1億1700万人の電子メールとパスワードを含むアカウント情報が闇市場で5ビットコイン(約2200ドル相当)で売りに出された事が判明しています。パスワードはSHA-1を使ってハッシュ化されているものの、強度を高めるためのソルトは行われていなかったと言われています。
参考URL:https://www.itmedia.co.jp/enterprise/spv/1605/19/news067.html
Twitterハッシュ化パスワード※ソルト、ストレッチングあり
Twitterが2018年5月2日、全てのTwitter利用者のパスワードが危険にさらされた可能性があると発表しました。
パスワードは「bcrypt」というソルトとストレッチングが対策されている手法でハッシュ化して保存していることが明らかになっており、パスワードの推測は困難です。Twitterが発表した理由はログを記録する部分に不具合があり、平文で保存していたという事実があった為です。ただし不具合は修正済みでパスワードの漏洩はなかった様子です。
参考URL:https://www.itmedia.co.jp/enterprise/spv/1605/19/news067.html
安全にパスワードを保管する方法
パスワードは暗号化ではなく、ハッシュ化するようにしましょう。なぜなら暗号化の場合、パスワードと一緒に鍵が流出したら大問題になるからです。
スポンサーリンク
ただハッシュ化すれば安全という訳ではありません。事例ではLinkedInがハッシュ化したパスワードにもかかわらずパスワードを推測されています。
パスワードは事例にあるTwitterのように最適なハッシュ関数を使用する事をお勧めします。最適なハッシュ関数を利用し、ソルトの付与やストレッチングの実施をする事で、パスワードを安全に保管する事が出来るのです。
ソルトとは?なぜソルトが必要なのか?
ソルトとはパスワードをハッシュ化する前にパスワードに付与する文字列のことをいいます。ハッシュ化する前にパスワードにソルトを付与することでパスワードを強化します。
なぜソルトが必要なのかというと弱いパスワードを強いパスワードに変えることが目的です。ユーザーは覚えやすいパスワードをつける事が多いので、弱いパスワードになる事が多いのです。
弱いパスワードの場合、いくらハッシュ化していても、「レインボーテーブル」などによる攻撃でパスワードを推測される危険性があります。
※レインボーテーブルとはハッシュから平文を得るために使われるテクニックの一つで、このハッシュだったら平文はこれですよというのを事前に用意しておく手法です。
パスワードにソルトを付与する事で弱いパスワードを強いパスワードに変え「レインボーテーブル」などの攻撃からパスワードを推測し難い物に変えているのです。
ストレッチングとは?なぜストレッチングが必要なのか?
ストレッチングとはハッシュ値の計算を繰り返し(例えば1万回など)行うことを言います。繰り返し行う事でパスワードの推測をより困難な物にします。
なぜストレッチングが必要なのかというとソルトを付与した強いパスワードでも、総当たり攻撃でいつかはパスワードが推測されてしまう可能性があります。ストレッチングを行う事で総当たり攻撃によるパスワード推測までの時間を長くする事が出来るのです。ストレッチングの回数が多い程、攻撃者は現実的な時間の中でのパスワード推測が困難になります。(ストレッチングの回数まで一致する必要があるため)
ただストレッチング回数が多いとパスワードをハッシュ化する際の処理速度が遅くなるので、サーバの負荷を考慮した回数に設定する必要があります。
終わりに
本記事ではパスワードを安全に保管する方法を、実際のセキュリティ事故の事例から紹介しました。
パソコンの性能は日々進化している為、それに伴い暗号化やハッシュ化も新しい手法に変わってくるはずです。そのため最新のセキュリティ情報の収集は大切になっていきます。2019年1月時点でパスワードを安全に保管する方法は、事例でTwitterが利用していた「bcrypt」などのハッシュ関数を使用してソルトとストレッチングを行うのが最適な手法だと考えられます。
※bcryptはソルトとストレッチングを行ってくれるパスワード用のパスワードハッシュ関数です。