← コラム一覧

リスト型攻撃とパスワード保管|ソルト・ストレッチング・多要素認証の使い分け

リスト型攻撃・パスワードスプレー・総当たりの違いと、それぞれに効く対策を整理。ソルトとストレッチングの役割の違い、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 を、公式サイトで確認できます。

確認しておきたいこと

演習(支援士日誌)で手を動かす →