MathLabs

算術と数論

中国剰余定理

互いに素な法を持つ合同式の連立は、その積を法として一意な解を持つ。

直観77を超えて数えずに兵士を数える

ある将軍が兵士を33人ずつの列に並べると22人余り、55人ずつの列では33人余り、77人ずつの列では22人余った。兵士は何人いるか?将軍は一度も77を超えて数えていないにもかかわらず、その3つの小さな余り(2,3,2)(2,3,2)だけで、3×5×7=1053\times5\times7=105を法として正確な人数が決まってしまう:答えは2323(に105105の任意の倍数を足したもの)である。これが中国剰余定理(CRT)である:法が互いに素である限り、各mim_iを法とする余りを知ることは、それらの積m1m2⋯mkm_1 m_2\cdots m_kを法とする余りを知ることとまったく同じ情報を持つ。これにより、巨大な数を法とする1つの難しい計算を、その因数ごとの複数の簡単で独立した計算へと分割し、後から結果を再構成できる。

Mを法とする問題が互いに素な因数を法とする独立した部分問題に分割され、再結合される様子を示すネットワーク図。
法 m=15=3×5m = 15 = 3 \times 5 の剰余:各剰余 x mod 15x \bmod 15 は剰余の組 (x mod 3, x mod 5)(x \bmod 3,\ x \bmod 5) によって一意に定まる。

中高主張と明示的な公式

定義: 連立合同式

対ごとに互いに素な法m1,…,mkm_1,\dots,m_k——すなわちgcd⁡(mi,mj)=1(i≠j)\gcd(m_i,m_j)=1\quad(i\neq j)——と任意の整数a1,…,aka_1,\dots,a_kが与えられたとき、連立系x≡ai(modmi)(1≤i≤k)x \equiv a_i \pmod{m_i}\quad(1\le i\le k)はすべてのiiについて同時に法mim_iでaia_iと合同になる整数xxを求める。M=m1m2⋯mk,Mi=M/miM = m_1 m_2 \cdots m_k,\quad M_i = M/m_iとおき、yiy_iを法mim_iにおけるMiM_iの逆元とすると(gcd⁡(Mi,mi)=1\gcd(M_i,m_i)=1なので存在し、Miyi≡1(modmi)M_i y_i \equiv 1 \pmod{m_i}を満たす)、解は明示的にx≡∑i=1kaiMiyi(modM)x \equiv \sum_{i=1}^{k} a_i M_i y_i \pmod{M}で与えられる。

x≡ai(modmi)(1≤i≤k),gcd⁡(mi,mj)=1 (i≠j)x \equiv a_i \pmod{m_i}\quad(1\le i\le k),\qquad \gcd(m_i,m_j)=1\ (i\neq j)

和の各項aiMiyia_i M_i y_iは≡ai(modmi)\equiv a_i \pmod{m_i}(なぜならMiyi≡1(modmi)M_i y_i\equiv1\pmod{m_i})となり、j≠ij\neq iなるすべてについて≡0(modmj)\equiv 0 \pmod{m_j}(なぜならmjm_jはMi=M/miM_i = M/m_iの因数)となるように作られている。したがって和全体を固定したmim_iで簡約すると、ii番目の項以外はすべて消え、要求通りaia_iだけが残る。

x≡∑i=1kaiMiyi(modM),M=m1⋯mk, Mi=M/mi, Miyi≡1(modmi)x \equiv \sum_{i=1}^{k} a_i M_i y_i \pmod{M},\qquad M = m_1\cdots m_k,\ M_i = M/m_i,\ M_i y_i \equiv 1 \pmod{m_i}
2つの法 対 kk個の法
場合仮定一意となる法
22つの法m1,m2m_1,m_2gcd⁡(m1,m2)=1\gcd(m_1,m_2)=1m1m2m_1 m_2
kk個の法m1,…,mkm_1,\dots,m_ki≠ji\neq jでgcd⁡(mi,mj)=1\gcd(m_i,m_j)=1M=m1⋯mkM=m_1\cdots m_k

大学定理

m1,…,mkm_1,\dots,m_kが対ごとに互いに素(gcd⁡(mi,mj)=1(i≠j)\gcd(m_i,m_j)=1\quad(i\neq j))ならば、任意の整数a1,…,aka_1,\dots,a_kに対して連立系x≡ai(modmi)(1≤i≤k)x \equiv a_i \pmod{m_i}\quad(1\le i\le k)は解xxを持ち、任意の2つの解はM=m1⋯mkM=m_1\cdots m_kを法として合同である。

