§A4.15RSA と計算数論

最終更新

RSA は、オイラーの定理に基づき、公開鍵による暗号化と秘密鍵による復号が互いに逆になるように構成されます。本記事では鍵の作成、暗号化と復号の関係を定式化し、素因数分解の困難性を安全性の前提として扱います。

1 繰り返し二乗法

ar mod ma^r\bmod mを計算するとき、同じ底の平方を再利用すると、指数rrに比例する回数の乗算は必要ありません。

定義 1.1 (繰り返し二乗法).aaを整数、mmを22以上の整数、rrを非負整数とする。次の手順を繰り返し二乗法 (repeated squaring) という。r=0r=0のときはa0≡1(modm)a^0\equiv1\pmod mを出力する。r≥1r\geq1のとき、rrを

r=∑i=0sεi2i,εi∈{0,1},εs=1r=\sum_{i=0}^{s}\varepsilon_i2^i, \qquad \varepsilon_i\in\{0,1\},\quad \varepsilon_s=1

と二進展開する。b0b_0をaaの法mmにおける剰余とし、

bi≡bi−12(modm)(1≤i≤s)b_i\equiv b_{i-1}^2\pmod m\qquad(1\leq i\leq s)

によって各bib_iを計算する。各段で法mmの剰余をとると、bi≡a2i(modm)b_i\equiv a^{2^i}\pmod mである。εi=1\varepsilon_i=1となるiiに対応するbib_iを掛け、その乗算の各段でも法mmの剰余をとる。得られる値は

∏εi=1bi≡ar(modm)\prod_{\varepsilon_i=1}b_i\equiv a^r\pmod m

である。二乗はs=⌊log⁡2r⌋s=\lfloor\log_2r\rfloor回であり、最後の積に必要な乗算も高々ss回である。したがって、r≥1r\geq1のとき、法をとりながら行う乗算の回数はO(log⁡r)O(\log r)である。この評価は乗算の回数を数えたものであり、整数の桁数を含む計算量全体がO(log⁡r)O(\log r)であることを意味しない。

例 1.2.322 mod 233^{22}\bmod23を求める。22=101102=16+4+222=10110_2=16+4+2である。各二乗の直後に法2323の剰余をとると

31≡3,32≡9,34≡92=81≡12,38≡122=144≡6,316≡62=36≡13(mod23)3^1\equiv3,\quad 3^2\equiv9,\quad 3^4\equiv9^2=81\equiv12,\quad 3^8\equiv12^2=144\equiv6,\quad 3^{16}\equiv6^2=36\equiv13\pmod{23}

となる。したがって

322≡3163432≡13⋅12⋅9(mod23).3^{22}\equiv3^{16}3^4 3^2\equiv13\cdot12\cdot9\pmod{23}.

ここで

13⋅12=156≡18(mod23),18⋅9=162≡1(mod23)13\cdot12=156\equiv18\pmod{23}, \qquad 18\cdot9=162\equiv1\pmod{23}

であるから、322≡1(mod23)3^{22}\equiv1\pmod{23}である。2323は素数で23∤323\nmid3かつ22=23−122=23-1であるため、フェルマーの小定理も同じ値を与える。フェルマーの小定理による確認は計算結果の検算であり、繰り返し二乗法による計算とは別である。

2 RSA 暗号

定義 2.1 (Textbook RSA). 次の鍵生成・暗号化・復号の方式をTextbook RSA (textbook RSA) という。p,qp,qを相異なる素数とし、

n=pq,φ(n)=(p−1)(q−1)n=pq,\qquad \varphi(n)=(p-1)(q-1)

とする。1<e<φ(n)1<e<\varphi(n)かつgcd⁡(e,φ(n))=1\gcd(e,\varphi(n))=1を満たす整数eeを選ぶ。互除法の除法列を逆にたどって

ed+kφ(n)=1ed+k\varphi(n)=1

を満たす整数d,kd,kを求め、ddを法φ(n)\varphi(n)における0<d<φ(n)0<d<\varphi(n)の代表に直す。(n,e)(n,e)を公開鍵、ddを秘密指数とする。

