RSA公開鍵暗号方式の証明
📂整数論RSA公開鍵暗号方式の証明
ビルドアップ
左から順に アリス、ボブ、イブとしよう。アリスとボブはメッセージを交換する当事者で、イブはメッセージに興味がある受動的攻撃者だ。オレンジ色の箱はアリスだけが知っている情報を、空色の箱はボブだけが知っている情報を、黒色の箱は公開されている(イブも知っている)情報を表す。
アリスはボブから受信しなければならないメッセージ m∈N がある。
アルゴリズム
鍵設定: アリスが大きな素数 p, qの積 N=pq を選択し、gcd(e,(p−1)(q−1))=1、e を満たす e を選択して公開する。

暗号化: ボブが c≡me(modN) を計算して公開する。

復号: アリスが de≡1(mod(p−1)(q−1)) を満たす d を見つけて x≡cd≡m(modN) を計算すれば x=m を得る。イブは現実的に d を知ることができないため、m を知ることができない。

説明
RSA公開鍵暗号システムは、ロナルド・ライベストronald Rivest、アディ・シャミアadi Shamir、レナード・アドルマンleonard Adlemanによって開発され、彼らの名前の頭文字からRSAと呼ばれる。3人はこの功績で2002年にチューリング賞を受賞している。
離散対数問題の難しさにのみ基づいたエルガマル公開鍵暗号システムとは異なり、素因数分解問題の難しさにも基づいており、その堅牢さだけで大きな素数を探す価値があるようになる。さらに、理論的なものだけでなく、現実に今、世界中で使われている点から学ぶ楽しみがあるシステムだ。致命的な攻撃方法としては量子コンピューターを基盤としたショアアルゴリズムがあるが、量子コンピューターの商用化は遠いため、しばらくは現役でいると見られる。
証明
復号
アリスはNの素因数分解N=pqを知っているため、gcd(e,(p−1)(q−1))=1を満たすeを見つけることができる。
拡張ユークリッドの定理: 2つの整数a,bに対し、必ずaX+bY=gcd(a,b)の整数解が存在する。
2つの整数e、(p−1)(q−1)に対し
eX+(p−1)(q−1)Y=1
整数解{X=dY=−kが存在するため
de=1+k(p−1)(q−1)
言い換えるとd、つまりeのリングZ(p−1)(q−1)での逆元であり、アリスはp、qを知っているため、dを簡単に見つけることができる。[ 注: リングでの乗法逆元の存在は決して自明でない点を考慮すると、gcd(e,(p−1)(q−1))=1という条件が必須であることがわかる。]
オイラーのφ関数定理:
gcd(a,m)=1⟹aϕ(m)≡1(modm)
gcd(e,(p−1)(q−1))=1であるため、eの逆元dは次のように求められる。
d=e−1=eϕ((p−1)(q−1))−1
これは単にeを累乗するだけなので、連続累乗法で容易かつ迅速に計算することができる。gcd(c,pq)=1が成立する場合と成立しない場合に分けて考えよう。
ケース1. gcd(c,pq)=1
合同方程式の累乗根を求める問題に帰着される。
トーシェント関数の乗法的性質:
gcd(p,q)=1⟹ϕ(pq)=ϕ(p)ϕ(q)
ϕ(p)=p−1且つϕ(q)=q−1であるため
ϕ(pq)=ϕ(p)ϕ(q)=(p−1)(q−1)
オイラーのφ関数定理:
gcd(c,N)=1⟹cϕ(N)≡1(modN)
c(p−1)(q−1)=cϕ(pq)であるため
(cd)e≡cde≡c1+k(p−1)(q−1)≡c⋅(c(p−1)(q−1))k≡c⋅1k≡c(modpq)
ケース2. gcd(c,pq)=1
C≡c(p−1)(q−1)(modpq)
cがpqの倍数であればxe≡0で、x=0である必要があるが、どうでも良い。したがって、cはpまたはqのどちらかの倍数であるとするが、どちらの倍数であっても構わないのでqの倍数としよう。すると、あるn0∈Zとpの倍数ではないあるK∈Zに対し
C==c(p−1)(q−1)+(pq)⋅n0[qK](p−1)(q−1)+p⋅qn0
上述の式を満たすqn0が存在するため
c(p−1)(q−1)≡[(qK)q−1]p−1(modp)
パート1. (cd)e≡c(modp)
フェルマーの小定理: 素数pとpと互いに素な整数aに対し、ap−1≡1(modp)
Kはpの倍数ではないので、[(qK)q−1]はpと互いに素であり、
(cd)e≡cde≡c1+k(p−1)(q−1)≡c⋅[(qK)k(q−1)]p−1≡c⋅1(modp)
パート2. (cd)e≡c(modq)
(cd)e≡cde≡[qK]de≡0≡qK≡c(modq)
パート3. (cd)e≡c(modpq)
モジュロの乗法: gcd(m1,m2)=1であれば{a≡b(modm1)a=b(modm2)⟹a≡b(modm1m2)
パート1、2で{(cd)e≡c(modp)(cd)e≡c(modq)だったから、次を得る。
(cd)e≡c(modpq)
したがって、x=cdはどのような場合でもxe≡c(modpq)の解として存在する。また、別の解uが存在するとしても、常にu≡cd(modpq)として現れることは容易に示される。
■
暗号化
イブはeを知っているが、逆元dを見つけるためには素因数分解問題N=pqを解かなければならない。これは非常に困難であるため、ボブはメッセージmをアリスに安全に伝達することができる。
■
参照
素因数分解問題の難しさを利用したセキュリティアルゴリズム
素因数分解問題への攻撃アルゴリズム