[zer0pts] diysig

문제에서 보면, 암호화는 일반적인 RSA와 동일하다.

추가로, m을 이용한 해쉬를 이용하여 SIG를 만드는 과정이 추가되어있다.

RSA는 굉장히 안전하기 때문에 이 hash에서 우리는 평문에 관한 정보를 leak 해야한다.

 

Stage 3을 보면, 평문의 lsb가 1이면 H의 lsb가 1이며 , 반대로 평문의 lsb가 0 이면 H의 lsb도 0이다.

이말은 즉, H의 lsb = 평문의 lsb 이고 Sig를 알아낸다면 우리는 그 평문의 1bit를 leak할 수 있다.

 

 

 

그리고 서버에 연결해보면 총 3가지 기능이 있는데

[1] : 평문입력 ⇒ 암호문 & Sig 출력

[2] : 암호문 & Sig 입력 ⇒ 맞으면 맞다고 해주고, 틀릴시 올바른 Sig 제공

[3] : N , e 출력

[1] 은 우리가 서버 없이도 직접 할 수 있는 작업이다. 그래서 이 문제에서 서버를 열어준 이유는

 

1. N , e를 제공해주기 위해서

2. 암호문을 입력하여 Sig를 얻기 위해서

 

이 두가지 이유이다.

Sig를 얻는다는 뜻 = m의 1bit를 준다는 뜻 이므로 이 문제는 lsb-oracle-attack을 할 수 있음을 알 수 있다.

lsb-oracle-attack으로 평문을 1bit씩 leak하여 flag를 얻어낼 수 있다.

이전에 [InCTF 2019] waRSAw 라는 문제가 이와 동일했었어서 그때 만든 코드를 들고와서 일부만 수정하여 사용하였다.

 

lsb-oracle-attack 설명 : https://blog.naver.com/pk2861/221701994121

 

[InCTF 2019] waRSAw

실제 문제에서는 encrypt.py라는 파이썬 파일과 문제를 풀게끔 nc서버가 하나 주어져 있다.대회 도중에는 ...

blog.naver.com

'CTF > CTF_writeup' 카테고리의 다른 글

[zer0pts] dirty laundry  (0) 2020.03.12
[zer0pts] nibelung  (0) 2020.03.12
[zer0pts] ROR  (0) 2020.03.12
[CODEGATE 2020 예선] Halffeed  (0) 2020.02.09
[Hack.lu CTF 2019] Chat  (0) 2020.02.09
  Comments,     Trackbacks