1 繰り返し二乗法
a r m o d m a^r\bmod m a r mod m を計算するとき、同じ底の平方を再利用すると、指数r r r に比例する回数の乗算は必要ありません。
定義 1.1 (繰り返し二乗法). a a a を整数、m m m を2 2 2 以上の整数、r r r を非負整数とする。次の手順を繰り返し二乗法 (repeated squaring ) という。r = 0 r=0 r = 0 のときはa 0 ≡ 1 ( m o d m ) a^0\equiv1\pmod m a 0 ≡ 1 ( mod m ) を出力する。r ≥ 1 r\geq1 r ≥ 1 のとき、r r r を
r = ∑ i = 0 s ε i 2 i , ε i ∈ { 0 , 1 } , ε s = 1 r=\sum_{i=0}^{s}\varepsilon_i2^i,
\qquad \varepsilon_i\in\{0,1\},\quad \varepsilon_s=1 r = i = 0 ∑ s ε i 2 i , ε i ∈ { 0 , 1 } , ε s = 1 と二進展開する。b 0 b_0 b 0 をa a a の法m m m における剰余とし、
b i ≡ b i − 1 2 ( m o d m ) ( 1 ≤ i ≤ s ) b_i\equiv b_{i-1}^2\pmod m\qquad(1\leq i\leq s) b i ≡ b i − 1 2 ( mod m ) ( 1 ≤ i ≤ s ) によって各b i b_i b i を計算する。各段で法m m m の剰余をとると、b i ≡ a 2 i ( m o d m ) b_i\equiv a^{2^i}\pmod m b i ≡ a 2 i ( mod m ) である。ε i = 1 \varepsilon_i=1 ε i = 1 となるi i i に対応するb i b_i b i を掛け、その乗算の各段でも法m m m の剰余をとる。得られる値は
∏ ε i = 1 b i ≡ a r ( m o d m ) \prod_{\varepsilon_i=1}b_i\equiv a^r\pmod m ε i = 1 ∏ b i ≡ a r ( mod m ) である。二乗はs = ⌊ log 2 r ⌋ s=\lfloor\log_2r\rfloor s = ⌊ log 2 r ⌋ 回であり、最後の積に必要な乗算も高々s s s 回である。したがって、r ≥ 1 r\geq1 r ≥ 1 のとき、法をとりながら行う乗算の回数はO ( log r ) O(\log r) O ( log r ) である。この評価は乗算の回数を数えたものであり、整数の桁数を含む計算量全体がO ( log r ) O(\log r) O ( log r ) であることを意味しない。
例 1.2. 3 22 m o d 23 3^{22}\bmod23 3 22 mod 23 を求める。22 = 10110 2 = 16 + 4 + 2 22=10110_2=16+4+2 22 = 1011 0 2 = 16 + 4 + 2 である。各二乗の直後に法23 23 23 の剰余をとると
3 1 ≡ 3 , 3 2 ≡ 9 , 3 4 ≡ 9 2 = 81 ≡ 12 , 3 8 ≡ 12 2 = 144 ≡ 6 , 3 16 ≡ 6 2 = 36 ≡ 13 ( m o d 23 ) 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} 3 1 ≡ 3 , 3 2 ≡ 9 , 3 4 ≡ 9 2 = 81 ≡ 12 , 3 8 ≡ 1 2 2 = 144 ≡ 6 , 3 16 ≡ 6 2 = 36 ≡ 13 ( mod 23 ) となる。したがって
3 22 ≡ 3 16 3 4 3 2 ≡ 13 ⋅ 12 ⋅ 9 ( m o d 23 ) . 3^{22}\equiv3^{16}3^4 3^2\equiv13\cdot12\cdot9\pmod{23}. 3 22 ≡ 3 16 3 4 3 2 ≡ 13 ⋅ 12 ⋅ 9 ( mod 23 ) . ここで
13 ⋅ 12 = 156 ≡ 18 ( m o d 23 ) , 18 ⋅ 9 = 162 ≡ 1 ( m o d 23 ) 13\cdot12=156\equiv18\pmod{23},
\qquad
18\cdot9=162\equiv1\pmod{23} 13 ⋅ 12 = 156 ≡ 18 ( mod 23 ) , 18 ⋅ 9 = 162 ≡ 1 ( mod 23 ) であるから、3 22 ≡ 1 ( m o d 23 ) 3^{22}\equiv1\pmod{23} 3 22 ≡ 1 ( mod 23 ) である。23 23 23 は素数で23 ∤ 3 23\nmid3 23 ∤ 3 かつ22 = 23 − 1 22=23-1 22 = 23 − 1 であるため、フェルマーの小定理も同じ値を与える。フェルマーの小定理による確認は計算結果の検算であり、繰り返し二乗法による計算とは別である。
2 RSA 暗号
定義 2.1 (Textbook RSA). 次の鍵生成・暗号化・復号の方式をTextbook RSA (textbook RSA ) という。p , q p,q p , q を相異なる素数とし、
n = p q , φ ( n ) = ( p − 1 ) ( q − 1 ) n=pq,\qquad \varphi(n)=(p-1)(q-1) n = pq , φ ( n ) = ( p − 1 ) ( q − 1 ) とする。1 < e < φ ( n ) 1<e<\varphi(n) 1 < e < φ ( n ) かつgcd ( e , φ ( n ) ) = 1 \gcd(e,\varphi(n))=1 g cd( e , φ ( n )) = 1 を満たす整数e e e を選ぶ。互除法の除法列を逆にたどって
e d + k φ ( n ) = 1 ed+k\varphi(n)=1 e d + k φ ( n ) = 1 を満たす整数d , k d,k d , k を求め、d d d を法φ ( n ) \varphi(n) φ ( n ) における0 < d < φ ( n ) 0<d<\varphi(n) 0 < d < φ ( n ) の代表に直す。( n , e ) (n,e) ( n , e ) を公開鍵、d d d を秘密指数とする。
0 ≤ m < n 0\leq m<n 0 ≤ m < n を満たす整数m m m を平文とする。m e m^e m e の法n n n における0 ≤ c < n 0\leq c<n 0 ≤ c < n の代表を暗号文c c c とする。復号ではc d c^d c d の法n n n における0 0 0 以上n n n 未満の代表を求める。
暗号化と復号のべき乗は、定義 1.1 によって計算することができます。次の定理では、この二つの操作が数学的に逆になることが示されます。
定理 2.2. p , q p,q p , q を相異なる素数とし、n = p q n=pq n = pq 、φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ ( n ) = ( p − 1 ) ( q − 1 ) とする。1 < e < φ ( n ) 1<e<\varphi(n) 1 < e < φ ( n ) 、gcd ( e , φ ( n ) ) = 1 \gcd(e,\varphi(n))=1 g cd( e , φ ( n )) = 1 を満たす整数e e e と、0 < d < φ ( n ) 0<d<\varphi(n) 0 < d < φ ( n ) 、e d ≡ 1 ( m o d φ ( n ) ) ed\equiv1\pmod{\varphi(n)} e d ≡ 1 ( mod φ ( n )) を満たす整数d d d をとる。このとき、すべての整数m m m に対して0 ≤ m < n 0\leq m<n 0 ≤ m < n ならば
m e d ≡ m ( m o d n ) m^{ed}\equiv m\pmod n m e d ≡ m ( mod n ) である。
証明. e d − 1 ed-1 e d − 1 は( p − 1 ) ( q − 1 ) (p-1)(q-1) ( p − 1 ) ( q − 1 ) の非負整数倍である。r ∈ { p , q } r\in\{p,q\} r ∈ { p , q } とすると、ある非負整数h h h が存在してe d = 1 + h ( r − 1 ) ed=1+h(r-1) e d = 1 + h ( r − 1 ) となる。r ∣ m r\mid m r ∣ m の場合にはe d ≥ 1 ed\ge1 e d ≥ 1 なので、m e d ≡ 0 ≡ m ( m o d r ) m^{ed}\equiv0\equiv m\pmod r m e d ≡ 0 ≡ m ( mod r ) である。r ∤ m r\nmid m r ∤ m の場合には、§A4.7 定理 1.1 により
m e d = m ( m r − 1 ) h ≡ m ( m o d r ) m^{ed}=m\bigl(m^{r-1}\bigr)^h\equiv m\pmod r m e d = m ( m r − 1 ) h ≡ m ( mod r ) である。したがって、m e d ≡ m ( m o d p ) m^{ed}\equiv m\pmod p m e d ≡ m ( mod p ) かつm e d ≡ m ( m o d q ) m^{ed}\equiv m\pmod q m e d ≡ m ( mod q ) が成り立つ。p , q p,q p , q は互いに素であるから、§A4.6 補題 2.1 の一意性によりm e d ≡ m ( m o d p q ) m^{ed}\equiv m\pmod{pq} m e d ≡ m ( mod pq ) である。n = p q n=pq n = pq なので、求める合同式を得る。▨
命題 2.3. p , q p,q p , q を相異なる素数、n = p q n=pq n = pq とし、t ≥ 1 t\ge1 t ≥ 1 を整数とする。すべての整数m m m について
m t ≡ m ( m o d n ) m^t\equiv m\pmod n m t ≡ m ( mod n ) が成り立つための必要十分条件は
lcm ( p − 1 , q − 1 ) ∣ ( t − 1 ) \operatorname{lcm}(p-1,q-1)\mid(t-1) lcm ( p − 1 , q − 1 ) ∣ ( t − 1 ) である。
証明. t = 1 t=1 t = 1 の場合には、m t = m m^t=m m t = m であり、任意の正整数はt − 1 = 0 t-1=0 t − 1 = 0 を割り切るので、両方の条件が成り立つ。以下ではt ≥ 2 t\ge2 t ≥ 2 とする。
すべての整数m m m についてm t ≡ m ( m o d n ) m^t\equiv m\pmod n m t ≡ m ( mod n ) が成り立つと仮定する。r ∈ { p , q } r\in\{p,q\} r ∈ { p , q } とすると、§A4.12 定理 3.2 により、法r r r の原始根g g g を取ることができる。仮定をm = g m=g m = g に適用すると、g t ≡ g ( m o d r ) g^t\equiv g\pmod r g t ≡ g ( mod r ) である。gcd ( g , r ) = 1 \gcd(g,r)=1 g cd( g , r ) = 1 なので、§A4.3 補題 1.1 によりu g + v r = 1 ug+vr=1 ug + v r = 1 を満たす整数u , v u,v u , v が存在する。合同式の両辺にu u u を掛けると、g t − 1 ≡ 1 ( m o d r ) g^{t-1}\equiv1\pmod r g t − 1 ≡ 1 ( mod r ) となる。g g g の位数はφ ( r ) = r − 1 \varphi(r)=r-1 φ ( r ) = r − 1 なので、§A4.12 命題 1.2 を正整数t − 1 t-1 t − 1 に適用してr − 1 ∣ t − 1 r-1\mid t-1 r − 1 ∣ t − 1 を得る。したがって、p − 1 p-1 p − 1 とq − 1 q-1 q − 1 はともにt − 1 t-1 t − 1 を割り切り、その最小公倍数もt − 1 t-1 t − 1 を割り切る。
逆に、lcm ( p − 1 , q − 1 ) ∣ ( t − 1 ) \operatorname{lcm}(p-1,q-1)\mid(t-1) lcm ( p − 1 , q − 1 ) ∣ ( t − 1 ) とし、任意の整数m m m を取る。r ∈ { p , q } r\in\{p,q\} r ∈ { p , q } とすると、ある非負整数h h h が存在してt = 1 + h ( r − 1 ) t=1+h(r-1) t = 1 + h ( r − 1 ) となる。r ∣ m r\mid m r ∣ m の場合にはm t ≡ 0 ≡ m ( m o d r ) m^t\equiv0\equiv m\pmod r m t ≡ 0 ≡ m ( mod r ) である。r ∤ m r\nmid m r ∤ m の場合には、§A4.7 定理 1.1 により
m t = m ( m r − 1 ) h ≡ m ( m o d r ) m^t=m\bigl(m^{r-1}\bigr)^h\equiv m\pmod r m t = m ( m r − 1 ) h ≡ m ( mod r ) である。よって、m t ≡ m ( m o d p ) m^t\equiv m\pmod p m t ≡ m ( mod p ) かつm t ≡ m ( m o d q ) m^t\equiv m\pmod q m t ≡ m ( mod q ) が成り立つ。p , q p,q p , q は互いに素なので、§A4.6 補題 2.1 の一意性によりm t ≡ m ( m o d n ) m^t\equiv m\pmod n m t ≡ m ( mod n ) を得る。▨
例 2.4. p = 5 p=5 p = 5 、q = 11 q=11 q = 11 とすると、n = 55 n=55 n = 55 、φ ( n ) = 40 \varphi(n)=40 φ ( n ) = 40 であり、lcm ( p − 1 , q − 1 ) = 20 \operatorname{lcm}(p-1,q-1)=20 lcm ( p − 1 , q − 1 ) = 20 である。e = 3 e=3 e = 3 、d = 7 d=7 d = 7 について
e d = 21 ≡ 1 ( m o d 20 ) , e d ≢ 1 ( m o d 40 ) ed=21\equiv1\pmod{20},\qquad ed\not\equiv1\pmod{40} e d = 21 ≡ 1 ( mod 20 ) , e d ≡ 1 ( mod 40 ) である。命題 2.3 をt = e d t=ed t = e d に適用すると、すべての0 ≤ m < 55 0\le m<55 0 ≤ m < 55 を満たす整数m m m について、暗号化m ↦ m 3 m\mapsto m^3 m ↦ m 3 の後に7 7 7 乗することで元の平文の剰余を得る。したがって、e d ≡ 1 ( m o d φ ( n ) ) ed\equiv1\pmod{\varphi(n)} e d ≡ 1 ( mod φ ( n )) は復号が正しいための十分条件であるが、必要条件ではない。
例 2.5. p = 3 p=3 p = 3 、q = 11 q=11 q = 11 とすると
n = 33 , φ ( n ) = ( 3 − 1 ) ( 11 − 1 ) = 20 n=33,\qquad\varphi(n)=(3-1)(11-1)=20 n = 33 , φ ( n ) = ( 3 − 1 ) ( 11 − 1 ) = 20 である。e = 3 e=3 e = 3 は1 < 3 < 20 1<3<20 1 < 3 < 20 かつgcd ( 3 , 20 ) = 1 \gcd(3,20)=1 g cd( 3 , 20 ) = 1 を満たす。秘密指数を求めるための互除法の除法列と逆代入は
20 = 6 ⋅ 3 + 2 , 3 = 1 ⋅ 2 + 1 , 20=6\cdot3+2,\qquad3=1\cdot2+1, 20 = 6 ⋅ 3 + 2 , 3 = 1 ⋅ 2 + 1 , 1 = 3 − 2 = 3 − ( 20 − 6 ⋅ 3 ) = 7 ⋅ 3 − 20 1=3-2=3-(20-6\cdot3)=7\cdot3-20 1 = 3 − 2 = 3 − ( 20 − 6 ⋅ 3 ) = 7 ⋅ 3 − 20 である。したがって3 ⋅ 7 + ( − 1 ) ⋅ 20 = 1 3\cdot7+(-1)\cdot20=1 3 ⋅ 7 + ( − 1 ) ⋅ 20 = 1 であり、法20 20 20 の正の代表としてd = 7 d=7 d = 7 を得る。
平文m = 4 m=4 m = 4 に対して
c ≡ 4 3 = 64 ≡ 31 ( m o d 33 ) c\equiv4^3=64\equiv31\pmod{33} c ≡ 4 3 = 64 ≡ 31 ( mod 33 ) である。暗号文の代表はc = 31 c=31 c = 31 である。復号では7 = 4 + 2 + 1 7=4+2+1 7 = 4 + 2 + 1 と二進展開し、各二乗の直後に法33 33 33 の剰余をとる。31 ≡ − 2 ( m o d 33 ) 31\equiv-2\pmod{33} 31 ≡ − 2 ( mod 33 ) であるから
31 2 ≡ 4 , 31 4 ≡ 4 2 = 16 ( m o d 33 ) 31^2\equiv4,\qquad31^4\equiv4^2=16\pmod{33} 3 1 2 ≡ 4 , 3 1 4 ≡ 4 2 = 16 ( mod 33 ) となる。さらに
31 7 ≡ 31 4 ⋅ 31 2 ⋅ 31 ≡ 16 ⋅ 4 ⋅ 31 ≡ 31 ⋅ 31 ≡ ( − 2 ) 2 ≡ 4 ( m o d 33 ) . 31^7\equiv31^4\cdot31^2\cdot31
\equiv16\cdot4\cdot31
\equiv31\cdot31
\equiv(-2)^2
\equiv4\pmod{33}. 3 1 7 ≡ 3 1 4 ⋅ 3 1 2 ⋅ 31 ≡ 16 ⋅ 4 ⋅ 31 ≡ 31 ⋅ 31 ≡ ( − 2 ) 2 ≡ 4 ( mod 33 ) . 復号で得た4 4 4 は元の平文m = 4 m=4 m = 4 と一致する。この例の小さな素数は計算の確認のために選んだものであり、安全な実用鍵が得られるものではない。
3 数学的な正しさと安全性の前提
定理 2.2 では、鍵が定められた後の復号が正しいことが証明されています。この定理では、公開情報から秘密指数を求める計算が難しいことは主張されていません。
素因数p , q p,q p , q が分かればφ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ ( n ) = ( p − 1 ) ( q − 1 ) を計算し、互除法の除法列を逆にたどって秘密指数d d d を求めることができます。RSA は、公開されたn = p q n=pq n = pq から大きな素因数p , q p,q p , q を古典計算で求めることが現実的には難しいという前提を安全性の基礎に置きます。この計算困難性は、復号の正しさを述べる定理からは導かれません。
問題 3.1. n = p q n=pq n = pq は相異なる二つの素数の積であるとする。n n n とφ ( n ) \varphi(n) φ ( n ) の値からp , q p,q p , q を求める方法を示せ。その方法をn = 3233 n=3233 n = 3233 、φ ( n ) = 3120 \varphi(n)=3120 φ ( n ) = 3120 の場合に適用せよ。
解答. φ ( n ) = ( p − 1 ) ( q − 1 ) = n − ( p + q ) + 1 \varphi(n)=(p-1)(q-1)=n-(p+q)+1 φ ( n ) = ( p − 1 ) ( q − 1 ) = n − ( p + q ) + 1 であるから、
S = n + 1 − φ ( n ) S=n+1-\varphi(n) S = n + 1 − φ ( n ) とおけばS = p + q S=p+q S = p + q である。したがって、p , q p,q p , q は二次方程式
T 2 − S T + n = 0 T^2-ST+n=0 T 2 − S T + n = 0 の二つの解である。判別式は
S 2 − 4 n = ( p + q ) 2 − 4 p q = ( p − q ) 2 S^2-4n=(p+q)^2-4pq=(p-q)^2 S 2 − 4 n = ( p + q ) 2 − 4 pq = ( p − q ) 2 であり、p ≠ q p\ne q p = q なので正の平方数である。よって、p , q p,q p , q は順序を除いて
S − S 2 − 4 n 2 , S + S 2 − 4 n 2 \frac{S-\sqrt{S^2-4n}}2,\qquad\frac{S+\sqrt{S^2-4n}}2 2 S − S 2 − 4 n , 2 S + S 2 − 4 n によって求まる。両式の分子はp + q − ∣ p − q ∣ p+q-|p-q| p + q − ∣ p − q ∣ とp + q + ∣ p − q ∣ p+q+|p-q| p + q + ∣ p − q ∣ なので偶数である。逆に、p , q p,q p , q が分かればφ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ ( n ) = ( p − 1 ) ( q − 1 ) を計算することができる。
与えられた値ではS = 3233 + 1 − 3120 = 114 S=3233+1-3120=114 S = 3233 + 1 − 3120 = 114 であり、
S 2 − 4 n = 114 2 − 4 ⋅ 3233 = 64 S^2-4n=114^2-4\cdot3233=64 S 2 − 4 n = 11 4 2 − 4 ⋅ 3233 = 64 である。したがって、二つの素因数は
114 − 8 2 = 53 , 114 + 8 2 = 61 \frac{114-8}{2}=53,\qquad\frac{114+8}{2}=61 2 114 − 8 = 53 , 2 114 + 8 = 61 である。実際に53 ⋅ 61 = 3233 53\cdot61=3233 53 ⋅ 61 = 3233 、( 53 − 1 ) ( 61 − 1 ) = 3120 (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、署名、通信規約、処理時間や消費電力から秘密情報が漏れる攻撃への対策は扱いません。したがって、復号の正しさの定理だけから実装の安全性を結論することはできません。