[그림 1] 문제


문제에서도 볼 수 있듯이 RSA라는 것을 노골적으로 말하고 있습니다.

묻지도 따지지도 말고 flag.txt를 다운받아 봅시다.

[그림 2] flag.txt


RSA를 이용한 암/복호화를 위한 재료가 작성되어 있는 것을 볼 수 있습니다.

N은 modulo 계산을 하기 위한(mod N) 값인 것 같습니다.

e는 공개키의 재료인 것 같습니다.( 공개키 ==> Public Key(e,N))

c는 Cipher Text의 c인 것 같습니다.


RSA의 암호화, 복호화에 대한 공식은 다음과 같습니다.


암호화 : c = m^e mod N

복호화 : m = c^d mod N(d는 Private Key의 d이고, Decrypt의 d를 가져온 것 같습니다.)


참고 URL : http://pulsebeat.tistory.com/56

참고 URL : http://reinliebe.tistory.com/79


자 그럼 이제 암호화, 복호화 과정을 알았으니, Python으로 코드를 작성해보도록 합시다.

N=0x180be86dc898a3c3a710e52b31de460f8f350610bf63e6b2203c08fddad44601d96eb454a34dab7684589bc32b19eb27cffff8c07179e349ddb62898ae896f8c681796052ae1598bd41f35491175c9b60ae2260d0d4ebac05b4b6f2677a7609c2fe6194fe7b63841cec632e3a2f55d0cb09df08eacea34394ad473577dea5131552b0b30efac31c59087bfe603d2b13bed7d14967bfd489157aa01b14b4e1bd08d9b92ec0c319aeb8fedd535c56770aac95247d116d59cae2f99c3b51f43093fd39c10f93830c1ece75ee37e5fcdc5b174052eccadcadeda2f1b3a4a87184041d5c1a6a0b2eeaa3c3a1227bc27e130e67ac397b375ffe7c873e9b1c649812edcd

e=0x1

c=0x4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797d


plainText = hex(pow(c,e,N))
plainText = plainText.replace('L', '')
plainText = plainText.replace('0x', '')

plainText = plainText.decode('hex')

print plainText

# if the decode('hex') doesn't work.. it's because of worng hex code that cannot express in hex or ascii. so we have to check that hex value can express or not


동아리 원의 도움을 받아 pow 함수를 사용하는 커다란 팁을 이용하여 소스를 만들어보았습니다.

pow함수를 이용하여 c,e,N을 RSA 암호화에 맞도록 해보았습니다.

powe(c,e,N)이 의미하는 것은 c^e mod N이라는 것을 의미합니다.

그리고 그 아래의 부가적인 소스는 string 형식으로 이쁘게 출력하기 위한 부수적인 작업입니다.


이를 실행하면 [그림 3]과 같습니다.

[그림 3] 문제 해결




+ Recent posts