N을 두 소인수로 분해해 phi(N)을 구한 뒤, 모듈로 역원과 빠른 거듭제곱으로 C를 복호화해 M을 출력한다.
보통5정수론수학아직 제출이 없습니다시간 제한2초메모리 제한512 MBRSA는 널리 쓰이는 공개키 암호 알고리즘 가운데 하나다. 기본 동작은 다음과 같다.
서로 다른 두 홀수 소수 P와 Q를 골라 N=PQ를 계산한다. 이어서 오일러 피 함수 값 φ(N)=(P−1)(Q−1)을 구하고, 1<E<φ(N)이면서 gcd(φ(N),E)=1인 정수 E를 하나 고른다. 마지막으로 φ(N)을 법으로 하는 E의 곱셈 역원 D, 즉 DE≡1(modφ(N))을 만족하는 정수 D를 계산한다.
이렇게 두 정수 N과 E로 이루어진 공개키와, 두 정수 N과 D로 이루어진 비밀키를 얻는다.
0<M<N인 메시지 M을 암호화할 때는 C=MEmodN을 계산하고, 이 C가 암호문이다. 암호문을 복호화해 원래 메시지를 되찾을 때는 M=CDmodN을 계산한다. 복호화에는 비밀키가 필요하고 공개키만으로는 부족하다. 위에서 쓴 x≡1(mody)는 x를 y로 나눈 나머지가 1이라는 뜻이다.
이 문제에서는 RSA 암호를 깨야 한다. 공개키 N, E와 암호문 C만 보고 원래 메시지 M을 구하는 프로그램을 작성하시오.
첫째 줄에 세 정수 N, E, C가 공백으로 구분되어 주어진다. 15≤N≤109, 1≤E<N, 1≤C<N이다.
N과 E는 위에서 설명한 RSA의 공개키이고, C는 이 공개키로 암호화한 메시지다. N은 서로 다른 두 홀수 소수의 곱이고, gcd(φ(N),E)=1이 항상 성립한다.
원래 메시지 M을 한 줄에 출력한다. 1≤M<N이다.