본문으로 건너뛰기
HexaTransfer
블로그로 돌아가기
암호화 및 보안

공개 키 암호화 기초: 안전한 공유의 작동 원리

공개 키 암호화의 기초와 낯선 사람 간 안전한 파일 공유를 가능하게 하는 원리를 알아보세요.

공개 키 암호화 — 비대칭 암호화라고도 불림 — 는 두 개의 수학적으로 연결된 키를 사용합니다: 자유롭게 배포할 수 있는 공개 키와 철저히 보호하는 개인 키. 내 공개 키로 무언가를 암호화하면 내 개인 키만이 읽을 수 있습니다. 이것은 암호화의 가장 오래된 문제를 해결합니다: 한 번도 만난 적 없는 두 사람이 공개 채널을 통해 비밀을 공유하는 방법. 1976년 Diffie와 Hellman이 발명하고 1년 후 RSA로 실용화된 이 기술은 현재 TLS 1.3, Signal, SSH, Ed25519 코드 서명, 사용자 인증 파일 전송 서비스의 기반입니다.

수학적 트랩도어

모든 공개 키 암호화는 "트랩도어" 함수에 의존합니다 — 앞 방향으로는 쉽지만 추가 정보 없이는 역방향이 사실상 불가능한 계산. 두 가지 계열이 주도합니다.

  • 정수 인수분해(RSA): 두 큰 소수를 곱하는 것은 간단하지만, 그 결과를 인수분해하는 것은 지수적으로 어렵습니다. 2048비트 RSA 키는 두 개의 약 1024비트 소수를 사용합니다.
  • 타원 곡선의 이산 로그(ECDH, ECDSA, Ed25519): 곡선에서 점 곱셈은 빠르지만, 승수를 찾기 위해 역산하는 것은 어렵습니다. Curve25519 같은 256비트 곡선은 3072비트 RSA와 동등한 보안성을 제공합니다.

두 문제 모두 Shor 알고리즘을 통해 양자 컴퓨터가 쉽게 풀 수 있습니다. 이것이 NIST가 2024년 FIPS 203~205에서 후양자 대안(ML-KEM 및 ML-DSA)을 표준화한 이유입니다.

실제 RSA

Ron Rivest, Adi Shamir, Leonard Adleman이 1977년에 발표한 RSA는 우아한 구조를 가집니다.

  1. 두 큰 소수 pq를 선택합니다.
  2. n = p × q(모듈러스)와 φ(n) = (p-1)(q-1)을 계산합니다.
  3. φ(n)과 서로 소인 e를 선택하며, 보통 65537입니다.
  4. e × d ≡ 1 (mod φ(n))d를 계산합니다.
  5. 공개 키: (n, e). 개인 키: (n, d).

암호화: ciphertext = message^e mod n. 복호화: message = ciphertext^d mod n. 실제 RSA는 선택 암호문 공격을 방지하기 위해 OAEP 패딩(RFC 8017)을 사용합니다. 교과서적 RSA는 치명적으로 불안전합니다.

Diffie-Hellman: 키를 전송하지 않고 공유 비밀 생성

RSA는 알려진 수신자에게 암호화하는 것을 허용합니다. Diffie-Hellman은 미묘하게 다른 것을 합니다: 두 당사자가 공개 채널에서 공유 비밀을 파생할 수 있게 하며, 어느 쪽도 비밀을 전송하지 않습니다.

  1. 양측이 큰 소수 p와 생성자 g에 합의합니다.
  2. Alice는 비밀 a를 선택하고 A = g^a mod p를 전송합니다.
  3. Bob은 비밀 b를 선택하고 B = g^b mod p를 전송합니다.
  4. Alice는 B^a mod p = g^(ab) mod p를 계산합니다.
  5. Bob은 A^b mod p = g^(ab) mod p를 계산합니다.

둘 다 ab를 전송하지 않고 g^ab mod p에 도달합니다. 현대 DH는 타원 곡선(ECDH)을 사용하며, X25519가 표준 선택입니다: 32바이트 키, 32바이트 공유 비밀, 타이밍 공격에 강화된 구현.

타원 곡선과 그것이 우세한 이유

RSA는 세 가지 실용적 이유로 타원 곡선 암호화에 자리를 내줬습니다.

  • 더 작은 키: 256비트 EC 키가 3072비트 RSA 키의 보안성을 제공합니다. 32바이트 대 384바이트.
  • 더 빠른 연산: Curve25519의 ECDH는 현대 CPU에서 약 70마이크로초가 걸립니다.
  • 더 나은 난수 탄력성: Ed25519는 결정론적 — 서명에 메시지당 무작위 nonce가 필요 없어, 2010년 Sony PS3 ECDSA 사태처럼 상수 nonce가 마스터 키를 유출하는 사태를 피합니다.

NIST 곡선(P-256, P-384, P-521)은 널리 지원되지만 일부 암호학자들은 설명되지 않은 상수에 의구심을 품습니다. Daniel Bernstein이 설계한 Curve25519와 Ed25519가 TLS 1.3, WireGuard, Signal, SSH에서 현대의 기본값으로 사용됩니다.

