PromleeBlog
sitemap
aboutMe

posting thumbnail
핵심 수론
Essential Number Theory

📅

🚀

RSA: 키 생성 (RSA: Key Generation) 🔗

  1. 두 개의 큰 소수 p, q를 선택한다.
  2. N=pqN = p * q를 계산한다.
  3. ϕ(N)=(p1)(q1)\phi(N) = (p - 1)(q - 1)를 계산한다.
  4. ee를 선택한다. (단, 1<e<ϕ(N)1 < e < \phi(N)이고, gcd(e,ϕ(N))=1gcd(e, \phi(N)) = 1이어야 한다.)
  5. de=1(modϕ(N))d * e= 1 \pmod{\phi(N)}를 만족하는 비밀 키 dd를 계산한다.
  6. 공개 키 pkpk(N,e)(N, e)이고, 비밀 키 sksk(N,d)(N, d)이다.

🚀

RSA: 암호화 & 복호화 (RSA: Encryption & Decryption) 🔗


🚀

모듈러 지수승 (Modular Exponentiation) 🔗

ga(modp)g^a \pmod{p}를 계산하는 방법
Naive 한 방법 : (a-1)번의 곱셈이 필요하다.

왼쪽에서 오른쪽 모듈러 지수승(L2RME) 🔗

입력: g,a=(al1,al2,...,a1,a0)2,pg, a = (a_{l-1}, a_{l-2}, ... , a_1, a_0)_2, p
출력: ga(modp)g^a \pmod{p}
왼쪽에서 오른쪽 모듈러 지수승
R = 1
for i from l - 1 down to 0 do
		R = R^2 (mod p)
		if a_i = 1 then
				R = R * g (mod p)
		end if
end for
return R
➡️

예시 (L2RME) 🔗

425(mod31)4^{25} \pmod{31}을 계산하시오.
log2a+HW(a)1log_2a + HW(a) - 1번의 곱셈이 필요하다.
HW(a)HW(a)는 a의 비트 중 1의 개수이다.

오른쪽에서 왼쪽 모듈러 지수승(R2LME) 🔗

입력: g,a=(al1,al2,...,a1,a0)2,pg, a = (a_{l-1}, a_{l-2}, ... , a_1, a_0)_2, p
출력: ga(modp)g^a \pmod{p}
오른쪽에서 왼쪽 모듈러 지수승
R = 1, T = g
for i from 0 to l - 2 do
		if a_i = 1 then
				R = R * T (mod p)
		end if
		T = T^2 (mod p)
end for
R = R * T (mod p)
return R
➡️

예시 (R2LME) 🔗

425(mod31)4^{25} \pmod{31}을 계산하시오.
log2a+HW(a)1log_2a + HW(a) - 1번의 곱셈이 필요하다.
HW(a)HW(a)는 a의 비트 중 1의 개수이다.

🚀

정수 위의 유클리드 알고리즘 (Euclidean Algorithm on Integers) 🔗

a와 b가 양의 정수이고 a > b일 때, gcd(a,b)=gcd(b,a(modb))\gcd(a, b) = \gcd(b, a \pmod{b})이다.
입력: 두 양의 정수 a, b (a >= b)
출력: a와 b의 최대공약수
정수 위의 유클리드 알고리즘
r = a, r' = b
while r' != 0 do
		r'' = r mod r'
		r = r'
		r' = r''
end while
d = r
return d

예시 (정수 위의 유클리드 알고리즘) 🔗

gcd(48,18)\gcd(48, 18)을 계산하시오.

🚀

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

a,b,ra, b, r이 양의 정수이고 d=gcd(a,b)d = \gcd(a, b)일 때, ax+by=dax + by = d이 성립하며
x,yZx, y \in \mathbb{Z}drd|r일 때 존재한다.(drd|rddrr을 나눈다는 의미이다.)
입력: 두 양의 정수 a,b(a>=b)a, b (a >= b)
출력: aabb의 최대공약수 d와 d=ax+byd = ax + by를 만족하는 x,yx, y
확장된 유클리드 알고리즘
r = a, r' = b, x = 1, y = 0, x' = 0, y' = 1
while r' != 0 do
		q = r // r'
		r'' = r mod r'
		(r, x, y, r', x', y') = (r', x', y', r'', x - q * x', y - q * y')
