This lesson is only available in Korean for now.
Lesson 19 of 20

정수론 — 나머지의 세계

소수 · 최대공약수 · 합동, 그리고 암호

정수론 — 나머지의 세계
시계는 12로 나눈 나머지의 세계입니다. 암호도 같은 원리로 만들어져요.

지금 3시인데 20시간 뒤는 몇 시일까요? 3 + 20 = 23, 그리고 23 mod 12 = 11 — 11시입니다. 우리는 이미 나머지의 세계에서 살고 있어요.

a ≡ b (mod m) 는 "a와 b를 m으로 나눈 나머지가 같다"는 뜻이고 합동이라고 읽습니다. 9강의 언어로 말하면 동치관계예요 — 정수 전체를 나머지에 따라 m개의 조각으로 분할합니다.

여기에 두 가지 재료가 더 들어갑니다.

  • 소수 — 1과 자기 자신으로만 나눠지는 수. 정수의 원자입니다.
  • 최대공약수 gcd — 두 수를 동시에 나누는 가장 큰 수.
합동은 동치관계이고, 동치관계는 집합을 분할합니다.
Python Runs in your browser

🎮 시계와 유클리드 호제법

모듈러 계산을 시계 위에서 눈으로 보고, 유클리드 호제법이 어떻게 몇 걸음 만에 최대공약수를 찾아내는지 단계별로 따라가 보세요. 간단한 RSA 암호도 직접 돌려 볼 수 있습니다.

나머지 실험실 — 시계 산술 · 유클리드 호제법 · 미니 RSA
Loading…

유클리드 호제법 — 2300년 된 알고리즘

gcd(a, b) = gcd(b, a mod b). 이 한 줄이 전부입니다. 큰 수를 작은 수로 나눈 나머지로 바꿔 가며 줄이면, 놀랍도록 빨리 끝나요.

gcd(1071, 462) → gcd(462, 147) → gcd(147, 21) → gcd(21, 0) = 21. 네 걸음입니다.

이것이 인류가 기록한 가장 오래된 알고리즘이고, 지금도 모든 암호 라이브러리 안에서 그대로 돌고 있습니다.

20자리 수의 gcd도 눈 깜짝할 사이에 구합니다.
Python Runs in your browser
배수를 지워 나가면 소수만 남습니다.
Python Runs in your browser

RSA — 곱하기는 쉽고 되돌리기는 어렵다

두 소수 61과 53을 곱하면 3233. 1초면 됩니다. 반대로 3233을 보고 두 소수를 찾으라면? 작은 수라 금방이지만, 600자리 소수 두 개의 곱이라면 지구의 모든 컴퓨터를 동원해도 못 풉니다.

이 한쪽으로만 쉬운 성질이 RSA 암호의 전부입니다. 공개키로 잠그고(누구나 곱할 수 있고), 비밀키로만 열 수 있어요(소인수를 아는 사람만).

pow(a, b, n) 은 모듈러 거듭제곱을 아주 빠르게 계산합니다.
Python Runs in your browser
🤔 Check yourself
17 ≡ 5 (mod 6) 이 참인 이유는?
🤔 Check yourself
gcd(48, 18) 을 유클리드 호제법으로 구하면?
🤔 Check yourself
RSA 암호의 안전성이 기대고 있는 사실은?