ふたつ素数、11927と20903を掛け合わせれば、249310081になります。しかし、計算結果の249310081から、その因数であるふたつの素数を見つけ出すことはかなりむずかしいのです。この因数分解のむずかしさを利用した暗号化手段がパブリックキー暗号化です。
パブリックキーというのは、世間一般に公開されるキーで、ふたつの素数の積です。先ほどの例では、249310081です。私のところに暗号化メッセージを送りたい人は、私が世間一般に公開しているキー、249310081を使って、メッセージを暗号化し、私のところにメールします。
一方、私だけしか知らない番号として、パブリックキー算出のもととなった、ふたつの素数のペア、11927と20903があります。これが、私のプライベートキーです。これは、だれにも公表しませんし、パブリックキーからの逆算(因数分解)もかなり困難です。
パブリックキーで暗号化されたメッセージは、必ずプライベートキーでしか解読できないようになっています。こうして、あなたがパブリックキーを使って暗号化したメッセージは、プライベートキーをもっている私にしか解読できない情報となって、ネットワーク上を伝わってくるのです。
実際には、これらの暗号化や解読は、コンピュータがやってしまいますから、ユーザはほとんど意識する必要はありません。また、素数自体ももっと大きい、たとえば250桁の素数といったものが使われるようです。
と、長々とパブリックキー暗号化の説明をしてまいりましたが、ここからが本題です。(^^;
「ふたつの素数の積で暗号化ができて、それを解読するときにはもとの素数のペアがいる」。ここが、どうしても理解できないのです。
簡単のため、素数のペアを2と3だとします。そうするとパブリックキーは2×3で6になります。
送るメッセージも、簡単のため、文章ではなく「7」という数字を暗号化して送りたいとします。
「7」という数字を6というパブリックキーで暗号化するのには、どのような手法を使いますか? たとえば、掛け算を考えてみましょう。7×6は42です。こんな単純なわけはありませんよねぇ。もう一度パブリックキー6で割り算すれば、暗号化したはずの「7」がすぐ見つかってしまいます。
「7」を6で暗号化できて、しかも解読するのには2と3のペアが必要なような暗号化技術とはどういったものなのでしょうか。
しかも、この技術、逆もできるらしいのです。つまり、私がプライベートキーである2と3を使って暗号化し、あなたに暗号化メッセージを送る。あなたは私のパブリックキー6を使って、それを解読する。パブリックキー6で解読できる暗号を作成できるのは、世界中に私しかいないため、あなたはそのメッセージがたしかに私から届いたものだと確信できる、というものです。(プライベートキーは、ユニークなものが発番されるわけではありませんが、それぞれのコンピュータがランダムに選んだ、適当な桁数の素数のペアが偶然ぶつかる可能性は0に近いんだそうです。ほんとかな?)
「未来を語る」の中では、「パブリックキー暗号化は、1977年、ホィットフィールト・ディフィとマーティン・ヘルマンによって考案された。その後まもなく、べつのコンピュータ科学者たち、ロン・ライヴェスト、アディ・シャミール、レナード・アデルマンが、RSA暗号体系の名で知られるシステムの一部として、素因数分解を用いるというアイデアを提起した」という紹介はあるのですが、最後には「ここまで、パブリックキーによる暗号化について、システムの技術的細部をはしょってごく簡単に説明してきた」としめくくられています。(;_;)
おーい、技術的細部をはしょるなよ... > ビル・ゲイツ
べつにいますぐ暗号化技術が必要というわけではないのですが、「どうなってるんだろう」と考えはじめると、気になって気になってしかたがないのです。
どなたか、この暗号化について、もしくは「こんな本に載ってるよ(なんとか本の話題にもってきたゾ (^^; )」という情報をお持ちの方は、ぜひ教えてください。
パブリックキーによる暗号化では、暗号化はできるものの、それを復号することはできないパブリックキーがみなさんに公開されます。今回ご紹介する方法では、ふたつの数eおよびNが公開されます。
ここでは、例としてe=7およびN=15を、私のパブリックキーとして公開することとしましょう。
みなさんは、このeとNを次の式に当てはめて、暗号を作成していきます。
e 『暗号』=『元の数』 mod N ... (1)modというのは、剰余計算(余りの計算)を行うためのものです。たとえば、5を3で割ると、商が1で余りが2になりますが、この2を求める計算が剰余計算です。この場合だと、 5 mod 3 = 2 と書き表せます。modは+、−、×、÷などとまったく同じものと考えてください。
そうすると、(1)は「『元の数』をe乗して、Nで割った余りを求める」という式であることがわかります。
それでは、具体的に8という数字を暗号化してみることにしましょう。8をe(=7)乗すると、2,097,152となります。これをN(=15)で割って、余りを求めると2です。この2が、私のパブリックキーを使って作成した8の『暗号』ということになります。
この2が、ネットワークなどを経由して私のもとへとやってきます。
さて、私の手元には、今回のパブリックキーであるN=15の元になったふたつの素数p=3とq=5があります。N=p×qとして、Nを算出したわけです。
プライベートキーの算出には、まず、(p−1)と(q−1)の公倍数Lを求めます。今回の場合は2(=3−1)と4(=5−1)の最小公倍数ということで、L=4とします。
このL(=4)に対して、「互いに素な数」(両者の最大公約数が1となるような数字)を適当に定めたものが、パブリックキーのもう一方の側であるe=7だったのです。つまり、4と「互いに素」であればいいわけなので、eは3、5、9、11など、なんでもいいわけです。
どのような「互いに素」なふたつの数(ここではLとe)に対しても、1=Lc+edを満たすようなc、dが必ず存在することが知られています。今回の場合だと1=4c+7dを満たすc、dのペアを求めればいいわけです。たとえば、c=−5、d=3などがそれにあたります。
こうして定めたd=3が、実は私のプライベートキーなのです。
もちろん、c=−12、d=7として、このd=7をプライベートキーとしてもかまいません。(ただし、私が試してみた範囲では、dを負の数にするとうまくいかないようです。)
復号のための式は、次のとおりとなります。
d 『元の数』=『暗号』 mod N ... (2)形式は(1)の式とほぼ同じです。(1)が「e乗してNで剰余計算」だったのに対し、(2)は「d乗してNで剰余計算」となります。Nはパブリックキーと同じもの、つまり、N=15です。
では、さっそく送られてきた『暗号』、2を復号してみましょう。
2をd(=3)乗すると8です。これを15で割って余りを求めることで、『元の数』8を得ることができます。
このように、みなさんにはe=7とN=15を公開して暗号化してもらい、自分ではd=3を使ってそれを復号化するわけです。このd=3を定めるのに、p=3、q=5というNの算出の元になった素数のペアが必要であるため、これが暗号化技術として機能するわけです。
逆に私の側が、プライベートキーd=3を使って暗号化を行って、みなさんがパブリックキーe=7を使って復号化することもできます。
もちろん、N=15などという小さい数字では、だれでもp、qを素因数分解できてしまうため、暗号にはなりませんね。実際には、たとえばN=114381625757888867669235779976146612010218296721242362562561842935706935245733897830597123563958705058989075147599290026879543541などという大きい桁(この場合129桁)の数字が公開されるわけです。
そして、暗号化と復号化に剰余計算を用いるところから、暗号化できるのはN未満の数値ということになります。そこで、実際の使用では、Nに155桁くらいの数を選び、2進数で512ビット(10進数で約155桁)を1ブロックとして暗号化しているそうです。
ご紹介のあった「情報セキュリティの科学」の本には、「なぜこの方法で復号化できるのかの証明」、「べき乗計算の仕方((X^Y) mod n を効率よく計算する方法)」、「最大公約数の求め方」、「互いに素な数の見つけ方」、「互いに素な数からのプライベートキーdの計算方法」などが載っています。また、暗号関係の参考図書類も紹介されています。
今回は、もう1冊、同じブルーバックスの「暗号と数理」という本も参考にしました。
====================================================================== 【書 名】暗号の数理 −作り方と解読の原理− ブルーバックス B-421 【著 者】一松 信 【発行所】講談社 【ISBN 】4-06-118021-5 【発行日】1980/03/20 初版 (1992/11/30 第16刷) 【価 格】740円 ---------------------------------------------------------------------- 本書は、古代のシーザー暗号から単文字換字暗号、多表式暗号を経て、新し く提案された公開鍵暗号系にいたるまでの歴史をたどり、数多くの秘話をま じえつつ、暗号の作成と解読の原理を解説した新しい暗号学の入門書である。 ======================================================================