공개 키 암호화가 실제로 작동하는 방식
비대칭 암호화, 키 쌍, 디지털 서명에 대한 실용적인 안내로, 수학 비유는 빼고 설명합니다.
SSH로 서버에 접속하거나 HTTPS 사이트를 로드할 때마다 수학적으로 연결된 두 개의 키가 핵심 역할을 합니다. 하나는 공개 키이고 하나는 개인 키이며, 이 둘 사이의 관계가 신뢰할 수 없는 네트워크 위에서 안전한 통신을 가능하게 합니다.
기본 개념
대칭 암호화에서는 한 개의 키로 데이터를 잠금과 해제합니다. 두 당사자가 이미 비밀을 공유하고 있다면 이것이 잘 작동하지만, 그 비밀을 안전하게 배포하는 것이 어려운 부분입니다. 공개 키(비대칭) 암호화는 수학적으로 연결된 쌍을 생성해서 이를 해결합니다. 누구에게나 줄 수 있는 공개 키와 절대 공유하지 않는 개인 키입니다.
공개 키로 암호화된 데이터는 일치하는 개인 키로만 해독할 수 있습니다. 개인 키로 서명된 데이터는 공개 키를 가진 누구나 검증할 수 있습니다. 이 두 가지 특성이 거의 모든 사용 사례를 커버합니다: 기밀성과 인증입니다.
RSA, 고전적인 예
RSA는 두 개의 큰 소수를 곱하는 것은 빠르지만 곱한 결과를 다시 소인수분해하는 것은 규모가 커지면 계산이 매우 어렵다는 사실에 의존합니다. 2048비트 RSA 키는 대략 1024비트씩의 두 개 소수로 구성됩니다. 공개 키는 (n, e)입니다 — n은 소수들의 곱, e는 65537 같은 고정 지수입니다. 개인 키는 n의 오일러 파이 함수를 사용해서 유도되며 원래 소수들을 알아야 합니다.
암호화는 모듈로 지수화입니다: c = m^e mod n. 해독은 개인 지수 d를 사용해 역으로 계산합니다: m = c^d mod n. 실제로는 큰 데이터를 RSA로 직접 암호화하지 않습니다 — 느리고 키 길이에 따른 크기 제한이 있습니다. 대신 RSA는 보통 대칭 세션 키(예: AES-256)를 감싸고, 대칭 암호는 대량의 데이터를 처리합니다. 이것이 TLS가 사용하는 하이브리드 방식입니다.
타원곡선 암호화와 그것이 지배하는 이유
ECC는 RSA보다 훨씬 작은 키로 동등한 보안을 제공합니다. 256비트 ECC 키(secp256r1 또는 Curve25519 같은)는 대략 3072비트 RSA 키 정도의 강도입니다. 더 작은 키는 더 빠른 핸드셰이크와 더 적은 대역폭을 의미하며, 이것이 최신 TLS 설정, SSH 구현, Signal 프로토콜이 모두 ECC를 사용하는 이유입니다.
수학은 다릅니다 — 정수 인수분해가 아닌 타원곡선 위의 점들에 대한 이산 로그 문제에 기반합니다 — 하지만 공개/개인 키 관계와 보장은 개념적으로 동일합니다.
디지털 서명: 방정식의 다른 절반
암호화는 데이터를 기밀로 유지합니다. 서명은 인증과 무결성을 증명합니다. 메시지에 서명하려면 해시(보통 SHA-256)를 만들고 개인 키로 그 해시를 암호화합니다. 공개 키를 가진 누구나 메시지를 직접 해시하고, 서명을 해독하고, 두 해시가 일치하는지 확인할 수 있습니다.
GPG 키로 git commit -S를 실행할 때, 또는 인증 기관이 TLS 인증서에 서명할 때 정확히 이것이 일어납니다. CA의 개인 키가 인증서에 서명합니다. 브라우저는 CA의 공개 키를 미리 신뢰하도록 설정되어 있으므로, CA와 직접 통신하지 않고도 인증서의 진정성을 검증할 수 있습니다.
일상에서 나타나는 곳
SSH 키 인증은 직접적인 응용입니다: ssh-keygen -t ed25519로 키 쌍을 생성하고, 공개 키를 서버의 ~/.ssh/authorized_keys에 넣으면, 개인 키를 사용하는 챌린지-응답으로 인증이 일어나며 비밀번호는 절대 전송되지 않습니다.
TLS 핸드셰이크는 비대칭 암호를 간단히 사용해서 공유 대칭 키를 설정하고(최신 설정에서는 ECDHE 키 교환을 통해), 그 다음 실제 세션을 위해 빠른 대칭 암호로 전환합니다. PGP/GPG 이메일 암호화도 하이브리드 패턴을 따릅니다 — 임의의 AES 키로 메시지를 암호화한 다음, 그 AES 키를 수신자의 RSA 또는 ECC 공개 키로 암호화합니다.
실제로 망가지는 것들
RSA와 ECC 뒤의 수학은 고전 컴퓨팅으로 깨지지 않았습니다. 실제로 문제가 되는 것은 거의 항상 구현입니다: 키 생성할 때 약한 난수 생성(2008년 Debian OpenSSL 버그가 교과서적 사례), ECDSA 서명의 재사용된 nonce가 개인 키를 노출, 또는 잘못 구현된 RSA에 대한 패딩 오라클 공격(PKCS#1 v1.5 패딩에 대한 Bleichenbacher 공격). 양자 컴퓨팅은 장기적 이론적 위협입니다 — Shor 알고리즘은 충분히 큰 양자 컴퓨터가 존재한다면 RSA와 ECC를 모두 깨뜨릴 것입니다 — 이것이 NIST가 이미 향후 마이그레이션을 위해 ML-KEM(이전 이름 Kyber)과 같은 양자 이후 알고리즘을 표준화한 이유입니다.
더 깊이 있게 학습하려면 Korra Studio의 암호화 트랙에서 키 교환 프로토콜과 해시 함수 내부 구조를 더 자세히 다루고, 네트워킹 세그먼트에서 이 모든 것이 실제 TLS 핸드셰이크에 바이트 단위로 어떻게 맞는지 설명합니다.
AI 도움을 받아 작성했으며, Michal Pilch(CISSP), Korra Studio에서 검토 및 게시했어요.
이것은 Korra Studio 나레지베이스의 한 노트예요. 플랫폼은 모든 주제를 1-to-1 멘토링과 함께 제공해요.
무료로 시작하기arrow_forward