[그림 1] 문제
문제에서 RSA에 대한 관리를 말하고 있는데, 어떠한 실수를 한 것 같다는 말을 합니다.
flag.txt를 보면 꽤 많은 내용의 값들이 나열되어 있는데 여기서 힌트는 correctly, ellipsis가 아닐까 합니다.
먼저 flag.txt를 살펴봅시다.
[그림 2] flag.txt
RSA? 문제와 마찬가지로 RSA를 이용한 암/복호화를 위한 재료가 작성되어 있는 것을 볼 수 있습니다.
N은 modulo 계산을 하기 위한(mod N) 값인 것 같습니다.
e는 공개키의 재료인 것 같습니다.( 공개키 ==> Public Key(e, N))
c는 Cipher Text의 c인 것 같습니다.
phi는 ∮(N)를 말합니다. ∮(N)은 (p-1)(q-1)을 의미합니다. 또한 N은 p*q를 의미합니다.
d는 복호화 키(개인키)를 의미하는 것 같습니다.(d는 Decrypt의 d인 것 같습니다.)
암호화 : c = m^e mod N
복호화 : m = c^d mod N
참고 URL : http://pulsebeat.tistory.com/56
참고 URL : http://reinliebe.tistory.com/79
RSA?와는 다르게 RSA는 개인키와 phi가 주어진 것으로 보아 다른 방향으로 접근해야 할 것 같습니다.
RSA?에서는 암호화를 하는 과정으로 풀이를 진행하였지만, 본 문제는 복호화가 이루어져야 할 것 같습니다.
N=0x1564aade6f1b9f169dcc94c9787411984cd3878bcd6236c5ce00b4aad6ca7cb0ca8a0334d9fe0726f8b057c4412cfbff75967a91a370a1c1bd185212d46b581676cf750c05bbd349d3586e78b33477a9254f6155576573911d2356931b98fe4fec387da3e9680053e95a4709934289dc0bc5cdc2aa97ce62a6ca6ba25fca6ae38c0b9b55c16be0982b596ef929b7c71da3783c1f20557e4803de7d2a91b5a6e85df64249f48b4cf32aec01c12d3e88e014579982ecd046042af370045f09678c9029f8fc38ebaea564c29115e19c7030f245ebb2130cbf9dc1c340e2cf17a625376ca52ad8163cfb2e33b6ecaf55353bc1ff19f8f4dc7551dc5ba36235af9758b e=0x10001 phi=0x1564aade6f1b9f169dcc94c9787411984cd3878bcd6236c5ce00b4aad6ca7cb0ca8a0334d9fe0726f8b057c4412cfbff75967a91a370a1c1bd185212d46b581676cf750c05bbd349d3586e78b33477a9254f6155576573911d2356931b98fe4fec387da3e9680053e95a4709934289dc0bc5cdc2aa97ce62a6ca6ba25fca6ae366e86eed95d330ffad22705d24e20f9806ce501dda9768d860c8da465370fc70757227e729b9171b9402ead8275bf55d42000d51e16133fec3ba7393b1ced5024ab3e86b79b95ad061828861ebb71d35309559a179c6be8697f8a4f314c9e94c37cbbb46cef5879131958333897532fea4c4ecd24234d4260f54c4e37cb2db1a0 d=0x12314d6d6327261ee18a7c6ce8562c304c05069bc8c8e0b34e0023a3b48cf5849278d3493aa86004b02fa6336b098a3330180b9b9655cdf927896b22402a18fae186828efac14368e0a5af2c4d992cb956d52e7c9899d9b16a0a07318aa28c8202ebf74c50ccf49a6733327dde111393611f915f1e1b82933a2ba164aff93ef4ab2ab64aacc2b0447d437032858f089bcc0ddeebc45c45f8dc357209a423cd49055752bfae278c93134777d6e181be22d4619ef226abb6bfcc4adec696cac131f5bd10c574fa3f543dd7f78aee1d0665992f28cdbcf55a48b32beb7a1c0fa8a9fc38f0c5c271e21b83031653d96d25348f8237b28642ceb69f0b0374413308481 c=0x126c24e146ae36d203bef21fcd88fdeefff50375434f64052c5473ed2d5d2e7ac376707d76601840c6aa9af27df6845733b9e53982a8f8119c455c9c3d5df1488721194a8392b8a97ce6e783e4ca3b715918041465bb2132a1d22f5ae29dd2526093aa505fcb689d8df5780fa1748ea4d632caed82ca923758eb60c3947d2261c17f3a19d276c2054b6bf87dcd0c46acf79bff2947e1294a6131a7d8c786bed4a1c0b92a4dd457e54df577fb625ee394ea92b992a2c22e3603bf4568b53cceb451e5daca52c4e7bea7f20dd9075ccfd0af97f931c0703ba8d1a7e00bb010437bb4397ae802750875ae19297a7d8e1a0a367a2d6d9dd03a47d404b36d7defe8469 plainText = hex(pow(c,d,N)) plainText = plainText.replace('L', '') plainText = plainText.replace('0x', '') plainText = plainText.decode('hex') print plainText
RSA?와는 다르게 c^d mod N으로 진행하였습니다. d는 개인키로, 본 소스는 복호화 키를 사용하여 복호화 하는 과정을 나타낸 것입니다.
이를 실행하면 [그림 3]과 같습니다.
[그림 3] 문제 해결
'CTF > 2016_IceCTF' 카테고리의 다른 글
2016_IceCTF_Stage03_Corrupt Transmission(50pt) (0) | 2016.09.04 |
---|---|
2016_IceCTF_Stage03_Audio(50pt) (0) | 2016.09.04 |
2016_IceCTF_Stage02_Miners(65pt) (0) | 2016.09.04 |
2016_IceCTF_Stage02_Demo(55pt) (0) | 2016.09.01 |
2016_IceCTF_Stage02_RSA?(50pt) (0) | 2016.08.26 |
2016_IceCTF_Stage02_Flag Storage(50pt) (0) | 2016.08.26 |
2016_IceCTF_Stage02_Toke(45pt) (0) | 2016.08.26 |
2016_IceCTF_Stage01_Time Traveler(45pt) (0) | 2016.08.26 |