暗号化

問題文の通り。オーバーフローを防ぐため、計算の途中過程で毎回nnで割った余りをとること。計算の際には、二分累乗法を使うことで計算量をO(log e)O(\log\ e)に抑えられる。\\

復号

「RSA暗号の仕組み」の3.を満たすようなddを求めると、aabdb^dnnで割った余りとなる。\\

証明\\

問題文の最後にある「ヒント」より、bdal(p1)(q1)+1 (mod n) (lb^d\equiv a^{l(p-1)(q-1)+1}\ ({\rm mod}\ n)\ (lは整数))と書けるので、al(p1)(q1)+1a (mod n)(1)a^{l(p-1)(q-1)+1}\equiv a\ ({\rm mod}\ n)\cdots (1)を示せば良い。\\ ここで、al(p1)(q1)+1a (mod p)(2), al(p1)(q1)+1a (mod q)(3)a^{l(p-1)(q-1)+1}\equiv a\ ({\rm mod}\ p)\cdots (2),\ a^{l(p-1)(q-1)+1}\equiv a\ ({\rm mod}\ q)\cdots (3)とする。p,qp,qは相異なる素数であるから互いに素。よって、中国剰余定理より(1)(2)(1)\Leftrightarrow (2)かつ(3)(3)が成立する。よって、(2)(2)(3)(3)を示せば良い。\\

(2)の証明

ここではmod p{\rm mod}\ pとする。\\ a0a\equiv 0ならば、al(p1)(q1)+10aa^{l(p-1)(q-1)+1}\equiv 0\equiv aとなる。 a≢0a\not\equiv 0ならば、フェルマーの小定理よりap11a^{p-1}\equiv 1なので、al(p1)(q1)+1=(ap1)l(q1)a1l(q1)a=aa^{l(p-1)(q-1)+1}=(a^{p-1})^{l(q-1)}\cdot a\equiv1^{l(q-1)}\cdot a= aとなる。\\ 以上より、(2)(2)が示された。\\

(3)(3)は、上の証明でppqqを入れ替えることで示される。 以上より、bda(mod n)b^d\equiv a({\rm mod}\ n)が示された。 \\

dの求め方\\

eeϕ(n)\phi (n)と互いに素なので、de1(mod  ϕ(n))de\equiv1({\rm mod}\ \ \phi(n))を満たすようなddは必ず存在し、ddeemod ϕ(n){\rm mod}\ \phi(n)における逆元である。

計算量について

下処理:nnの素因数分解はO(n), dO(\sqrt{n}),\ dの計算はO(logϕ(n))=O(log n)O(\log\phi (n))=O(\log\ n)で行える。\\bib_iについての計算:二分累乗法により、O(log d)O(\log\ d)で行える。d<ϕ(n)d<\phi(n)なので、最悪の場合の計算量はO(logϕ(n))=O(log n)O(\log\phi (n))=O(\log\ n)となる。\\ よって、計算量の合計はO(n+Llog n)O(\sqrt{n}+L\log\ n)となる。

参考

実際の暗号において、nn1030010^{300}から10100010^{1000}程度の値になる。一方、LLは1GBでも10910^9程度なので、nL\sqrt{n}\gg Lより実際のオーダーはO(n)O(\sqrt{n})となる。このことから、本暗号の解読においてnnの素因数分解がボトルネックになることを示すことができた。

質問・誤りがある場合

Twitterに連絡ください。ID : @YS55749378