RSA暗号
RSA暗号はもっとも古い公開鍵暗号で、1974年頃にイギリスの諜報機関GHCQのJ.エリスらが考案した暗号方式です。もっとも、それは国家機密として公となることはなく、RSA暗号は1977年に独自に再発見したRivest, Shamir, Adlemanのイニシャルからとって命名されています。RSA暗号のアルゴリズムは次の通りです。
相異なる素数 (できれば桁数がほぼ同じで、かつ となるものが好ましいとされている) を生成し、整数 と互いに素な整数 を選び、 を満たす整数 を求めておく。このような整数の存在は、ベズーの補題によって保証され、拡張ユークリッド互除法 (多項式時間アルゴリズム) で求めることができます。 (RSAモジュールとよぶ) として、 を公開鍵として公開します。 は秘密鍵として使用し、 は秘密にしておきます。
暗号化するときは、平文 に対して、 を計算して、これを暗号文とします。
秘密鍵をもっている人が、平文の暗号文を復号するときは、これを乗します。すると、
となって、平文を復号できます。
復号がこのようにうまくいくことは、 (平文がと公約数をもつ場合を除いては) フェルマーの小定理を一般化したオイラーの定理によって説明できます。
オイラーの定理によれば、とが互いに素のときは、
でした。
ところで、 の意味するところは、「をで割ると余る」なのだから、ある整数があって、
となります。
ですので、とが互いに素のときであれば、
となり、復号できることが確かめられます。
とが互いに素でないときも、次のようにうまく復号できることが確かめられます。まず、をとっているのですから、平文が最大で通りしかありえなく1って、 となることに注意してください。
ですから、はの倍数ではなく、と以外の公約数をもちます2。なのですから、
あるいは
のいずれかになりますが、ここではとおきましょう。の場合も全く同じように証明できるため、どちらか一方だけ証明できればそれで良いのです。
このとき、あるがあって、
となります。はの約数であると言っているだけです。なので、はの約数でもあるし、の約数でもあるからです。
整数の除算 (割り算) は常に可能なのだから、あるがあって、
も言えます。
が相異なる素数であることから、ですから、ベズーの補題より、ある整数があって、
です。このとき、この式の両辺をで割った余りを考えることで、
であることを後々使います。
さて、では が となることを証明します。
まず、
なので3、は連立合同式
の解となっています。このような連立合同式は中国の剰余定理 で説明した通りの方法で解を求めることができます。解 は、
となります。ここで、は、
を満たす整数とします。
でしたから、
であり、上式のをで置き換えると、
ここに、
を代入して、
右辺に、
を代入して、
以上より、とが互いに素でない場合も、復号できることが確認できました。
1. 数学的な言い回しになりますが、平文空間が暗号文空間より大きいと、単射になりません。単射でないということは、どうあがいても、1つの暗号文に複数の平文が対応することがありえて、一意に復号できません。よって、暗号として利用できる関数である以上は、平文空間の大きさは暗号文空間の大きさ以下でなくてはなりません。なお、1つの平文が複数の暗号文に対応する場合については一意に復号可能です。古典暗号では、ホモフォニック暗号がそのような暗号のひとつです。 ↩
2. 「互いに素ではない」の言い換えになっていることに気づきましたか? ↩
3. 後半はフェルマーの小定理を使っています。が素数なので、 ですね。 ↩