05. 인터넷의 평화를 수호하는 RSA (공개키 암호)

1. 학습 목표 (Learning Objectives)

  • 이전 챕터의 ‘소수’를 직접 응용하여 전 세계 인터넷 뱅킹(HTTPS, SSL)의 표준 교과서인 RSA 공개키 암호 알고리즘의 작동 흐름을 이해합니다.
  • 파이썬(Python)으로 나만의 작은 공장(미니 RSA)을 차려 공개키와 개인키를 만들고 직접 평문을 암호화/복호화하는 실습을 뽐냅니다.

2. 자물쇠는 공개하고, 진짜 열쇠는 내가 숨긴다!

과거 스파이들의 암호는 거대한 맹점이 존재했습니다. 사령부에서 “우리의 철통 보안 키(Key)는 숫자 ‘7’이다!” 라고 무전을 치는 순간, 그 무전을 엿듣던 적군 스파이도 ‘아하, 키가 7이구나’ 하고 날름 훔쳐서 뚫어버리는 위험(키 분배의 역설) 때문이었습니다.

이 딜레마를 1977년 MIT 공대의 수학 천재 3명(리베스트, 샤미르, 애들먼)이 발명한 RSA 알고리즘이 박살 내버립니다. 이들은 아주 기묘한 시스템을 만들었습니다.

2D 웹툰 사이버펑크 스타일: 미래형 인터넷 금고 앞에서 투명하게 세상에 퍼트리는 빛나는 파란 '공개 자물쇠(Public Key)'를 띄운 스파이, 하지만 수학적 비밀 분해 공식이 담긴 황금 '마스터 열쇠(Private Key)'는 몰래 주머니 속에 숨겨둔 치밀한 설계 장면

“누구든지 나한테 비밀 편지를 보내고 싶으면, 내가 동네방네 다 뿌려놓은 공개 자물쇠(Public Key)로 잠가서 보내라! 근데 명심해라, 너희들이 내 자물쇠로 잠그는 건 1초면 되지만, 한 번 잠긴 그 상자를 여는 유일한 마스터 황금 열쇠(Private Key)는 내 주머니 속에 딱 하나뿐이다!”

내가 만든 거대한 두 소수의 ‘곱셈 결과값’은 세상 사람 모두에게 자물쇠로 나눠주고(공개키), 남들이 몰라야 풀리지 않는 ‘원본 소수 두 개의 알맹이’는 내 주머니 깊숙이(개인키) 챙겨두는 구조. 곱셈은 쉽지만 소인수분해는 불가능하다는 앞 단원의 우주적 수학 법칙이 우리 통장을 해커로부터 철통 방어해주고 있습니다.

RSA 비대칭 키 모듈러 암호화 워크플로우 SVG: 보내는 사람이 공개 자물쇠로 메세지를 잠궈 암호문(네트워크 이동)화 하고, 받는 사람이 숨겨둔 유일한 개인키로 원본 복호화를 해내는 과정 로직

3. 파이썬으로 구현하는 미니 RSA 공장 (Python)

보통 RSA는 수백 자리의 소수를 다루지만, 우리는 원리 이해를 위해 한 자릿수 미니 소수(p=3, q=11)로 간략한 RSA 궤도를 돌려보겠습니다. 철수가 영희에게 비밀번호(2)를 전송하는 상황입니다.

# [미니 RSA 튜토리얼] 
# (경고: 실제 RSA는 엄청나게 큰 소수와 복잡한 유클리드 호제법 공식을 사용합니다. 아래는 지수 연산 교육용 축소판입니다.)

# 1. 영희의 방: 비밀 열쇠(소수 p, q)를 준비하고 공개 자물쇠(n, e)를 조립합니다.
p = 3
q = 11
n = p * q  # 3 * 11 = 33 (자물쇠 본체)
e = 7      # 7 (자물쇠의 톱니바퀴)
d = 3      # 3 (영희만 아는 복호화 황금 열쇠, 수식 생략 결과값)

print(f"🔒 [영희가 세상에 뿌린 공개 자물쇠]: (본체={n}, 톱니={e})")
print(f"🔑 [영희가 숨긴 개인 황금 열쇠]: {d}")

# 2. 철수의 방: 인터넷에 돌아다니는 영희의 자물쇠를 주워서 평문(2)을 잠급니다!
# 평문 평범한 편지 내용 "2"
plaintext = 2
# 철수의 암호화 마법 공식: (평문 ^ 톱니) % 본체 
# 2를 7번 제곱하고 33으로 나눈 나머지 연산
ciphertext = (plaintext ** e) % n
print(f"\n▶ [철수가 암호화 한 메시지 (도청당해도 모름)]: {ciphertext}")

# 3. 영희의 방: 도착한 해괴망측한 암호문(29)을 황금 열쇠(d=3)로 산산조각 냅니다!
# 복호화 마법 공식: (암호문 ^ 황금열쇠) % 본체
decrypted_msg = (ciphertext ** d) % n
print(f"◀ [영희가 황금 열쇠로 해독한 원래 메시지]: {decrypted_msg}")

파이썬의 실행 결과 요약:

🔒 [영희가 세상에 뿌린 공개 자물쇠]: (본체=33, 톱니=7)
🔑 [영희가 숨긴 개인 황금 열쇠]: 3

▶ [철수가 암호화 한 메시지 (도청당해도 모름)]: 29
◀ [영희가 황금 열쇠로 해독한 원래 메시지]: 2

철수가 날린 원본 비밀번호 2가 인터넷 망을 탈 때는 알 수 없는 문자 쓰레기 29로 변신했다가, 오직 주머니 속 개인키를 가진 원래 설계자(영희)의 컴퓨터에 들어가는 순간 제곱 모듈러가 발동해 거짓말처럼 다시 2로 풀려납니다. 수학자들의 가슴을 뛰게 하는 인류 최고의 발명품입니다.

4. 학습 정리 (Summary)

  1. 공개키 (Public Key): 암호화 문을 잠그는 자물쇠 역할만 하며, 세상 누구든 쓸 수 있도록 웹사이트에 만천하에 투명하게 공개되는 키입니다.
  2. 개인키 (Private Key): 잠긴 암호 상자를 해체할 수 있는 유일한 인수분해 뼈대이며 서버 컴퓨터 가장 깊숙한 곳에 꽁꽁 숨겨두는 마스터키입니다.
  3. RSA 알고리즘은 ‘정방향 계산은 쉽지만 역방향 역추적은 불가능한’ 수학적 모듈러 함수를 IT 암호 시스템으로 구현해 낸 기적적인 사례입니다.
서브목차