忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【情報セキュリティ】ハッシュ化された値を一瞬で逆引き!「レインボーテーブル攻撃」|情報処理問題1000本ノック

セキュリティのためにパスワードを暗号(ハッシュ化)して保存していても、そのハッシュ値を盗まれると、特殊な「逆引き辞書」を使って一瞬で元のパスワードが暴かれてしまう危険があります。この強力な解読手法「レインボーテーブル攻撃」を攻略しましょう。

1. 【 問題 】:パスワード解読手法(レインボーテーブル攻撃)

【 問題 】 不正アクセスなどによってシステムから流出した、ハッシュ化(復元不可能な一方通行の暗号化)されたパスワードを解読する手法の一つです。想定される平文のパスワードと、それをハッシュ化した値の対応関係を、あらかじめ大量に計算して特殊な構造のリスト(表)にまとめておき、それを用いてハッシュ値から元のパスワードを高速に逆引きして割り出す攻撃手法を何と呼ぶでしょうか?

① ディクショナリ攻撃(辞書攻撃)
② パス・ザ・ハッシュ攻撃(Pass-the-Hash)
③ ブルートフォース攻撃(総当たり攻撃)
④ レインボーテーブル攻撃

2. 正解:

正解: ④ レインボーテーブル攻撃

3. 解説:「事前に計算しておく」ことで本番の解読速度を極限まで高める

レインボーテーブル攻撃は、ハッシュ関数の「同じ文字からは必ず同じハッシュ値が生成される」という特性を突いた攻撃です。ハッシュ化されたデータは理論上は元に戻せませんが、攻撃者はあらかじめ「文字」から「ハッシュ値」を計算した膨大な辞書(これをレインボーテーブルと呼びます)を用意しておくことで、盗んだハッシュ値をその辞書と照合し、一瞬で元のパスワード(平文)を特定します。

【間違いやすいパスワード解読手法の特徴】 ← ココが試験のポイント!

攻撃名アプローチの特徴主な対策
① ディクショナリ攻撃 辞書にある単語(password、admin等)をその場でハッシュ化して試す 複雑なパスワードの設定
② パス・ザ・ハッシュ ハッシュ値を解読せず、ハッシュ値そのものを認証サーバーに送りつけて突破する 認証プロトコルの強化
レインボーテーブル攻撃 あらかじめ膨大な「平文とハッシュ値のペア」を計算・表にしておき、一瞬で逆引きする ソルト(Salt)の追加 / ストレッチング

1. 理解のコツ: 「暗号文と辞書」に例えてみましょう。
・システムに保存されている「ハッシュ値」は、元の文字が分からないようにグチャグチャにされた暗号文です。泥棒がその場で「文字を組み替えてハッシュ化して、目の前の暗号文と同じになるか試す」のが③の総当たりや①の辞書攻撃です。これだと本番の計算に莫大な時間がかかります。
・一方でレインボーテーブル攻撃は、泥棒が家にいる間に、あらかじめ「あらゆる文字」をグチャグチャの暗号文に変換した『本物の文字 ⇔ 暗号文』の巨大な対応表(辞書)を先に作ってパソコンに保存しておきます。そして、いざシステムからハッシュ値を盗んだら、その表を使って「このハッシュ値に対応する元の文字はこれだ!」とページをめくるだけで一瞬で答えを見つけ出します。この『本番前にあらかじめ作っておく巨大な逆引き表』を使うのが、レインボーテーブル攻撃の恐ろしさです。

2. 試験対策の視点: 午前試験の問題文で「あらかじめ計算してまとめた」「ハッシュ値から元のパスワードを逆引き(高速に解読)」という表現があれば、一発でレインボーテーブル攻撃だと見抜いてください。
また、試験ではこの攻撃の**「対策」**がセットで非常によく狙われます。この攻撃を防ぐための最も効果的な技術は「ソルト(Salt:塩)」の追加です。ユーザーが入力したパスワードの後ろに、システム側が自動生成したランダムな文字列(ソルト)をくっつけてからハッシュ化することで、同じパスワードであっても全く異なるハッシュ値になります。これにより、攻撃者があらかじめ用意していたレインボーテーブル(逆引き表)を完全に無効化することができます。


4. まとめ

「平文のパスワードとハッシュ値の対応関係をあらかじめ大量に計算してデータ化(表に)しておき、流出したハッシュ値から元のパスワードを高速に割り出す攻撃」。これがレインボーテーブル攻撃です。対策である「ソルトの付加」というキーワードとセットで、強固に記憶に定着させておきましょう!

PR