問題 6★★★

社内の古い業務システムでは、端末がログインのたびにパスワードのハッシュ値を 毎回同じ形で送っている。この値を盗聴した者が、同じ値を送り直すだけでログインできると 指摘された。認証の仕組みの見直しとして、最も適切なものはどれか。

正解:ウ

各選択肢の解説

  1. アパスワードのハッシュ値を、より安全なハッシュ関数で計算する方式に改める。

    誤り。ハッシュ関数を強くすると、ハッシュ値から元のパスワードを割り出されにくくなります。 しかし攻撃者は元のパスワードを知る必要がなく、盗んだ値をそのまま送り直すだけです。 送る値が毎回同じである限り、関数の強さに関係なく通ってしまいます。

  2. イログインの失敗が一定回数続いたアカウントを、一時的にロックする。

    誤り。アカウントロックは、失敗を繰り返して正解を探す総当たり攻撃への対策です。 再送される値は正しいログインで実際に使われた値なので、1回目で成功してしまい、 失敗の回数は増えません。正解を探す攻撃か、正解を使い回す攻撃かで区別します。

  3. ウサーバが毎回異なる乱数を送り、端末はそれとパスワードから計算した値を返す。

    正解。チャレンジレスポンス方式にすると、送られる値はその回の乱数でしか通用しません。 盗聴した値を後から送り直しても一致しないため、リプレイ攻撃が成り立たなくなります。

  4. エパスワードの最低文字数を増やし、使う文字の種類も複数にするよう義務づける。

    誤り。長く複雑なパスワードは、推測や総当たりで当てられにくくするための対策です。 この攻撃はパスワードを当てる必要がなく、流れていた値を写して使うだけなので、 パスワードがどれほど複雑でも防げません。

理解を深めるために

盗まれたのは「合言葉」ではなく「録音」

ドアの前で合言葉を言う仕組みで、合言葉そのものを暗号にして言っても、 その声を録音されて再生されれば扉は開きます。録音した側は、暗号の中身を 解く必要がありません。このように、正規の通信で流れた認証の値を記録しておき、 そのまま送り直して本人になりすます攻撃をリプレイ攻撃(再送攻撃)と呼びます。

なぜ毎回変わる値が効くのか

場面のシステムの弱点は、パスワードを隠していることではなく、 送る値が毎回同じであることです。

  • ハッシュ値にしても、同じパスワードからは同じハッシュ値が出る
  • サーバはその値が来れば本人と判断するので、値そのものが「鍵」になっている
  • チャレンジレスポンス方式では、サーバがログインのたびに異なる乱数(チャレンジ)を 送り、端末はそれとパスワードから計算した値(レスポンス)を返す
  • 乱数が毎回違うので、前回のレスポンスを送り直しても一致しない

ワンタイムパスワードが再送に強いのも、同じ考え方です。 なお、通信路を暗号化して盗聴させないことも有効ですが、 この問いは認証の値の作り方そのものの見直しを聞いています。

混同しやすいものとの違い

対策 主に防ぐもの 再送への効果
チャレンジレスポンス方式 リプレイ攻撃 送る値が毎回変わるので防げる
安全なハッシュ関数 ハッシュ値からの割り出し 値を写すだけの再送には効かない
アカウントロック 総当たり攻撃 1回目で成功するので効かない
長く複雑なパスワード 推測・総当たり パスワードを当てる必要がないので効かない

対策を選ぶときは、攻撃者が「正解を探している」のか「手に入れた正解を使い回している」のかを 先に見極めます。後者には、値を毎回使い捨てにする仕組みが効きます。

前の問題へ次の問題へ