이전 글에서는 RSA의 원리와 그 구현에 대해 간단히 소개하였으며, 이번 글에서는 ctf의 RSA Puzzle들에 적용할 수 있는 방법들을 몇가지 소개할 예정이다.
(RSA Puzzle이라는 용어를 사용하는 이유에 관해서는 secmem - RSA Puzzles를 참고)
Weak N
RSA의 여러 인자 중 N은 RSA의 원리와 안전성 보장에 직결되어있는 요소이다. 이러한 N이 특정한 취약점을 지녀 쉽게 인수분해되거나 phi(N)이 쉽게 계산되어, RSA 암호화 전체를 파훼할 수 있게 되어버린다.
다음은 N에 발생할 수 있는 취약점 중 몇가지이다.
Small N
N이 작을 경우, N을 쉽게 인수분해할 수 있다는 것은 자명하다.
현재의 경우 N이 100비트 정도의 수라면 가정용 데스크탑에서도 거의 즉시 인수분해되며, 더 많은 시간과 더 좋고 많은 장비를 투자한다면 조금 더 큰 수도 인수분해가 충분히 될 수 있다.
N with weak factors
현실에서는 존재하지 않는 경우이나, CTF에서는 간혹 기본문제로 등장할 가능성이 있는 경우이다.
- N이 소수 : N이 소수임을 확인하는 것은 빠르게 확인할 수 있고, ϕ(N)=N−1임을 쉽게 알 수 있기 때문에 RSA의 보안성이 깨지게 된다.
- N이 제곱수 : 마찬가지로, N이 제곱수인지 판별하고 제곱근을 구하는 것은 매우 쉬운 일이다. 이 경우 √N이 소수인지를 판별하거나 인수분해하면 되므로, 의도한 것보다 안전하지 않을 수 있다.
- N의 소인수가 다수 : 소인수가 k개일 경우, naive한 방법으로도 소인수분해에 필요한 시간은 최대 O(N1/k)이므로 의도한 것보다 취약한 조건이 된다.
마지막으로 위 세 경우보다 자주 등장하는 경우로, 두 소인수의 크기가 비슷한 경우 fermat factorization을 사용하여 N을 인수분해할 수 있다.
자세히 알아보자면, 우선 N의 인수로 2를 사용하는 경우는 거의 없으며, 그렇지 않더라도 쉽게 전처리가 가능하다. 따라서 N을 홀수라고 가정하고, 홀수 N에 대해 두 약수 p, q는 N=pq를 만족한다.
p와 q 모두 홀수이다. 따라서 차이가 짝수이므로, 차이를 2a라 하면 p=k+a, q=k-a라고 가정할 수 있다.
식을 조금 정리하면, N+a2=k2임을 알 수 있으며 a를 0부터 1씩 증가시키는 것으로 p와 q를 찾을 수 있다.
Small Public Exponent
Cuberoot Attack
흔히 Cuberoot attack이라고 부르나, 굳이 e=3인 경우는 아니어도 성립할 수 있는 공격법이다.
공개 지수 e가 작고 메세지가 적당히 짧을 경우, Me<N일 가능성이 존재한다. 이 경우 C의 e제곱근을 구하기만 하면 M을 복원할 수 있다.
반드시 Me<N가 아니더라도 Me를 N으로 나눈 몫이 충분히 작다면 kN+C의 e제곱근을 구해 M을 복원할 가능성이 충분히 존재한다.
Hastad’s Broadcast Attack
CRT는 정수론에서 종종 강력하게 활용되는 아이디어이다. 마찬가지로 RSA를 공격할 때에도 강력하게 작용하는데, 공개지수가 작고 여러 메세지-암호문 쌍을 습득했을 때 그러하다.
위의 Cuberoot attack의 경우 메세지-암호문 쌍이 단 하나여도 된다는 장점이 존재하나, Me를 N으로 나눈 몫이 충분히 작아야한다. 반면 Hastad’s Broadcast Attack은 CRT를 활용하여 N의 크기를 키우고, Me가 N보다 작도록 만드는 것이 핵심이다.
Cuberoot Attack에 비해 Me가 커도 된다는 장점이 있으며, 단점은 여러 메세지-암호문 쌍이 필요하다는 것이라고 요약할 수 있다.
이전에는 공개지수로 3과 65537을 함께 자주 사용하였다. 3을 사용하던 이유는 거듭제곱에 필요한 시간이 적기 때문이었으나, 위의 Cuberoot Attack과 Hastad’s Broadcast Attack 등 위험성이 널리 알려져 있기 때문에, 더 이상 사용하지 않는다. 마찬가지로 N이 메세지에 비해 크기가 너무 클 경우 이러한 공격법이 허용될 수 있기 때문에, RSA를 공격하거나 구축할 때 고려해야할 요소이다. 요즈음에는 대부분 e=65537을 사용하여 이 공격들을 쉽게 차단하고 있다. CTF의 경우, e=3, e=11, e=17 등 e가 20보다 작다면 한 번쯤 의심해볼만한 공격법이라고 할 수 있겠다.
End Card
Summary
- Weak N - 취약한 소인수 및 작은 N, Fermat Factorization
- Small Public Exponent - Cuberoot Attack, Hastad’s Broadcast Attack
Next Post
- Wiener Attack
- Boneh-Durfree Attack