正解:ウ
各選択肢の解説
アパスワードのハッシュ値を、より安全なハッシュ関数で計算する方式に改める。
誤り。ハッシュ関数を強くすると、ハッシュ値から元のパスワードを割り出されにくくなります。 しかし攻撃者は元のパスワードを知る必要がなく、盗んだ値をそのまま送り直すだけです。 送る値が毎回同じである限り、関数の強さに関係なく通ってしまいます。
イログインの失敗が一定回数続いたアカウントを、一時的にロックする。
誤り。アカウントロックは、失敗を繰り返して正解を探す総当たり攻撃への対策です。 再送される値は正しいログインで実際に使われた値なので、1回目で成功してしまい、 失敗の回数は増えません。正解を探す攻撃か、正解を使い回す攻撃かで区別します。
ウサーバが毎回異なる乱数を送り、端末はそれとパスワードから計算した値を返す。
正解。チャレンジレスポンス方式にすると、送られる値はその回の乱数でしか通用しません。 盗聴した値を後から送り直しても一致しないため、リプレイ攻撃が成り立たなくなります。
エパスワードの最低文字数を増やし、使う文字の種類も複数にするよう義務づける。
誤り。長く複雑なパスワードは、推測や総当たりで当てられにくくするための対策です。 この攻撃はパスワードを当てる必要がなく、流れていた値を写して使うだけなので、 パスワードがどれほど複雑でも防げません。
理解を深めるために
盗まれたのは「合言葉」ではなく「録音」
ドアの前で合言葉を言う仕組みで、合言葉そのものを暗号にして言っても、 その声を録音されて再生されれば扉は開きます。録音した側は、暗号の中身を 解く必要がありません。このように、正規の通信で流れた認証の値を記録しておき、 そのまま送り直して本人になりすます攻撃をリプレイ攻撃(再送攻撃)と呼びます。
なぜ毎回変わる値が効くのか
場面のシステムの弱点は、パスワードを隠していることではなく、 送る値が毎回同じであることです。
- ハッシュ値にしても、同じパスワードからは同じハッシュ値が出る
- サーバはその値が来れば本人と判断するので、値そのものが「鍵」になっている
- チャレンジレスポンス方式では、サーバがログインのたびに異なる乱数(チャレンジ)を 送り、端末はそれとパスワードから計算した値(レスポンス)を返す
- 乱数が毎回違うので、前回のレスポンスを送り直しても一致しない
ワンタイムパスワードが再送に強いのも、同じ考え方です。 なお、通信路を暗号化して盗聴させないことも有効ですが、 この問いは認証の値の作り方そのものの見直しを聞いています。
混同しやすいものとの違い
| 対策 | 主に防ぐもの | 再送への効果 |
|---|---|---|
| チャレンジレスポンス方式 | リプレイ攻撃 | 送る値が毎回変わるので防げる |
| 安全なハッシュ関数 | ハッシュ値からの割り出し | 値を写すだけの再送には効かない |
| アカウントロック | 総当たり攻撃 | 1回目で成功するので効かない |
| 長く複雑なパスワード | 推測・総当たり | パスワードを当てる必要がないので効かない |
対策を選ぶときは、攻撃者が「正解を探している」のか「手に入れた正解を使い回している」のかを 先に見極めます。後者には、値を毎回使い捨てにする仕組みが効きます。