본문으로 건너뛰기

2장. 정수론 개론

암호학은 정수론 위에 세워져 있다. 이 장은 이후 장(유한체, 공개키 암호)을 이해하기 위한 기반을 다룬다.

학습 목표

  • 가분성과 나눗셈 알고리즘을 이해한다.
  • 유클리드 알고리즘으로 최대공약수를 구한다.
  • 모듈러 산술과 확장 유클리드 알고리즘을 다룬다.
  • 소수, 페르마 정리, 오일러 정리, 오일러 토티언트 함수를 설명한다.
  • 밀러–라빈 소수 판정, 중국인의 나머지 정리, 이산 로그를 이해한다.

2.1 가분성과 나눗셈 알고리즘

가분성 (Divisibility)

정수 a,b,ma, b, m에 대해 a=mba = mb (b0b \neq 0) 이면 "bbaa나눈다"라 하고 bab \mid a로 표기.

가분성의 주요 성질

  • a1    a=±1a \mid 1 \;\Rightarrow\; a = \pm 1
  • aba \mid b 이고 bab \mid a 이면 a=±ba = \pm b
  • b0b \neq 0 이면 b0b \mid 0
  • aba \mid b 이고 bcb \mid c 이면 aca \mid c (이행성)
  • bgb \mid g 이고 bhb \mid h 이면 임의의 정수 m,nm, n에 대해 b(mg+nh)b \mid (mg + nh)

나눗셈 알고리즘 (Division Algorithm)

임의의 정수 aa와 양의 정수 nn에 대해, 다음을 만족하는 유일한 정수 qq(몫)와 rr(나머지)가 존재한다.

a=qn+r,0r<n,q=a/na = qn + r, \quad 0 \le r < n, \quad q = \lfloor a/n \rfloor

rr잉여(residue) 라고도 부른다.

예시

  • a=11, n=7a = 11,\ n = 7: 11=17+4, q=1, r=411 = 1 \cdot 7 + 4,\ q = 1,\ r = 4
  • a=11, n=7a = -11,\ n = 7: 11=(2)7+3, q=2, r=3-11 = (-2) \cdot 7 + 3,\ q = -2,\ r = 3

2.2 유클리드 알고리즘

최대공약수 (GCD)

두 정수 a,ba, b를 모두 나누는 가장 큰 양의 정수를 gcd(a,b)\gcd(a, b)로 표기.

  • gcd(a,b)=gcd(a,b)\gcd(a, b) = \gcd(|a|, |b|)
  • gcd(a,0)=a\gcd(a, 0) = |a|
  • gcd(a,b)=1\gcd(a, b) = 1 이면 서로소(relatively prime)

유클리드 알고리즘의 핵심 정리

gcd(a,b)=gcd(b, amodb)\gcd(a, b) = \gcd(b,\ a \bmod b)

이 관계를 반복 적용하여 gcd\gcd를 구한다.

재귀 정의

Euclid(a, b):
if b == 0: return a
else: return Euclid(b, a mod b)

예시: gcd(1160718174, 316258250)=1078\gcd(1160718174,\ 316258250) = 1078

단계피제수제수나머지
11,160,718,174316,258,2503211,943,424
2316,258,250211,943,4241104,314,826
3211,943,424104,314,82623,313,772
102,1561,07820

2.3 모듈러 산술

Modulus와 합동 (Congruence)

정수 aa, 양의 정수 nn에 대해 amodna \bmod naann으로 나눈 나머지.

ab(modn)    n(ab)a \equiv b \pmod{n} \iff n \mid (a - b)

합동 관계의 성질

  1. ab(modn)a \equiv b \pmod{n} iff n(ab)n \mid (a - b)
  2. ab(modn)a \equiv b \pmod{n} 이면 ba(modn)b \equiv a \pmod{n}
  3. ab, bc(modn)a \equiv b,\ b \equiv c \pmod{n} 이면 ac(modn)a \equiv c \pmod{n}

모듈러 산술 연산의 성질

[(amodn)+(bmodn)]modn=(a+b)modn[(a \bmod n) + (b \bmod n)] \bmod n = (a + b) \bmod n [(amodn)(bmodn)]modn=(ab)modn[(a \bmod n) - (b \bmod n)] \bmod n = (a - b) \bmod n [(amodn)×(bmodn)]modn=(a×b)modn[(a \bmod n) \times (b \bmod n)] \bmod n = (a \times b) \bmod n