なぜ正しいのか?

法が共通の素因数を持たないため、法m1m_1でa1a_1余るという条件と法m2m_2でa2a_2余るという条件は完全に独立した制約である——点のxx座標とyy座標を別々に指定するようなものである。ベズーの等式は、ある1つの法で11になり他のすべての法で00になる「基底ベクトル」を与えてくれるため、解を線形結合として直接構成できる。

証明

まず2つの法の場合(k=2k=2)を証明し、帰納法で拡張する。gcd⁡(m1,m2)=1\gcd(m_1,m_2)=1より、ベズーの等式からm1u+m2v=1m_1 u + m_2 v = 1を満たす整数u,vu,vが得られる。x0=a1m2v+a2m1ux_0 = a_1 m_2 v + a_2 m_1 uとおく。

法m1m_1で確認する:m1u+m2v=1m_1 u + m_2 v = 1よりm2v=1−m1u≡1(modm1)m_2 v = 1 - m_1 u \equiv 1 \pmod{m_1}であり、一方m1u≡0(modm1)m_1 u \equiv 0 \pmod{m_1}なので、x0≡a1⋅1+a2⋅0=a1(modm1)x_0 \equiv a_1\cdot 1 + a_2\cdot 0 = a_1 \pmod{m_1}。

対称的に、法m2m_2では:m1u=1−m2v≡1(modm2)m_1 u = 1-m_2 v \equiv 1 \pmod{m_2}かつm2v≡0(modm2)m_2 v \equiv 0 \pmod{m_2}なので、x0≡a1⋅0+a2⋅1=a2(modm2)x_0 \equiv a_1\cdot 0 + a_2\cdot 1 = a_2 \pmod{m_2}。これでk=2k=2での存在が証明された。

k=2k=2での一意性:xxとx′x'がともに連立系を解くなら、x−x′≡0(modm1)x-x'\equiv0\pmod{m_1}かつx−x′≡0(modm2)x-x'\equiv0\pmod{m_2}、すなわちm1m_1とm2m_2はともにd=x−x′d=x-x'を割り切る。ベズーの式m1u+m2v=1m_1 u+m_2 v=1にddを掛けると:d=dm1u+dm2vd = d m_1 u + d m_2 v。m2∣dm_2\mid dなので第1項dm1ud m_1 uはm1m2m_1 m_2の倍数であり、m1∣dm_1\mid dなので第2項dm2vd m_2 vもm1m2m_1 m_2の倍数である。よってm1m2∣dm_1 m_2 \mid d、すなわちx≡x′(modm1m2)x\equiv x'\pmod{m_1 m_2}である。

一般のk>2k>2については帰納法による:最初の2つの合同式は(k=2k=2の場合により)m1m2m_1 m_2を法とする単一の合同式と同値である;m3m_3はm1m_1ともm2m_2とも互いに素なのでその積m1m2m_1 m_2とも互いに素であり、再び結合でき、以下kkまで同様である。明示的な和x≡∑i=1kaiMiyi(modM)x \equiv \sum_{i=1}^{k} a_i M_i y_i \pmod{M}もまったく同じ理由で任意のkkに対して直接機能することに注意せよ:Mi=M/miM_i = M/m_iはmim_iと互いに素なので逆元yiy_iが存在し、j≠ij\neq iなるすべての項はMjM_jの因数としてmim_iを含む。■\blacksquare

gcd⁡(m1,m2)=1\gcd(m_1,m_2)=1のとき、写像ψ(x mod m1m2)=(x mod m1, x mod m2)\psi(x \bmod m_1 m_2) = (x\bmod m_1,\ x\bmod m_2)は環同型Z/(m1m2)Z≅(Z/m1Z)×(Z/m2Z)\mathbb{Z}/(m_1 m_2)\mathbb{Z} \cong (\mathbb{Z}/m_1\mathbb{Z})\times(\mathbb{Z}/m_2\mathbb{Z})であり、ψ\psiを可逆元に制限することでφ(m1m2)=φ(m1) φ(m2)\varphi(m_1 m_2) = \varphi(m_1)\,\varphi(m_2)が証明される。

