만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

RSA 크래킹

면접 대비

시간 제한3초메모리 제한1024 MB

요약
1000보다 작은 두 소수의 곱인 n과 공개 지수 e가 주어질 때, 개인 지수 d를 구합니다.
난이도

쉬움10점 중 3점

유형
수학, 정수론, 완전 탐색
정답자
아직 제출이 없습니다

문제

이미지 출처: Sean MacEntee (Flickr), CC BY 2.0

RSA는 널리 쓰이는 공개키 암호 체계다. 이 체계로 두 당사자(사람이나 컴퓨터)는 대화를 엿듣는 누구에게도 정보를 드러내지 않고 비밀 메시지를 주고받을 수 있다. 많은 웹사이트가 안전한 https 연결로 접속할 때 RSA를 사용한다. RSA에서 각 당사자는 서로 다른 두 키를 가진다. 공개되는 공개키와 비밀로 유지되는 개인키다. 특정 수신자에게 보낼 메시지를 암호화하려면 송신자가 수신자의 공개키를 쓴다. 수신자는 자신의 개인키로 메시지를 복호화한다.

RSA 공개키 (n,e)(n, e)는 두 수 nn과 ee로 이루어진다. 수 nn은 서로 다른 두 소수 pp와 qq의 곱이다. 실제 응용에서는 안전성을 위해 nn이 수백 자리의 十진수가 된다.

φ(n)\varphi(n)은 오일러 토션트 함수이며, 이 경우 (p−1)(q−1)(p-1) (q-1)과 같다. 개인키는 (n,d)(n, d)로 이루어지며, nn은 공개키의 nn과 같다. dd는 다음 합동식의 해다.

de≡1 mod φ(n)de \equiv 1 \bmod \varphi(n)

형식적으로, 세 정수 aa, bb, cc에 대해 합동식

a≡b mod ca \equiv b \bmod c

는 a−b=kca - b = k c를 만족하는 정수 kk가 존재하면 성립한다.

송신자는 메시지 MM을 Me mod nM^e \bmod n으로 계산해 수신자에게 보낸다. 여기서 MM은 단순화를 위해 pp와 qq보다 작은 정수라고 가정한다. 수신자는 오일러 정리에 따라 Mφ(n)≡1 mod nM^{\varphi(n)} \equiv 1 \bmod n이므로 (Me)d≡Med≡Mkφ(n)+1≡Mφ(n)kM≡M mod n(M^e)^d \equiv M^{ed} \equiv M^{k \varphi(n) + 1} \equiv M^{\varphi(n) k} M \equiv M \bmod n을 계산한다. 이로써 원래 메시지가 복원된다. 개인키 없이 Me mod nM^e \bmod n과 (n,e)(n, e)만으로 MM을 복원하는 실용적인 방법은 아직 알려지지 않았다.

당신의 과제는 주어진 공개키에 대응하는 개인키를 찾아 RSA를 깨는 것이다.

입력

첫 줄에 테스트 케이스의 개수 TT(1≤T≤501 \le T \le 50)가 주어진다. 각 테스트 케이스는 두 수 nn과 ee가 적힌 한 줄이다.

nn은 2≤p,q<10002 \le p,q < 1000을 만족하는 두 소수 pp, qq의 곱이라고 가정해도 된다. 또한 ee는 dd가 존재하고 유일하도록 선택되며, 1<d,e<φ(n)1 < d, e < \varphi(n)이다. 곱 dede는 32비트 정수에 들어가지 않을 수 있다(예: Java의 int 타입).

출력

각 테스트 케이스마다 dd 하나를 출력한다.

예제1

  1. 예제 1

    입력
    2
    33 3
    65 11
    
    예상 출력
    7
    35