빠른 모듈러 거듭제곱 예시: 117mod1311^7 \bmod 13

112=1214(mod13)114=(112)2163(mod13)117=1111211411431322(mod13)\begin{aligned} 11^2 &= 121 \equiv 4 \pmod{13} \\ 11^4 &= (11^2)^2 \equiv 16 \equiv 3 \pmod{13} \\ 11^7 &= 11 \cdot 11^2 \cdot 11^4 \equiv 11 \cdot 4 \cdot 3 \equiv 132 \equiv 2 \pmod{13} \end{aligned}

잉여류 집합 Zn\mathbb{Z}_n

Zn={0,1,2,,n1}\mathbb{Z}_n = \{0, 1, 2, \ldots, n-1\}

Zn\mathbb{Z}_n단위원을 갖는 가환환(commutative ring) 이다.

곱셈 소거 법칙 (주의)

보통의 산술과 달리, 모듈러 산술에서 곱셈 소거는 조건부로만 성립한다.

abac(modn)    bc(modn),단, gcd(a,n)=1a \cdot b \equiv a \cdot c \pmod{n} \;\Rightarrow\; b \equiv c \pmod{n}, \quad \text{단, } \gcd(a, n) = 1

aann과 서로소일 때만 aa곱셈 역원이 존재한다.

확장 유클리드 알고리즘 (Extended Euclidean)

gcd\gcd 뿐 아니라 베주 계수(Bézout coefficients) x,yx, y도 함께 구한다.

ax+by=gcd(a,b)ax + by = \gcd(a, b)

반복 과정에서 다음 점화식을 유지한다.

xi=xi2qixi1,yi=yi2qiyi1x_i = x_{i-2} - q_i x_{i-1}, \qquad y_i = y_{i-2} - q_i y_{i-1}

활용: aa의 모듈러 역원 a1modna^{-1} \bmod nax+ny=1ax + ny = 1을 풀어 xx로 구한다. 이는 RSA 키 생성, 유한체 연산에서 핵심적으로 사용된다.

예시: 1759x+550y=gcd(1759,550)1759x + 550y = \gcd(1759, 550)

iirir_iqiq_ixix_iyiy_i
-1175910
055001
110931-3
255-516
3421106-339
411-111355

결과: gcd=1, x=111, y=355\gcd = 1,\ x = -111,\ y = 355


2.4 소수

p>1p > 1인 정수가 ±1,±p\pm 1, \pm p 외의 약수를 갖지 않으면 소수(prime) 이다.

산술의 기본 정리

임의의 정수 a>1a > 1은 소수의 곱으로 유일하게 분해된다.

a=p1a1p2a2ptat,p1<p2<<pta = p_1^{a_1} p_2^{a_2} \cdots p_t^{a_t}, \qquad p_1 < p_2 < \cdots < p_t

또는 모든 소수 pPp \in P에 대해

a=pPpap,ap0a = \prod_{p \in P} p^{a_p}, \qquad a_p \ge 0

소인수분해로 보는 gcd

a=pap, b=pbpa = \prod p^{a_p},\ b = \prod p^{b_p} 일 때

gcd(a,b)=pPpmin(ap,bp)\gcd(a, b) = \prod_{p \in P} p^{\min(a_p,\, b_p)}

단, 소인수분해 자체가 어렵기 때문에 이 공식은 실용적 계산법이 아니다. 실제로는 유클리드 알고리즘을 사용한다.


2.5 페르마 정리와 오일러 정리

페르마의 작은 정리 (Fermat's Little Theorem)

pp가 소수이고 gcd(a,p)=1\gcd(a, p) = 1 이면

ap11(modp)a^{p-1} \equiv 1 \pmod{p}

대안형 (aapp로 나누어져도 성립):

apa(modp)a^p \equiv a \pmod{p}

예시: p=19, a=77181(mod19)p = 19,\ a = 7 \Rightarrow 7^{18} \equiv 1 \pmod{19}

오일러 토티언트 함수 ϕ(n)\phi(n)

11부터 n1n-1까지의 정수 중 nn과 서로소인 것의 개수. 관례상 ϕ(1)=1\phi(1) = 1.

핵심 공식

조건공식
pp가 소수ϕ(p)=p1\phi(p) = p - 1
pp가 소수, k1k \ge 1ϕ(pk)=pkpk1\phi(p^k) = p^k - p^{k-1}
gcd(m,n)=1\gcd(m, n) = 1ϕ(mn)=ϕ(m)ϕ(n)\phi(mn) = \phi(m)\,\phi(n)
p,qp, q가 서로 다른 소수, n=pqn = pqϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1)

