レインボー攻撃
ハッシュ値から元の値を割り出す やり方だよ
パスワードを盗んだりするときに使われるよ
簡単に書くよ
レインボー攻撃(読:レインボーコウゲキ 英:rainbow attack?)とは
7色の光線をコンピュータに浴びせることでコンピュータをラリラリにし、セキュリティを無効化する攻撃のこと(大嘘)。
本当は
あらかじめハッシュ値
(元の値を「ハッシュ関数」という関数に入れて変換した値)と元の値の対応表を作っておいて、その対応表と突き合わせることで、ハッシュ値から元の値を割り出すやり方
です。
詳しく書くよ
ここにパソコンさんがいます。
パソコンさんにピヨ太君特製「ピヨラリア七光線」を当てます。
ピヨラリア七光線は7色に輝くヤバい光線です。
別名「レインボーピヨシャワー」とも呼ばれます。
ピヨラリア七光線を浴びたパソコンさんはラリラリになります。
あとは、やりたい放題です。
パソコンさんから好きな情報をゲットできます。
このような攻撃のやり方が「レインボー攻撃」です。
……というのは、もちろん大嘘です。
長々とウソを書いてゴメンなさい。
真面目に説明します。
順番に見ていきましょう。
まずは予備知識として
・関数
・ハッシュ関数
・ハッシュ値
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。
ついでなので書いておくと、関数に入れる値は「引数(ヒキスウ)」と言います。
関数から出てくる値は「戻り値」です。
ちょっと汚い話で恐縮ですが、人間は、ご飯を食べて、ウンチを出します。
人間が関数だと考えてください。
ご飯に相当するものが引数です。
ウンチに相当するものが戻り値になります。
ハッシュ関数は「入力に対応する適当な値(適当に見える値)を返してくれる関数」です。
例えば「愛媛みかん」を入れると「3」が返ってきます。
「青森りんご」を入れると「4」が返ってきます。
「栃木苺」を入れると「とちおとめ」が返ってきたりします。
何を入れると何が返ってくるか、入れたものからは分かりません。
返ってくるのは適当な値です。
ただし、同じものを入れれば、必ず同じ値が返ってきます。
「愛媛みかん」を入れると、必ず「3」が返ってきます。
何回入れても「3」が返ってきます。
1.適当な値が返ってくる
2.同じ入力に対しては同じ値が返ってくる
というのがハッシュ関数の特徴です。
※話を単純化するために「適当な値」という表現を使っていますが、実際には適当では ありません。入力されたデータを「特定のルールに沿って」ぐちゃぐちゃにした値が返ってきます。
ハッシュ値は「ハッシュ関数から返ってくる値(戻り値)」です。
入力されたデータをもとにして作られた適当な値(適当に見える値)です。
ハッシュ値には
1.ハッシュ値から元のデータを特定するのは、ほとんど無理
2.元のデータが同じなら生成されるハッシュ値も同じ
3.元のデータが変わると生成されるハッシュ値は(ガッツリと)変わる
といった特徴があります。
「元データ→ハッシュ値」は お手軽だけど「元データ←ハッシュ値」は すっごい大変だよ、ということです。
以上を踏まえて、すっごい大変な「元データ←ハッシュ値」をやる技のひとつが「レインボー攻撃」です。
レインボー攻撃のやり方ですが、まずはハッシュ値と元データの対応表を用意します。
次に、ハッシュ値を手に入れます。
最後に、対応表とハッシュ値を見比べます。
該当するハッシュ値が対応表の中にあったら、それを見ることで元の値が分かる理屈です。
これがレインボー攻撃の基本的な考え方です。
実際には、あれやこれやの工夫がされているので、もっと複雑ですけどね。
そこら辺の「あれやこれや」については他のところで勉強してください。
実際のところ、このやり方自体は「攻撃」では ありません。
ただハッシュ値から元の値を割り出しているだけです。
それでは、どうして「攻撃」呼ばわりされるのでしょうか。
それは、パスワードを保管するときにはハッシュ値に変換して保管していることが多いからです。
そうしておけば、万が一、悪い人に盗み見られても安全です。
盗まれるのはパスワードのハッシュ値だからです。
元のパスワードは盗まれません。
この対策は「元データ←ハッシュ値」がすっごい大変だという前提によって成り立っています。
ここで悪い人の立場に立って考えてみてください。
せっかく盗んだのに戦利品が「パスワードのハッシュ値」では意味がありません。
ほしいのは「パスワード」です。
そこで「パスワードのハッシュ値」から「パスワード」を割り出すために頑張ります。
その頑張り方のひとつがレインボー攻撃です。
対応表と照らし合わせることでハッシュ値から元の値を割り出します。
基本的な使いどころが悪いことをするときなので「攻撃」扱いされているのだと思います。
一言でまとめるよ
まぁ「レインボー攻撃」って単語が出てきたら「ハッシュ値
(元の値を「ハッシュ関数」という関数に入れて変換した値)から元の値を割り出すぜ!攻撃なんだな~」と お考えください。






