前回は、認証の基本的な考え方と、暗証番号やパスワードを使った認証を紹介しました。今回は、パスワード認証に対する深刻な脅威と、その対策について解説します。
第3回「パスワード認証へのさまざまな脅威」を解説していきます。
1. 表玄関からだけではないパスワードへの攻撃
前回紹介した認証機能そのものに対する攻撃は、いわば認証の表玄関に対する脅威です。しかし、認証への脅威はそれだけではありません。どんなにパスワードを複雑に設定しても、システムに保存されているパスワードが盗まれてしまうと、全く意味をなしません。
通常、システムに保存されているパスワードには、外部からアクセスできません。外部どころか、システム内部でも管理者権限がないとアクセスできないのが普通です。しかし、こうした保護をバイパスできる裏口があります。それが 脆弱性 です。
脆弱性は、本来行われるべき保護が無効になっていたり、回避できたりするシステム上の欠陥(ソフトウェアのバグや設計上の考慮不足など)が原因で発生します。深刻なものでは、それを悪用することで認証を回避してシステムに侵入したり、本来外部からはアクセスできないデータにアクセスできたりします。
一般に、利用者のパスワードは、システム内でファイルやデータベースのかたちで格納され、アクセス制御により一般のアクセスが禁止されています。しかし、脆弱性を悪用することで、外部からのアクセスができてしまいます(図 1)。
こうした手段で攻撃者が利用者のパスワードを入手してしまえば、もはやそのログインを防ぐ手立てはありません。このため、万一の漏えいに備えて、多くのシステムでは保存されるパスワードを暗号化しています。
一般にパスワードの暗号化には、ハッシュ化と呼ばれる方法が採られます。ハッシュ化されたパスワードは元に戻すことができません。この場合、パスワードの確認は、元データが同じであればハッシュも同じとなる特性を利用して、入力されたパスワードをハッシュ化し、保存されたハッシュ値と比較することで行います。
ハッシュ化によって保存されたパスワードを入手しても、元のパスワードを直接得ることはできないため、絶対に安全と思うかもしれません。しかし、実際はそう簡単ではありません。
ハッシュ化するための計算は標準的な方法で行われ、その方法は公開されています。従って、ハッシュを解読できなくても、何らかの文字列と一致するかどうかは、その文字列のハッシュと同じであるかどうかで分かります。つまり、ハッシュを入手することで、それに対して辞書攻撃のようなことをコンピュータ上で実行することができます(辞書攻撃については、第 2 回を参照)。辞書にあるデータをハッシュ化し、順次、比較していけばいいのです。しかも、認証機構に対する攻撃とは異なり、この比較はコンピュータの速度で実行できます。
ハッシュ計算はある程度の負荷となりますが、最新のハイエンドコンピュータを用いれば、極めて高速な比較ができます。辞書攻撃なら、数分もあれば結果が出てしまうでしょう。それどころか、8 文字程度の英字小文字のみを使った無作為なパスワードならば、全てのパターンを試すことで、数時間から数日の間に結果が得られてしまいます。これは認証自体に対する攻撃に比べ、圧倒的に高速です(図 2)。
このような状況に対応するためには、パスワードの複雑性をさらに上げる必要が生じます。解読処理に少なくとも年単位の時間を要する複雑な文字列を使用し、さらに、平均的な解読時間より短い周期で変更する必要があります。
解読時間は組み合わせの数に比例するため、コンピュータレベルの処理能力に対応するだけで、先の英字 8 文字のパターンに比べて、少なくとも数千倍組み合わせが多くなるようなパスワードを作る必要があります。10 桁以上、英字大文字+小文字+数字+記号のパスワードを3ヶ月で変更するといったポリシーは、こうした暗号化パスワードの流出が念頭に置かれています。
組み合わせを増やすには、文字種を増やすか、桁数を増やす必要があります。例えば、桁数は 8 桁を固定したまま、英字大文字(26 種類)と小文字(26 種類)を混在させ、計 52 種類の文字(2 倍の文字種)を使うと、組み合わせ数は 256 倍(2 の 8 乗倍)になります。一方、文字種を英字小文字に固定して、長さを 10 桁に増やした場合、組み合わせ数は 676 倍(26 の 2 乗倍)となります。つまり 8 桁の英字小文字のみの場合と比較した強度は、文字種数を増やした場合、文字種数比の 8 乗倍となり、桁数を増やした場合、26 の増やした桁数乗倍となります。
文字種には限りがあり、英字大文字、小文字、数字、記号を合わせても、約 80 種類にしかなりません。26 種類を基準とした場合、3 倍強となり、組み合わせ数は 3 の約 8 乗倍、つまり約 6,561 倍が限界です。一方、桁数に限界はなく、例えば、桁数を 11 桁にしただけで、17,576 倍になります。また、桁数を増やすと、文字種を増やした効果も指数関数的に大きくなります。例えば、11 桁 26 種に対し、11 桁 52 種では、2の 11 乗、つまり 2,048 倍の組み合わせ数となり、8 桁の場合に比べ 8倍大きくなります。
以下に、文字種数(26、52、80)における、桁数と組み合わせ数(強度)の関係を示します(図 3)。
桁数や文字種数が強度に与える影響は指数関数的に増加するので、図3 のグラフの縦軸は対数軸となっています。桁数が増えるに従い、劇的に強度が増すことが分かります。
攻撃者に、個人のハッカーなどを念頭に置くのであれば、8 桁の英字大文字 + 小文字+数字+記号程度でも問題はないかもしれません。しかし、より高性能のコンピュータやクラウドなどをフル活用できる攻撃者に対しては、さらに桁数を増やす必要があります。また、攻撃者に解読の時間を与えない短い周期でパスワードを変更する必要もあります。
しかし、パスワードの桁数が増えたり、頻繁な変更を要求されたりすると、パスワードを忘れたり、メモなどが漏えいする確率が高まることが考えられます。要求されるパスワードがあまりにも長くなり、頻繁な変更が必要ならば、より強固な他の認証手段を考える必要があります。
こうした危険性は、あくまでシステムに侵入されるなどして暗号化されたパスワードが盗まれた場合を想定したものです。脆弱性対策や、その他の防御策で侵入リスクを緩和できるのであれば、パスワード要件を緩和することは可能です。
2. パスワードリストによる攻撃
全8回で下記の内容を解説しています。
- 第1回 認証を考える
- 第2回 認証の基本
- 第3回 パスワード認証へのさまざまな脅威
- 第4回 さまざまな認証方式1
- 第5回 さまざまな認証方式2
- 第6回 補完的な認証方式
- 第7回 シングル・サインオンとフェデレーション
- 第8回 認証システムの運用と管理