해외에서 활동하던 요원 '나비'와 연락이 끊겼어요. 마지막으로 가로챈 암호문 하나가 유일한 단서예요. 당신이 직접 암호를 풀어 요원의 안전을 확인해야 해요.
"어제 밤 11시, '나비'로부터 짧은 통신 하나가 도착한 걸 마지막으로 연락이 끊겼습니다. 신호는 잡았지만 내용은 암호화되어 있어요. 이 조직은 RSA라는 방식을 씁니다 — 다행히 아마추어들이라 공개키가 짧아요. 조사관님이라면 풀 수 있을 겁니다. 시간이 많지 않아요."
RSA 암호는 두 소수 p, q를 몰래 곱해서 만든 커다란 수 n을 공개키로 써요. n을 다시 p와 q로 쪼개는 게 사실상 불가능할 만큼 크면 안전하지만, n이 작으면 이야기가 달라져요.
1차 조사 · 가로챈 통신 기록
공개키 n = 3233
공개키 e = 17
암호문 블록 1 (C₁) = 2560
암호문 블록 2 (C₂) = 2770
n = 3233이면 네 자리 수밖에 안 돼요. 이 정도면 손으로도 소인수분해가 가능할 수도 있어요. n = p × q가 되는 두 소수 p, q를 찾아볼까요?
2차 조사 · n 소인수분해
n = 3233을 두 소수의 곱으로 쪼개보세요
√3233 ≈ 56.9예요. 그러니 56보다 작은 소수들로 하나씩 나눠보면 돼요. 아래 소수 버튼을 눌러서 3233이 나누어떨어지는지 확인해보세요.
아직 못 찾았어요. 다른 소수를 시도해보세요.
3차 조사 · 개인키 후보 검증
가짜 열쇠 사이에서 진짜 개인키를 찾으세요
p, q를 찾았으니 φ(n) = (p−1)×(q−1) = 60 × 52 = 3120이에요. 개인키 d는 e × d를 φ(n)으로 나눈 나머지가 정확히 1이 되는 수예요. 감청 기록에서 후보 4개를 확보했어요 — 진짜는 딱 하나예요. 버튼을 눌러 하나씩 검증해보세요.
4차 조사 · 메시지 복호화
개인키를 찾았어요. 이제 메시지를 풀어봅시다
개인키 d = 2753을 확보했어요. 이제 이 열쇠로 감청 장비를 돌려서 암호문을 원래 숫자로 되돌릴 수 있어요.
해독된 숫자 1 = 1901
해독된 숫자 2 = 0605
숫자를 두 자리씩 끊어서 알파벳으로 바꿔보세요 (A=01, B=02 ... Z=26). 예: 1901 → 19=S, 01=A → "SA"
1901 · 0605
사건 종결 리포트
S A F E
요원 '나비'는 무사해요.
이 암호, 왜 이렇게 쉽게 풀렸을까요?
당신이 몇 분 만에 이 암호를 푼 이유는 단 하나예요 — n = 3233이 너무 작았기 때문이에요. 네 자리 수는 56 이하의 소수 16개만 하나씩 시도해도 금방 인수분해가 돼요. 이 조직은 진짜 RSA 방식을 썼지만, 열쇠를 너무 짧게 만드는 치명적인 실수를 한 거예요.
실제로 지금 인터넷 뱅킹이나 로그인에 쓰이는 RSA는 n이 600자리가 넘는 수예요. 그런 n을 소인수분해하려면, 지금 있는 가장 빠른 슈퍼컴퓨터를 전부 동원해도 우주의 나이보다 오랜 시간이 걸릴 거라고 추정돼요. 오늘 당신이 클릭 몇 번으로 깬 이 암호가, 자릿수만 훨씬 커지면 사실상 절대 못 푸는 암호가 되는 거예요.
🕵️ 수사 노트: 암호의 강도는 '방식'이 아니라 '열쇠의 크기'에서 나와요. 같은 RSA라도 열쇠가 짧으면 아마추어의 암호, 열쇠가 충분히 크면 은행도 믿고 쓰는 암호가 돼요.