마지막 공식은 RSA의 키 생성 에서 직접 사용된다.

오일러 정리

gcd(a,n)=1\gcd(a, n) = 1 이면

aϕ(n)1(modn)a^{\phi(n)} \equiv 1 \pmod{n}

대안형:

aϕ(n)+1a(modn)a^{\phi(n)+1} \equiv a \pmod{n}

페르마 정리는 오일러 정리의 특수한 경우 (n=pn = p 소수)이다.


2.6 소수 판정 (Primality Testing)

밀러–라빈 알고리즘 (Miller–Rabin)

암호학에서 가장 널리 쓰이는 확률적 소수 판정 알고리즘.

핵심 성질

성질 1: pp가 소수이고 0<a<p0 < a < p 이면

a21(modp)    a±1(modp)a^2 \equiv 1 \pmod{p} \iff a \equiv \pm 1 \pmod{p}

성질 2: p>2p > 2가 소수일 때 p1=2kqp - 1 = 2^k q (qq는 홀수)로 표현하면, 1<a<p11 < a < p-1인 임의의 aa에 대해 다음 중 하나가 반드시 성립.

  1. aq1(modp)a^q \equiv 1 \pmod{p}
  2. 어떤 j (0jk1)j\ (0 \le j \le k-1)에 대해 a2jq1(modp)a^{2^j q} \equiv -1 \pmod{p}

알고리즘

TEST(n):
find k > 0, q odd such that (n - 1) = 2^k · q
pick random a with 1 < a < n - 1
if a^q mod n == 1: return "inconclusive"
for j = 0 to k - 1:
if a^(2^j · q) mod n == n - 1: return "inconclusive"
return "composite"
  • composite 반환 → nn확실히 합성수
  • inconclusive 반환 → nn아마도 소수 (결정적이지 않음)

반복 사용과 정확도

nn이 합성수이지만 한 번의 TEST에서 inconclusive를 반환할 확률은 <1/4< 1/4. tt번 반복 시 모두 통과할 확률은

<(1/4)t< (1/4)^t

예: t=10t = 10이면 10610^{-6} 미만.

AKS 알고리즘 (결정적)

2002년 Agrawal–Kayal–Saxena가 발표한 결정적 다항시간 소수 판정 알고리즘. 이론적으로 획기적이지만, 실제 성능은 여전히 밀러–라빈보다 느려 실무에서는 밀러–라빈이 주로 사용된다.

소수의 분포 (소수 정리)

nn 근처에서 소수는 평균적으로 ln(n)\ln(n)마다 하나씩 존재. 짝수를 제외하면 평균 0.5ln(n)0.5 \ln(n)번 시도 후 소수 발견.

22002^{200} 크기의 소수를 찾으려면 평균 0.5ln(2200)690.5 \ln(2^{200}) \approx 69번 시도.


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

서로 쌍으로 서로소인 m1,m2,,mkm_1, m_2, \ldots, m_k에 대해 M=i=1kmiM = \prod_{i=1}^{k} m_i라 하자.

ZM\mathbb{Z}_M의 임의의 원소 AA는 다음 kk-튜플과 일대일 대응한다.

A(a1,a2,,ak),ai=AmodmiA \leftrightarrow (a_1, a_2, \ldots, a_k), \qquad a_i = A \bmod m_i

복원 공식

Mi=M/miM_i = M/m_i, ci=Mi(Mi1modmi)c_i = M_i \cdot (M_i^{-1} \bmod m_i) 로 정의할 때

Ai=1kaici(modM)A \equiv \sum_{i=1}^{k} a_i c_i \pmod{M}

합동 연산은 튜플별 연산으로 환원

(A±B)modM((a1±b1)modm1, , (ak±bk)modmk)(A \pm B) \bmod M \leftrightarrow \big((a_1 \pm b_1) \bmod m_1,\ \ldots,\ (a_k \pm b_k) \bmod m_k\big) (AB)modM((a1b1)modm1, , (akbk)modmk)(A \cdot B) \bmod M \leftrightarrow \big((a_1 \cdot b_1) \bmod m_1,\ \ldots,\ (a_k \cdot b_k) \bmod m_k\big)
응용

