引き続き、盗聴と改竄に関する一般的な話について紹介します。このあたりから理屈っぽい話が多く出てくるので、ゆっくり読んだほうがよいかもしれません。
以下、2人の会話をご覧ください。
![]() |
せんぱ~い (^ー^) |
![]() |
あっ、今日も駄菓子を買ってきたんだ。 |
![]() |
はい、せんぱいが欲しがってたので。 でも売り場を片付けていたので、もう終わりみたいですよ。 |
![]() |
そっか、少し淋しいね。 まぁ、単価が安いし場所もとるから、商品としては効率が悪いんだろうな。 |
![]() |
確かに、駄菓子を買う目的でコンビニに行く人はいないですよね。 回転が早い商品とは言えないかも。 |
![]() |
どっちかというと「レジ横の団子」に近いイメージで、つい買ってしまうものと同じカテゴリだからね。 |
![]() |
レジ横の団子や大福は、なぜかとても魅力的ですよね。 でも、駄菓子には別の魅力があると思いますよ? |
![]() |
ん、そう? |
![]() |
大抵のお菓子って、ある程度の個数を袋や箱に入れて、まとめて売ってるじゃないですか? |
![]() |
そう言われると、100円とか200円以上の価格帯で、ひとつの塊になってるお菓子ってあんまり見たことないな。 ジュースとかアイスとか、液体っぽいやつぐらいか。 |
![]() |
デショ? つまり駄菓子は、普通のバラ売り菓子の、さらにバラ売りなんですよ。 |
![]() |
おぉ! |
![]() |
つまり、好きなものをちょっとずつ選べるのが、駄菓子だけが持つ魅力なんですよ。 |
![]() |
うーん、なるほど。 かなり、的を得ているような、、、? |
![]() |
えっへん、どうですか? 私も色々と考えてるんですよ。 |
![]() |
うーん。 でも、そもそもバラ売りしているせいで単価が安いんだよね? |
![]() |
う、、、 |
![]() |
結局、効率が悪いという最初の話に戻っちゃうだけなんじゃ、、、? |
![]() |
うぅ、そうでした、、 しゅ~ん、、、 |
![]() |
いや、でもほら、これからは個人消費の時代だし。 好きなものをちょっとずつ選べるっていうのは、時代の流れにマッチしていると思うよ? |
![]() |
で、ですよね~!? 私もいま、それを言おうと思ってたんですよ~! |
![]() |
さ、さぁ、、、駄菓子談義はこれくらいにして、フェーズ2の話を始めようか。 今までの話で、何か分からないところはない? |
![]() |
分からない、とまではいかないですけど、不思議に思うことがあるんですよ。 |
![]() |
ん? |
![]() |
ハッシュって、どんな大きさのデータを入力しても一定の長さの文字列が出てくるんですよね? |
![]() |
うん、そう。 |
![]() |
出力の桁数が決まっているわけだから、どんな仕組みにしたって出力できる文字列の総数は増やせないじゃないですか~? なのに、どんな大きさのデータを入力してもそれぞれ全く異なる文字列を出す、なんてことが出来るんでしょうか? |
![]() |
いや、少なくとも入力データと同じ大きさじゃないと一対一の関係にならないから、無理だろうね。 物理的に。 |
![]() |
ですよね~? そうすると、たまたま同じ答えになっちゃうデータがあっても仕方がない、ということになりません? |
![]() |
うん、なるよ。 そういう状態を、「衝突」とか「コリジョン」っていうんだよ。 |
![]() |
出力結果がぶつかるから「衝突」ですか。 そうすると、改竄前と改竄後のハッシュ値が一致するように改竄すれば、改竄できちゃうんじゃないかと思って。。。 |
![]() |
うん、可能性はゼロじゃないよ。 でも、これを実質的に限りなくゼロに近づけることが出来るのが、ハッシュのハッシュたる所以なんだ。 |
![]() |
えっ、どういうことですか? |
![]() |
まず、今までの話で使っているハッシュは「一方向性ハッシュ関数」というもので、入力データからハッシュ値を出力するけど、逆にハッシュ力入力データを算出することは出来ない、という特徴を持っている。 つまり、可逆性がなくて一方通行の関数だから一方向、と呼ぶわけだ。 |
![]() |
なるへそ。 それなら、あるデータと衝突するような値を逆算して探すことは出来ないですね。 |
![]() |
イメージとしては、書類を一定の決まりでグシャッと丸めて、一定の大きさの再起不能な紙クズにするようなものだと考えてくれ。 |
![]() |
あ、それは分かりやすいですね。 イメージできました。 |
![]() |
あと、もうひとつ大事な特徴があるよ。 以前にハッシュについて覚えていることを聞いたときに、1ビットでも違うと全く異なる結果が出る、というのがあったよね? |
![]() |
はい、覚えてます。 |
![]() |
ふつう改竄するときって、元のデータを丸ごと書き換えるというよりは、元データの一部を書き換えることが多いだろう? |
![]() |
そっか! 少しだけ違う場合にも全く異なる結果が出るという特徴が、そこで活かされるわけですね! |
![]() |
そうそう! よく分かったね。 |
![]() |
やった! じゃあ、ぜんぜん違う内容に書き換えちゃう場合はどうなるんですか? |
![]() |
元のデータと同じハッシュ値が得られる別のデータを逆算することは出来ないから、たまたま衝突するようなデータを推測して探すことになるけど、、、 仮にそんなデータがたまたま見つかったとして、そのデータがたまたま自分が改竄しようと思っていた内容になっている確率なんて、ほぼゼロに等しいと思うよ。 |
![]() |
はは、、 そんなの探すくらいだったら、もっと楽な方法を考えたほうが早そうですね。 |
![]() |
そんなわけで、ハッシュの不思議については分かってもらえたかな? |
![]() |
はい、よく分かりました。 私の浅はかな思いつきぐらいは簡単にカバーできるような仕組みを持っているんですね~。 |
![]() |
あっ、そうだ。 ハッシュの話で思い出したんだけど、「隠すセキュリティ」の話をしておかないとね。 |
![]() |
ん? 何ですか、ソレ? |
![]() |
色々なアルゴリズムを使うときに大事な考え方だよ。 さらに理屈っぽいので、頭を柔らかくしておいてくれ。 |
![]() |
了解です。 やわらかあたまっ! |
![]() |
な、なんじゃそりゃ? |
![]() |
頭をやわらかくするためのおまじないです。 じゃ、続きをやりましょう。 |
以下、「「隠すセキュリティ」について」につづく。。。
ネットワークセキュリティ関係者の部屋 > ネットワークセキュリティ実践劇場 > 盗聴と改竄について-その3-