워게임/CTFlearn

[CTFlearn] RSA Beginner - 암호학 / Python

SecurityMan 2022. 12. 22. 11:00

 

CTFlearn의 마흔 일곱번째 문제

 

이번엔 RSA 알고리즘과 관련된 암호학 문제이다.

 

Beginner 라 그런지 이전에 포스팅 했던 문제들이랑 비슷하게 쉽게 풀 수 있다.

(https://hackingstudypad.tistory.com/337)

 

반응형

 

RSA는 지금까지도 아주 많이 사용하는 공개키 알고리즘의 이름이다.

 

개발자인 Rivest, Shamir, Adleman 세명의 이름 앞글자를 따서 RSA 라고 이름을 붙혔다.

 

엄청나게 큰 숫자일수록 소인수분해가 어렵다는것에 착안해서 설계되었다.

 

RSA의 원리는 아래와 같다.

 

1. 두 소수 p, q를 준비한다.

2. p-1, q-1과 각각 서로소(1외에는 공약수가 없는 수)인 정수 e를 준비한다.

3. ed를 (p-1)(q-1)으로 나눈 나머지가 1의 되도록 하는 d를 구한다.(d는 개인키로 공개하지 않는다)

4. n=pq를 계산한 후 n과 e를 공개한다.(이 둘이 공개키)

 

이 알고리즘을 이용해서 공개키-개인키 쌍을 만들고

 

공개키로 암호화했다면 개인키로만 풀 수 있고, 개인키로 암호화했다면 공개키로만 풀 수 있는 그런 알고리즘이다.

 

e:3
c:219878849218803628752496734037301843801487889344508611639028
n:245841236512478852752909734912575581815967630033049838269083

 

문제에서 제공되는 rsa.txt 파일의 내용이다.

 

c 가 암호문이고, n과 e는 공개키 쌍이다.

 

github에 보면 RSA문제를 풀 때 사용하는 RsaCtfTool 이라는 좋은 도구가있다. 

 

 

git clone [github 주소] 명령어를 통해 다운로드 받을 수 있다.

 

다운로드 받고나서 cd RsaCtfTool 명령어로 해당 폴더에 들어가보면

 

RsaCtfTool.py 라는 파이썬 파일이 보이게 된다.

 

 

./RsaCtfTool.py 라고 입력하면 실행이 가능한데

 

이렇게 No module named 'Crytpo' 라는 에러가 나게되면

 

 

pip install pycrypto 명령어로 다운로드 받아주면 된다.

 

 

다운받으면 이렇게 잘 실행이 된다.

 

이제 옵션을 줘서 툴을 실행시키면 된다.

 

 

-n, -e 옵션에 각각 주어진 n, e 값을 넣고,

 

--uncipher 옵션에 주어진 c 값을 넣어준 뒤 잠시 기다리면

 

아래쪽에 플래그가 출력되는것을 볼 수 있다.

반응형