본문 바로가기
Cryptography

[HackCTF] RSA

by L3m0n S0ju 2021. 9. 19.

 

 

 

 

RSA 알고리즘을 이용하여 값을 해독해보자!
파일에 나와있는 c, p, q, e 는 RSA 대한 파라미터 값이다.
p = 165500656692790480820099871308511495889550056248884963056391533737398719640777027536552348753003910353538512236389328276408434154714592616388810121411482595574799223632695324557638432891315001647024573557093357114908462069403023829967780936191142143068307535312844772151507357729244716123687935330409738850181

 

q = 122141438575770439104084639124669389798489623069980415671656975299923395151301777382093192959734330849008684250930530493655750402979451442939127736597078242925067195617957339753271262399847630938612930834827285581446954616798548644945058711157525778059878711651283927027641401287892466364366504983328484106481

 

e = 65537

 

c = 0x4730dcb8284416e44265091248de1ba51ce685ae5ff1276e263f72a1c90e34bcddc0ad1aa7757f1130c2f497b0629fb620e63b0b613ebe82c8b0a8d6f91a6652947f25c026307446cb7552e075e4754f1d60685a2b45e6238d3aca9934e47c0447e06d6162c91f912d14fb262ffce00e59fc8d04cbeb86cc5f087fbfe620b10e4d6a2c7ca9cb2ed315c31ee07b994b38c2827308c82de3b9ca7352505fe9b10a0ab4c81acc8334587f1277647509dca65001ad418f71e537d32bd71c10c89966b91a9426b440f3db5c52d4faf7440fbdae309bdd70769198e64995a6b3fdae748cc5db22dff8aa4fb235af657c96390d923a2b216dc34c07e28c588d8ef7c882

 

 

 

 


 

이번 문제는 RSA 암호 문제로 암호를 해독하면 플래그를 획득할 수 있다. RSA에서 p와 q는 개인키에 해당하므로 p와 q를 이용해 암호문을 복호화할 수 있다. 암호문 C를 복호화하는 공식은 아래와 같다.

 

평문 M = (C ^ d) mod n     =>     C는 암호문, n = p * q

=> c는 n은 알고 있고 d는 계산할 수 있으므로 M(평문)을 알 수 있다. 코드는 아래와 같다.

 

 

 

 

 


from Crypto.Util.number import *

p = 165500656692790480820099871308511495889550056248884963056391533737398719640777027536552348753003910353538512236389328276408434154714592616388810121411482595574799223632695324557638432891315001647024573557093357114908462069403023829967780936191142143068307535312844772151507357729244716123687935330409738850181
q = 122141438575770439104084639124669389798489623069980415671656975299923395151301777382093192959734330849008684250930530493655750402979451442939127736597078242925067195617957339753271262399847630938612930834827285581446954616798548644945058711157525778059878711651283927027641401287892466364366504983328484106481
e = 65537
c = 0x4730dcb8284416e44265091248de1ba51ce685ae5ff1276e263f72a1c90e34bcddc0ad1aa7757f1130c2f497b0629fb620e63b0b613ebe82c8b0a8d6f91a6652947f25c026307446cb7552e075e4754f1d60685a2b45e6238d3aca9934e47c0447e06d6162c91f912d14fb262ffce00e59fc8d04cbeb86cc5f087fbfe620b10e4d6a2c7ca9cb2ed315c31ee07b994b38c2827308c82de3b9ca7352505fe9b10a0ab4c81acc8334587f1277647509dca65001ad418f71e537d32bd71c10c89966b91a9426b440f3db5c52d4faf7440fbdae309bdd70769198e64995a6b3fdae748cc5db22dff8aa4fb235af657c96390d923a2b216dc34c07e28c588d8ef7c882


n = p * q
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
m=hex(pow(c,d,n))
print(m)

 

 

 

 


결과 : 0x4861636b4354467b5235415f31735f73305f66756e217d

 

 

아스키코드로 변환하면 => HackCTF{R5A_1s_s0_fun!}

 

 

 

'Cryptography' 카테고리의 다른 글

[HackCTF] Classic Cipher -4  (0) 2021.10.06
[HackCTF] RSA2  (0) 2021.09.19
[암호학 개념]  (0) 2021.09.19
[HackCTF] Classic Cipher -2  (0) 2021.09.11
[HackCTF] Classic Cipher -1  (0) 2021.09.11

댓글