공부/PicoCTF
PicoCTF 10번 문제 ( Mind your Ps and Qs )
Cow_Hacker
2022. 2. 8. 19:28
728x90
안녕하세요 Cowhacker입니다.
https://play.picoctf.org/practice/challenge/162
PicoCTF 10번 문제 풀어 보겠다.
Ps와 Qs를 염두하라?
의역으로는
의 제목인 10번 문제다.
RSA에서 소문자 e 값은 문제가 있다, 하지만 N은 어떨까? 너는 해독할 수 있는가?
라고 하는 거 같다.
values를 설치했다.
확장자를 txt로 바꾸고
열어봤다.
RSA암호다.
https://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8
위에 표시해둔 대로
Python코드로 머리를 싸매 싸매 싸매....
었다.
후..
from factordb.factordb import FactorDB # 인수 분해 라이브러리다.
import gmpy2 # 부동 소수점 및 복합 소수점 게산을 하는 라이브러리에 대한 지원을 추가합니다.
c = 843044897663847841476319711639772861390329326681532977209935413827620909782846667
n = 1422450808944701344261903748621562998784243662042303391362692043823716783771691667
e = 65537
test = FactorDB(n) # n에 대해 인수 분해를 하는 구간이다.
test.connect() # 인수 분해 값을 unpack하는 구간이다.
p, q = test.get_factor_list() # p 와 q한테 인수 분해 한 값을 주는 구간이다. 즉, p와 q를 구하는 구간이다.
n2 = (p-1)*(q-1) # n2 즉 n값을 구하는 구간이다. ( 한번더 n을 구하는 이유는 공개된 e의 값이 한없이 적은 수기 때문에 한번더 e의 값을 구하기 위함이다. )
d = gmpy2.invert(e, n2) # ( gmpy2 = 큰 수를 계산 할수 있게 하는 녀석이다. ) e와 n2로 역원을 통해 d를 구한느 구간이다.
m = pow(c, d, n) # c의 d제곱한 값에 n으로 나누어 m을 구하는 구간이다.
print("bytevalue:",m) # m의 값을 출력하는 구간이다.
print(bytearray.fromhex(format(m,'x'))) # 바이트 값을 문자로 변환해 출력하는 구간이다.
저기서 n2!
n을 한번더 구한 이유는 e의 값이 적다는 이유도 있지만
문제의 핵심 내용이기에 한 번 더 구해본 거다.!!!
flag를 구했다.
10번 문제 풀었다.
R eal !!
S tres 받는 문제..
A ... 다신 이런 문제는..ㅠㅜ
728x90