0≤m<n0\leq m<nを満たす整数mmを平文とする。mem^eの法nnにおける0≤c<n0\leq c<nの代表を暗号文ccとする。復号ではcdc^dの法nnにおける00以上nn未満の代表を求める。

暗号化と復号のべき乗は、定義 1.1によって計算することができます。次の定理では、この二つの操作が数学的に逆になることが示されます。

定理 2.2.p,qp,qを相異なる素数とし、n=pqn=pq、φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)とする。1<e<φ(n)1<e<\varphi(n)、gcd⁡(e,φ(n))=1\gcd(e,\varphi(n))=1を満たす整数eeと、0<d<φ(n)0<d<\varphi(n)、ed≡1(modφ(n))ed\equiv1\pmod{\varphi(n)}を満たす整数ddをとる。このとき、すべての整数mmに対して0≤m<n0\leq m<nならば

med≡m(modn)m^{ed}\equiv m\pmod n

である。

証明.ed−1ed-1は(p−1)(q−1)(p-1)(q-1)の非負整数倍である。r∈{p,q}r\in\{p,q\}とすると、ある非負整数hhが存在してed=1+h(r−1)ed=1+h(r-1)となる。r∣mr\mid mの場合にはed≥1ed\ge1なので、med≡0≡m(modr)m^{ed}\equiv0\equiv m\pmod rである。r∤mr\nmid mの場合には、§A4.7 定理 1.1により

med=m(mr−1)h≡m(modr)m^{ed}=m\bigl(m^{r-1}\bigr)^h\equiv m\pmod r

である。したがって、med≡m(modp)m^{ed}\equiv m\pmod pかつmed≡m(modq)m^{ed}\equiv m\pmod qが成り立つ。p,qp,qは互いに素であるから、§A4.6 補題 2.1の一意性によりmed≡m(modpq)m^{ed}\equiv m\pmod{pq}である。n=pqn=pqなので、求める合同式を得る。▨

命題 2.3.p,qp,qを相異なる素数、n=pqn=pqとし、t≥1t\ge1を整数とする。すべての整数mmについて

mt≡m(modn)m^t\equiv m\pmod n

が成り立つための必要十分条件は

lcm⁡(p−1,q−1)∣(t−1)\operatorname{lcm}(p-1,q-1)\mid(t-1)

である。

証明.t=1t=1の場合には、mt=mm^t=mであり、任意の正整数はt−1=0t-1=0を割り切るので、両方の条件が成り立つ。以下ではt≥2t\ge2とする。

すべての整数mmについてmt≡m(modn)m^t\equiv m\pmod nが成り立つと仮定する。r∈{p,q}r\in\{p,q\}とすると、§A4.12 定理 3.2により、法rrの原始根ggを取ることができる。仮定をm=gm=gに適用すると、gt≡g(modr)g^t\equiv g\pmod rである。gcd⁡(g,r)=1\gcd(g,r)=1なので、§A4.3 補題 1.1によりug+vr=1ug+vr=1を満たす整数u,vu,vが存在する。合同式の両辺にuuを掛けると、gt−1≡1(modr)g^{t-1}\equiv1\pmod rとなる。ggの位数はφ(r)=r−1\varphi(r)=r-1なので、§A4.12 命題 1.2を正整数t−1t-1に適用してr−1∣t−1r-1\mid t-1を得る。したがって、p−1p-1とq−1q-1はともにt−1t-1を割り切り、その最小公倍数もt−1t-1を割り切る。

逆に、lcm⁡(p−1,q−1)∣(t−1)\operatorname{lcm}(p-1,q-1)\mid(t-1)とし、任意の整数mmを取る。r∈{p,q}r\in\{p,q\}とすると、ある非負整数hhが存在してt=1+h(r−1)t=1+h(r-1)となる。r∣mr\mid mの場合にはmt≡0≡m(modr)m^t\equiv0\equiv m\pmod rである。r∤mr\nmid mの場合には、§A4.7 定理 1.1により

mt=m(mr−1)h≡m(modr)m^t=m\bigl(m^{r-1}\bigr)^h\equiv m\pmod r

