또 뭐하지
[Dreamhack] RSA-wiener 본문
728x90
풀이
제공된 문제파일에는 암호화된 플래그 파일 flag.txt와 공개키 파일 public_key.pem이 포함되어 있다.
RSA-wiener에 대한 내용은 아래 글을 참고하였다.
https://dokhakdubini.tistory.com/289
Wiener attack은 RSA 암호에서 공개된 큰 모듈러스 n과 비교적 작은 비밀 지수 d를 가진 경우, 연속된 분수를 사용하여 d를 추정하는 공격 방법이라고 한다.
블로그 글에 나온 `rsa-wiener-attack` 라이브러리를 이용하여 wiener 공격을 진행했다.
git clone https://github.com/pablocelayes/rsa-wiener-attack.git
위 코드를 통해 라이브러리를 문제 폴더에 클론하였다.
import sys
sys.path.append('c:/dreamhack/RSA-wiener/rsa_wiener_attack/')
#RSAwienerHacker에서 모듈 임포트 문제로 추가
from Crypto.Util.number import *
from Crypto.PublicKey import RSA
from rsa_wiener_attack import RSAwienerHacker
# 공개키 파일 로드
with open('C:/dreamhack/RSA-wiener/public_key.pem', 'r') as f:
public_key = RSA.import_key(f.read())
# flag 파일 로드
with open('C:/dreamhack/RSA-wiener/flag.txt', 'r') as flag_file:
flag = int(flag_file.read(), 16) #flag.txt의 값을 16진수로 해석하여 정수로 변환
n = public_key.n
e = public_key.e
d = RSAwienerHacker.hack_RSA(e, n) #라이브러리의 hack_RSA를 이용하여 비밀키 획득
pt = pow(flag,d,n) #획득한 비밀키로 평문 획득
print(long_to_bytes(pt)) #평문을 바이트 형식으로 변환하여 출력
공개키를 얻고 라이브러리의 hack_RSA 함수를 이용하여 비밀키를 획득하여 복호화하는 파이썬 코드를 작성하였다.
해당 코드를 실행해보면 아래와 같이 flag를 얻을 수 있다.
'Write-up > Crypto' 카테고리의 다른 글
[Dreamhack] ICM2022 (0) | 2024.09.13 |
---|---|
[Dreamhack] Robot Only (0) | 2024.05.13 |
[Dreamhack] Textbook-RSA (0) | 2024.04.08 |
[Dreamhack] chinese what? (0) | 2024.04.08 |
[Dreamhack] likeb64 (0) | 2024.04.03 |