なぜ正しいのか?

これがCRTの構造的な意味である:m1m2m_1 m_2を法とする算術とは、文字通り2つの独立した合同算術(1つは法m1m_1、もう1つは法m2m_2)が並走していることそのものなのである。これこそオイラーのトーシェントφ\varphiが互いに素な数についてきれいに因数分解できる理由であり、またコンピュータが各小さな成分ごとに別々に計算することで巨大整数や暗号の計算を高速化できる理由でもある。

証明

第一に、ψ\psiはwell-definedである:x≡x′(modm1m2)x\equiv x'\pmod{m_1 m_2}ならばm1m2∣(x−x′)m_1 m_2\mid(x-x')なので、m1m_1もm2m_2もx−x′x-x'を割り切り、x≡x′(modm1)x\equiv x'\pmod{m_1}かつx≡x′(modm2)x\equiv x'\pmod{m_2}となる。

第二に、法mim_iでの簡約が加法と乗法を保つので(最初の合同式のトピックで証明済み)、ψ\psiは各座標で加法と乗法を保ち、したがってψ\psiは環準同型である。

第三に、上の定理1はまさに、任意の組(a1,a2)(a_1,a_2)に対してそこへ写るxxが存在し(ψ\psiは全射)、そのxxが法m1m2m_1 m_2で一意である(ψ\psiは単射)ことを述べている。よってψ\psiは全単射であり、したがって環同型である。

最後に、直積環R1×R2R_1\times R_2において、元(u1,u2)(u_1,u_2)が乗法逆元(v1,v2)(v_1,v_2)を持つのは、R1R_1でu1v1=1u_1 v_1=1かつR2R_2でu2v2=1u_2 v_2=1となるとき、すなわち両方の座標が可逆であるとき、かつそのときに限る。環同型は可逆性を保つので、Z/(m1m2)Z\mathbb{Z}/(m_1 m_2)\mathbb{Z}の可逆元(φ(m1m2)\varphi(m_1 m_2)個ある)は、(Z/m1Z)×(Z/m2Z)(\mathbb{Z}/m_1\mathbb{Z})\times(\mathbb{Z}/m_2\mathbb{Z})における可逆元の組(φ(m1) φ(m2)\varphi(m_1)\,\varphi(m_2)個ある)と一対一に対応する。両辺を数えることでφ(m1m2)=φ(m1) φ(m2)\varphi(m_1 m_2)=\varphi(m_1)\,\varphi(m_2)が得られる。素数べきに対するφ(pr)=pr−pr−1\varphi(p^r)=p^r-p^{r-1}(互いに素でない数はppのpr−1p^{r-1}個の倍数だけ)と組み合わせれば、前のトピックで使ったφ(n)\varphi(n)の一般の積公式が直ちに導かれる。■\blacksquare

発展実世界での応用と具体例

古典的なパズルにとどまらず、中国剰余定理は現代の計算の主力である。すべての実用RSA実装(OpenSSL、BoringSSL、ハードウェアセキュリティモジュール)はCRT-RSA(Quisquater–Couvreur、1982年)を用い、法ppと法qqで別々に計算してからCRTで再結合することでcd mod pqc^d \bmod pqを計算する——法でのべき乗計算にはO((log⁡m)3)O((\log m)^3)かかり、法のビット長を半分にすると1回のべき乗あたりの計算量が23=82^3=8分の1になるため(2回行うので全体では8/2=48/2=4倍高速)、およそ44倍の高速化になる。同じアイデアが高速な多倍長整数ライブラリや準同型暗号における剰余数系(RNS)、さらには天文や暦の周期計算の基盤となっている。

例: 孫子の元の兵士パズルを解く

x≡2(mod3)x\equiv2\pmod3、x≡3(mod5)x\equiv3\pmod5、x≡2(mod7)x\equiv2\pmod7を満たす整数xxをすべて求めよ。

解答

法m1=3,m2=5,m3=7m_1=3,m_2=5,m_3=7は対ごとに互いに素で、積はM=3×5×7=105M = 3\times5\times7 = 105なので、明示的なCRTの公式がM1=105/3=35M_1 = 105/3 = 35、M2=105/5=21M_2 = 105/5 = 21、M3=105/7=15M_3 = 105/7 = 15として適用できる。