큰 수 MM에 대한 연산을 작은 mim_i들에 대한 연산으로 분해할 수 있다. RSA 복호화 가속(CRT 최적화)의 핵심 원리.

예시 (손자의 문제): x2(mod3), x3(mod5), x2(mod7)x=23x \equiv 2 \pmod 3,\ x \equiv 3 \pmod 5,\ x \equiv 2 \pmod 7 \Rightarrow x = 23


2.8 이산 로그 (Discrete Logarithms)

정수의 차수 (Order)

gcd(a,n)=1\gcd(a, n) = 1일 때 am1(modn)a^m \equiv 1 \pmod n을 만족하는 가장 작은 양의 정수 mmaa의 차수(order) 라 한다. mm은 항상 ϕ(n)\phi(n)을 나눈다.

원시근 (Primitive Root)

차수가 ϕ(n)\phi(n)인 정수를 nn원시근이라 한다. aann의 원시근이면

a, a2, a3, , aϕ(n)a,\ a^2,\ a^3,\ \ldots,\ a^{\phi(n)}

는 서로 다른 (mod nn) 값이고, 모두 nn과 서로소.

  • 원시근을 갖는 정수 nn2,4,pk,2pk2, 4, p^k, 2p^k 형태뿐 (pp는 홀수 소수).
  • 소수 pp는 항상 원시근을 갖는다.

이산 로그의 정의

aa가 소수 pp의 원시근이면, 임의의 bb에 대해 유일한 i (0ip2)i\ (0 \le i \le p-2)가 존재해

bai(modp)b \equiv a^i \pmod{p}

iibbaa를 밑으로 하는 이산 로그라 하고 dloga,p(b)\operatorname{dlog}_{a, p}(b) 또는 inda,p(b)\operatorname{ind}_{a, p}(b)로 표기.

로그 성질의 유사성

dloga,p(xy)dloga,p(x)+dloga,p(y)(modϕ(p))\operatorname{dlog}_{a, p}(xy) \equiv \operatorname{dlog}_{a, p}(x) + \operatorname{dlog}_{a, p}(y) \pmod{\phi(p)} dloga,p(yr)rdloga,p(y)(modϕ(p))\operatorname{dlog}_{a, p}(y^r) \equiv r \cdot \operatorname{dlog}_{a, p}(y) \pmod{\phi(p)}

이산 로그 문제 (DLP)

y=gxmodpy = g^x \bmod p에서

  • g,x,pg, x, pyy 계산 → 쉬움 (빠른 거듭제곱, Chapter 9)
  • y,g,py, g, pxx 계산 → 매우 어려움

현재 가장 빠른 알고리즘의 점근적 복잡도:

O ⁣(exp ⁣((lnp)1/3(lnlnp)2/3))O\!\left( \exp\!\left( (\ln p)^{1/3} (\ln \ln p)^{2/3} \right) \right)

이 일방향성이 Diffie–Hellman 키 교환, ElGamal, DSA 등의 보안을 지탱한다.


부록 2A. Mod의 두 가지 의미

mod는 두 가지 방식으로 사용된다.

이항 연산자로서의 mod

amodn=aa/nn,n0a \bmod n = a - \lfloor a/n \rfloor \cdot n, \quad n \neq 0

두 정수를 받아 나머지를 반환. 예: 7mod3=17 \bmod 3 = 1.

합동 관계로서의 mod

ab(modn)    amodn=bmodn    n(ab)a \equiv b \pmod{n} \iff a \bmod n = b \bmod n \iff n \mid (a - b)

괄호 사용이 다름에 유의:

  • 이항 연산자: a mod n (괄호 없음)
  • 합동 관계: a ≡ b (mod n) (괄호 안에 modulus)

주요 용어

한글영문
전단사bijection
합성수composite number
중국인의 나머지 정리Chinese remainder theorem
이산 로그discrete logarithm
약수divisor
유클리드 알고리즘Euclidean algorithm
오일러 정리Euler's theorem
오일러 토티언트 함수Euler's totient function
페르마 정리Fermat's theorem
최대공약수greatest common divisor (gcd)
모듈러 산술modular arithmetic
법, 모듈러스modulus
차수order
소수prime number
원시근primitive root
서로소relatively prime
잉여residue