XD MakerCTF 2019 easy_rsa


  說實話,這是第一次接觸rsa類型的ctf題目,以前太菜了,下午無聊就研究了這道題。

  關於RSA,我已經在上學期的密碼學課程中了解到了,但是一直沒有實戰過,我參考到一個不錯的博客做出了這道題: https://www.freebuf.com/sectool/163781.html ,主要內容是圍繞命令行工具 openssl 、常用的集中rsa分解大數工具如yafu.exe 和python腳本(用到幾個庫) 對公鑰、密文破解得到私鑰 p、q,繼續解密。

  這里的數論知識我就不再堆砌了……

  打開壓縮包:

  這里有兩個文件,其中_MAXOSX是mac系統生成自帶的文件,像是個目錄,沒有太多意義,直接進入easy_RSA:

  分析一下上面的文件結構:flag.enc存放密文,是加密后的flag。pubkey.pem名如其物,存放公鑰(n、e)。

  直接提取公鑰:

  上圖中Exponent代表公鑰參數e,Moudules代表參數n。關於pem文件的相關知識基礎(文件結構等),我推薦一個博客地址方便理解:https://blog.csdn.net/tuhuolong/article/details/42778945  

  緊接着用yafu工具進行破解,這款工具的使用方法我參照了文章開頭參照的博客:

  如上圖,大概五分鍾后,分解出n的大素數因子p、q。

  然后用腳本求出公鑰e對應的私鑰n:

 1 import math
 2 import sys
 3 from Crypto.PublicKey import RSA
 4 
 5 keypair = RSA.generate(1024)
 6 keypair.p = 440140550843727826962832356360132665339
 7 keypair.q = 420226057252427765877741059207519510621
 8 keypair.e = 65537
 9 
10 keypair.n = keypair.p * keypair.q  #公鑰 大數n
11 Qn = long((keypair.p-1) * (keypair.q-1)) #歐拉函數(n)
12 
13 i = 1
14 while (True):
15     x = (Qn * i ) + 1
16     if (x % keypair.e == 0):
17         keypair.d = x / keypair.e  #求出e關於Qn的模逆n
18         break
19     i += 1
20 
21 private = open('private.pem','w') #新建私鑰pem
22 private.write(keypair.exportKey()) #寫入私鑰
23 private.close()

   緊接着,執行如下命令解密密文flag.enc:

openssl rsautl -decrypt -in flag.enc -inkey private.pem -out flag.txt

 

Done.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM