2011年3月9日

パスワードのクラッキングを難しくする「ソルト」と「ストレッチング」とは

今日下の記事を読んだ。
HBGary事件の顛末
セキュリティベンダーの HBGaryが先日 Anonymousによってハックされ話題になった。HBGaryはセキュリティ研究者である Greg Hoglundがファウンダーである。彼は長年 rootkit.comを運営しているほか、Exploiting Softwareや rootkitsなどのすばらしい書籍も書いており、この業界ではかなりの有名人だ。
この事件は一体どのようにして起きたのか。きっかけは、HBGary Federalという会社が Anonymousについて調査した結果を公表しようとしたことに対する、Anonymousの報復攻撃ということのようだ。(続き...)
SQL Injectionの脆弱性から、ソーシャルエンジニアリングも絡めて芋づる式にメールアカウントやサーバーのログインパスワードなどが取得されて行く過程が大変興味深い。

ここで言及されていた、パスワードハッシュを作成する際の「ソルト」と「ストレッチング」について、初耳だったのでメモ。

ソルトについては以下のエントリが詳しい。
塩加減は重要? - JULYの日記
(...)非可逆処理を行う際に、ランダムなデータをパスワードに付け加えてから処理を行うと、同じパスワードであっても、処理結果は違ったものになります。この付加されるデータを「ソルト」と言います。
パスワード情報を保存する時は、このソルトの値と処理結果の値を保存しておきます。検証する時には、入力されたパスワードと保存されているソルトの値を組み合わせて非可逆処理を行い、その結果と保存されている値を比較します。(...)

パスワードクラック - Wikipedia
レインボーテーブル - Wikipedia
という事で、ソルトを付加して非可逆処理を行うと「レインボーテーブル」を使ったクラッキングがやりにくくなるとの事。ただしこれだけだとブルートフォースアタックにはあまり効果が無い。

ストレッチングについては以下を参照。
Key stretching - Wikipedia, the free encyclopedia
(...)key stretching refers to techniques used to make a possibly weak key, typically a password or passphrase, more secure against a brute force attack by increasing the time it takes to test each possible key. (...)
Key stretching techniques generally work as follows. The initial key is fed into an algorithm that, running on a given speed of processor, takes a known constant time to apply. The algorithm is constructed so that the delay introduced is acceptable to most users, say one second on a typical personal computer. The output is the enhanced key. The enhanced key should be of sufficient size to make it unfeasible to break by brute force (e.g. at least 128 bits). The overall algorithm used should be secure in the sense that there should be no known way of taking a shortcut that would make it possible to calculate the enhanced key in less time (less processor work) than by using the key stretching algorithm itself.
要するに、最初のキーに対して何万回(上のページの例では65000回)も(ハッシュ関数などで)計算して求めたキー(enhanced key)を使ってパスワードを非可逆処理しておく。そうするとユーザーが入力したパスワードをチェックする時にも同じ回数の計算処理を行うので1秒程度の時間がかかってしまうが、利便性が損なわれる程ではない。
ところが悪意を持ったクラッカーがブルートフォースでパスワードを取得しようとした場合にも1回の試行につき1秒程度(コンピュータの性能にもよるが)の時間がかかり、合計すると通常のブルートフォースよりも桁違いに長い時間となってしまい現実的ではなくなる、という事らしい。

なるほど、勉強になりました。^^

ついでに検索にヒットした下の記事も読んで改めて参考になった。
Rg00dP@55Wrd53z―奥深きパスワードの世界 - 世界のセキュリティ・ラボから:ITpro

人の造りしもの――“パスワード”の破られ方と守り方 - @IT
くれぐれも簡単なパスワードの使用には注意したい。





2011/04/22 追記:
パスワードについて非常に分りやすい説明を見つけたので、リンクを。
パスワードの話


2011/05/10 追記:
こちらも必見。
これからの「パスワード」の話をしよう
パスワードをハッシュ化(暗号化)保存することを法律で義務化するくらいのことが必要だと思う


2011/10/10 追記:
また新しい記事が出たのでリンクを追加。
本当は怖いパスワードの話(1/4) - @IT 









.