Modular Arithmetic — 모듈러 산술과 잉여계

모듈러 산술은 정수를 mm으로 나눈 나머지가 같은 것끼리 묶어 하나의 원소로 다루는 구조다. 이렇게 묶은 합동류 위에 덧셈과 곱셈을 정의하면 유한한 집합에서 대수 연산이 돌아가고, mm이 소수일 때는 00이 아닌 원소마다 곱셈 역원이 생긴다. RSA, ElGamal, Diffie-Hellman이 모두 이 구조 위에서 계산한다.

이 포스트에서 다루는 내용
  • 모듈러 산술: ab(modm)    m(ba)a \equiv b \pmod{m} \iff m \mid (b - a) — 동치 관계(반사·대칭·추이) 성립
  • 완전 잉여계 Zm\mathbb{Z}_m: {0,1,,m1}\{0, 1, \ldots, m-1\} — 덧셈·뺄셈에 대해 닫혀있음
  • 축약 잉여계 Zm\mathbb{Z}_m^*: {agcd(a,m)=1}\{a \mid \gcd(a, m) = 1\} — 곱셈에 대해 닫혀있고 역원 존재
  • 오일러 정리: aφ(m)1(modm)a^{\varphi(m)} \equiv 1 \pmod{m} (aZma \in \mathbb{Z}_m^*, φ(m)=Zm\varphi(m) = |\mathbb{Z}_m^*|)
  • 중국인의 나머지 정리: 서로소인 m1,,mrm_1, \ldots, m_r에 대해 연립 합동식의 해 존재·유일

GCD와 LCM의 관계

본론에 앞서, GCD와 LCM(최소공배수)의 관계를 정리한다.

여기서 aabb양의 정수라고 둔다. 음수를 섞으면 아래 등식이 gcd(a,b)lcm(a,b)=ab\gcd(a,b) \cdot \text{lcm}(a,b) = |ab| 꼴로 바뀌기 때문이다.

aabb의 최대공약수가 d=gcd(a,b)d = \gcd(a, b)이고 a=ada = a'd, b=bdb = b'd로 쓰면,

lcm(a,b)=abd\text{lcm}(a, b) = a'b'd

따라서 다음이 성립한다.

gcd(a,b)lcm(a,b)=dabd=abd2=ab\gcd(a, b) \cdot \text{lcm}(a, b) = d \cdot a'b'd = a'b'd^2 = a \cdot b

특히 aa, bb가 서로소이면 d=1d = 1이므로 lcm(a,b)=ab\text{lcm}(a, b) = ab이다.

모듈러 산술과 동치 관계

모듈러 산술(Modular Arithmetic) 은 다음과 같이 정의한다.

ab(modm)    m(ba)a \equiv b \pmod{m} \iff m \mid (b - a)

직관적으로 aabbmm으로 나눴을 때 나머지가 같다는 의미이다.

이 관계는 동치 관계(Equivalence Relation) 이다 — 다음 세 성질을 만족한다.

mod 7 시계 다이어그램 — 동치류 시각화
mod 7 시계 다이어그램 — 동치류 시각화

반사성(Reflexive): aa(modm)a \equiv a \pmod{m}

m0m \mid 0이므로 성립.

대칭성(Symmetric): ab(modm)    ba(modm)a \equiv b \pmod{m} \implies b \equiv a \pmod{m}

m(ba)m \mid (b-a)이면 m(ab)m \mid (a-b)이므로 성립.

추이성(Transitive): ab(modm)a \equiv b \pmod{m}이고 bc(modm)b \equiv c \pmod{m}이면 ac(modm)a \equiv c \pmod{m}

m(ba)m \mid (b-a), m(cb)m \mid (c-b)이면 m(ca)m \mid (c-a)이므로 성립.

따라서 ab(modm)a \equiv b \pmod{m}은 “aabb가 모듈러 연산에서 같은 부류에 속한다”는 의미이다.

모듈러 연산의 보존 성질

ab(modm)a \equiv b \pmod{m}이고 cd(modm)c \equiv d \pmod{m}이면 다음이 성립한다.

a+cb+d(modm)a + c \equiv b + d \pmod{m} acbd(modm)a - c \equiv b - d \pmod{m} acbd(modm)ac \equiv bd \pmod{m}

