RSA 암호는 1977년 론 리베스트, 아디 샤미르, 레너드 애들먼에 의해 개발된 공개 키 암호 방식이다. 키 생성, 키 배포, 암호화 및 복호화 단계를 거치며, 매우 큰 양의 정수를 이용하여 암호화 및 복호화를 수행한다. RSA의 보안은 큰 수의 소인수분해 문제의 어려움에 기반하며, 키 길이에 따라 안전성이 달라진다. 암호화, 복호화뿐만 아니라 디지털 서명에도 사용될 수 있으며, 패딩 방식을 통해 다양한 취약점을 보완한다.
더 읽어볼만한 페이지
암호학 - 양자 컴퓨터 양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다.
암호학 - 암호화 암호화는 정보를 보호하기 위해 사용되는 기술로서, 단순한 문자 치환 방식에서 시작하여 현대에는 강력한 암호화 표준과 다양한 종류로 발전했으며, IT 시스템 전반에 적용되지만, 사이버 공격과 양자 컴퓨팅의 발전에 대한 대응이 필요한 기술이다.
RSA 암호
2. 역사
휘트필드 디피와 마틴 헬만이 1976년에 공개 키 암호라는 개념을 처음 발표했다.[4] 이듬해인 1977년, 론 리베스트, 아디 샤미르, 레오나드 애들먼이 RSA 암호 방식을 발명했다.[7] RSA라는 이름은 이들 세 명의 성의 첫 글자를 따서 지어졌다.
''e''는 짧은 비트 길이와 작은 해밍 무게를 가지는 것이 암호화 효율을 높인다. 가장 일반적인 ''e'' 값은 65537이다.[15]
''e''는 공개 키의 일부로 공개된다.
5. 확장 유클리드 알고리즘을 사용하여 ''d'' × ''e''를 ''λ''(''N'')로 나누었을 때 나머지가 1인 정수 ''d''를 계산한다. (''d'' ''e'' ≡ 1 (mod ''λ''(''N''))).
''d''는 ''λ''(''N'')을 모듈로 한 ''e''의 모듈러 역수이다.
베주 항등식에 따라, ''d''는 확장 유클리드 알고리즘을 사용하여 효율적으로 계산할 수 있다.
''d''는 개인 키 지수로, 비밀로 유지한다.
공개 키는 ''N''과 ''e''로 구성되며, 개인 키는 ''N''과 ''d''로 구성된다. ''p'', ''q'', ''λ''(''N'')는 ''d''를 계산하는 데 사용되므로 비밀로 유지해야 하며, ''d''가 계산된 후에는 모두 삭제해도 안전하다.[16]
원래 RSA 논문에서는[2] 오일러의 토션 함수 ''φ''(''n'') = (''p'' − 1)(''q'' − 1)을 사용하여 개인 지수 ''d''를 계산했지만, PKCS#1과 같은 현대 RSA 구현에서는 ''λ''(''n'')을 사용한다. ''φ''(''n'')은 항상 ''λ''(''n'')으로 나누어지므로, 두 방법 모두 작동한다. 그러나 ''φ''(''n'')을 사용하면 때때로 필요한 것보다 더 큰 ''d'' 값이 생성될 수 있다. FIPS 186-4(섹션 B.3.1)와 같은 일부 표준에서는 ''d'' < ''λ''(''n'')을 요구할 수 있으며, 이를 만족하지 않는 "과도한" 개인 지수는 ''λ''(''n'')을 모듈로 하여 작고 동등한 지수를 얻을 수 있다.
(''p'' − 1)과 (''q'' − 1)의 공통 인수는 ''n'' − 1 = ''pq'' − 1 = (''p'' − 1)(''q'' − 1) + (''p'' − 1) + (''q'' − 1)의 인수 분해에 존재하므로,[17] (''p'' − 1)과 (''q'' − 1)은 2 외에 매우 작은 공통 인수만 가져야 한다.[2][18][19][20]
원래 RSA 논문에서는 ''d''를 선택하고 ''e''를 계산했지만, 현대 구현에서는 ''e''를 선택하고 ''d''를 계산하는 방식을 사용한다. 선택된 키는 작을 수 있지만, 계산된 키는 그렇지 않으므로, RSA 논문의 알고리즘은 복호화를 최적화하는 반면, 현대 알고리즘은 암호화를 최적화한다.[2][21]
3. 2. 암호화
B가 ''M''이란 메시지를 A에게 보내고 싶어할 때, B는 ''M''을 ''N''보다 작은 숫자 m으로 변환한다. (이 변환법(padding scheme)은 A에게도 미리 알려져 있어야 한다. 예를 들어, 메시지를 토막내어 하나의 메시지가 일정 수의 비트를 넘지 않게 하는 방법이 있다. 하지만 실제로는 이중보안을 위해 더욱 복잡한 변환법이 사용된다.) 그리고 B는 A의 공개키 <''N'', ''e''>를 획득하고, 다음과 같이 ''c''를 계산한다.
:
그리고 이 ''c''를 A에게 보낸다.[1]
밥(Bob)이 앨리스(Alice)의 공개 키를 얻은 후, 앨리스에게 메시지 M을 보낼 수 있다.
이를 위해, 밥은 먼저 M (엄밀히 말하면, 패딩되지 않은 평문)을 정수 m (엄밀히 말하면, 패딩된 평문)으로 변환하는데, 이는 합의된 가역적 프로토콜인 패딩 방식을 사용하여 을 만족한다. 그런 다음 앨리스의 공개 키 e를 사용하여 암호문 c를 계산하는데, 이는 다음과 같다.
이것은 모듈러 지수 연산을 사용하여 매우 큰 숫자에서도 상당히 빠르게 수행될 수 있다. 밥은 그런 다음 c를 앨리스에게 전송한다.
실제 프로그래밍 구현 시에는 큰 수의 연산 부담을 줄이기 위해 중국인의 나머지 정리를 기반으로 한 효율적인 복호화 방법을 사용한다. OpenSSL, Java, .NET 등 주요 암호화 라이브러리들이 이 방식을 채택하고 있다.[27]
이 방법은 , 값을 보존하고, , , 값을 미리 계산하여 복호화 과정에서 활용한다.
암호문은 다음과 같이 복호화된다.
이 방식은 , 처럼 작은 수를 사용하여 모듈러 연산을 수행하므로 연산 속도가 빨라진다. 또한, 의 최대값이 보다 작기 때문에, 평문을 얻기 위한 추가적인 나눗셈 과정이 필요 없다.
5. 서명
RSA 암호는 암호화뿐만 아니라 디지털 서명에도 사용될 수 있다. 앨리스가 밥에게 서명된 메시지를 보내려면, 먼저 메시지의 해시 값을 생성하고, 이를 자신의 개인 키 d로 제곱(모듈로 n)하여 "서명"을 만든다. 이 서명은 메시지에 첨부되어 밥에게 전송된다.
밥은 메시지를 받으면 앨리스의 공개 키 e를 사용하여 서명을 검증한다. 서명을 e 제곱(모듈로 n)하고, 결과 해시 값을 메시지의 해시 값과 비교한다. 두 값이 일치하면, 밥은 메시지가 앨리스에게서 왔고, 전송 중에 변경되지 않았음을 확인할 수 있다.
이는 지수 법칙에 따라
이 성립하기 때문이다. 즉, 개인 키를 사용하여 서명을 생성하고, 공개 키를 사용하여 검증할 수 있다.
RSA 암호에서 서명은 다음과 같은 방식으로 이루어진다.[1]
문서 → 비밀 키 (서명 생성) → 서명 값
서명 값 → 공개 키 (서명 검증) → 문서
RSA 암호는 평문과 암호문의 정의역이 같기 때문에, 비밀 키를 사용하여 임의의 문서에 대한 서명 값을 생성하고, 공개 키를 사용하여 이 서명 값을 ''암호화''하여 원래 문서와 비교함으로써 서명을 검증할 수 있다. 하지만, 실제로는 RSA 암호의 보안 취약점 때문에 해시 함수와 패딩을 함께 사용하여 서명 위조를 방지한다.[1]
패딩을 포함한 서명 방식의 예로는 RSA_PSS with SHA-1 등이 있다.[1]
6. 패딩
실제 RSA 구현에서는 보안을 위해 패딩을 사용한다. 값을 암호화하기 전에 무작위화된 패딩을 삽입하여, 그 값이 안전하지 않은 평문의 범위에 속하지 않도록 하고, 패딩된 메시지가 다양한 가능한 암호문 중 하나로 암호화되도록 한다.[25]
PKCS#1과 같은 표준은 RSA 암호화 전에 메시지를 안전하게 패딩하도록 설계되었다. 초기 버전(1.5 버전까지)은 실질적인 적응형 선택 암호문 공격에 취약하다는 것이 밝혀졌고, 특정 유형의 메시지에 대해 충분한 보안을 제공하지 못한다는 것도 발견되었다.[25] 이후 버전에는 이러한 공격을 방지하는 최적 비대칭 암호화 패딩(OAEP)이 포함되었다. 따라서 OAEP는 모든 새로운 애플리케이션에서 사용해야 하며, PKCS#1 v1.5 패딩은 가능한 한 교체해야 한다.
OAEP와 RSA 암호를 함께 사용하는 것을 RSA-OAEP라고 부르기도 한다. RSA-OAEP는 공개키 암호에서 가장 높은 안전성인 "적응적 선택 암호문 공격에 대한 식별 불가능성"을 갖는 것으로 나타났다.
7. 안전성
RSA 암호 시스템의 보안은 큰 수의 인수분해 문제와 RSA 문제라는 두 가지 수학적 문제의 어려움에 기반한다. RSA 암호문의 완전한 해독은 이 두 문제가 모두 어렵다는 가정 하에 불가능한 것으로 알려져 있다.[28]
RSA 문제는 합성수 $n$을 모듈로로 하는 $e$ 제곱근을 구하는 문제로 정의된다. 즉, 주어진 RSA 공개 키 $(n, e)$와 암호문 $c$에 대해, $c \equiv m^e \pmod n$을 만족하는 메시지 $m$을 찾는 것이다. 현재 RSA 문제를 해결하는 가장 유망한 방법은 모듈러스 $n$을 인수분해하는 것이다. 만약 공격자가 소인수 $p$와 $q$를 알아낼 수 있다면, 비밀 지수 $d$를 계산하고 암호문 $c$를 복호화할 수 있다.
하지만 고전적인 컴퓨터에서 큰 정수를 인수분해하는 효율적인(다항 시간) 알고리즘은 아직 발견되지 않았으며, 이러한 알고리즘이 존재하지 않는다는 증명도 없다. 정수 인수분해 문제에 대한 자세한 내용은 해당 문서를 참조하면 된다.
쇼어는 1994년에 양자 컴퓨터가 다항 시간 안에 인수분해를 할 수 있음을 보였고, 이는 양자 컴퓨터가 실용화되면 RSA 암호가 깨질 수 있음을 의미한다. 쇼어의 알고리즘을 참조하면 된다.
현재까지 공개적으로 알려진 가장 큰 RSA 숫자의 인수분해는 829비트(250자리, RSA-250)였다.[31] 이 인수분해에는 최첨단 분산 구현을 통해 약 2,700 CPU년이 소요되었다.
일반적으로 RSA 키는 1024~4096비트 길이를 사용한다. RSA 시큐리티(RSA Security)는 2003년에 1024비트 키가 2010년까지 해독될 가능성이 있다고 추정했지만,[32] 2020년 현재 이러한 키를 해독할 수 있는지는 알려져 있지 않다. 현재 권장되는 최소 키 길이는 2048비트이다.[33]
7. 1. 취약점 및 공격
RSA 암호는 여러 가지 취약점과 공격 방법에 노출될 수 있다.
낮은 암호화 지수 공격: 암호화 지수 $e$가 낮고(예: $e = 3$), 평문 $m$이 작은 경우($m < n^{1/e}$), 암호문 $c = m^e$는 모듈러스 $n$보다 작아진다. 이 경우, 암호문의 $e$ 제곱근을 정수 위에서 구하여 평문을 쉽게 복구할 수 있다.
선택 암호문 공격:
RSA는 곱셈 성질, 즉 $m_1^e m_2^e \equiv (m_1 m_2)^e \pmod n$을 가진다. 공격자는 이 성질을 이용하여, 자신이 선택한 암호문 $c' \equiv cr^e \pmod n$을 복호화하도록 요청하여 $mr \pmod n$을 얻고, 여기에 $r$의 모듈러 역수를 곱하여 평문 $m$을 얻을 수 있다.
동일한 평문이 동일한 지수 $e$와 서로 다른 $n$ 값으로 여러 수신자에게 암호화되어 전송되는 경우, 중국인의 나머지 정리를 통해 평문을 쉽게 복구할 수 있다. 이를 동보 통신의 오용이라고 한다.
결정적 암호화: RSA는 결정적 암호화 알고리즘이므로, 공격자는 가능성 있는 평문을 공개 키로 암호화하여 암호문과 비교하는 선택 평문 공격을 수행할 수 있다. 패딩되지 않은 RSA는 의미론적 안전성을 보장하지 않는다.
개인 키 및 인수분해: 개인 지수 $d$가 주어지면 모듈러스 $n$을 효율적으로 인수분해할 수 있다. 모듈러스의 인수분해가 주어지면, 해당 공개 키로 생성된 모든 개인 키를 얻을 수 있다.[15]
이러한 공격을 방지하기 위해 실제 RSA 구현에서는 패딩을 사용한다.
PKCS#1 v1.5 패딩: 초기 PKCS#1 버전(1.5까지)은 다니엘 블라이헨바허에 의해 적응형 선택 암호문 공격에 취약함이 밝혀졌다.
최적 비대칭 암호화 패딩(OAEP): 최신 버전의 PKCS#1 및 기타 표준에서는 이러한 공격을 방지하기 위해 OAEP를 사용한다. OAEP는 모든 새로운 애플리케이션에서 사용되어야 한다.
RSA-PSS: RSA 서명을 위한 확률적 서명 방식(RSA-PSS)도 안전한 패딩 방식 중 하나이다.
부채널 공격
타이밍 공격: 코처가 발견한 공격으로, 복호화 시간을 측정하여 개인 키 $d$를 추론할 수 있다. 암호학적 블라인딩으로 방어할 수 있다.
전력 분석 공격: CPU 전력 소비량의 변화를 분석하여 개인 키를 알아내는 공격이다.
분기 예측 분석 (BPA): 분기 예측기와 동시 멀티스레딩(SMT)을 사용하는 프로세서에서 스파이 프로세스를 통해 개인 키를 알아내는 공격이다.
잘못된 키 생성 및 난수 생성 문제
$p$와 $q$의 근접성: $p$와 $q$가 너무 가까우면 페르마 인수분해가 성공할 수 있다.
작은 소인수: $p-1$ 또는 $q-1$이 작은 소인수만 가지면 폴라드의 $p-1$ 알고리즘으로 $n$을 빠르게 인수분해할 수 있다.
작은 공개 지수: $e=3$과 같은 작은 공개 지수는 코퍼스미스 공격에 취약할 수 있다. 일반적으로 $e = 65537$이 사용된다.
취약한 난수 생성기: ROCA 취약점과 같이 취약한 난수 생성기를 사용하면 RSA 키가 쉽게 노출될 수 있다.
8. 구현
RSA 암호를 실제로 구현할 때는 PRNG 강도, 허용 가능한 공개 지수 등 고려해야 할 사항이 많아 구현이 어렵다. 책 《Go를 사용한 실용 암호학》에서는 가능하다면 RSA를 피하는 것을 제안한다.[45]
보안 매개변수가 1024인 경우, n은 1024비트라는 큰 자릿수의 수가 되며, d도 n과 거의 같은 자릿수의 수가 된다. 을 계산하기 위해, 이진법 알고리즘을 사용하면, 잉여 곱셈()을 1500회 정도 반복함으로써 실현할 수 있다. 이는 상당한 계산 시간을 필요로 하므로, 중국인의 나머지 정리를 사용하여,
:
로 구하는 경우가 있다.
큰 자릿수의 수를 다룰 경우, 확실하게 소수임을 보장하는 정수를 찾는 것은 쉽지 않다. 이 때문에 실제로는 소수라고 단언할 수는 없지만, 소수일 가능성이 매우 높은 자연수를 사용한다. 이러한 자연수의 생성은 밀러-라빈 테스트와 같은 확률적 소수 판별법에 의해 빠르게 수행할 수 있다. 확률적 소수 판별법을 통과한 자연수를 확률적 소수라고 한다. 확률적 소수에는 소수 외에 유사 소수가 포함되지만, 그 확률은 판별 횟수를 늘림으로써 매우 낮출 수 있다.
2002년 8월, 인도 공과대학의 아그라왈 등이 소수 판별을 다항 시간 내에 수행하는 AKS 소수 판별법을 발표했으나, 이는 다항식의 차수가 너무 높아 느리므로 아직 RSA 키 생성에 실용적으로 사용하기에는 부족하다.
10. RSA 암호와 소인수분해 문제의 관계
RSA 암호는 소인수분해 문제와 밀접하게 관련되어 있다. RSA 암호의 안전성은 큰 수를 소인수분해하는 것이 어렵다는 것에 기반한다.
RSA 암호 시스템은 두 개의 큰 소수 p와 q를 곱하여 N을 만들고, (p-1)과 (q-1)의 곱보다 작고 서로소인 정수 e를 선택하여 공개키 (N, e)를 생성한다. 비밀키 d는 확장된 유클리드 호제법을 통해 계산된다. 여기서 p와 q의 보안이 매우 중요하며, 공개키와 개인키가 생성된 후에는 이 두 숫자를 안전하게 지우는 것이 좋다.
RSA 암호의 해독은 RSA 문제와 큰 수의 인수분해 문제, 이 두 가지 수학적 문제의 어려움에 기반한다. 만약 이 문제들을 효율적으로 해결할 수 있는 알고리즘이 존재하지 않는다면, RSA 암호문의 완전한 해독은 불가능하다고 여겨진다.[28]
RSA 문제는 주어진 합성수 n을 모듈로 하는 e 제곱근을 구하는 문제이다. 즉, `c ≡ m^e (mod n)`을 만족하는 m을 찾는 것이다. (여기서 (n, e)는 RSA 공개키, c는 RSA 암호문이다.) 현재 RSA 문제를 해결하는 가장 유망한 방법은 n을 인수분해하는 것이다. 만약 공격자가 n을 p와 q로 인수분해할 수 있다면, 비밀 지수 d를 계산하여 암호문 c를 복호화할 수 있다.[28]
현재까지 고전적인 컴퓨터에서 큰 정수를 다항 시간 안에 인수분해하는 방법은 발견되지 않았지만, 이것이 불가능하다는 증명도 없다. 정수 인수분해를 참고하면, 이 문제에 대한 더 자세한 논의를 볼 수 있다.
피터 쇼어가 1994년에 발표한 쇼어의 알고리즘에 따르면, 양자 컴퓨터가 실용화되면 다항 시간 안에 소인수분해가 가능해져 RSA 암호가 깨질 수 있다.
RSA 암호가 선택 평문 공격에 대해 완전 해독될 수 없다는 것은 RSA 가설과 동치이다. 그러나 RSA 암호를 역산하는 것이 인수분해만큼 어렵다는 증거는 아직 발견되지 않았다.[30]
암호 이론 분야에서는 다항 시간 내에 해독할 수 없는 암호 방식을 안전하다고 정의한다. 현재까지 알려진 바로는 RSA 암호는 이러한 의미에서 안전하다고 여겨지며, 그 반증은 없다.
10. 1. 소인수분해 가능한 범위
RSA 암호 시스템의 보안은 큰 수의 인수분해 문제와 RSA 문제라는 두 가지 수학적 문제에 기반을 두고 있다. 이 두 문제가 어렵다는 가정 하에 RSA 암호문의 완전한 해독은 불가능하다고 여겨진다.[28]
RSA 문제는 합성수 n을 모듈로로 하는 e 제곱근을 구하는 문제로 정의된다. 즉, 주어진 RSA 공개 키 (n, e)와 암호문 c에 대해 `c ≡ m^e (mod n)`을 만족하는 m을 찾는 것이다. 현재 RSA 문제를 해결하는 가장 유망한 방법은 n을 인수분해하는 것이다. 공격자가 n을 p와 q로 인수분해하면, `lcm(p-1, q-1)`을 계산하여 비밀 지수 d를 알아내고 c를 복호화할 수 있다.[28]
고전적인 컴퓨터에서 큰 정수를 인수분해하는 다항 시간 알고리즘은 아직 발견되지 않았지만, 존재하지 않는다는 것도 증명되지 않았다. 다중 다항식 2차 체(MPQS)와 같은 알고리즘을 사용하여 공개 모듈러스 n을 인수분해할 수 있다.
1999년에는 수백 대의 컴퓨터를 사용하여 약 7개월 만에 RSA-512를 인수분해하는 데 성공했다.[29] 2009년에는 벤자민 무디가 공개 소프트웨어와 데스크탑 컴퓨터를 사용하여 73일 만에 512비트 RSA 키를 인수분해했다.[29] 2020년 현재까지 공개적으로 알려진 가장 큰 RSA 숫자는 RSA-250으로, 829비트(250자리)이며, 인수분해에 약 2,700 CPU년이 걸렸다.[31]
RSA 키는 일반적으로 1024~4096 비트 길이를 사용한다. 2003년 RSA 시큐리티는 1024비트 키가 2010년까지 해독될 가능성이 있다고 추정했지만,[32] 2020년 현재 이러한 키를 해독할 수 있는지는 알려져 있지 않다. 최소 권장 사항은 2048비트 이상이다.[33] n이 300비트 이하인 경우에는 개인용 컴퓨터에서도 몇 시간 만에 인수분해할 수 있다. 1999년에 RSA-155(512비트)가 인수분해되었고, 2011년에는 512비트 코드 서명 인증서를 사용하는 악용 사례가 보고되었다.[34]
1994년 피터 쇼어는 양자 컴퓨터가 다항 시간 내에 인수분해를 할 수 있어 RSA를 깨뜨릴 수 있음을 보여주었다.[49] 쇼어의 알고리즘은 양자 컴퓨터가 실용화되면 RSA 암호의 안전성을 보장할 수 없음을 시사한다.[49]
RSA사는 1991년부터 2007년까지 "RSA 소인수분해 챌린지"를 실시하여 소인수분해 가능한 정수의 비트 수를 조사했다. 다음은 챌린지에서 소인수분해된 RSA 숫자들이다.
RSA 숫자
비트 수
10진수 자릿수
인수분해 날짜
RSA-100
330
1991년 4월 1일
RSA-110
364
1992년 4월 14일
RSA-120
397
1993년 6월 9일
RSA-129
426
1994년 4월 26일
RSA-130
430
1996년 4월 10일
RSA-140
463
1999년 2월 2일
RSA-150
496
2004년 4월 16일
RSA-155
512
1999년 8월 22일
RSA-160
530
2003년 4월 1일
RSA-170
563
2009년 12월 29일
RSA-576
576
174
2003년 12월 3일
RSA-180
596
2010년 5월 8일
RSA-190
629
2010년 11월 8일
RSA-640
640
2005년 11월 2일
RSA-200
663
200
2005년 5월 9일
RSA-210
696
210
2013년 9월 26일
RSA-704
704
2012년 7월 2일
RSA-220
729
2016년 5월 13일
RSA-230
762
2018년 8월 15일
RSA-232
768
2020년 2월 17일
RSA-768
768
2009년 12월 12일
RSA-240
795
2019년 12월 2일
RSA-250
829
2020년 2월 28일
1977년 마틴 가드너는 사이언티픽 아메리칸지에 129자리 수와 공개 지수 e = 9007을 사용한 RSA 암호문을 게재하고, 해독 성공자에게 매사추세츠 공과대학교에서 100 달러를 지급하는 현상금 문제를 제시했다.[51] 당시에는 해독에 4경 년이 필요할 것으로 예측되었으나,[51] 1994년 4월, 국제 협력을 통해 2차 체법으로 해독에 성공했다.[52]
11. RSA 암호의 오용
RSA 암호는 여러 가지 잘못된 사용 방식으로 인해 보안 취약점이 발생할 수 있다.
; 공통 법
: 여러 사용자가 동일한 법 $n$을 공유하고, 각자 다른 개인키 $d$와 공개키 $e$를 사용하는 것은 안전하지 않다. 만약 한 사용자의 $n$, $e$, $d$ 조합을 알게 되면, $n$의 소인수분해가 쉬워져 다른 사용자의 개인키도 알아낼 수 있기 때문이다.
; 동보 통신
: 동일한 평문을 여러 수신자에게 각자의 공개키로 암호화하여 보내는 것도 취약하다. 만약 같은 $e$ 값을 가진 공개키(주로 3 또는 65537이 사용됨)로 암호화된 $e$개 이상의 암호문을 얻으면, 중국인의 나머지 정리를 통해 평문을 복원할 수 있다.[22] 이를 막기 위해, 암호화 전에 난수를 생성하여 평문에 삽입하는 패딩을 사용한다.
; 취약한 평문
작은 평문: 낮은 암호화 지수(예: $e = 3$)와 작은 $m$ 값 ($m < n^{1/e}$)으로 암호화하면, 암호문의 $e$ 제곱근을 구하여 쉽게 해독할 수 있다.
정해진 평문: RSA 암호는 결정적 암호화 알고리즘이므로, 공격자가 예상되는 평문을 공개키로 암호화하여 암호문과 비교하는 선택 평문 공격이 가능하다. 패딩이 없는 RSA는 이러한 공격에 취약하다.[24]
; 곱셈 속성
: RSA는 두 암호문의 곱이 해당 평문의 곱의 암호화와 같다는 속성($m_1^e m_2^e \equiv (m_1 m_2)^e \pmod n$)을 갖는다. 이 때문에 선택 암호문 공격이 가능하다. 공격자는 해독하려는 암호문 $c$ 대신, 변형된 암호문 $c' \equiv cr^e \pmod n$ ($r$은 공격자가 선택)을 해독하도록 요청할 수 있다. 해독 결과 $mr \pmod n$을 얻으면, $r$의 역수를 곱해 $m$을 얻을 수 있다.
이러한 취약점을 방지하기 위해 실제 RSA 암호 구현에서는 패딩을 사용한다. PKCS#1 같은 표준은 RSA 암호화 전에 메시지를 안전하게 패딩하도록 설계되었다. 최적 비대칭 암호화 패딩(OAEP)은 이러한 공격을 방지하는 효과적인 방법이며, 최신 응용 프로그램에서 널리 사용된다.
참조
[1]
웹사이트
Dr Clifford Cocks CB
http://www.bristol.a[...]
Bristol University
2008-02-19
[2]
학술지
A Method for Obtaining Digital Signatures and Public-Key Cryptosystems
http://people.csail.[...]
1978-02
[3]
학술지
Quantum-computing pioneer warns of complacency over Internet security
https://www.nature.c[...]
2020-10-30
[4]
학술지
New directions in cryptography
1976-11
[5]
웹사이트
The Early Days of RSA – History and Lessons
https://people.csail[...] [6]
웹사이트
The RSA Cryptosystem: History, Algorithm, Primes
http://www.math.uchi[...]
2007-08-20
[7]
학술지
Still Guarding Secrets after Years of Attacks, RSA Earns Accolades for its Founders
http://www.msri.org/[...]
2003-06
[8]
웹사이트
A Note on Non-Secret Encryption
https://www.gchq.gov[...]
1973-11-20
[9]
문서
From Private to Public Key Ciphers in Three Easy Steps
https://ww2.amstat.o[...]
Jim Sauerberg.
[10]
서적
The Mathematics of Encryption: An Elementary Introduction
https://books.google[...]
Margaret Cozzens and Steven J. Miller.
[11]
서적
Introduction to Cryptography with Open-Source Software
https://books.google[...]
Alasdair McAndrew.
[12]
문서
Public key Cryptography
https://web.archive.[...]
Surender R. Chiluka.
[13]
문서
Cryptography As a Teaching Tool
https://sites.math.w[...]
Neal Koblitz.
[14]
웹사이트
RSA Security Releases RSA Encryption Algorithm into Public Domain
http://www.rsa.com/p[...] [15]
학술지
Twenty Years of attacks on the RSA Cryptosystem
http://crypto.stanfo[...] [16]
서적
Applied Cryptography
Bruce Schneier
1996
[17]
웹사이트
Further Attacks on Server-Aided RSA Cryptosystems
https://citeseerx.is[...] [18]
서적
A Course in Number Theory and Cryptography
Neal Koblitz
1987
[19]
간행물
common factors in (''p'' − 1) and (''q'' − 1)
https://mta.openssl.[...]
2015-07-31
[20]
간행물
common factors in (''p'' − 1) and (''q'' − 1)
https://mta.openssl.[...]
2015-08-01
[21]
간행물
Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1
Network Working Group
2003-02
[22]
서적
Advances in Cryptology – CRYPTO '85 Proceedings
[23]
학술지
Small Solutions to Polynomial Equations, and Low Exponent RSA Vulnerabilities
https://www.di.ens.f[...] [24]
서적
Proceedings of the fourteenth annual ACM symposium on Theory of computing - STOC '82
Association for Computing Machinery
1982-05-05
[25]
서적
Advances in Cryptology — EUROCRYPT 2000
Springer
2000
[26]
웹사이트
RSA Algorithm
https://www.di-mgt.c[...] [27]
웹사이트
OpenSSL bn_s390x.c
https://github.com/o[...]
2024-08-02
[28]
서적
Network security traceback attack and react in the United States Department of Defense network
https://books.google[...]
Trafford
2013-03-29
[29]
웹사이트
Factorization of a 512-bit RSA Modulus
https://www.iacr.org[...]
Eurocrypt
2000
[30]
컨퍼런스
Riemann's Hypothesis and Tests for Primality
https://www.cs.cmu.e[...] [31]
웹사이트
Factorization of RSA-250
https://lists.gforge[...]
Cado-nfs-discuss
2020-02-28
[32]
웹사이트
TWIRL and RSA Key Size
http://emc.com/emc-p[...]
RSA Laboratories
2003-05-06
[33]
웹사이트
NIST Special Publication 800-57 Part 3 Revision 1: Recommendation for Key Management: Application-Specific Key Management Guidance
http://nvlpubs.nist.[...]
National Institute of Standards and Technology
2015-01-22
[34]
웹사이트
RSA-512 certificates abused in-the-wild
https://blog.fox-it.[...]
2011-11-21
[35]
학술지
Cryptanalysis of short RSA secret exponents
http://www.cits.rub.[...]
1990-05
[36]
학회
The Return of Coppersmith's Attack: Practical Factorization of Widely Used RSA Moduli
https://crocs.fi.mun[...]
2017-11
[37]
웹사이트
Flaw Found in an Online Encryption Method
https://www.nytimes.[...]
2012-02-14
[38]
웹사이트
Ron was wrong, Whit is right
http://eprint.iacr.o[...] [39]
웹사이트
New research: There's no need to panic over factorable keys–just mind your Ps and Qs
https://freedom-to-t[...]
2012-02-15
[40]
학회
Remote timing attacks are practical
http://crypto.stanfo[...] [41]
웹사이트
'BERserk' Bug Uncovered In Mozilla NSS Crypto Library Impacts Firefox, Chrome
https://www.darkread[...]
2014-09-25
[42]
웹사이트
RSA Signature Forgery in NSS
https://www.mozilla.[...] [43]
학회
On the power of simple branch prediction analysis
[44]
서적
2010 Design, Automation & Test in Europe Conference & Exhibition (DATE 2010)
2024-11-21
[45]
웹사이트
Practical Cryptography With Go
https://leanpub.com/[...]
2022-01-04
[46]
문서
cipher
[47]
서적
数学の魔法の宝箱
ソフトバンク クリエイティブ
[48]
문서
유클리드 호제법
[49]
웹사이트
量子コンピューターが暗号技術を「破壊」する?その真偽を検証してみた
https://xtech.nikkei[...]
2020-01-30
[50]
간행물
Advances in Cryptology — CRYPTO 2001
http://eprint.iacr.o[...]
Springer-Verlag
[51]
학술지
Mathematical Games, August 1977
http://simson.net/re[...] [52]
뉴스
RSA-129
https://ns1.omnitech[...]
Internet news
2020-12-10
[53]
웹사이트
The Magic Words are Squeamish Ossifrage
http://bit-player.or[...]
Advances in Cryptology - ASIACRYPT'94
1994-07
[54]
웹사이트
http://www.bristol.a[...] [55]
학술지
A Method for Obtaining Digital Signatures and Public-key Cryptosystems
http://doi.acm.org/1[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.