서로 다른 시계 여러 개가 동시에 특정 시각을 가리키는 순간은 언제인가 — 중국인의 나머지 정리는 이 질문에 항상 유일한 답이 존재함을 보장하고, 그 답을 명시적으로 구성한다.
이 글의 주요 개념
- 설정: m₁,...,mᵣ이 서로 쌍으로 서로소(pairwise coprime)이고 m = m₁···mᵣ
- 보장: 임의의 c₁,...,cᵣ에 대해 x ≡ cᵢ (mod mᵢ)를 동시에 만족하는 x가 mod m에서 유일하게 존재
- 구성: Mᵢ = m/mᵢ, Nᵢ = Mᵢ⁻¹ mod mᵢ, x = Σ cᵢ·Mᵢ·Nᵢ mod m
- 응용: RSA-CRT 최적화 (처리 속도 약 4배 향상)
정확한 설정
m1,…,mr이 쌍으로 서로소(pairwise coprime): 임의의 i=j에 대해 gcd(mi,mj)=1.
여기서 주의할 점은 전체 gcd가 1인 것 과 쌍으로 서로소 는 다르다는 것이다. 예를 들어 {6,10,15}는 gcd(6,10,15)=1이지만, gcd(6,10)=2=1이므로 쌍으로 서로소가 아니다.
m=m1⋅m2⋯mr로 정의한다.
정리: 임의의 정수 c1,…,cr에 대해, 다음 연립 합동식을 동시에 만족하는 x가 mod m에서 유일하게 존재한다.
x≡c1(modm1),x≡c2(modm2),…,x≡cr(modmr)
유일성 증명
x와 y가 모두 연립 합동식을 만족한다고 하자. 그러면 각 i에 대해
x≡ci(modmi),y≡ci(modmi)⟹mi∣(x−y)
m1,…,mr이 쌍으로 서로소이고 모두 (x−y)를 나누므로, 이들의 곱도 (x−y)를 나눈다.
m=m1⋯mr∣(x−y)⟹x≡y(modm)
따라서 해는 mod m에서 유일하다.
존재성 증명 — 구성 (Construction)
다음과 같이 변수를 정의한다.
Mi=mim(mi를 제외한 나머지를 모두 곱한 값)
Mi와 mi는 서로소이다 (mi를 제외한 나머지의 곱이므로). 따라서 Mi의 mod mi 역원이 존재한다.
Ni=Mi−1(modmi)(베주 항등식으로 계산)
이제 다음을 해(解)로 정의한다.
x=i=1∑rciMiNi(modm)
검증: j번째 조건 x≡cj(modmj)를 확인한다.
xmodmj=i=1∑rciMiNimodmj
- i=j인 항: Mi=m/mi에 mj가 인수로 포함되어 있으므로 Mi≡0(modmj). 해당 항은 사라진다.
- i=j인 항: MjNj≡1(modmj) (역원의 정의). 따라서 cjMjNj≡cj(modmj).
x≡cj(modmj)✓
쉽게 말하면
CRT는 "여러 개의 작은 시계를 보고 하나의 큰 시계 시각을 알아내는 방법"이다. 서로소인 여러 수로 나눈 나머지들을 동시에 만족하는 수가 딱 하나 존재하고, 그 수를 명시적으로 구성할 수 있다. RSA에서는 이를 이용해 큰 수의 연산을 작은 수들의 연산으로 쪼개서 약 4배 빠르게 처리한다.
단계별 계산 예시
연립 합동식: x≡2(mod3), x≡3(mod5), x≡2(mod7)
m=3×5×7=105

단계 1 — Mi 계산:
M1=3105=35,M2=5105=21,M3=7105=15
단계 2 — Ni 계산 (베주 항등식 또는 직접 탐색):
35≡2(mod3)⟹N1=2−1(mod3)=2(2×2=4≡1)
21≡1(mod5)⟹N2=1−1(mod5)=1
15≡1(mod7)⟹N3=1−1(mod7)=1
단계 3 — 합산:
x=2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233
233mod105=23
검증: 23=7×3+2 ✓, 23=4×5+3 ✓, 23=3×7+2 ✓
연산 보존 성질
x가 (c1,…,cr)에, y가 (d1,…,dr)에 대응할 때, CRT 표현에서의 연산이 원래 연산을 보존한다.
x+y⟷(c1+d1, c2+d2, …, cr+dr)
x⋅y⟷(c1d1, c2d2, …, crdr)
즉, m에 대한 큰 연산을 mi들에 대한 작은 연산들로 분해 할 수 있고, 결과를 다시 합칠 수 있다. 이것이 CRT 최적화의 핵심이다.
응용 — RSA-CRT 최적화
RSA 복호화는 m=cdmodn (n=pq)을 계산하는데, d가 수백 비트이면 비용이 크다.
RSA-CRT 방법: n=pq (p, q 소수, gcd(p,q)=1)일 때 CRT를 적용한다.
mp=cdp(modp),dp=dmod(p−1)(페르마의 소정리 적용)
mq=cdq(modq),dq=dmod(q−1)
mp와 mq를 구한 뒤 CRT로 mmodn을 복원한다.
속도 향상 이유: 지수 연산의 복잡도는 모듈러스 크기의 제곱에 비례한다. n 대신 p와 q (n의 절반 크기)로 나누어 계산하면, 각각 1/4 비용이고 두 번 수행하므로 전체는 약 1/2 비용이다. 실제로는 CRT 조합 과정까지 포함해도 약 4배 가속이 가능하다.
핵심 정리
- CRT는 쌍으로 서로소인 모듈러스들에 대한 연립 합동식이 mod m에서 유일한 해를 가짐을 보장한다.
- 유일성: 두 해의 차가 모든 mᵢ의 배수이므로 m의 배수 → mod m에서 동일. 존재성: 구성적 증명으로 해를 명시적으로 구성한다.
- 연산 보존 성질 덕분에 큰 모듈러스 연산을 작은 연산들로 분해·병렬화할 수 있다. 이것이 RSA-CRT의 수학적 근거다.
- RSA-CRT는 n=pq 구조를 활용해 복호화 속도를 약 4배 향상시키는 실용적 최적화 기법이다.
다음 포스트
Find Prime — 소수 판별과 확률적 소수 탐색 — 소수 밀도 추정, Fermat 테스트의 한계, Witness와 Miller-Rabin 테스트까지 — RSA에서 큰 소수를 어떻게 찾는지 다룬다.