

새벽시간이라 경쟁률이 적어서 운 좋게 퍼블.
파일을 열어봤더니, rsa.py와 output.txt 파일 두개가 존재했다.
즉, 암호학 관련 문제인 것을 확신했고, 소스코드를 봐야 알겠지만 rsa 관련 문제라고 생각했다.
아래는 rsa.py 파일 코드이다.
from Cripto.Util.number import getPrime, bytes_to_long
from secret import flag
p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 65537
ct = pow(bytes_to_long(flag), e, int(p) * int(q))
hint = int(p) ^ int(q)
print(f"n: {n}")
print(f"e: {e}")
print(f"hint: {hint}")
print(f"ciphertext: {ct}")
p, q: 1024비트 소수N = p*q: 모듈러스(홀수)e = 65537: 퍼블릭 지수ct = m^e mod N: 암호문hint = p ⊕ q: 보조 힌트(문제 파일엔 Cripto > Crypto로 오타가 보인다. 이 부분도 중요한 부분일까?)
즉, 표준 rsa를 그대로 따르고 있다는 것을 알 수 있다.
실제로, output.txt 파일 안에는 n, e, hint, ciphertext 값이 전부 제공된다.
문제는 output.txt안에 들어있는 값들이 이상하다는 점이다.
일반적으로 p, q 값을 구해보려고 해도 주어진 n의 값이 홀수가 아닌 짝수이기 때문에, p, q값을 구할 수가 없다.