증명: ba=mkb - a = mk, dc=mkd - c = mk'로 쓰면,

  1. (b+d)(a+c)=(ba)+(dc)=m(k+k)(b+d) - (a+c) = (b-a) + (d-c) = m(k+k') — 덧셈 성립
  2. (bd)(ac)=(ba)(dc)=m(kk)(b-d) - (a-c) = (b-a) - (d-c) = m(k-k') — 뺄셈 성립
  3. bd=(a+mk)(c+mk)=ac+m(ak+ck+mkk)bd = (a+mk)(c+mk') = ac + m(ak'+ck+mkk') — 곱셈 성립

마찬가지로 상수 연산과 지수 연산에 대해서도 닫혀있다.

ab(modm)    a+kb+k(modm)a \equiv b \pmod{m} \implies a + k \equiv b + k \pmod{m} ab(modm)    akbk(modm)a \equiv b \pmod{m} \implies ak \equiv bk \pmod{m} ab(modm)    anbn(modm)a \equiv b \pmod{m} \implies a^n \equiv b^n \pmod{m}

단, 나눗셈은 일반적으로 성립하지 않는다. 예를 들어 mod 6\text{mod}\ 6에서 2302 \cdot 3 \equiv 0이므로, 곱셈의 결과만으로는 원래 인수를 복원할 수 없다.

모듈러 연산 보존 성질 — 덧셈·곱셈·지수 예시
모듈러 연산 보존 성질 — 덧셈·곱셈·지수 예시

완전 잉여계 (Complete Residue System)

완전 잉여계 Zm\mathbb{Z}_mmm으로 나눈 나머지 전체의 집합이다.

Zm={0,1,2,,m1}\mathbb{Z}_m = \{0, 1, 2, \ldots, m-1\}

이 집합의 원소는 두 가지 방식으로 해석할 수 있다.

  1. 정수 자체: 원소 22는 정수 22를 의미한다.
  2. 동치류(Equivalence Class): 원소 22mm으로 나눴을 때 나머지가 22인 모든 정수의 집합 {,2m,2,2+m,2+2m,}\{\ldots, 2-m, 2, 2+m, 2+2m, \ldots\}를 의미한다.

Zm\mathbb{Z}_m에서 덧셈과 뺄셈을 이야기하려면 두 가지를 따로 확인해야 한다. 이름이 비슷해 자주 섞이지만 다른 성질이다.

  • 잘 정의됨(well-defined): 합동류에서 어떤 대표원을 꺼내 계산해도 결과가 같은 합동류에 떨어진다. aaa \equiv a', bbb \equiv b'이면 a+ba+ba + b \equiv a' + b'이므로 성립한다. 이것이 없으면 「합동류끼리 더한다」는 말 자체가 뜻을 갖지 못한다.
  • 닫힘(closure): 연산 결과가 다시 Zm\mathbb{Z}_m의 원소다. 나머지는 언제나 00부터 m1m-1 사이이므로 성립한다.

두 성질이 갖춰지면 덧셈에 항등원 00과 역원이 있다. 원소 aa의 덧셈 역원은 ama(modm)-a \equiv m - a \pmod{m}이다.

정리: kakb(modm)ka \equiv kb \pmod{m}이고 gcd(k,m)=1\gcd(k, m) = 1이면 ab(modm)a \equiv b \pmod{m}이다.

증명: mk(ab)m \mid k(a-b)이고 gcd(k,m)=1\gcd(k,m)=1이므로, GCD 성질에 의해 m(ab)m \mid (a-b).

축약 잉여계 (Reduced Residue System)

축약 잉여계 Zm\mathbb{Z}_m^*mm과 서로소인 원소들의 집합이다.

Zm={aZmgcd(a,m)=1}\mathbb{Z}_m^* = \{a \in \mathbb{Z}_m \mid \gcd(a, m) = 1\}
잉여계 시각화
잉여계 시각화

이 집합에서 곱셈과 나눗셈은 잘 정의된다.

닫힘(Closure): a,bZma, b \in \mathbb{Z}_m^*이면 gcd(a,m)=1\gcd(a, m) = 1, gcd(b,m)=1\gcd(b, m) = 1이므로 GCD 서로소 성질에 의해 gcd(ab,m)=1\gcd(ab, m) = 1. 따라서 abZmab \in \mathbb{Z}_m^*.

역원 존재: gcd(a,m)=1\gcd(a, m) = 1이므로 베주 항등식에 의해 ax+my=1ax + my = 1인 정수 xx, yy가 존재한다. 이를 mod m\bmod\ m으로 취하면 ax1(modm)ax \equiv 1 \pmod{m}이므로 xxaa의 곱셈 역원이다.

쉽게 말하면

모듈러 역원이란 "나눗셈의 대체품"이다. 모듈러 세계에서는 직접 나눌 수 없지만, aa의 역원 xx를 곱하면 나눈 것과 같은 효과를 얻는다. 이 역원은 aamm이 서로소일 때만 존재하며, 베주 항등식(확장 유클리드 알고리즘)으로 구할 수 있다. RSA에서 비밀키 dd를 구하는 과정이 바로 이것이다.

반면 덧셈은 닫혀있지 않다. 예를 들어 m=3m = 3에서 gcd(4,3)=gcd(8,3)=1\gcd(4, 3) = \gcd(8, 3) = 1이지만, gcd(4+8,3)=gcd(12,3)=31\gcd(4+8, 3) = \gcd(12, 3) = 3 \neq 1.

mm이 소수(prime)일 때: 11부터 m1m-1까지 모든 수가 mm과 서로소이므로

Zm=Zm{0},Zm=Zm{0}\mathbb{Z}_m^* = \mathbb{Z}_m \setminus \{0\}, \quad \mathbb{Z}_m = \mathbb{Z}_m^* \cup \{0\}

이 경우 Zm\mathbb{Z}_m체(Field) 가 된다. 덧셈·뺄셈·곱셈이 모든 원소에서 정의되고, 나눗셈은 00이 아닌 원소로만 정의된다. 체에서도 00으로 나누는 연산은 없다. 「사칙연산이 모두 된다」는 말은 이 단서 아래에서 읽어야 한다.

오일러 정리

aZm    aϕ(m)1(modm)a \in \mathbb{Z}_m^* \implies a^{\phi(m)} \equiv 1 \pmod{m}

여기서 ϕ(m)=Zm\phi(m) = |\mathbb{Z}_m^*|오일러 피함수(Euler’s totient function) 이다.

예: m=10m = 10이면 Z10={1,3,7,9}\mathbb{Z}_{10}^* = \{1, 3, 7, 9\}이므로 ϕ(10)=4\phi(10) = 4.

34=811(mod10),74=24011(mod10)3^4 = 81 \equiv 1 \pmod{10}, \quad 7^4 = 2401 \equiv 1 \pmod{10}
오일러 정리 — b·Zm* = Zm* 전단사 대응 시각화
오일러 정리 — b·Zm* = Zm* 전단사 대응 시각화

증명: Zm={a1,,aϕ(m)}\mathbb{Z}_m^* = \{a_1, \ldots, a_{\phi(m)}\}에서 임의의 bZmb \in \mathbb{Z}_m^*에 대해

bZm={ba1,,baϕ(m)}b\mathbb{Z}_m^* = \{ba_1, \ldots, ba_{\phi(m)}\}

Zm\mathbb{Z}_m^*는 곱셈에 대해 닫혀있으므로 baiZmba_i \in \mathbb{Z}_m^*. 또한 aiaja_i \neq a_j이면 baibajba_i \neq ba_j이므로 (bb가 역원을 가지므로 양변에 b1b^{-1} 곱 가능), 두 집합은 동일하다.

i=1ϕ(m)aii=1ϕ(m)bai=bϕ(m)i=1ϕ(m)ai(modm)\prod_{i=1}^{\phi(m)} a_i \equiv \prod_{i=1}^{\phi(m)} ba_i = b^{\phi(m)} \cdot \prod_{i=1}^{\phi(m)} a_i \pmod{m}

aiZm\prod a_i \in \mathbb{Z}_m^*이고 Zm\mathbb{Z}_m^*의 원소는 모두 곱셈 역원을 가지므로, 양변에 (ai)1\left(\prod a_i\right)^{-1}을 곱하면 좌우의 ai\prod a_i가 소거되어

bϕ(m)1(modm)b^{\phi(m)} \equiv 1 \pmod{m}

페르마의 소정리

오일러 정리에서 m=pm = p (소수)로 놓으면 ϕ(p)=p1\phi(p) = p - 1이므로,

aZp    ap11(modp)a \in \mathbb{Z}_p^* \implies a^{p-1} \equiv 1 \pmod{p}

이것이 페르마의 소정리(Fermat’s Little Theorem) 이다. RSA에서 복호화 정확성을 보장하는 핵심 정리이다.

참고

페르마의 소정리의 두 가지 증명, 모듈러 역원 공식(ap2a^{p-2}), 페르마 소수 판별법, Carmichael 수의 한계까지 자세히 다룬다. → Fermat's Little Theorem — 페르마의 소정리

중국인의 나머지 정리 (CRT)

설정: m1,,mrm_1, \ldots, m_r이 서로 쌍으로 서로소(pairwise coprime)이고 m=m1mrm = m_1 \cdots m_r일 때,

임의의 c1,,crc_1, \ldots, c_r에 대해 다음을 동시에 만족하는 xxmod m\bmod\ m에서 유일하게 존재한다.

xc1(modm1),xc2(modm2),,xcr(modmr)x \equiv c_1 \pmod{m_1}, \quad x \equiv c_2 \pmod{m_2}, \quad \ldots, \quad x \equiv c_r \pmod{m_r}
CRT 구성 다이어그램 — 단계별 해 구성
CRT 구성 다이어그램 — 단계별 해 구성

구성(Construction)으로 증명: 다음과 같이 정의한다.

Mi=mmi,Ni=Mi1(modmi)M_i = \frac{m}{m_i}, \quad N_i = M_i^{-1} \pmod{m_i}

MiM_imim_i는 서로소이므로(정의에 의해) NiN_i가 존재한다. 그러면

x=i=1rciMiNi(modm)x = \sum_{i=1}^{r} c_i M_i N_i \pmod{m}

검증: xmodmjx \bmod m_j를 계산하면, iji \neq j인 항에는 Mi=m/miM_i = m/m_imjm_j가 인수로 포함되어 Mi0(modmj)M_i \equiv 0 \pmod{m_j}. 따라서

xcjMjNjcj1=cj(modmj)x \equiv c_j M_j N_j \equiv c_j \cdot 1 = c_j \pmod{m_j}

연산 보존: xx(c1,,cr)(c_1, \ldots, c_r)에, yy(d1,,dr)(d_1, \ldots, d_r)에 대응할 때,

x+y(c1+d1,,cr+dr)x + y \leftrightarrow (c_1 + d_1, \ldots, c_r + d_r) xy(c1d1,,crdr)x \cdot y \leftrightarrow (c_1 d_1, \ldots, c_r d_r)

mm에 대한 연산을 각 mim_i에 대한 작은 연산들로 분해할 수 있다. 이것이 CRT를 대규모 모듈러 연산 최적화에 활용하는 이유이다.

참고

유일성 증명, 단계별 수치 계산 예시(x2(mod3)x \equiv 2 \pmod{3}, x3(mod5)x \equiv 3 \pmod{5}, x2(mod7)x \equiv 2 \pmod{7}x=23x = 23), RSA-CRT 4배 속도 향상까지 자세히 다룬다. → Chinese Remainder Theorem — 중국인의 나머지 정리

핵심 정리
  • 모듈러 산술은 동치 관계를 형성한다. 덧셈·뺄셈·곱셈·지수 연산에 대해 닫혀있지만, 나눗셈은 일반적으로 성립하지 않는다.
  • Zm\mathbb{Z}_m^*gcd(a,m)=1\gcd(a, m) = 1인 원소들로 이루어지며, 곱셈 역원이 모든 원소에 존재한다. mm이 소수이면 Zm\mathbb{Z}_m은 완전한 체(Field)가 된다.
  • 오일러 정리(aφ(m)1a^{\varphi(m)} \equiv 1)와 페르마의 소정리(ap11a^{p-1} \equiv 1, pp 소수)는 RSA 복호화의 수학적 근거이다.
  • CRT는 큰 모듈러 연산을 작은 연산들로 분해해 병렬 처리를 가능하게 한다. RSA-CRT 최적화의 핵심이다.
다음 포스트

RSA — 공개키 암호의 수학적 구조 — 지금까지 쌓아온 모든 정수론 도구(GCD, 모듈러 산술, 오일러 정리, 페르마 정리, CRT)가 수렴하는 지점. RSA 키 생성, 복호화 정확성 증명, 소인수분해 보안 근거, Square-and-Multiply 고속 지수연산까지 다룬다.

© 2026 XsQuare01. Powered by GitHub Pages. · 방문자