算術と数論
中国剰余定理
互いに素な法を持つ合同式の連立は、その積を法として一意な解を持つ。
直観7を超えて数えずに兵士を数える
ある将軍が兵士を3人ずつの列に並べると2人余り、5人ずつの列では3人余り、7人ずつの列では2人余った。兵士は何人いるか?将軍は一度も7を超えて数えていないにもかかわらず、その3つの小さな余り(2,3,2)だけで、3×5×7=105を法として正確な人数が決まってしまう:答えは23(に105の任意の倍数を足したもの)である。これが中国剰余定理(CRT)である:法が互いに素である限り、各miを法とする余りを知ることは、それらの積m1m2⋯mkを法とする余りを知ることとまったく同じ情報を持つ。これにより、巨大な数を法とする1つの難しい計算を、その因数ごとの複数の簡単で独立した計算へと分割し、後から結果を再構成できる。
法 m=15=3×5 の剰余:各剰余 xmod15 は剰余の組 (xmod3, xmod5) によって一意に定まる。中高主張と明示的な公式
定義: 連立合同式
対ごとに互いに素な法m1,…,mk——すなわちgcd(mi,mj)=1(i=j)——と任意の整数a1,…,akが与えられたとき、連立系x≡ai(modmi)(1≤i≤k)はすべてのiについて同時に法miでaiと合同になる整数xを求める。M=m1m2⋯mk,Mi=M/miとおき、yiを法miにおけるMiの逆元とすると(gcd(Mi,mi)=1なので存在し、Miyi≡1(modmi)を満たす)、解は明示的にx≡∑i=1kaiMiyi(modM)で与えられる。
x≡ai(modmi)(1≤i≤k),gcd(mi,mj)=1 (i=j) 和の各項aiMiyiは≡ai(modmi)(なぜならMiyi≡1(modmi))となり、j=iなるすべてについて≡0(modmj)(なぜならmjはMi=M/miの因数)となるように作られている。したがって和全体を固定したmiで簡約すると、i番目の項以外はすべて消え、要求通りaiだけが残る。
x≡i=1∑kaiMiyi(modM),M=m1⋯mk, Mi=M/mi, Miyi≡1(modmi) 2つの法 対 k個の法| 場合 | 仮定 | 一意となる法 |
|---|
| 2つの法m1,m2 | gcd(m1,m2)=1 | m1m2 |
| k個の法m1,…,mk | i=jでgcd(mi,mj)=1 | M=m1⋯mk |
大学定理
m1,…,mkが対ごとに互いに素(gcd(mi,mj)=1(i=j))ならば、任意の整数a1,…,akに対して連立系x≡ai(modmi)(1≤i≤k)は解xを持ち、任意の2つの解はM=m1⋯mkを法として合同である。
なぜ正しいのか?
法が共通の素因数を持たないため、法m1でa1余るという条件と法m2でa2余るという条件は完全に独立した制約である——点のx座標とy座標を別々に指定するようなものである。ベズーの等式は、ある1つの法で1になり他のすべての法で0になる「基底ベクトル」を与えてくれるため、解を線形結合として直接構成できる。
証明
まず2つの法の場合(k=2)を証明し、帰納法で拡張する。gcd(m1,m2)=1より、ベズーの等式からm1u+m2v=1を満たす整数u,vが得られる。x0=a1m2v+a2m1uとおく。
法m1で確認する:m1u+m2v=1よりm2v=1−m1u≡1(modm1)であり、一方m1u≡0(modm1)なので、x0≡a1⋅1+a2⋅0=a1(modm1)。
対称的に、法m2では:m1u=1−m2v≡1(modm2)かつm2v≡0(modm2)なので、x0≡a1⋅0+a2⋅1=a2(modm2)。これでk=2での存在が証明された。
k=2での一意性:xとx′がともに連立系を解くなら、x−x′≡0(modm1)かつx−x′≡0(modm2)、すなわちm1とm2はともにd=x−x′を割り切る。ベズーの式m1u+m2v=1にdを掛けると:d=dm1u+dm2v。m2∣dなので第1項dm1uはm1m2の倍数であり、m1∣dなので第2項dm2vもm1m2の倍数である。よってm1m2∣d、すなわちx≡x′(modm1m2)である。
一般のk>2については帰納法による:最初の2つの合同式は(k=2の場合により)m1m2を法とする単一の合同式と同値である;m3はm1ともm2とも互いに素なのでその積m1m2とも互いに素であり、再び結合でき、以下kまで同様である。明示的な和x≡∑i=1kaiMiyi(modM)もまったく同じ理由で任意のkに対して直接機能することに注意せよ:Mi=M/miはmiと互いに素なので逆元yiが存在し、j=iなるすべての項はMjの因数としてmiを含む。■
gcd(m1,m2)=1のとき、写像ψ(xmodm1m2)=(xmodm1, xmodm2)は環同型Z/(m1m2)Z≅(Z/m1Z)×(Z/m2Z)であり、ψを可逆元に制限することでφ(m1m2)=φ(m1)φ(m2)が証明される。
なぜ正しいのか?
これがCRTの構造的な意味である:m1m2を法とする算術とは、文字通り2つの独立した合同算術(1つは法m1、もう1つは法m2)が並走していることそのものなのである。これこそオイラーのトーシェントφが互いに素な数についてきれいに因数分解できる理由であり、またコンピュータが各小さな成分ごとに別々に計算することで巨大整数や暗号の計算を高速化できる理由でもある。
証明
第一に、ψはwell-definedである:x≡x′(modm1m2)ならばm1m2∣(x−x′)なので、m1もm2もx−x′を割り切り、x≡x′(modm1)かつx≡x′(modm2)となる。
第二に、法miでの簡約が加法と乗法を保つので(最初の合同式のトピックで証明済み)、ψは各座標で加法と乗法を保ち、したがってψは環準同型である。
第三に、上の定理1はまさに、任意の組(a1,a2)に対してそこへ写るxが存在し(ψは全射)、そのxが法m1m2で一意である(ψは単射)ことを述べている。よってψは全単射であり、したがって環同型である。
最後に、直積環R1×R2において、元(u1,u2)が乗法逆元(v1,v2)を持つのは、R1でu1v1=1かつR2でu2v2=1となるとき、すなわち両方の座標が可逆であるとき、かつそのときに限る。環同型は可逆性を保つので、Z/(m1m2)Zの可逆元(φ(m1m2)個ある)は、(Z/m1Z)×(Z/m2Z)における可逆元の組(φ(m1)φ(m2)個ある)と一対一に対応する。両辺を数えることでφ(m1m2)=φ(m1)φ(m2)が得られる。素数べきに対するφ(pr)=pr−pr−1(互いに素でない数はpのpr−1個の倍数だけ)と組み合わせれば、前のトピックで使ったφ(n)の一般の積公式が直ちに導かれる。■
発展実世界での応用と具体例
古典的なパズルにとどまらず、中国剰余定理は現代の計算の主力である。すべての実用RSA実装(OpenSSL、BoringSSL、ハードウェアセキュリティモジュール)はCRT-RSA(Quisquater–Couvreur、1982年)を用い、法pと法qで別々に計算してからCRTで再結合することでcdmodpqを計算する——法でのべき乗計算にはO((logm)3)かかり、法のビット長を半分にすると1回のべき乗あたりの計算量が23=8分の1になるため(2回行うので全体では8/2=4倍高速)、およそ4倍の高速化になる。同じアイデアが高速な多倍長整数ライブラリや準同型暗号における剰余数系(RNS)、さらには天文や暦の周期計算の基盤となっている。
例: 孫子の元の兵士パズルを解く
x≡2(mod3)、x≡3(mod5)、x≡2(mod7)を満たす整数xをすべて求めよ。
解答
法m1=3,m2=5,m3=7は対ごとに互いに素で、積はM=3×5×7=105なので、明示的なCRTの公式がM1=105/3=35、M2=105/5=21、M3=105/7=15として適用できる。
法miにおけるMiの各逆元yiを求める:(1)35≡2(mod3)であり2×2=4≡1(mod3)なのでy1=2;(2)21≡1(mod5)なのでy2=1;(3)15≡1(mod7)なのでy3=1。
(a1,a2,a3)=(2,3,2)としてx≡∑i=1kaiMiyi(modM)に代入する:x≡2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233(mod105)。
233=2×105+23なので、法105で簡約するとx≡23(mod105)となる。検算:23=3×7+2≡2(mod3)、23=5×4+3≡3(mod5)、23=7×3+2≡2(mod7)。3つすべてが成り立ち、最小の正の解は**23**である。
例: CRTによる高速RSA復号(CRT-RSA)
前のトピックのRSAの例(p=5,q=11,n=55,d=27、暗号文c=8)において、法55で計算する代わりに法5と法11での2つの小さな計算に分割することでm=827mod55を計算せよ。
解答
法p=5では:底を8≡3(mod5)と簡約し、フェルマーの小定理を使って指数d=27をp−1=4を法として簡約する(27=4×6+3なのでdp=3)。するとmp=33=27≡2(mod5)——たった1回の小さな三乗計算である!
法q=11では:底は8であり、フェルマーを使って指数27をq−1=10を法として簡約する(27=10×2+7なのでdq=7)。87mod11を計算する:8≡−3(mod11)なので、82≡9≡−2、84≡4、87=84⋅82⋅8≡4⋅(−2)⋅(−3)=24≡2(mod11)。
ここでm≡2(mod5)とm≡2(mod11)をCRTで再結合する:たまたま両方の余りが2なので、法55での一意な解は直ちにm≡2(mod55)である(一般にはmp,mqが異なる場合、2つの法のCRT公式を1回適用する)。11より大きい数を一度も二乗せず、7より大きい指数を一度も使わなかったことに注目してほしい——2048ビットのRSA素数では、同じ分割によって復号時間が約4分の1に短縮される。
研究研究の最前線におけるCRT:高速算術・フォールト攻撃・格子暗号
x≡1(mod3)かつx≡2(mod5)を満たす最小の非負整数xを求めよ。
m1=4,m2=9,m3=25のとき、これらを法とするCRT連立系の解は次のどの法に関して一意か:
連立系x≡1(mod4)かつx≡0(mod6)について何が言えるか?
なぜCRTはRSA復号cdmodpqをおよそ4倍高速化するのか?