リスト型攻撃・パスワードスプレー・総当たりの違いと、それぞれに効く対策を整理。ソルトとストレッチングの役割の違い、bcrypt や Argon2 を使う理由、多要素認証の要素の数え方、情報処理安全確保支援士試験での問われ方まで。
パスワード認証は「知識」による認証です。攻撃の型はいくつかあり、ログに残る形も効く対策も違います。情報処理安全確保支援士試験では、ログイン記録の断片を示して「攻撃の種類」「用意していた対策が働かなかった理由」「講じるべき対策」を書かせる設問が繰り返し出ます。攻撃の型と対策の対応を、はっきり分けて覚えておくことが得点に直結します。
| 攻撃 | やり方 | ログに残る形 | 効きにくい対策 |
|---|---|---|---|
| 総当たり・辞書攻撃 | 一つの ID に多数のパスワードを試す | 同じ ID に失敗が集中する | — |
| パスワードスプレー | 一つのパスワードを多数の ID に試す | 同じ送信元から多数の ID へ、各 1 回ずつ | 利用者単位のロックアウト |
| リスト型攻撃 | 他所で漏えいした ID とパスワードの組を試す | 成功率が高く、失敗が少ない | 複雑さの要求・ロックアウト |
注目すべきは、利用者ごとの失敗回数によるアカウントロックが、パスワードスプレーには効きにくいという点です。1 人あたり 1 回しか試されないので、上限に達しません。数える単位を「利用者ごと」から「送信元ごと」にも広げる、あるいは時間帯・地域・成功率といった別の軸で異常を見る必要があります。
リスト型攻撃はさらに厄介で、正しい組み合わせを試すため失敗そのものが少なく、失敗回数を数える対策では捕まえられません。利用者側の「使い回さない」に頼らず、提供側で多要素認証や、既知の漏えいパスワードの拒否といった手を打つ必要があります。
パスワードは平文でも可逆な暗号でも保管しません。ハッシュ化して保管しますが、単純なハッシュでは足りません。ここで出てくるのがソルトとストレッチングで、この二つは目的が違います。混同したまま説明すると、設問で観点を落とします。
| 手法 | 何をするか | 何を防ぐか |
|---|---|---|
| ソルト | 利用者ごとに異なる値を加えてからハッシュ化する | 事前計算表(レインボーテーブル)による割り出し |
| ストレッチング | ハッシュ計算を何度も繰り返して時間を掛ける | 総当たりの速度(単位時間あたりの試行回数) |
ソルトがあると、同じパスワードを使っている二人でも保管値が変わるため、あらかじめ作っておいた対応表が使えなくなります。ただし、総当たりそのものが遅くなるわけではありません。遅くするのがストレッチングで、bcrypt・scrypt・Argon2 といったアルゴリズムは、この考え方を最初から組み込んで設計されています。SHA-256 は高速に計算できるように作られており、その速さがパスワード保管では不利に働きます。
# 保管方式の設定例(考え方)
password_hash = sha256 # 高速に計算できる。総当たりに強くない
password_hash = bcrypt # 計算に時間が掛かるよう作られている
password_hash = argon2id # 計算に加えて記憶領域も要求する
認証の要素は、知識(知っているもの)・所有物(持っているもの)・生体(その人自身であるもの)の三つに分かれます。多要素認証とは、このうち異なる種類を二つ以上組み合わせることを指します。二回聞けば二要素、ではありません。パスワードと秘密の質問はどちらも知識なので、二要素にはなりません。
所有物による認証のうち、FIDO による方式は、秘密鍵を端末から出さずサーバへは署名だけを送ります。サーバ側に「漏れると困る秘密」が存在しないため、保管値の漏えいという問題自体が起こりません。接続先のドメインと鍵が結び付くので、偽サイトへ入力させる形の攻撃にも強くなります。
認証を通した後、利用者はセッションで識別され続けます。ここが緩ければ、認証をどれだけ厳しくしても意味がありません。ログイン成功時にセッション ID を再発行しなければ、ログイン前に仕込まれた ID がそのまま認証後の権限を持ってしまいます(セッション固定)。ログアウトのときは、手元の cookie を消すだけでなく、サーバ側でもセッションを破棄します。消し忘れると、同じ ID を送られたときに再び使えてしまいます。
セッション ID を運ぶ cookie には、スクリプトからの読み取りを防ぐ HttpOnly、暗号化されていない通信で送らせない Secure、サイトをまたぐ要求で送らせない SameSite を付けます。三つは防ぐものが違うので、対策を挙げるときは混ぜないようにします。
午後問題では、ログイン記録を読ませて「同じ送信元から、多数の ID に、各 1 回ずつ」という形からパスワードスプレーを見抜かせ、続けて「利用者単位のロックアウトが働かなかった理由」を書かせる構成が典型です。理由を書くときは「1 人あたりの失敗が上限に達しないから」まで踏み込むと観点を満たせます。午前Ⅱでは、リスト型攻撃・パスワードスプレー・辞書攻撃の区別、ソルトとストレッチングの役割の違い、認証の三要素の分類が繰り返し問われます。
IPA 公式:過去問題(情報処理安全確保支援士試験) ↗各年度の問題冊子・解答例・採点講評の PDF を、公式サイトで確認できます。