서명: 누가 무엇을 보냈는지 증명

공개 키 암호화는 대칭이 할 수 없는 것을 합니다: 발신자 증명. 서명은 암호화 역할을 뒤집습니다 — 개인 키로 "암호화"(서명)하고, 공개 키를 가진 누구나 "복호화"(검증)할 수 있습니다. 검증이 되면 개인 키를 보유한 사람만이 서명할 수 있음을 알 수 있습니다.

실제 서명은 임의 크기의 메시지를 처리하기 위해 해시 함수를 사용합니다.

  1. h = SHA-256(message)를 계산합니다.
  2. 개인 키로 h에 서명합니다(RSA-PSS, ECDSA, 또는 Ed25519).
  3. 검증자가 받은 메시지를 해시하고 공개 키로 서명과 비교합니다.

응용: TLS 인증서(CA가 사이트의 공개 키에 서명), 코드 서명(Apple의 공증, Microsoft Authenticode), Git 커밋 서명, 소프트웨어 패키지 관리자(apt, Homebrew, npm).

파일 전송에서 공개 키 암호화의 역할

익명 링크 기반 전송(SwissTransfer, HexaTransfer)의 경우 공개 키 암호화가 직접 등장하지 않는 경우가 많습니다 — URL fragment의 무작위 대칭 키가 모든 것을 처리합니다. 그러나 계정 기반 서비스에서 공개 키는 중요합니다.

  • TLS 1.3 서버 인증: 모든 HTTPS 연결은 서버 인증서로 시작하며, CA 체인에 대해 검증됩니다. 임시 ECDHE 키 교환이 세션 키를 파생합니다.
  • 계정 간 암호화: Tresorit, Proton Drive, Mega 각각은 가입 시 사용자에게 키 쌍을 제공합니다. 계정 간 공유 파일은 수신자의 공개 키로 래핑됩니다.
  • 서명된 클라이언트 및 업데이트: 데스크탑 앱은 공급망 공격을 방지하기 위해 Ed25519 또는 RSA 서명으로 업데이트를 검증합니다.

키 배포: 남은 어려운 문제

공개 키 암호화는 하나의 키 배포 문제를 해결하지만 다른 문제를 만듭니다: 공개 키가 실제로 주장하는 사람에게 속하는지 어떻게 알 수 있을까요? 세 가지 모델이 있습니다.

  • PKI(공개 키 인프라): 인증 기관이 공개 키에 서명합니다. Chrome, Firefox, Safari의 루트를 가진 TLS에 사용됩니다.
  • 신뢰의 웹: PGP의 접근법 — 사용자들이 서로의 키에 서명합니다. 유연하지만 확장 문제로 채택이 틈새에 머물렀습니다.
  • TOFU(첫 사용 신뢰): SSH의 접근법 — 처음에는 키를 수락하고 변경 시 경고합니다.
  • 키 투명성: 모든 공개 키가 공개적으로 감사 가능한 머클 트리 로그. WhatsApp, iMessage 연락처 키 확인, 현대 패스키 시스템에 사용됩니다.

알 수 없는 수신자와의 파일 전송에서 URL fragment 공유는 이를 완전히 우회합니다 — 발신자가 링크를 통해 수신자에게 직접 키를 전달하므로, 진위성은 링크를 공유하는 데 사용된 채널에 달려 있습니다.

양자 컴퓨팅이 바꾸는 것

대규모 양자 컴퓨터가 Shor 알고리즘을 실행하면 RSA와 타원 곡선 암호화가 모두 깨집니다. 현재 예상 일정은 10~20년이지만, 긴 수명의 데이터에는 즉각적인 위험이 있습니다: "지금 수집, 나중에 복호화" 공격이 오늘날의 암호화된 트래픽을 기록했다가 2040년에 복호화합니다.

NIST의 2024 후양자 표준:

  • FIPS 203(ML-KEM): 키 교환을 위한 Diffie-Hellman / ECDH 대체. 격자 문제 기반.
  • FIPS 204(ML-DSA): 서명을 위한 RSA/ECDSA 대체.
  • FIPS 205(SLH-DSA): 해시 기반 서명 백업.

Cloudflare와 Google은 이제 TLS 1.3 키 교환에서 ML-KEM을 지원합니다. 파일 전송 서비스도 향후 몇 년 내에 따라올 것입니다. 대칭 암호화(AES-256-GCM)는 크게 영향받지 않습니다 — Grover 알고리즘은 실효 강도를 절반으로만 줄입니다.

hexatransfer.com에서 사용해 보세요 — 무료, 계정 불필요, 최대 10GB.

엔드투엔드 암호화로 대용량 파일을 안전하게 전송

엔드투엔드 암호화로 최대 10GB의 파일을 무료로 전송하세요. 계정이 필요하지 않습니다. 업로드 전에 브라우저에서 파일이 암호화되어 다른 사람은 읽을 수 없습니다.

파일 보내기