Textbook-RSA

두 가지 방법의 익스플로잇 계획을 세웠는데요.
d(비밀 키)를 구하고 FLAG_enc^d mod N을 한다.
복호화 기능에서 if ct == FLAG_enc 를 우회하고 rsa.decrypt(FLAG_enc) 를 실행한다.

먼저 1)의 방법을 시도했습니다.
CCA로 암호문(c), 평문(m) 쌍을 만들고 if (c^d mod N == m) 식으로 무차별 대입 공격을 하여 d를 알아내는 식으로 접근했습니다.
하지만 d가 적어도 5,000,000,000 이상이라는 것을 확인했고 무차별 대입으로 찾기 어렵다는 판단이 들었습니다.

다음으로 2)의 방법을 생각해봤습니다.
ct != FLAG_enc이어야 하므로 ct에 FLAG_enc를 살짝 변조해야겠다는 판단이 들었습니다.

FLAG_enc^d = FLAG mod N ------(1)
X^d = Y mod N ------(2)
(FLAG_encX)^d = FLAGY mod N ------(1),(2) 연립

이런 식의 구조를 생각해봤습니다.
복호화 기능에서 (FLAG_encX)를 복호화해서 FLAGY를 구하고 Y를 나누려는 생각이었습니다.
그런데 FLAGY하면서 어마하게 커진 수를 mod N을 하여 작은 수로 만든 상태이기 때문에
FLAG
Y + N*z를(z는 1씩 증가) 계속해보면서 Y로 나누고 나누어 떨어질 때의 몫을 찾아야 한다는 생각이 들었습니다.
그런데 그 횟수가 매우 크다고 판단되어 이 또한 불가능한 것 같습니다.

요약하자면 CCA를 이용해서 복호화 필터링을 우회하여 FLAG_enc를 복호화해내는 게 관건인 것 같은데
조언 좀 얻을 수 있을까요?!?!?!

#crypto
작성자 정보
답변 1
avatar
svnwbst
대표 업적 없음

풀었습니다. 풀고나서 제 질문 글을 다시 보니, 답이 숨어 있네요 :)

2022.04.17. 13:25
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기