§A4.15RSA と計算数論

最終更新

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

1 繰り返し二乗法

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

定義 1.1 (繰り返し二乗法).aaを整数、mmを22以上の整数、rrを非負整数とする。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).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≡1(modφ(n))ed\equiv1\pmod{\varphi(n)}であるから、ある非負整数kkが存在して

ed=1+k(p−1)(q−1)ed=1+k(p-1)(q-1)

と書くことができる。

p∣mp\mid mの場合にはm≡0(modp)m\equiv0\pmod pであるからmed≡0≡m(modp)m^{ed}\equiv0\equiv m\pmod pである。p∤mp\nmid mの場合には、ppが素数であることとフェルマーの小定理からmp−1≡1(modp)m^{p-1}\equiv1\pmod pである。したがって

med=m(mp−1)k(q−1)≡m(modp)m^{ed}=m\bigl(m^{p-1}\bigr)^{k(q-1)}\equiv m\pmod p

となる。よって、p∣mp\mid mとp∤mp\nmid mのいずれの場合にもmed≡m(modp)m^{ed}\equiv m\pmod pである。

q∣mq\mid mの場合にはm≡0(modq)m\equiv0\pmod qであるからmed≡0≡m(modq)m^{ed}\equiv0\equiv m\pmod qである。q∤mq\nmid mの場合には、qqが素数であることとフェルマーの小定理からmq−1≡1(modq)m^{q-1}\equiv1\pmod qである。したがって

med=m(mq−1)k(p−1)≡m(modq)m^{ed}=m\bigl(m^{q-1}\bigr)^{k(p-1)}\equiv m\pmod q

となる。よって、q∣mq\mid mとq∤mq\nmid mのいずれの場合にもmed≡m(modq)m^{ed}\equiv m\pmod qである。

ppとqqは相異なる素数であるから互いに素である。法ppと法qqで得た二つの合同式に中国剰余定理を適用すると

med≡m(modpq)m^{ed}\equiv m\pmod{pq}

となる。n=pqn=pqであるから、求める合同式を得る。▨

例 2.3.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を古典計算で求めることが現実的には難しいという前提を安全性の基礎に置きます。この計算困難性は、復号の正しさを述べる定理からは導かれません。

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}

演習

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

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

演習を読み込み中…

前提記事