>>239 RSA の実装は、
http://www.amazon.co.jp/dp/4627847610/ を参照している。
この本では、Java のBigInteger のみを使い、剰余演算も組み込み関数を使わずに記述している。
余談だがこの本は章によってあたりはずれが激しすぎる。
>1.Bは秘密鍵・共通鍵を生成する(この時点で、このどちらの鍵もAは知らない)
鍵の元 p, q; p, q とも素数を生成。秘密鍵eと公開鍵dを生成。このとき、ed≡1(mod L), L = lcm(p - 1, q - 1)となるように e, d を設定する。
>2.BはAに公開鍵を送る(この時点でAはBが生成した公開鍵のみを知る)
公開鍵=(pq, e)
>3.Aは共通鍵を生成する(この時点で、この鍵をBは知らない)
???????なんですか?共通鍵って?
>4.Aは生成した共通鍵を使ってファイルを暗号化する
オリジナルのメッセージを M, 暗号化されたメッセージを C としたとき、
C = M^e mod pq
A は e も pq も知っている。が、d はしらない。
>5.AはBから受け取った公開鍵を使って3で生成した共通鍵を暗号化する
>6.Aは暗号化されたファイルデータと暗号化された共通鍵をBに送る
???????なんですか?共通鍵って?M だけ送ればいいんでない?
>7.Bは受け取った暗号化された共通鍵を秘密鍵を使って復号する(この時点で、Bは共通鍵をGET)
M = C^d mod pq
・表に表れる数は、pq, e, C
C から M を求めるには、d を知らなければならない。
d を知るためには、L = lcm(p - 1, q - 1) をしらなければならない。
L を知るためには、p, q を知らなければならない。しかし、pq から p, q を知るのは困難。
共通鍵がよくわからないのですけれども、p, q, e, d, L, を使って表現するとどんな数になる?あと、共通鍵の暗号化とは何?