である。よって、mt≡m(modp)m^t\equiv m\pmod pかつmt≡m(modq)m^t\equiv m\pmod qが成り立つ。p,qp,qは互いに素なので、§A4.6 補題 2.1の一意性によりmt≡m(modn)m^t\equiv m\pmod nを得る。▨

例 2.4.p=5p=5、q=11q=11とすると、n=55n=55、φ(n)=40\varphi(n)=40であり、lcm⁡(p−1,q−1)=20\operatorname{lcm}(p-1,q-1)=20である。e=3e=3、d=7d=7について

ed=21≡1(mod20),ed≢1(mod40)ed=21\equiv1\pmod{20},\qquad ed\not\equiv1\pmod{40}

である。命題 2.3をt=edt=edに適用すると、すべての0≤m<550\le m<55を満たす整数mmについて、暗号化m↦m3m\mapsto m^3の後に77乗することで元の平文の剰余を得る。したがって、ed≡1(modφ(n))ed\equiv1\pmod{\varphi(n)}は復号が正しいための十分条件であるが、必要条件ではない。

例 2.5.p=3p=3、q=11q=11とすると

n=33,φ(n)=(3−1)(11−1)=20n=33,\qquad\varphi(n)=(3-1)(11-1)=20

である。e=3e=3は1<3<201<3<20かつgcd⁡(3,20)=1\gcd(3,20)=1を満たす。秘密指数を求めるための互除法の除法列と逆代入は

20=6⋅3+2,3=1⋅2+1,20=6\cdot3+2,\qquad3=1\cdot2+1,1=3−2=3−(20−6⋅3)=7⋅3−201=3-2=3-(20-6\cdot3)=7\cdot3-20

である。したがって3⋅7+(−1)⋅20=13\cdot7+(-1)\cdot20=1であり、法2020の正の代表としてd=7d=7を得る。

平文m=4m=4に対して

c≡43=64≡31(mod33)c\equiv4^3=64\equiv31\pmod{33}

である。暗号文の代表はc=31c=31である。復号では7=4+2+17=4+2+1と二進展開し、各二乗の直後に法3333の剰余をとる。31≡−2(mod33)31\equiv-2\pmod{33}であるから

312≡4,314≡42=16(mod33)31^2\equiv4,\qquad31^4\equiv4^2=16\pmod{33}

となる。さらに

317≡314⋅312⋅31≡16⋅4⋅31≡31⋅31≡(−2)2≡4(mod33).31^7\equiv31^4\cdot31^2\cdot31 \equiv16\cdot4\cdot31 \equiv31\cdot31 \equiv(-2)^2 \equiv4\pmod{33}.

復号で得た44は元の平文m=4m=4と一致する。この例の小さな素数は計算の確認のために選んだものであり、安全な実用鍵が得られるものではない。

3 数学的な正しさと安全性の前提

定理 2.2では、鍵が定められた後の復号が正しいことが証明されています。この定理では、公開情報から秘密指数を求める計算が難しいことは主張されていません。

素因数p,qp,qが分かればφ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)を計算し、互除法の除法列を逆にたどって秘密指数ddを求めることができます。RSA は、公開されたn=pqn=pqから大きな素因数p,qp,qを古典計算で求めることが現実的には難しいという前提を安全性の基礎に置きます。この計算困難性は、復号の正しさを述べる定理からは導かれません。

問題 3.1.n=pqn=pqは相異なる二つの素数の積であるとする。nnとφ(n)\varphi(n)の値からp,qp,qを求める方法を示せ。その方法をn=3233n=3233、φ(n)=3120\varphi(n)=3120の場合に適用せよ。

解答.

φ(n)=(p−1)(q−1)=n−(p+q)+1\varphi(n)=(p-1)(q-1)=n-(p+q)+1であるから、

S=n+1−φ(n)S=n+1-\varphi(n)

とおけばS=p+qS=p+qである。したがって、p,qp,qは二次方程式

T2−ST+n=0T^2-ST+n=0

の二つの解である。判別式は

S2−4n=(p+q)2−4pq=(p−q)2S^2-4n=(p+q)^2-4pq=(p-q)^2

であり、p≠qp\ne qなので正の平方数である。よって、p,qp,qは順序を除いて

