RSA 키 생성·암복호 시연기
작은 소수 두 개로 n·φ(n)·공개키·개인키를 구하고 숫자 하나를 실제로 암호화·복호화해 봅니다. 서명과 검증, 그리고 작은 키가 얼마나 쉽게 인수분해되는지도 함께 보여 줍니다.
0으로 두면 φ(n)과 서로소인 값을 자동으로 고릅니다. 실제로는 65537을 많이 씁니다.
n보다 작아야 합니다. 크면 n으로 나눈 나머지로 다룹니다.
공개키 (n, e) / 개인키 (n, d)
(3,233, 17) / (3,233, 2,753)
12비트 키 · φ(n) = 3,120
사용 방법
- 1소수 두 개(p, q)를 고릅니다. 예시 조합을 눌러도 됩니다.
- 2공개 지수 e를 넣거나 0으로 두어 자동으로 고릅니다.
- 3n·φ(n)·개인 지수 d가 어떻게 나오는지 확인합니다.
- 4숫자 하나를 넣어 암호화·복호화·서명·검증이 실제로 맞아떨어지는지 봅니다.
자주 묻는 질문
소수 두 개 p·q를 곱해 n을 만들고, φ(n) = (p−1)(q−1)을 구한 뒤 φ와 서로소인 e를 고르고, e·d ≡ 1 (mod φ(n))인 d를 확장 유클리드로 구합니다. 공개키는 (n, e), 개인키는 (n, d)입니다. p = 61, q = 53, e = 17이면 n = 3233, φ = 3120, d = 2753이 됩니다.
오일러 정리 때문입니다. e·d = 1 + kφ(n)이므로 c^d = (m^e)^d = m·(m^φ(n))^k이고, m^φ(n) ≡ 1 (mod n)이라 m만 남습니다. m이 p나 q의 배수여서 n과 서로소가 아닐 때도 중국인의 나머지 정리로 같은 결론이 나와, 0 이상 n 미만인 모든 m이 되돌아옵니다.
2¹⁶+1이라 이진수로 1이 두 개뿐이어서 거듭제곱이 빠르기 때문입니다. 동시에 3처럼 작지 않아, 짧은 메시지의 m^e가 n을 넘지 않아 그대로 e제곱근으로 풀리는 문제를 피할 수 있습니다. 물론 φ(n)과 서로소여야 한다는 조건이 먼저입니다.
쓰는 열쇠의 순서만 반대입니다. 암호화는 공개키로 잠그고 개인키로 열지만, 서명은 개인키로 만들고(s = m^d mod n) 공개키로 확인합니다(m = s^e mod n). 개인키를 가진 사람만 만들 수 있고 누구나 확인할 수 있다는 점이 «서명»이라는 이름의 이유입니다.
절대 안 됩니다. 여기 다루는 소수는 너무 작아 √n까지 나눠 보는 것만으로 몇 밀리초 만에 인수분해되고, p와 q를 알면 개인키가 바로 나옵니다. 패딩도 없어 같은 평문이 언제나 같은 암호문이 됩니다. 실제 RSA는 2048비트 이상에 OAEP 패딩을 함께 씁니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 교육용 시연입니다. 여기서 만든 키를 실제 통신이나 저장에 쓰면 안 됩니다.
- 거듭제곱은 BigInt로 계산합니다. 배정밀도 실수로는 곱셈 도중 2⁵³을 넘어 값이 어긋납니다.
- 소수는 100,000 이하만 받습니다. 그보다 크면 인수분해 시연이 느려지고, 어차피 이 크기에서는 «쉽게 깨진다»는 요점이 그대로입니다.
- p와 q가 같으면 φ(n) = p(p−1)로 식이 달라지므로 거절합니다. 실제 RSA에서도 두 소수는 충분히 떨어져 있어야 합니다 — 가까우면 페르마 인수분해로 쉽게 갈라집니다.
- 실제 구현은 φ(n) 대신 카마이클 함수 λ(n) = lcm(p−1, q−1)을 써서 더 작은 d를 얻기도 합니다. 어느 쪽으로 구해도 복호는 똑같이 됩니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.