*公開鍵暗号-その1-*


ここでは、公開鍵暗号についての一般的な話を紹介します。
以下、2人の会話をご覧ください。


後輩 せんぱ~い (^ー^)
先輩 あいよ~ヽ(´▽`)
後輩 今日から、IPsecの仕組みの話が出来るんですよね?
先輩 うん。
あと公開鍵基盤の話が残ってるんだけど、これを始めるとキリがないから。
後輩 こうかいかぎきばん(・・?
飛ばしても大丈夫なんですか?
先輩 まぁ、大雑把に言うとIPsecにとっては認証アルゴリズムのひとつに過ぎないから、とりあえず飛ばしても大丈夫かと。
後輩 なるへそ。
そのアルゴリズムを選ばなければいい、っていうことですか?
先輩 うん、そう。
世の中的には、まだ使ってる環境のほうが少ないし。
後輩 了解です。∠(・_・)
けっこう、どうでもいいアルゴリズム?
先輩 あ、いや、かなり重要なアルゴリズムだよ。
飛ばすことでそういうイメージが付いちゃうんだとマズいから、やっぱり少し説明しようかな、、、( ̄~ ̄;
後輩 あらら、これは失礼しました(>_<)
本当はもっと普及させたいけど、なんか問題があって広まらないっていうことですか?
先輩 うーん、、、
あらためて考えると、普及を妨げている理由ってなんだろな、、、( ̄ー ̄?)
後輩 難しいとか、高いとか、メンドクサイとか?
適当に言ってますけど(;´▽`)ノ
先輩 やっぱり、難しいからなのかな、、、
いや、確かにメンドクサイっていうのもあるな、、、
後輩 難しくてメンドクサイだと、かなり厳しそうですね~ε=(´∇`;)
その上、高いとか?
先輩 いや、それはピンキリかな。
確かに製品群は少ないけど、お金がなくてもショボいサーバとオープンソースがあれば充分な環境を作れるし。
後輩 そうですか。
どちらにしても、難しくてメンドクサイなら普及には時間が掛かりそうですね。
先輩 そうだねぇ。
でも、あまり意識せず普通に使われてる環境もあるんだよ。
後輩 えっ、どこですか?
先輩 ICカードを使った入退館システムとか、SSLとか。
あまり気にしないで、普通に使ってるデショ?
後輩 確かに、どっちも普通に使ってますね。
でも、ICカードはピッてやるだけだから中身は分かりませんけど、SSLについてはブラウザを操作していても公開鍵基盤っていう言葉が出てきませんよ?
先輩 ユーザ側の操作では、出ないだろうね。
その代わり、「証明書」は出てくるデショ?
後輩 あ、よく聞きますね。
証明書イコール公開鍵基盤、なんですか?
先輩 イコールではないけど、公開鍵基盤の中に証明書という要素が含まれている、と言えばいいのかな。
簡単に言うと、公開鍵をうまく運用するための方法や仕組みをまとめたものなんだよ。
後輩 あ、公開鍵は少し勉強しましたよ。(*´v`*)
秘密鍵とペアになってるやつですよね?
先輩 あ、そっか。
公開鍵基盤がどうとかいう以前に、公開鍵の話をしないといけないのか~ ( ̄△ ̄;
後輩 公開鍵って、暗号の基礎的な話だったような気がします。
アリスがどうとか、ボブがどうとかいうヤツ。
先輩 うーん、確かに。。。
後輩 じゃ、公開鍵の話だけするっていうことでどうでしょう?
アリスとボブの話なら、まだ少し憶えてますし。
先輩 あ、そう?
でも、アリスとボブの話は途中まで終わってるけどね。
後輩 えっ、どの辺で出てきましたっけ( ̄ー ̄?)
先輩 アリスとかボブっていうのは、暗号や改竄などの話をする時に送信者と受信者に対して慣習的に使われる名前なんだよ。
公開鍵云々の話は、暗号で使う鍵をアリスとボブの間でどうやって共有するか、っていう部分の話だと考えてくれ。
後輩 あ~、、、(・o・)
そういえば、今までは秘密鍵の共有方法しか話題に出てなかったですねぇ。
先輩 同一の鍵を如何にして安全に共有するかというアプローチではなく、同一の鍵を共有しなくても済む方法がないか、っていう方向で考えるのが公開鍵なんだよ。
後輩 それが出来るなら、そっちのほうが理想的ですね。
でも、、、
先輩 ん?
後輩 いつも、そこが不思議なんですよね~
ある鍵で暗号化したデータは、その鍵でしか復号できないんじゃないですかね?(;´▽`)ノ
先輩 それが、出来るアルゴリズムがあるんですよ~。
最も有名なのは、やっぱりRSAだね。
後輩 暗号と復号の鍵が違っていいっていうのは、どんな理屈なんですか?
先輩 うーん、完全に数学の話だから説明が難しいな、、、( ̄ω ̄;)
じゃあ、「シーザー暗号」は知ってる?
後輩 あ、知ってますよ~!
伝文のアルファベットをそれぞれ3回ローテーションさせるんですよね?
先輩 おぉ、ソレソレ!
よく知ってたね。
後輩 えへへ~(*´▽`)
でも、これって公開鍵暗号じゃなくて秘密鍵暗号ですよ?
先輩 うん、そうなんだけど、、、
逆に、復号するにはどうすればいい?
後輩 この場合はローテーションさせる回数が秘密鍵っていうことですから、3回戻せばいいですね。
先輩 そうだね。
でも、ちょっとヒネくれた考え方をすると、もうひとつ方法があるデショ?
後輩 えっ(・・?
そんなの、あります?
先輩 まぁ、言葉の綾というか、揚げ足取りみたいなことなんだけど、、、
後輩 うーん、言葉の綾ですか、、、?
でも3回ズラしたんだから、3回戻す以外に元通りにする方法なんてないはずですよ~(×_×;)
先輩 じゃあ、ヒントね。
「Z」を暗号化したら、何になる?
後輩 えと、、、(ーー;)
記号とか含まれないなら、最初に戻ってきて「C」でしょうね。
先輩 そだね。
今度は、「C」を復号したらどうなるだろう?
後輩 え、、、ヽ(  ̄д ̄;)ノ
、、、あ!?
先輩 分かった?
後輩 、、、分かりました。
3回戻すんじゃなくて、23回進めればいい、っていうことですね~!ヾ(´ー` )ノ
先輩 おぉ、正解だ!
記号とか含まなければアルファベットは26個だから、23回進めれば3回戻したのと同じことになるね。d(* ̄o ̄)
後輩 確かに、揚げ足取りみたいなモンですね。
結局、やっていることは一緒ですし。
先輩 うん、シーザー暗号の場合はね。
でも、これがローテーションのように「元に戻す」という操作が出来ない一方向性の関数だったらどうだろう?
後輩 (?_!)
先輩 「3」で暗号化したら「23」でしか復号できず、また逆もしかり、っていうことになるデショ?
後輩 お、おぉ~っ!
これが、鍵ペアっていうことですか!(・0・☆)
先輩 こんな仕組みでは簡単に片方の鍵がバレちゃうけど、基本的な考えは一緒だよ。
後輩 なんか、今までの疑問がスッキリしました!
まさに、目から鱗が落ちたっていう心境です!
先輩 あとは、鍵ペアの一方から他方を推測できないような仕組みになってないといけないけど、、、
RSAでは、乗算した素数の素因数分解が難しいっていう問題を利用しているんだよ。
後輩 素因数分解って、懐かしいですねぇ、、、(*´v`*)
素数同士の乗算だと、その素数でしか分解できないっていうことですか?
先輩 うん、そう。
効率の良い探し方が見つかってないから、充分に桁数を多くすると解けなくなるんだよ。
後輩 あ~、そゆことですか。
ふたつの数の乗算って分かってるなら、その数の平方根を計算して、平方根の数まで全て試せばいいんじゃないかと思ったんですが。
先輩 総当たりで探すとなると、そういうことになるね。
解の空間を小さくする方法も少しは存在するみたいなんだけど、決定的ではないらしいよ。
後輩 そうなると、いわゆる「スパコンで計算してもどうのこうの、、、」という話に落ち着きますね。
あ、そういえば、、、
先輩 ん?
後輩 前に「ビックリ人間特集」みたいなテレビ番組で、素数をどんどん言っていく外人さんを見たことがありますよ。
あの人なら、簡単に分かるかもo(^o^)o
先輩 あー、なんかソレ観たような記憶が、、、(;´ー`)
確かに効率はグッと良くなるけど、どこまで大きい素数を言えるのかが勝負だね。
後輩 RSAアルゴリズムとビックリ素数人間の対決ですか、、、
なんか、戦いが地味ですねぇ~ε=(´∇`;)
先輩 いや、もしかしたら乗算とか除算は苦手かもしれないから、、、
ビックリ暗算少年とタッグを組めば、少しは盛り上がるかもよ?
後輩 もし素数人間&暗算少年が勝っちゃったら、セキュリティ業界に激震が走りますね!
先輩 激震は大げさだけど、少しは話題になるんじゃないかな。
チェス名人と人工知能の対決みたいなカンジ?
後輩 あ~、たまにニュースでやってますね。
あんまり関心ないですけど。
先輩 あれは純粋に人工知能の性能を試すためにやっていることだから、エンターテイメント性が高いね。
セキュリティの場合には、拠り所にしている部分が破られるということが仕組み自体の破綻に直結するから、使い物にならなくなってしまうぐらいにインパクトが大きい。
後輩 あ、その話は「隠すセキュリティ」のところでも出ましたね。
逆に、ビックリ素数人間でも歯が立たなかったら、アルゴリズムの堅牢性が証明されるかも(・ω・)b
先輩 まぁ、ビックリ素数人間がどれだけライバルとして認められるか、という疑問があるけど、、、
とにかく、公開鍵暗号は秘密鍵暗号より強力な方式として認められていて、主に認証用のアルゴリズムとして使用されているんだよ。
後輩 ところで「公開鍵」っていうくらいだから、鍵をみんなに公開するんですか?
先輩 うん、そう。
一方の鍵から他方の鍵を推測できないから、どちらか一方だけなら公開しても問題ない。
後輩 なるほど~。
公開した鍵で暗号化してもらえば、ペアになっている手元の鍵でしか復号できないわけですね。(・ω・)b
先輩 そういうこと。
理屈は簡単デショ?
後輩 これが、アリスとボブが共通の鍵を持たなくても良くなって、なおかつ相手の認証も出来る方法なんですね。
あ、もしかしてハイブリッド暗号の話で出てきた「安全重視」のアルゴリズムって、公開鍵暗号のことですか?
先輩 おぉ、よく思い出したね。
おっしゃるとおり、秘密鍵の交換に使われることが多いんだよ。
後輩 公開鍵、すばらしいですね!(*´ω`*)
暗号と認証を一緒に出来るなんて、まさに理想的じゃないですか?
先輩 うん、そうなんだけど、、、
この「公開する」っていうのが、なかなか難しいんですよ~。¬(; ̄ー ̄)┌
後輩
必要な時に、本人から初回だけ送ってもらえばいいんじゃないんですか?
先輩 まぁ、暗号化だけが目的なら、それでもいいんだけど、、
せっかく公開していい仕組みになっているのに、いちいち本人にコンタクトを取って鍵を貰うのでは無駄が多いわけですよ。
後輩 うーん、つまり、、、( ̄~ ̄;
「公開する」っていうことを「見られてもよい」と解釈して、相手に鍵を送るときに盗聴を気にしなくてもいいって言うところまでの解釈で抑えるのはもったいない、ということですか?
先輩 あえて言葉にすると、そういうことになるかな。
「公開する」という言葉を普通に解釈すると、どこか公的な場所に何かを置いて露出させる、というニュアンスまで含まれるデショ?
後輩 あ~、確かにそうですね、、、
みんなが見られるような場所に公開鍵を置いておけば、いちいち本人にコンタクトを取らなくても鍵を取得できますね!
先輩 うん。
ここまでやれば、公開鍵のメリットが充分に受けられる。
後輩 さっき難しいって言ってたのは、その公開方法のことですか?
先輩 単純にファイルを共有サーバに置くだけで済むなら、何も問題ないんだけどね。
一番問題になりそうなのが、本当にその鍵が本人の公開鍵なのかどうか確認する方法がない、っていうところなんだよ。
後輩 うーん、でも、、、
仮に誰かが名前を騙って全く別の公開鍵を登録しても、なんかメリットありますかね(・・?
先輩 じゃあ、アリスとボブの話に置き換えると、、、
ボブの名前を騙って自分の公開鍵を登録した人を「イブ」と呼ぶことにしよう。
後輩 悪いことする人には、「イブ」っていう名前を付けるんですか?
先輩 うん、これも慣習的に、、、
「Evil」の綴りに近いから、っていう説が有力だよ。
後輩 あぁ、なるほど。
あ、話の腰を折ってすみません。。。(>_<)
先輩 いやいや。
で、イブがアリスとボブの間に入って伝文を見たり掴んだり出来る人だと、イブはアリスが出した伝文を解読できてしまうデショ?
後輩 そっか。
盗聴できれば、イブだけが解読できてしまいますね。
先輩 そのままだと、その暗号文がボブのところに届くから、ボブが解読できない状態になって異変に気付くだろう。
もしイブが伝文を仲介する権限まで持っていたら、ボブの公開鍵で暗号化して送り直すことも出来るから、バレることもない。
後輩 あらら、、、><
やっぱり、公開方法をちゃんと考えないといけないですね。。。
先輩 そそ。
ここで、公開鍵基盤という話が出てくるワケですよ。
後輩 うーん。
いつものことながら、話の展開がスムーズですねぇ。( ´ー`)
先輩 いやいや、相方が優秀だからだよ。
せっかくここまで話が展開したから、公開鍵基盤のさわりだけでも説明しようか?
後輩 あら、優秀だなんて、、、(*μ_μ)
引き続き、よろしくお願いします。

以下、「公開鍵基盤-その2-」につづく。。。

ネットワークセキュリティ関係者の部屋 > ネットワークセキュリティ実践劇場 > 公開鍵暗号