본문 바로가기

Dreamhack/CryptoPS

[Dreamhack][CryptoPS] [LINE CTF 2021] babycrypto3

728x90

1.문제 분석

  • pem파일을 분석하는 문제
  • RSA 암호를 계산하는 문제

2. 기본 아이디어

  1. pub.pem 파일을 열어 n과 e를 구한다.
  2. 구한 n을 factordb를 이용해 소인수분해해서 p와 q를 구한다.
  3. 구한 p와 q를 통해 phi값을 구하고 d값을 구한다.
  4. ciphertext를 d와 n값을 통해 복호화한다.

3.문제 풀이

이 문제는 암호화된 txt파일과 pem형식의 파일이 주어진다.

 

pem파일이란 보안 인증서 파일이고 다음과 같은 구조로 적혀있다.

 

Pub.pem

 

base64기반으로 보이는 값이 적혀있는데

 

pem파일의 경우는 openssl을 이용해서 열 수 있다.

 

openssl rsa -pubin -inform PEM -text -noout < pub.pem

 

 

옵션의 설명은 다음과 같다.

 

- pubin: 공개 키를 입력으로 지정

- inform PEM: 입력 형식을 PEM으로 지정

-text: key의 텍스트 표현을 출력

-noout: 개인키 출력 X 공개 키만 출력

 

그러면 이런 결과가 나온다.

 

result

 

modulus가 n, exponent가 e다.

 

이제 저 숫자를 10진수로 바꿔보자.

 

hex

 

우선 파이썬을 이용해서 바꿔줬다.

 

그럼 매우 큰 수의 n이 나올 것이고, 이를 factordb를 통해 소인수분해 해보자.

 

p and q

 

그럼 29로 시작하는 p값과 10으로 시작하는 q값이 나온다.

 

excode

 

우선 (e * d) mod phi = 1 임을 이용해서 d값을 구해주고

 

ct^d mod N = M 임을 통해서 M을 구해준다.

 

그리고 나서 익스플로잇을 진행해보면?

 

result

 

결과가 나오고 이때 뒤에 있는 base64를 디코딩해보면?

 

base64

 

정답은 DH{decodeText} 였으므로

 

DH{CLOSIING THE DISTANCE.} 가 정답이다.

728x90