end while
d = r
return d, x, y

예시 (확장된 유클리드 알고리즘) 🔗

gcd(48,18)\gcd(48, 18)을 계산하시오.

🚀

오일러 파이 함수 (Euler's Phi Function) 🔗

오일러 파이 함수 ϕ(n)\phi(n)Zm\mathbb{Z}_m에서 m과 서로소인 수의 개수를 의미한다.
m=p1e1p2e2...pnenm = p_1^{e_1} * p_2^{e_2} * ... * p_n^{e_n} 일 때(이때, pip_i는 서로 다른 소수, eie_i는 양의 정수), ϕ(n)\phi(n)은 다음과 같이 계산할 수 있다.
👨‍💻
ϕ(n)=i=1n(pieipiei1)\phi(n) = \prod _{i=1}^{n}(p_i^{e_i} - p_i^{e_i-1})
ϕ(p)=p1\phi(p) = p - 1 (p는 소수)

예시 (오일러 파이 함수) 🔗

  1. ϕ(6)=2\phi(6) = 2 (6과 서로소인 수는 1, 5), ϕ(8)=4\phi(8) = 4 (8과 서로소인 수는 1, 3, 5, 7)
  2. m=240m = 240 이라 하면, 240=243151240 = 2^4 * 3^1 * 5^1이므로
ϕ(240)=(2423)(3130)(5150)=64\phi(240) = (2^4 - 2^3) * (3^1 - 3^0) * (5^1 - 5^0) = 64

🚀

오일러 정리 (Euler's Theorem) 🔗

👨‍💻
서로 서로수인 정수 aa, 정수 mm에 대하여, aϕ(m)1(modm)a^{\phi(m)} \equiv 1 \pmod{m}이다.

예시 (오일러 정리) 🔗

a=5,m=12a = 5, m = 12 일 때, ϕ(12)=ϕ(2231)=(2221)(3130)=4\phi(12) = \phi(2^2 * 3^1) = (2^2 - 2^1) * (3^1 - 3^0) = 4이다.
(1,5,7,11)\because (1, 5, 7, 11)
따라서, 541(mod12)5^4 \equiv 1 \pmod{12}이다.

🚀

페르마의 소정리 (Fermat's Little Theorem) 🔗

👨‍💻
정수aa, 소수 pp 에 대하여, apa(modp)a^{p} \equiv a \pmod{p}이다.

예시 (페르마의 소정리) 🔗

  1. p=7,a=2p = 7, a = 2일 때, 272(mod7)2^7 \equiv 2 \pmod{7}이다.
  2. p=11,a=3p = 11, a = 3일 때, 3113(mod11)3^{11} \equiv 3 \pmod{11}이다.

따름정리 (페르마의 소정리) 🔗

👨‍💻
정수 aa, 소수 pp에 대하여, ap11(modp)a^{p-1} \equiv 1 \pmod{p}이다.
또한, a1=ap2(modp)a^{-1} = a^{p-2} \pmod{p}이다.

증명 (페르마의 소정리) 🔗

a×a×a×...×aa(modp)a\times a \times a \times ... \times a \equiv a \pmod{p}이므로,
ap11(modp)a^{p-1} \equiv 1 \pmod{p}
이다.
a×a11(modp)a \times a^{-1} \equiv 1 \pmod{p}이므로,
a1=ap2(modp)a^{-1} = a^{p-2} \pmod{p}
이다.

🚀

중국인의 나머지 정리 (Chinese Remainder Theorem) 🔗

👨‍💻
ppqq가 서로소일 때, 두 방정식
xa(modp)x ≡ a \pmod{p}
xb(modq)x ≡ b \pmod{q}
pqpq에 대한 xx의 유일한 해를 가진다.

증명 (중국인의 나머지 정리) 🔗

  1. 존재성
    x=a×q×Mq+b×p×Mp(modpq)x = a \times q \times M_q + b \times p \times M_p \pmod{pq}
    여기서 MqM_qq1(modp)q^{-1} \pmod{p}이고, MpM_pp1(modq)p^{-1} \pmod{q}이다.
    • 예시
      x3(mod7)x ≡ 3 \pmod{7}이고 x5(mod15)x ≡ 5 \pmod{15}일 때
      Mq=151(mod7)=1M_q = 15^{-1} \pmod{7} = 1, Mp=71(mod15)=13M_p = 7^{-1} \pmod{15} = 13
      x=3151+5713=500x = 3 * 15 * 1 + 5 * 7 * 13 = 500이고, 이를 105로 나눈 나머지는 80이다.
  2. 유일성
    만약 xy(modp)x ≡ y \pmod{p}이고 xy(modq)x ≡ y \pmod{q}라면, xyx - yppqq의 배수이다.
    따라서, xyx - ypqpq의 배수이며 xy(modpq)x ≡ y \pmod{pq}이다.
    • 예시
      x3(mod7)x ≡ 3 \pmod{7}이고 x5(mod15)x ≡ 5 \pmod{15}일 때
      xyx-y는 7과 15의 배수이므로, xy(mod105)x ≡ y \pmod{105}이다.

예시 (중국인의 나머지 정리) 🔗

Z105\mathbb{Z}_{105}에서 x3(mod7)x ≡ 3 \pmod{7}이고 x5(mod15)x ≡ 5 \pmod{15}xx를 찾으시오.
따라서 x80(mod105)x ≡ 80 \pmod{105}이다.

🚀

확률적 소수 판정법 I: 페르마 검사 (Probabilistic Primality Test I: Fermat Test) 🔗

a를 정수, p를 소수라고 할 때,
apa(modp)(ap11(modp))a^p ≡ a (mod p) (\Longleftrightarrow a^{ p-1} ≡ 1 (mod p))

알고리즘 5. 페르마 소수 판정법 🔗

입력: 후보 pˉ\bar{p}와 보안 매개변수 λ
출력: "pˉ\bar{p} 은 소수이다" 혹은 "pˉ\bar{p}은 합성수이다"
페르마 소수 판정법, p -> p{bar}
for i from 1 to λ do
		randomly select a from {2, 3, ..., p - 2}
		if a^{p-1} ≡ 1 (mod p)이 아니라면
				return "p은 합성수이다"
		end if
end for
return "p은 소수이다"
  1. 1부터 λ까지 아래
    2~3
    과정을 반복한다.
  2. 2부터 p - 2 사이의 무작위 수 a를 선택한다.
  3. ap11(modp)a^{p-1} ≡ 1 (mod p)이 아니라면, p는 합성수이다.
  4. 모든 테스트를 통과하면 p는 소수일 가능성이 높다.
➡️

정리 (페르마 검사) 🔗

주어진 수가 소수인지 합성수인지 판별하는 확률적 알고리즘
페르마의 소정리
를 기반으로 함
보안 매개변수 λ만큼 많은 수의 무작위 테스트를 수행
각 테스트에서, 2와 p - 2 사이의 무작위 수 a를 선택하고 ap1a^{p-1}을 계산한 후 이 결과가 p에 대한 (mod  1)(mod\;1)과 같은지 확인
만약 ap11(modp)a^{p-1} ≡ 1 (mod p)이 성립하지 않는 경우가 하나라도 발견되면 p는 합성수

🚀

반례: 카마이클 수 (Counterexample: Carmichael Number) 🔗

카마이클 수 C는 합성수이며 모든 a에 대해 gcd(a,C)=1gcd(a, C) = 1일 때 다음을 만족하는 수이다.
aC11(modC)a^{C-1} ≡ 1 \pmod{C}

예시 (카마이클 수) 🔗

N=561=31117N = 561 = 3 * 11 * 17
• 모든 a에 대해 gcd(a,561)=1gcd(a, 561) = 1일 때, a5601(mod561)a^{560} ≡ 1 (mod 561)
• 페르마 검사는 카마이클 수를 소수로 판별한다.
• 대략 10^6 개의 카마이클 수가 10^15 이하에 존재한다.
➡️

정리 (카마이클 수) 🔗

카마이클 수는 페르마의 소정리 조건을 만족하지만 합성수인 특별한 종류의 수이다.
즉, aC11(modC)a^{C-1} ≡ 1 (mod C)를 만족하지만 C는 소수가 아닌 수를 말한다.
카마이클 수는 페르마 검사에서 소수로 잘못 판별될 수 있는 '가짜 소수'의 한 예시

🚀

확률적 소수 판정법 II: 밀러-라빈 검사 (Probabilistic Primality Test II: Miller-Rabin Test) 🔗

pˉ1=2rs\bar{p} - 1 = 2^r * s 형태이고 s가 홀수일 때, 만약
as1(modpˉ)a^s \neq 1 \pmod{\bar{p}}
를 만족하는 어떤 정수 a에 대해 모든 j{0,1,...,r1}j \in \{0, 1, ..., r - 1\}
as2jpˉ1(modpˉ)a^{s*2^j} \neq \bar{p} - 1 \pmod{\bar{p}}
를 만족하면,
pˉ\bar{p}은 합성수이다.
그렇지 않다면, pˉ\bar{p}은 아마도 소수일 것이다.

예시 (밀러-라빈 검사) 🔗

53523(mod561)5^{35} ≡ 23 \pmod {561}
5352529(mod561)5^{35*2} ≡ 529 \pmod {561}
535225292463(mod561)5^{35*2^2} ≡ 529^2 ≡ 463 \pmod {561}
53523463267(mod561)5^{35*2^3} ≡ 463^2 ≡ 67 \pmod {561}
\Longrightarrow 561은 합성수이다!
➡️

정리 (밀러-라빈 검사) 🔗

밀러-라빈 검사는 페르마 검사보다 더 정확한 확률적 소수 판정법
pˉ1=2rs\bar{p} - 1 = 2^r * s 형태로 표현되는 홀수 s에 대해 작동
임의의 a에 대해 asa^s를 계산하고 이 결과가 1 또는 pˉ1\bar{p} - 1과 다를 경우 as2,as22,...,as2r1a^{s*2}, a^{s*2^2}, ..., a^{s*2^{r-1}}의 계산을 이어간다.
이 수들 중 하나라도 pˉ1\bar{p} - 1과 동일하다면, pˉ\bar{p}은 소수일 가능성이 높다.
그러나 이 모든 수가 pˉ1\bar{p} - 1과 다르다면 pˉ\bar{p}은 합성수이다.

🚀

밀러-라빈 소수 판정법 설명 (Miller-Rabin Primality Test Explanation) 🔗

알고리즘 6. 밀러-라빈 소수 판정법 🔗

입력: 후보 pˉ\bar{p}pˉ1=2rs\bar{p} - 1 = 2^r * s 형태의 s는 홀수, 보안 매개변수 λ
출력: "pˉ\bar{p}은 소수이다" 혹은 "pˉ\bar{p}은 합성수이다"
밀러-라빈 소수 판정법, p -> p{bar}
for i from 1 to λ do
		randomly select a from {2, 3, ..., p - 2}
		z = a^s (mod p)
		if z ≠ 1 and z ≠ p - 1이라면
				for j from 1 to r - 1 do
						z = z^2 (mod p)
						if z = 1이라면
								return "p은 합성수이다"
						end if
						if z = p - 1이라면
								break
						end if
				end for
				if z ≠ p - 1이라면
						return "p은 합성수이다"
				end if
		end if
end for
return "p은 소수이다"
최악의 경우 실패 확률은 4λ4^{-λ}이다.