문제에서 보면, 암호화는 일반적인 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
'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 |