bugku rsa

文章来源 https://www.jianshu.com/p/82eb1525c7a8

rsa wiener attack 破解

当ctf中遇见rsa的n e 都很大而且是同一数量级的,这时候可以采用wiener attack 来进行破解。
这里拿bugku的rsa来举例。
题目给出了n, e, enc 现在已知公钥{e, n}及密文enc
目标是获取d, 由于n, e 很大是通数量级的,推断出d很小。所以利用wiener attack进行破解

  1. 先把n, e 转换成pem格式
    python RsaCtfTool.py --createpub -n 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597 -e 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619 > flag.pem
  1. 利用n, e (公钥) 求解私钥

     python RsaCtfTool.py --publickey flag.pem --private > flag.key
    
  2. 得到p, q, d

     python RsaCtfTool.py --key flag.key --dumpkey
    

得到p q d n e如下:

pqd.png

  1. 利用脚本进行解密

由于pqned都知道了,直接可以直接求解flag了。

#!/usr/bin/python
# -*- coding=utf8 -*-
"""
# @Author : pig
# @CreatedTime:2019-12-25 20:46:54
# @Description : 
"""

import gmpy2
from libnum import n2s

n = '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)

脚本输出得到:

42134526936705472951339882390913202211002951999415321980512196989
flag{Wien3r_4tt@ck_1s_3AsY}

flag.png

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值