S−S2−4n2,S+S2−4n2\frac{S-\sqrt{S^2-4n}}2,\qquad\frac{S+\sqrt{S^2-4n}}2

によって求まる。両式の分子はp+q−∣p−q∣p+q-|p-q|とp+q+∣p−q∣p+q+|p-q|なので偶数である。逆に、p,qp,qが分かればφ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1)を計算することができる。

与えられた値ではS=3233+1−3120=114S=3233+1-3120=114であり、

S2−4n=1142−4⋅3233=64S^2-4n=114^2-4\cdot3233=64

である。したがって、二つの素因数は

114−82=53,114+82=61\frac{114-8}{2}=53,\qquad\frac{114+8}{2}=61

である。実際に53⋅61=323353\cdot61=3233、(53−1)(61−1)=3120(53-1)(61-1)=3120となる。▨

Miller の1976年の論文は、オイラー関数を計算する問題を含む一群の関数計算と整数の素因数分解との計算量上の関係を扱っています。論文の序論で述べられる同値性には、拡張リーマン予想の仮定が付いています。秘密指数が得られた場合には、その情報から素因数分解を回収する議論があります。しかし、秘密指数を経由せず、公開鍵と暗号文から平文を直接回収する RSA 問題が素因数分解と同じ難しさをもつことは、この関係からは導かれません。

鍵長の要件は用途と求める安全性強度によって異なります。NIST SP 800-56B Rev. 2 は、NIST の整数因数分解型鍵確立方式において、少なくとも112ビットの安全性強度を与える偶数の法長として 2048ビット以上を要求しています。この数値をすべての用途に共通する標準鍵長とみなすことはできません。

十分な能力をもつ量子計算機では、ショアのアルゴリズムによって整数の素因数分解を多項式時間で行うことができるため、RSA は脆弱です。NIST は耐量子暗号標準への移行を案内していますが、将来の時点や移行の完了時期を、素因数分解のアルゴリズムの存在だけから決めることはできません。

この記事で扱う対象は padding を付けない textbook RSA です。実際の暗号方式で必要になる padding、署名、通信規約、処理時間や消費電力から秘密情報が漏れる攻撃への対策は扱いません。したがって、復号の正しさの定理だけから実装の安全性を結論することはできません。

参考文献

  1. Gary L. Miller, Riemann's Hypothesis and Tests for Primality, Journal of Computer and System Sciences 13 (1976), no. 3, 300–317.オイラー関数などの計算と整数の素因数分解との計算量上の関係を参考にしました。
  2. National Institute of Standards and Technology, Recommendation for Pair-Wise Key-Establishment Using Integer Factorization Cryptography (NIST SP 800-56B Rev. 2), 2019.整数因数分解型鍵確立方式における法の長さと安全性強度の要件を参考にしました。
  3. National Institute of Standards and Technology, Frequently Asked Questions about Post-Quantum Cryptography — Migration to Post-Quantum Cryptography.量子計算機に対する RSA の脆弱性と耐量子暗号への移行方針を参考にしました。

例題

条件と何を求めるかを確認してから、式と答えの対応を見比べてください。

次の値を、繰り返し二乗法で求めよ。

解法の型指数を2進展開し、a2k(modm)a^{2^k}\pmod m を順に二乗して求めた項をかけ合わせる

  1. 例題 1

    758(mod15)7^{58} \pmod{15}
  2. 例題 2

    933(mod26)9^{33} \pmod{26}
  3. 例題 3

    220(mod38)2^{20} \pmod{38}
  4. 例題 4

    336(mod14)3^{36} \pmod{14}
  5. 例題 5

    259(mod40)2^{59} \pmod{40}
  6. 例題 6

    659(mod38)6^{59} \pmod{38}
  7. 例題 7

    217(mod32)2^{17} \pmod{32}
  8. 例題 8

    223(mod25)2^{23} \pmod{25}
  9. 例題 9

    648(mod32)6^{48} \pmod{32}
  10. 例題 10

    846(mod22)8^{46} \pmod{22}

演習

問題を解いてから「解答・解説」を開けます。

次の値を、繰り返し二乗法で求めよ。

演習を読み込み中…

前提記事