RSA 암호화
RSA는 두 사람이 직접 만나지 않고도 비밀을 교환할 수 있게 해주는 최초의 실용적인 공개 키 알고리즘이었습니다. 48년이 지난 후에도 여전히 TLS 핸드셰이크의 상당 부분을 보호하고 모든 PGP 메시지에 서명하며 많은 코드 서명 체계를 뒷받침합니다. 천천히 타원 곡선으로 대체되지만 사라지지는 않습니다.
전체 기사 본문은 아래에 영어로 제공됩니다.
RSA는 MIT의 Ron Rivest, Adi Shamir 및 Leonard Adleman이 1977년에 도입한 공개 키 암호화 시스템입니다. 이 특허는 2000년에 만료되었으며 그 후 기본적으로 모든 암호화 라이브러리로 확산되었습니다. RSA는 두 가지 보완적인 작업을 가능하게 합니다. 즉, 개인 키만 해독할 수 있도록 공개 키로 암호화하는 것과 공개 키를 가진 사람은 누구나 확인할 수 있도록 개인 키로 서명하는 것입니다.
수학을 간략히 설명하자면
RSA의 보안은 큰 숫자를 인수분해하는 어려움에 달려 있습니다. 키 생성:
- 두 개의 큰 무작위 소수 p 및 q(일반적으로 각각 2048비트)를 선택합니다.
- n = p × q를 계산합니다. 이것은 공개 모듈러스입니다.
- 오일러 전체 계산: Φ(n) = (p-1)(q-1).
- Φ(n)에 대한 작은 홀수 e 공소를 선택합니다. 일반적으로 65537 (=2^16+1).
- d = e^(-1) mod Φ(n)를 계산합니다. 이것이 개인 키입니다.
공개 키는 (n, e) 쌍입니다. 개인 키는 d.
입니다. 메시지를 암호화하려면 m: ciphertext c = m^e mod n입니다. 해독하려면: m = c^d mod n. 공개 키를 가진 사람은 누구나 암호화할 수 있습니다. 개인 키를 가진 사람만이 암호를 해독할 수 있습니다. 서명하려면 반대입니다. s = m^d mod n, m = s^e mod n.
이게 작동하는 이유
요령: d를 계산하려면 Φ(n)을 알아야 합니다. p × q. 2048비트 세미프라임을 인수분해하려면 인류보다 더 많은 컴퓨팅이 필요합니다. p 및 q를 이미 알고 있을 때 n = p × q를 확인하는 것은 쉽지 않습니다. 쉬운 곱셈, 어려운 인수분해인 비대칭성은 RSA.
키 크기
- RSA-1024의 전체 기반입니다. 이는 자원이 풍부한 공격자들에 의해 원칙적으로 깨졌습니다. NIST는 2014년부터 새로운 배포를 금지했습니다.
- RSA-2048 — 현재 기준. 전통적인 적들에 대해 중기적으로 안전한 것으로 간주됩니다.
- RSA-3072 — NIST의 2030년 전환 일정에 따라 새로운 배포에 권장됩니다.
- RSA-4096 — 키의 수명이 10~20년인 코드 서명에 일반적입니다. 느리지만 보수적으로 안전합니다. 실제로
RSA
RSA는 대용량 메시지를 직접 암호화하지 않습니다. 속도가 느립니다. 1킬로바이트를 암호화하려면 수천 번의 모듈러 지수화가 필요합니다. 대신 하이브리드 암호화에서는 RSA가 사용됩니다. 임의의 AES 키를 생성하고, AES로 데이터를 암호화하고, RSA로 AES 키만 암호화합니다. 복호화 측에서는 RSA를 통해 키를 복호화한 다음 AES를 통해 데이터를 복호화합니다. 모든 TLS RSA 핸드셰이크는 이런 방식으로 작동합니다. 모든 PGP로 암호화된 이메일은 이런 방식으로 작동합니다.
패딩 문제
Plain("교과서") RSA(패딩 없이 m을 직접 암호화하는 방식)는 매우 안전하지 않습니다. 많은 공격은 가단성, 무작위성 부재, 소형 m와 같은 엣지 케이스를 악용합니다. 실제 RSA는 패딩 방식을 사용합니다:
- PKCS#1 v1.5 padding — 원래 패딩; 패딩이 유효한지 구현이 누출되는 경우 Bleichenbacher의 공격에 취약합니다. 여전히 널리 배포되어 있습니다.
- OAEP(최적 비대칭 암호화 패딩) — 최신 패딩; 선택된 암호문 공격에 저항합니다. 새로운 RSA 암호화에 사용하세요.
- PSS(확률적 서명 체계) — 최신 서명 패딩; 서명에 있어 PKCS#1 v1.5보다 우수합니다.
패딩 구성표는 배포된 프로토콜의 일부이며 선택 사항이 아닙니다. 패딩 구현의 실수는 실제 시스템에서 RSA 취약점이 발생하는 가장 일반적인 원인입니다.
RSA의 느린 폐기
RSA는 두 가지 이유로 교체됩니다.
- 키 크기. RSA-3072 키는 동급 키보다 큽니다. 타원 곡선 키를 10배로 늘립니다. TLS 핸드셰이크 및 저장 비용은 규모에 따라 합산됩니다.
- 양자 저항. 충분히 큰 양자 컴퓨터는 Shor의 알고리즘을 통해 다항식 시간에 RSA를 인수분해합니다. ECC도 취약하지만 양자 저항성 대안이 배포하기가 더 쉽습니다.
TLS 1.3에서는 ECDHE를 위해 RSA 키 교환을 더 이상 사용하지 않습니다. 최신 인증 기관 서명이 ECDSA로 이동하고 있습니다. RSA는 설치 기반 호환성(PGP, JWT, 스마트 카드, 코드 서명)을 위해 지속되며 수년간 유지됩니다.
포스트 퀀텀 질문
RSA를 깨뜨릴 수 있는 양자 컴퓨터가 수십 년 뒤에나 오더라도, 오늘날에는 나중에 복호화할 수 있다는 가정하에 장기적인 가치를 지닌 암호화된 데이터가 수집되고 있습니다. 정부 케이블, 의료 기록, 지적 재산 — "지금 수확하고 나중에 해독"하는 것이 현재의 위협 모델입니다. NIST의 포스트 양자 표준(키 캡슐화를 위한 CRYSTALS-Kyber, 서명을 위한 CRYSTALS-Dilithium)은 하이브리드 구성에서 RSA와 함께 배포되고 있습니다. 장기 기밀 데이터에 대한 Pure-RSA 배포는 점점 더 부적절한 것으로 간주되고 있습니다.
자주 묻는 질문
- RSA는 2026년에도 여전히 안전할까요?
- RSA-2048 이상은 기존의 적들에 맞서 안전합니다. 암호에는 알려진 실제 중단이 없습니다. 미래의 양자 적에 맞서 RSA는 충분히 큰 양자 하드웨어가 존재하면 다항식 시간 내에 깨질 수 있습니다(아마도 5~20년 후). 장기 기밀 데이터는 이미 하이브리드 포스트퀀텀 방식으로 이동하고 있어야 합니다.
- RSA가 AES에 비해 왜 그렇게 느린가요?
- RSA는 거대한 모듈식 지수화를 기반으로 하는 공개 키(비대칭) 알고리즘입니다. AES는 하드웨어 가속을 통해 128비트 블록에서 작동하는 대칭 알고리즘입니다. AES는 바이트당 대략 1000배 더 빠릅니다. 이것이 바로 거의 모든 실제 시스템이 RSA를 사용하여 세션 키를 교환한 다음 AES로 대량 데이터를 암호화하는 이유입니다.
- RSA 암호화와 RSA 서명의 차이점은 무엇입니까?
- 그들은 동일한 수학을 반대 방향으로 사용합니다. 암호화: 공개키로 암호화하고, 개인키로 복호화합니다. 서명: 개인 키로 "암호화"(서명이라고 함), 공개 키로 "해독"(검증이라고 함). 암호화 기본 요소는 세부 사항(패딩)이 다르므로 둘 다에 동일한 키를 사용하면 안 됩니다. 별도의 서명 키와 암호화 키가 표준입니다.
- 65537이 RSA 공개 지수로 사용되는 이유는 무엇입니까?
- 이는 효율적인 계산을 허용하는 희소 이진 표현을 사용하여 암호화/검증을 빠르게 수행할 수 있을 만큼 작은(단 17번의 곱셈) 페르마 소수(2^16 + 1)입니다. 더 크거나 작은 값은 작동하지만 속도가 느리거나 미묘한 취약성 위험이 있습니다. 65537은 관례에 따라 보편화되었습니다.
- 나만의 RSA 키를 안전하게 생성할 수 있나요?
- 잘 테스트된 라이브러리(OpenSSL, libsodium, GnuPG) 및 CSPRNG를 사용하세요. 자체 소수성 테스트를 진행하거나 처음부터 RSA를 구현하지 마십시오. 실패 모드는 미묘하고 치명적입니다. <code>ssh-keygen -t rsa -b 3072</code> 또는 이에 상응하는 키를 생성하는 것은 괜찮습니다. 수학을 직접 쓰는 것은 아닙니다.