[그림 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] 문제 해결

+ Recent posts