暗号化
問題文の通り。オーバーフローを防ぐため、計算の途中過程で毎回nで割った余りをとること。計算の際には、二分累乗法を使うことで計算量をO(log e)に抑えられる。
復号
「RSA暗号の仕組み」の3.を満たすようなdを求めると、aはbdをnで割った余りとなる。
証明
問題文の最後にある「ヒント」より、bd≡al(p−1)(q−1)+1 (mod n) (lは整数)と書けるので、al(p−1)(q−1)+1≡a (mod n)⋯(1)を示せば良い。
ここで、al(p−1)(q−1)+1≡a (mod p)⋯(2), al(p−1)(q−1)+1≡a (mod q)⋯(3)とする。p,qは相異なる素数であるから互いに素。よって、中国剰余定理より(1)⇔(2)かつ(3)が成立する。よって、(2)と(3)を示せば良い。
(2)の証明
ここではmod pとする。
a≡0ならば、al(p−1)(q−1)+1≡0≡aとなる。
a≡0ならば、フェルマーの小定理よりap−1≡1なので、al(p−1)(q−1)+1=(ap−1)l(q−1)⋅a≡1l(q−1)⋅a=aとなる。
以上より、(2)が示された。
(3)は、上の証明でpとqを入れ替えることで示される。
以上より、bd≡a(mod n)が示された。
dの求め方
eはϕ(n)と互いに素なので、de≡1(mod ϕ(n))を満たすようなdは必ず存在し、dはeのmod ϕ(n)における逆元である。
計算量について
下処理:nの素因数分解はO(n), dの計算はO(logϕ(n))=O(log n)で行える。
各biについての計算:二分累乗法により、O(log d)で行える。d<ϕ(n)なので、最悪の場合の計算量はO(logϕ(n))=O(log n)となる。
よって、計算量の合計はO(n+Llog n)となる。
参考
実際の暗号において、nは10300から101000程度の値になる。一方、Lは1GBでも109程度なので、n≫Lより実際のオーダーはO(n)となる。このことから、本暗号の解読においてnの素因数分解がボトルネックになることを示すことができた。
質問・誤りがある場合
Twitterに連絡ください。ID : @YS55749378