✖

パスワードの安全性

パスワードで守られたもの(パスワードつきのRARファイル、メールなど)に入りこもうとする攻撃者には、パスワードを知らなくても目的を果たす方法がいくつかあります。ある程度の知恵や機転や知識が必要な方法もあれば、少しの運や体力が必要な方法もあります。まず、攻撃者にどんな方法があるかをまとめてみましょう。

他人のパスワードを破る方法

  • パスワードを知っている人(たとえばメールの持ち主)を探して、その人から聞き出します。言いくるめる、買収する、なぐる。この方法については、この記事ではこれ以上説明しません :-)。
  • 持ち主から、なんとか気づかれないようにパスワードを聞き出します。たとえば、偽のメールを使います。専門的にはフィッシング詐欺といいます。アカウントの持ち主にメールを送り、ユーザー名とパスワードを送り返すように頼むのです。メッセージをどれだけ信用できそうに見せるかが腕の見せどころです。頼むだけではたぶん足りないので、何かもっともらしい話をつける必要があります。よくあるのは、データベースが壊れたので、すべてのユーザーにユーザー名とパスワードをもう一度入力してもらいたい、入力しなければメールボックスを削除する、といった話です。メッセージが本当にきちんとしたものに見えれば、成功する割合は小さくありません。
  • 辞書攻撃。よく使われるパスワードを集めたリストをインターネットからダウンロードして、すべて試します。運がよく、持ち主がありがちなパスワードを使っていれば、本当に簡単に手に入ります。ここから大事な教訓が得られます。意味のある言葉をパスワードにしてはいけません。たとえば sakura というパスワードにしたら、どんな駆け出しのハッカーでも数秒で破ってしまうでしょう。これはおそらく最も効果的な方法です。本当に大きなパスワード辞書があれば、たいした苦労もなく、かなりの割合のユーザーのパスワードを当てられます。
  • 総当たり攻撃(ブルートフォース)は、いちばん頭を使わない方法です。考えられるかぎりのパスワードを、すべて試していきます。プログラムがある手順にしたがって文字を順に組み合わせ、目的のパスワードに当たったかどうかを試します。見つけたら、そのパスワードを保存して終わります。この方法について、くわしく見ていきましょう。

総当たり攻撃

この方法を使うプログラムは、いろいろな文字の順列をつくっては、パスワードにたまたま当たっていないかを試すだけです。このような試行にどれくらい時間がかかるかを計算してみましょう。

パスワードは5文字で、英語のアルファベットの小文字だけでできているとします(ひらがなや漢字などは使いません)。英語のアルファベットは26文字です。この文字5つで、何通りのパスワードがつくれるかは簡単に計算できます。順番が大切なので順列を使います(lemon と melon は同じ文字でできていますが、ちがうパスワードです)。また、パスワードには同じ文字が何回出てきてもよいので、重複順列を使う必要があります。では、計算してみましょう。異なる n 個のものから k 個を取って並べる重複順列の総数は nk です。n には選ぶもとになる文字の数、つまり英語のアルファベットの文字数を代入し、k にはパスワードの文字数、ここでは5を代入します。結果は 265、およそ1200万通りです。これは多いのでしょうか、少ないのでしょうか。

それは、使える機械にもよります。古いおんぼろのパソコンでは1秒間に少ししか照合できませんが、最新のコンピューターならその1万倍も照合できます。ここでは、コンピューターが1秒間に1000万回の照合と判定をこなせるとします。もうおわかりのように、このコンピューターなら、5文字のパスワードを2秒以内に見つけてしまいます。これはまったくよろこべない結果です。でも、あきらめるのはまだ早いです。

パスワードを強くする

5文字のパスワードは、少しも安全ではありません。きちんとしたシステムでは、こんなに短いパスワードは設定さえできないこともあります。パスワードは8文字以上にすべきだといわれています。では、8文字のパスワードが何通りあるかを計算してみましょう。前の場合と同じく、英語のアルファベットの小文字だけを考えます。公式に代入すると 268、およそ2000億通りになります。少しはましな数です。コンピューターがすべての場合を判定するには、6時間弱かかります。前よりはよくなりましたが、大文字や数字、アンダーバーやハイフンなどの記号も使ったら、パスワードがどれだけ強くなるかを見てみましょう。

小文字は26文字、大文字も 26 文字で、合わせて 52 文字です。これに 10 個の数字と、いくつかの記号を加えます。どこでもすべての記号が使えるわけではないので、簡単にするために記号は8個だけとし、文字の数がきりのよい 70 になるようにします。パスワードの長さは、やはり8文字です。代入すると 708 という数になります。わかりやすく言えば、およそ 5.8 · 1014、言葉で言うと600兆通り近くです。これはかなりの数です。このコンピューターでも、すべての場合を調べるには1万6000時間かかります。2年弱です。現実的な時間でパスワードを見つけるには、攻撃者はよほど運がよくなければなりません。しかも、攻撃者はパスワードの長さを知っている必要があります。長さを知らなければ、もっと短いパスワードの場合も調べなければならないのです。

データが心配で、数字だけのパスワードを使う人もいます。このようなパスワードは、辞書攻撃にはとても強いです。よく使われるパスワードの辞書に、まさか 41,274,390,553 のような数が入っていることはないでしょうから。ただし、残念ながら、このようなパスワードは辞書攻撃には強くても、総当たり攻撃には弱いのです。数字は10個しかないので、何通りあるかはいつも 10k です。パスワードの強さを支えているのは、長さだけです。前に考えた、あらゆる種類の文字を使った8文字のパスワードは、およそ 5.8 · 1014 通りでした。数字だけのパスワードで少なくとも同じだけにするには、15けたが必要です。文字数がほぼ2倍になります。短くても、いろいろな種類の文字を使ったパスワードのほうが効果的なのは明らかです。

攻撃者をあなどらない

攻撃者は頭がよいかもしれません。ここまで読んで、今のパスワード「lemonade」を、せめて「Lemonade」に変えようと決めたとしましょう。攻撃者は大文字も手順に含めなければならなくなるので、考えられるパスワードの数は何倍にも増えます。ところが、攻撃者は、大文字は先頭にしかないと予想するかもしれません。そのほうが覚えやすく、単語の途中を大文字にすることはふつうないからです。そこで攻撃者は、小文字だけの単語と、先頭だけが大文字の単語をすべて調べる手順を書きます。

もとのパスワードの複雑さ(ここでは、同じ形、つまり小文字8文字のパスワードが全部で何通りありうるかのことです)は 268 でした。攻撃者が何も考えなければ、新しいパスワードの複雑さは 528 になります。しかし、上で説明した手順を使われると、複雑さは 52 · 267 になります。パスワードの1文字目には小文字か大文字が入り、これは合わせて 52 文字です。残りの7文字には小文字しか入らないので、ふつうの重複順列になります。

さらに、攻撃者は、パスワードが4つの文字と4つの数字でできていて、まぜずに文字は文字、数字は数字でまとまっていることを知っているかもしれません。このようなパスワードの複雑さは、次のように計算します。はじめの4文字は全部で 264 通り、あとの4つの数字は 104 通りです。この2つの結果をかけて、264 · 104 になります。攻撃者が、数字と文字のどちらが先かを知らなければ、この結果をさらに2倍する必要があります。