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 を非負整数とする。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). 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 ( m o d φ ( n ) ) ed\equiv1\pmod{\varphi(n)} e d ≡ 1 ( mod φ ( n )) であるから、ある非負整数k k k が存在して
e d = 1 + k ( p − 1 ) ( q − 1 ) ed=1+k(p-1)(q-1) e d = 1 + k ( p − 1 ) ( q − 1 ) と書くことができる。
p ∣ m p\mid m p ∣ m の場合にはm ≡ 0 ( m o d p ) m\equiv0\pmod p m ≡ 0 ( mod p ) であるからm e d ≡ 0 ≡ m ( m o d p ) m^{ed}\equiv0\equiv m\pmod p m e d ≡ 0 ≡ m ( mod p ) である。p ∤ m p\nmid m p ∤ m の場合には、p p p が素数であることとフェルマーの小定理からm p − 1 ≡ 1 ( m o d p ) m^{p-1}\equiv1\pmod p m p − 1 ≡ 1 ( mod p ) である。したがって
m e d = m ( m p − 1 ) k ( q − 1 ) ≡ m ( m o d p ) m^{ed}=m\bigl(m^{p-1}\bigr)^{k(q-1)}\equiv m\pmod p m e d = m ( m p − 1 ) k ( q − 1 ) ≡ m ( mod p ) となる。よって、p ∣ m p\mid m p ∣ m とp ∤ m p\nmid m p ∤ m のいずれの場合にもm e d ≡ m ( m o d p ) m^{ed}\equiv m\pmod p m e d ≡ m ( mod p ) である。
q ∣ m q\mid m q ∣ m の場合にはm ≡ 0 ( m o d q ) m\equiv0\pmod q m ≡ 0 ( mod q ) であるからm e d ≡ 0 ≡ m ( m o d q ) m^{ed}\equiv0\equiv m\pmod q m e d ≡ 0 ≡ m ( mod q ) である。q ∤ m q\nmid m q ∤ m の場合には、q q q が素数であることとフェルマーの小定理からm q − 1 ≡ 1 ( m o d q ) m^{q-1}\equiv1\pmod q m q − 1 ≡ 1 ( mod q ) である。したがって
m e d = m ( m q − 1 ) k ( p − 1 ) ≡ m ( m o d q ) m^{ed}=m\bigl(m^{q-1}\bigr)^{k(p-1)}\equiv m\pmod q m e d = m ( m q − 1 ) k ( p − 1 ) ≡ m ( mod q ) となる。よって、q ∣ m q\mid m q ∣ m とq ∤ m q\nmid m q ∤ m のいずれの場合にもm e d ≡ m ( m o d q ) m^{ed}\equiv m\pmod q m e d ≡ m ( mod q ) である。
p p p とq q q は相異なる素数であるから互いに素である。法p p p と法q q q で得た二つの合同式に中国剰余定理を適用すると
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 = 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 を古典計算で求めることが現実的には難しいという前提を安全性の基礎に置きます。この計算困難性は、復号の正しさを述べる定理からは導かれません。
Miller の1976年の論文は、オイラー関数を計算する問題を含む一群の関数計算と整数の素因数分解との計算量上の関係を扱っています。秘密指数が得られた場合には、その情報から素因数分解を回収する議論があります。しかし、秘密指数を経由せず、公開鍵と暗号文から平文を直接回収する RSA 問題が素因数分解と同じ難しさをもつことは、この関係からは導かれません。
鍵長の要件は用途と求める安全性強度によって異なります。NIST SP 800-56B Rev. 2 は、NIST の整数因数分解型鍵確立方式において、少なくとも112ビットの安全性強度を与える偶数の法長として
2048ビット以上を要求しています。この数値をすべての用途に共通する標準鍵長とみなすことはできません。
十分な能力をもつ量子計算機では、ショアのアルゴリズムによって整数の素因数分解を多項式時間で行うことができるため、RSA は脆弱です。NIST は耐量子暗号標準への移行を案内していますが、将来の時点や移行の完了時期をここでは断定しません。
この記事が扱う対象は padding を付けない textbook RSA です。実際の暗号方式で必要になる padding、署名、通信規約、処理時間や消費電力から秘密情報が漏れる攻撃への対策は扱いません。したがって、復号の正しさの定理だけから実装の安全性を結論することはできません。
4 つまずいたら
e d ≡ 1 ed\equiv1 e d ≡ 1 が成り立つのは法φ ( n ) \varphi(n) φ ( n ) に関してであり、法n n n に関してではありません。
繰り返し二乗法の各段では、必ず法n n n 、法p p p 、または法q q q の剰余をとってください。剰余をとらずに計算すると、中間の整数が急速に大きくなります。