生活随笔
收集整理的這篇文章主要介紹了
BugkuCTF-Crypto题rsa
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解題流程
n,e已經給出,可以看出e特別大,在e特別大的情況下,可以使用wiener attack的方法進行破解,正好工具RsaCtfTool集成了wiener attack的方法,所以可以直接使用RsaCtfTool計算私鑰。
典型的rsa… 密鑰的產生: 選兩個滿足需要的大素數p和q,計算n= p x q, φ(n) = (p - 1) x (q - 1),其里φ(n)是n的歐拉函數值。 選一個整數e,滿足1< e < φ \varphi φ,且gcd(φ(n), e) = 1。通過d x e ≡ 1 mod φ(n),計算得出d。 以{ e,n }為公開密鑰,{d, n }為私鑰。
加解密都為模冪運算 加密:c = m^e mod n,即得到密文 c 解密:m = c^d mod n,即得到明文m
分析
題里給了 n即由兩個大素數p x q得到的, e, 以及密文enc,也就是給了{e,n }公開密鑰以及密文,我們需要的目標是要獲得明文。 通過解密算法我們知道,對于m = c^d mod n,m是我們想要獲取的,c為密文,n也是已知的,然而d是不知道的,目標就是要獲取d,該題因為n和e是同數量級的,證明d會很小。
解決方案
這里推薦一個工具RsaCtfTool 下面可直接利用這個工具獲得 p, q和d。 python RsaCtfTool.py --createpub -n python RsaCtfTool.py --publickey test.pem --private > test.key python RsaCtfTool.py --key test.key --dumpkey
注意: 生成公鑰或者私鑰文件可能有亂碼,運行出現格式錯誤,刪除即可
import gmpy2
from libnum
import n2sn
= '460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597' e
= '354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619' enc
= '38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192' p
= '15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199' q
= '28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003' d
= '8264667972294275017293339772371783322168822149471976834221082393409363691895' n1
= gmpy2
. mpz
( n
)
enc1
= gmpy2
. mpz
( enc
)
d1
= gmpy2
. mpz
( d
) r
= gmpy2
. powmod
( enc1
, d1
, n1
)
print ( r
)
s
= n2s
( r
)
print ( s
)
結果為: flag{Wien3r_4tt@ck_1s_3AsY}
總結
以上是生活随笔 為你收集整理的BugkuCTF-Crypto题rsa 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。