RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00704

RSA-2048 분해 (현대 암호 깨기)

스페셜 저지 — 출력을 사용자 정의 프로그램으로 검사하므로 여러 정답이 인정될 수 있습니다.
Master 마스터
난이도
5s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
1
제출 수
0.0%
정답률
레이팅

의견: 0

설명

전 세계 인터넷 보안의 근간을 이루는 RSA 암호를 정면으로 깨뜨리는 문제다.

RSA의 안전성은 큰 정수의 소인수분해가 어렵다는 가정에 전적으로 기대고 있다. 두 거대한 소수 \(p\), \(q\)의 곱 \(N = p \cdot q\)는 쉽게 만들 수 있지만, \(N\)만 보고 \(p\)\(q\)를 되찾는 것은 (고전 컴퓨터에서) 현실적으로 불가능하다고 믿어진다.

이 문제에서는 그러한 반소수(서로 다른 두 큰 소수의 곱) \(N\)이 주어진다. \(N\)을 이루는 두 소인수 \(p\)\(q\)를 찾아라.

$$ N = p \cdot q, \qquad p \le q, \qquad p, q \text{는 소수} $$

작은 \(N\)이라면 시험 나눗셈이나 Pollard rho로 충분하다. 그러나 채점 데이터의 \(N\)은 실제 RSA에서 쓰이는 2048비트(십진수 약 617자리) 규모이며, 현존하는 어떤 고전 알고리즘으로도 제한 시간 안에 인수분해할 수 없다. 이 문제를 통과한다는 것은 곧 RSA를 깨는 다항 시간 인수분해 알고리즘을 손에 넣었다는 뜻이다.

이 문제를 진짜로 푸는 코드를 제출하기 전에, 그 코드가 전 세계 은행·정부·메신저의 암호를 동시에 무력화한다는 사실을 떠올려 보라. 채점 버튼보다 책임감이 먼저다.

제약
  • \(6 \le N < 2^{2048}\)
  • \(N = p \cdot q\)이며 \(p\), \(q\)는 서로 다른 소수이다.
입력 형식

첫째 줄에 분해할 정수 \(N\)이 주어진다. \(N\)은 서로 다른 두 소수의 곱이다.

출력 형식

한 줄에 두 소인수 \(p\)\(q\)를 공백으로 구분하여 \(p \le q\) 순서로 출력한다.

예제 1
입력
15
출력
3 5
설명

\(15 = 3 \times 5\). 두 소인수를 \(p \le q\) 순서로 출력한다.

예제 2
입력
91
출력
7 13
설명

\(91 = 7 \times 13\).

문제 정보

riseoj 작성

출처 Original

평가 및 의견

RSA-2048 분해 (현대 암호 깨기)

개요
출제자 난이도 Master 마스터 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

RSA-2048 분해 (현대 암호 깨기)

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8