パスワードクラック概論(5)
前回までで、どのような「関数」がパスワード認証に向いているのか書いてきました。
実は、パスワード認証で使用されている「関数」はほぼ二種類しかありません。両方とも上記二条件を満たす関数です。
特にMD5は「出力」が特徴的であるため、「パスワードデータファイル」を抜いたクラッカーは「そのサイト(なりサーバーなり)で使用されている関数」を推測することができます(逆の言い方をすると、関数の実体を推測されても使うだけのメリット・・・つまり「パスワード認証に使う関数」としての有用性・・・が上記二関数にはある、ということです)。
「毎秒800万件」という数字は二つの意味を持っています。
「パスワードデータファイル」内の文字列は「正しいパスワードを一方向関数に代入した結果」であるため、理論上「パスワード認証」を破ることは(サーバー内部のパスワードデータファイルを抜いたとしても)不可能です。しかし多くの初心者ユーザーは「辞書に載っているような文字列」をパスワードにしている。ならば、「パスワードデータファイル内の文字列」を逆関数に代入することができなくても(英単語等の「関数」への代入による)総当たり試行によって破ることが可能である。
これが、今日の「パスワード認証」「パスワードクラック」の世界の概要です。
- 同じ「入力」に対しても「鍵」によって「出力」を変えられる関数
- 「出力」から「入力」を求めることが不可能な一方向関数
実は、パスワード認証で使用されている「関数」はほぼ二種類しかありません。両方とも上記二条件を満たす関数です。
□1:DES
二文字の鍵を「XX」とすると出力は「XXYYYYYYY」となる。「Y」が「入力」「鍵」によって変わる。□2:MD5
八文字(以内)の鍵を「XXXXXXXX」とすると出力は「$1$XXXXXXXX$YYYYYYYY$」となる。「Y」が「入力」「鍵」によって変わる。特にMD5は「出力」が特徴的であるため、「パスワードデータファイル」を抜いたクラッカーは「そのサイト(なりサーバーなり)で使用されている関数」を推測することができます(逆の言い方をすると、関数の実体を推測されても使うだけのメリット・・・つまり「パスワード認証に使う関数」としての有用性・・・が上記二関数にはある、ということです)。
MD5ハッシュで暗号化されたパスワードは、DES ハッシュで暗号化されたパスワードよりも長いですし、その上$1$という文字で始まるという特徴も持っていますDES,MD5ともに「出力」を見れば「鍵」は分かる(が「入力」は分からない)という関数であるため、パスワードデータファイルを抜いたクラッカーのすべきことは
DESのパスワードはこれといって識別可能な特徴は持っていませんが、MD5のパスワードよりは短く、そして$という文字を含まない64文字のアルファベットを使って表現されているので、比較的短い文字列でドル記号で始まっていないものはおそらくDESのパスワードでしょう
「FreeBSDハンドブック」内「DES,MD5,とCrypt」より
- そのパスワード認証で使用されている関数がDESなのかMD5なのか(もしくはその他の関数なのか)を判断する
- (DESかMD5だったならば出力から)「鍵」を読みとる
- 当該「関数」「鍵」に対して何を「入力」とすればパスワードデータファイル内の文字列が「出力」となるのか総当たり試行で探す
一部のパスワードクラッキングソフトは、最新のPentium 4搭載マシンで毎秒800万件近くの文字の組み合わせを試すことが可能
「ZDNet」内「史上最悪のセキュリティホールは、ユーザーのパスワード」より
「毎秒800万件」という数字は二つの意味を持っています。
□1: 辞書に載っているような英単語なら一瞬で「クラック」することができる
例えば僕の手元にある(いわゆる学生向けの)英和辞書は「収録語約6万」ということです。一般的にクラッカーは辞書ファイル(よく使われる文字列が羅列されたファイル)を読み込ませて「パスワードクラックツール」を使用するため、多少数字を組み合わせたところで数時間粘ることすら困難でしょう。□2:ランダムなパスワードを破ることは現実的に不可能である
印刷可能な95種類のASCII文字を使った8文字のパスワードの組み合わせは6600兆以上。一部のパスワードクラッキングソフトは、最新のPentium 4搭載マシンで毎秒800万件近くの文字の組み合わせを試すことが可能だが、それでも8文字のパスワードを破るには平均で13年以上かかる。ここまで来てようやく「辞書に出てくるような英単語をパスワードに使うのは危険」というよくある台詞の意味が分かったと思います。「危険」というのは何も「ログインformの『パスワード』に偶然その文字列を打ち込むクラッカーがいるかもしれないから」ではない。「パスワードクラックツールに辞書を読み込ませて総当たり試行させれば一瞬で破られるから」なのです。
「ZDNet」内「史上最悪のセキュリティホールは、ユーザーのパスワード」より
「パスワードデータファイル」内の文字列は「正しいパスワードを一方向関数に代入した結果」であるため、理論上「パスワード認証」を破ることは(サーバー内部のパスワードデータファイルを抜いたとしても)不可能です。しかし多くの初心者ユーザーは「辞書に載っているような文字列」をパスワードにしている。ならば、「パスワードデータファイル内の文字列」を逆関数に代入することができなくても(英単語等の「関数」への代入による)総当たり試行によって破ることが可能である。
これが、今日の「パスワード認証」「パスワードクラック」の世界の概要です。

TrackBack
この記事へのトラックバック