ハッシュ関数・ストレッチング・ソルト
こんにちは。こんにちは。西村です。年度末で大忙しですが、なんとかやってます。
パスワードはわからない
learningBOXのサポートチームへのお問い合わせで、パスワード忘れたんだけど、教えてもらえますか??ってのがあります。お客様からすれば、サービス運営者ならパスワードぐらい分かるんじゃない?と思われるのかもしれませんが、実は、我々もパスワードに何が設定されているか知るすべはありません。
パスワードはハッシュ化されている
learningBOXにおいて、パスワードはハッシュ化されて保存されています。ハッシュ化というのは、元の値に対して何らかの演算を行い、元の値の特徴は分かるものの、元の値が何であるかわからない値を作ることです。例えば、「整数に対して各桁の和を求める」というハッシュ関数を考えてみます。左から右は簡単に求まりますが、右から左は求めることができませんよね?これをハッシュ関数の一方向性といいます。
上記の例では、右の値から左の値を推測できませんが、右の値が同じになるような左の値は簡単に求められてしまうので、パスワード認証システムとしては安全ではありません。右の値を当てることがどれだけ難しいかは衝突耐性、衝突安全性などといわれ、適切なハッシュ関数を使うことが大切です。
ストレッチングで時間稼ぎ
ブルートフォース攻撃。いわゆる総当り攻撃で、ありとあらゆるパスワードを試されると、どんなパスワードでも破れてしまいます。この総当り攻撃にかかる時間を引き伸ばすのがストレッチングという手法です。現代のCPUは速いです。GPUはもっともっと速いです。たかだかゲーミングPCレベルのGPUでも10TFlops、つまり、1秒間に10兆回程度の計算ができてしまいます。10万回の計算で実行できるハッシュ関数は、1秒間に1億回実行できてしまします。つまり、数字8桁のパスワードは1秒で破られます。やばいです。アルファベットと数字が使われているなら1日ぐらいかかるかもしれませんが、1日で破られます。やばいです。そこで、ストレッチングです。ストレッチングとは、ハッシュ関数を繰り返し通すことで時間稼ぎをする方法です。1024回通せば1日が1024日に伸びます。そこそこ安全です。
ソルトで安全に
1024日かかるといっても、それはゲーミングPCでのこと。予算が100億円あれば破れます。楽勝です。予算100億円あれば、10桁までのすべてのあり得るパスワードに対してストレッチングした後のハッシュ値を求め、レインボーテーブルなどという魔法の逆引き辞書を作れてしまいます。(※厳密に算出した金額ではありません)これに対抗するために、パスワードにソルト(Salt)をふって味付けします。こうすることによって、レインボーテーブルによる逆引き攻撃を防ぐことができます。もちろん、1このパスワードを破るために100億円注ぎ込まれると破ることができるわけですが、そこはバランスです。
オンライン攻撃とオフライン攻撃
ストレッチングとソルトの話は、実は、オフライン攻撃の話でした。オフライン攻撃というのは、ハッシュ化された値が外部に漏れていて、その値に対してPC上で総当りによるパスワード推定をする方法です。ハッシュ化された値が漏れていて・・・とか軽くかいてますけど、この時点で情報流出事故です。インシデントではなく、アクシデントです。大変な状態です。そんな事態に落らないよう、開発プロセスを整備し、コーディングルールを徹底し、コードレビューを行い、脆弱性診断をしているわけです。その一方、「オンライン攻撃」は簡単に実行できます。オンライン攻撃とは、ログイン画面にて、IDとパスワードを入力して、ログインしようとする攻撃です。誰でもできますね。
オンライン攻撃を防ぐ:回数制限
パスワードをN回間違えたらログインをロックする。それだけで試行回数を制限でき、不正ログインされる可能性が格段に下がります。learningBOX 2.10.xより、パスワードの誤入力回数の上限を設定できるようになりました。
オンライン攻撃を防ぐ:二要素認証
learningBOXでは、IDとパスワードが正確に入力された場合に、E-mailにて追加認証キーを通知することができます。この機能を使うことで、認証キーの送信先のメールボックスにログイン認証が破られない限りは、不正ログインできないです。
オンライン攻撃を防ぐ:IPアドレス制限
learningBOXを専用サーバ契約いただくことで、接続元のIPを制限することができます。つまり、会社からしか接続できないよう制限できるということです。
最後に
セキュリティー技術は日進月歩で進んでいます。一度学習しただけで満足せず、常に新しい知識を取り入れ続けることが大切です。また、情報セキュリティマネジメント試験、情報処理安全確保支援士試験などの公的な資格を取得することで、俯瞰的な知識を効率的に身につけることができます。私も非登録ですが、情報処理安全確保支援士試験を受験し、合格しております。✌
コメント ( 0 )
トラックバックは閉鎖されています。
まだコメントはありません。