또 뭐하지
[Dreamhack] chinese what? 본문
728x90
풀이
CRT (중국인의 나머지 정리, Chinese Remainder Theorem)
- 정수론에서 중요한 정리 중 하나
- 소수로 나눈 나머지 연산에서 유용하게 사용
제공된 문제 파일을 살펴보면 prob.py와 output.txt 파일이 있다.
prob.py는 flag를 정수로 변환하고, CRT를 적용할 수 있도록 3개의 소수와 이를 이용한 연립합동식을 생성하는 코드이다.
output.txt는 prob.py 코드의 실행결과이다.
위 코드를 수식으로 바꿔보면
flag = c1 (mod p1)
flag = c2 (mod p2)
flag = c3 (mod p3) 이다.
from sympy.ntheory.modular import solve_congruence
from Crypto.Util.number import long_to_bytes
def chinese_remainder_theorem(c1, c2, c3, p1, p2, p3):
# CRT를 사용하여 주어진 나머지로부터 원래의 정수 x를 찾습니다.
x = solve_congruence((c1, p1), (c2, p2), (c3, p3))
return x[0]
p1 = 1527207470243143973741530105910986024271649986608148657294882537828034327858594844987775446712917007186537829119357070864918869
p2 = 2019864244456120206428956645997068464122219855220655920467990311571156191223237121636244541173449544034684177250532278907347407
p3 = 1801109020443617827324680638861937237596639325730371475055693399143628803572030079812427637295108153858392360647248339418361407
c1 = 232762450308730030838415167305062079887914561751502831059133765333100914083329837666753704309116795944107100966648563183291808
c2 = 869189375217585206857269997483379374418043159436598804873841035147176525138665409890054486560412505207030359232633223629185304
c3 = 1465704473460472286244828683610388110862719231828602162838215555887249333131331510519650513265133531691347657992103108331793683
# CRT를 사용하여 원래의 정수 x를 찾습니다.
result = chinese_remainder_theorem(c1, c2, c3, p1, p2, p3)
print(long_to_bytes(result))
gpt의 도움을 받아 연립합동식을 푸는 코드를 작성했다.
sympy.ntheory.modular모듈을 사용하는 코드를 작성해주었다.
이를 사용하여 flag의 interger값을 구하고 이를 다시 바이트로 변환하는 코드를 추가하였다.
작성한 코드를 실행하면 flag를 얻을 수 있다,.
* 공부할 것
sympy.ntheory.modular모듈 - 암호학 관련해서 유용할 듯!
'Write-up > Crypto' 카테고리의 다른 글
[Dreamhack] RSA-wiener (1) | 2024.05.01 |
---|---|
[Dreamhack] Textbook-RSA (0) | 2024.04.08 |
[Dreamhack] likeb64 (0) | 2024.04.03 |
[Dreamhack] babycrypto3 (0) | 2024.03.29 |
[Dreamhack] darimchal-001 (0) | 2024.03.29 |