RSA LSB Oracle Attack
2020년 5월 11일
암호문을 복호화해서 맨 마지막 비트(least significant bit)를 알려주는 RSA Oracle이 주어졌을 때 적용할 수 있는 공격법이다.
RSA의 평문(plaintext)을 , 암호문(ciphertext)을 라고 놓았을 때, 복호화는 다음과 같이 진행된다:
를 같은 방식으로 복호화시켜보자.
(이 되는 부분은 편의를 위해 생략했다. RSA를 설명한 글의 복호화 증명과 완전히 동일하다.)
즉, RSA Oracle에 를 입력하면 를 으로 나눈 나머지를 계산하고 맨 마지막 비트를 알려준다. 평문은 보다 작다고 가정되므로 두 가지 경우를 고려할 수 있다.
- 를 으로 나눈 나머지는 으로, n은 언제나 홀수이기 때문에(짝수이면 n의 두 소수 인수 중 하나는 2로 고정되기 때문에 매우 위험한 RSA이므로 사용되지 않는다!) 은 홀수이고, LSB는 1이다.
- 를 으로 나눈 나머지가 이기 떄문에 짝수이므로 LSB가 0이다.
똑같은 방식으로 를 입력하면 를 으로 나눈 나머지를 계산하고 맨 마지막 비트를 알려준다. 이전 결과에 이어서 총 네 가지 경우로 나눌 수 있다.
1-1. : 를 으로 나눈 나머지는 으로, LSB가 1이다. 1-2. : 를 으로 나눈 나머지는 으로, LSB가 0이다.
2-1. : 를 n으로 나눈 나머지는 으로, LSB가 1이다. 2-2. : 를 으로 나눈 나머지는 로, LSB가 0이다.
이렇게 두 번의 입력으로 가능한 의 범위를 1/4로 줄여놓았다. 이런 식으로 계속 반복하여 가능한 의 범위를 반씩 좁혀나가면 평문을 얻을 수 있다.
공격 예는 https://github.com/ashutosh1206/Crypton/blob/master/RSA-encryption/Attack-LSBit-Oracle/README.md에 정리되어 있다.