法mim_iにおけるMiM_iの各逆元yiy_iを求める:(1)35≡2(mod3)35 \equiv 2 \pmod 3であり2×2=4≡1(mod3)2\times2=4\equiv1\pmod3なのでy1=2y_1=2;(2)21≡1(mod5)21 \equiv 1 \pmod 5なのでy2=1y_2=1;(3)15≡1(mod7)15 \equiv 1 \pmod 7なのでy3=1y_3=1。

(a1,a2,a3)=(2,3,2)(a_1,a_2,a_3)=(2,3,2)としてx≡∑i=1kaiMiyi(modM)x \equiv \sum_{i=1}^{k} a_i M_i y_i \pmod{M}に代入する:x≡2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233(mod105)x \equiv 2\cdot35\cdot2 + 3\cdot21\cdot1 + 2\cdot15\cdot1 = 140 + 63 + 30 = 233 \pmod{105}。

233=2×105+23233 = 2\times105 + 23なので、法105105で簡約するとx≡23(mod105)x \equiv 23 \pmod{105}となる。検算:23=3×7+2≡2(mod3)23 = 3\times7+2\equiv2\pmod3、23=5×4+3≡3(mod5)23=5\times4+3\equiv3\pmod5、23=7×3+2≡2(mod7)23=7\times3+2\equiv2\pmod7。3つすべてが成り立ち、最小の正の解は**2323**である。

例: CRTによる高速RSA復号(CRT-RSA)

前のトピックのRSAの例(p=5,q=11,n=55,d=27p=5,q=11,n=55,d=27、暗号文c=8c=8)において、法5555で計算する代わりに法55と法1111での2つの小さな計算に分割することでm=827 mod 55m = 8^{27} \bmod 55を計算せよ。

解答

法p=5p=5では:底を8≡3(mod5)8\equiv3\pmod5と簡約し、フェルマーの小定理を使って指数d=27d=27をp−1=4p-1=4を法として簡約する(27=4×6+327 = 4\times6+3なのでdp=3d_p = 3)。するとmp=33=27≡2(mod5)m_p = 3^3 = 27 \equiv 2 \pmod 5——たった1回の小さな三乗計算である!

法q=11q=11では:底は88であり、フェルマーを使って指数2727をq−1=10q-1=10を法として簡約する(27=10×2+727 = 10\times2+7なのでdq=7d_q = 7)。87 mod 118^7 \bmod 11を計算する:8≡−3(mod11)8\equiv-3\pmod{11}なので、82≡9≡−28^2\equiv9\equiv-2、84≡48^4\equiv4、87=84⋅82⋅8≡4⋅(−2)⋅(−3)=24≡2(mod11)8^7 = 8^4\cdot8^2\cdot8\equiv 4\cdot(-2)\cdot(-3)=24\equiv2\pmod{11}。

ここでm≡2(mod5)m\equiv2\pmod5とm≡2(mod11)m\equiv2\pmod{11}をCRTで再結合する:たまたま両方の余りが22なので、法5555での一意な解は直ちにm≡2(mod55)m\equiv2\pmod{55}である(一般にはmp,mqm_p,m_qが異なる場合、2つの法のCRT公式を1回適用する)。1111より大きい数を一度も二乗せず、77より大きい指数を一度も使わなかったことに注目してほしい——20482048ビットのRSA素数では、同じ分割によって復号時間が約4分の1に短縮される。

研究研究の最前線におけるCRT:高速算術・フォールト攻撃・格子暗号

x≡1(mod3)x\equiv1\pmod3かつx≡2(mod5)x\equiv2\pmod5を満たす最小の非負整数xxを求めよ。

m1=4,m2=9,m3=25m_1=4,m_2=9,m_3=25のとき、これらを法とするCRT連立系の解は次のどの法に関して一意か:

連立系x≡1(mod4)x\equiv1\pmod4かつx≡0(mod6)x\equiv0\pmod6について何が言えるか?

なぜCRTはRSA復号cd mod pqc^d\bmod pqをおよそ44倍高速化するのか?

参考文献

  1. Jean-Jacques Quisquater, Christophe Couvreur (1982). Fast decipherment algorithm for RSA public-key cryptosystem · DOI:10.1049/el:19820617
  2. David Harvey, Joris van der Hoeven (2021). Integer multiplication in time O(n log n) · DOI:10.4007/annals.2021.193.2.4