首页 > 其他分享 >RSA之拒绝套路(2)

RSA之拒绝套路(2)

时间:2023-06-04 13:03:26浏览次数:57  
标签:套路 拒绝 RSA cd m1 m2 dq dp mod

前言

话不多说,接着前一期RSA之拒绝套路(1) ,继续探讨RSA的相关问题,上一期,我们讨论了,如果泄露了

(n,e,dp,c)

可以导致密文被解密的危害。这一次,我们探讨如果泄露

(dp,dq,q,p,c)

会带来什么严重影响?

题干

dp= 90494486973243104756298311175705002887155440121025946664275790548694955799661434870163629541771658812502682012435200659355928618529521731475360236486362525996535354732687624609637012830178545914960485330748345108757203508531117591067570383564779625954776907685968592668868046507450242047759226407026094726359

dq= 92386717102324384872139253931247976320472847834037799716676564640678692924258053130751618730959510913784801723023536527134208843358920592320351399005428347188639433875570867152865970587272904695272790831679276818402117343413503376057524788386479263579869430615501089905630519162146030369086836183772975252551

p= 121869669684596731118740111360803257498670698122183387353481580136405322481841982461820301261370579505460038281590785837096967719889404913176714663774999789266522508163678949469953184327222227297952119212490499582581953510522212981687122483764873187827531047946130999532741388680549345732675732040579796067001

q= 128363031923139297392077349407719417788135630403499671848196425800900870531452570499668481104884553795224784931947824885511134525485570129640119439950191944938407656926280993408854767711557863016197167505998324659906146937423415404059310560359693643987781862684489401368519777953281060013045590132161625607377

c= 4176193749773450562408160796325873473193702511560805285554329767573726211097194419198463203488792792756598428753745425419950423161673497255820731183746106463781291156892140581651301528184812357534808298071893380519977926677138246941946185699346532140641376461516107672722425971178865758049759985915001009787241295292157744353554548314911531918044654676691927347018033509499136103964942830581407087547565204232556314726045307279963709599952745342811947421707024572981812906869557834491207590418553244020621858083633564878305733114484857827620268881100166090837841224767358579366482347136224695333980041913268394994302

题目很清晰,我们没有公钥和私钥,却要从密文推出明文,我们下面来尝试公式推导

公式推导之万事俱备

还是先摆出已知条件

c≡me mod nm≡cd mod nϕ(n)=(p−1)∗(q−1)d∗e≡1 mod ϕ(n)dp≡d mod (p−1)dq≡d mod (q−1)c≡me mod nm≡cd mod nϕ(n)=(p−1)∗(q−1)d∗e≡1 mod ϕ(n)dp≡d mod (p−1)dq≡d mod (q−1)

我们的目标很简单,如何从这些式子得到答案

cdcd

首先根据

mcd mod nm≡cd mod n

因为

gcd(p,q)=1n=pqgcd(p,q)=1n=p∗q

利用中国剩余定理,我们可以得到

{m1≡cd mod pm2≡cd mod q{m1≡cd mod pm2≡cd mod q

这里肯定有很多人不理解,我简单证明一下

mcd mod nm≡cd mod n

可以得到式子

m=cd+knm=cd+k∗n

因为

n=pqn=p∗q

所以可以得到

m=cd+pqkm=cd+p∗q∗k

上述式子,同时取余q和p,可以分别得到

m1≡cd mod qm2≡cd mod pm1≡cd mod qm2≡cd mod p

为什么kpq没了,因为这是p或者q的倍数呀~然后我们继续由式1可以得到

cd=kp+m1cd=kp+m1

我们把这个带入式2可以得到

m2≡(kp+m1) mod qm2≡(kp+m1) mod q

等式两边同时减去m1,可以得到

(m2−m1)≡kp mod q(m2−m1)≡kp mod q

这里因为

gcd(p,q)=1gcd(p,q)=1

所以可以求p的逆元,得到

(m2−m1)∗p−1≡k mod q(m2−m1)∗p−1≡k mod q

所以这里得到如下两个式子

k≡(m2−m1)∗p−1 mod qcd=kp+m1mcd mod nk≡(m2−m1)∗p−1 mod qcd=kp+m1m≡cd mod n

我们上下两个式子合并,得到

cd=((m2−m1)∗p−1 mod q)p+m1mcd mod ncd=((m2−m1)∗p−1 mod q)p+m1m≡cd mod n

最后可以有

m≡(((m2−m1)∗p−1 mod q)p+m1) mod nm≡(((m2−m1)∗p−1 mod q)p+m1) mod n

公式推导之只欠东风

现在只剩最后一步了,即

m1≡cd mod qm2≡cd mod pm1≡cd mod qm2≡cd mod p

这里的m1和m2怎么求?这时候我们有

{ddp mod (p−1)ddq mod (q−1){d≡dp mod (p−1)d≡dq mod (q−1)

那么分别带入,有

{m1≡cdq mod (q−1) mod qm2≡cdp mod (p−1) mod p{m1≡cdq mod (q−1) mod qm2≡cdp mod (p−1) mod p

这里肯定有人又不理解为什么可以直接带入了,我们再证明一下,这里用到了费马小定理即假如p是质数,且gcd(a,p)=1,

a(p−1)≡1 mod pa(p−1)≡1 mod p

所以如果我们有等式

d=dp+k∗(p−1)d=dp+k∗(p−1)

我们直接带入,有

m2≡cdp+k∗(p−1) mod pm2≡cdp+k∗(p−1) mod p

这里的指数,我们拆开,为

m2≡cdpck∗(p−1) mod pm2≡cdp∗ck∗(p−1) mod p

这里的

ck∗(p−1)≡1 mod pck∗(p−1)≡1 mod p

注:因为p是大素数,显然和c互素所以可以直接得到

m2≡cdp mod pm2≡cdp mod p

那么m1根据对称性也可以同理得到

m1≡cdq mod qm1≡cdq mod q

故此,我们现在拥有了所有条件,下面归纳一下为

⎧⎩⎨m1≡cdq mod qm2≡cdp mod pm≡(((m2−m1)∗p−1 mod q)p+m1) mod n{m1≡cdq mod qm2≡cdp mod pm≡(((m2−m1)∗p−1 mod q)p+m1) mod n

payload

万事俱备,那我们开始写脚本吧~脚本如下

def decrypt(dp,dq,p,q,c):

    InvQ = gmpy2.invert(q, p)

    mp = pow(c, dp, p)

    mq = pow(c, dq, q)

    m = (((mp-mq)*InvQ) % p)*q+mq

    print libnum.n2s(m)

dp= 24417628139330679432551095868116968814142396193102639509841676574931690513464588523684381397207121003439385360929299071710433231196678202942915347185802024747158497456267595000613289619481116892073493417896024118597833611923086327107489774162727006791982668721110819684552525393969199138125692085053266311867dq= 39019112110614280252241495036646034807151213716557526376274345944263453299622818575225245299195523420254672088668617876062998490653404750105272510633841394184860866942704080992475543547501372565259180366123356119418623253283732615682878021900318153700726522250094020806743598752556541454865233668070931534349p= 114461439704891616590422134857421869878753559940962522699708885701308630438427731936479777010552391068812199529467348873013239528376604282404207321401876195560830474695517139918118078685078197948576662138382523308600480733574419071424466292785993331731881271557573094521160051353184489095799816579282742140953q= 173407999660109485520889209734134041910836523881475540116955713891631837403964097088089751678165465931150331234455699896350201315926126639981461748491240790317968076899655657331112140939100897570439934688992874242416328330344836429844042122956843979375681077968897817612357468397424082494911472122421034561779c= 13156088528156801357013836665002509320288819562687150049688430847488062217199478847649128772442129783962344653461951822569890099822350753026372449754819799394899656016487248023042927376134885257136511477879900672582593964626335310995748816166750941755394630154620318544805488209700324391789948495807096701620546557726907853315159542234979480907794659188799145765761654813882682456135251746607111274015475601810166327843158879230660349983897375641623569327757258851636029354634714133778666281729500815659100876558161468140039778498553902396380237570072543395294246750182054410091138654202418836971487515663618000662737decrypt(dp,dq,p,q,c)

最后我们愉快的得到了flag

flag{dp_dq_is_very_dangerous!_47325684736584}

反思

这一题告诉我们,如果dp,dq,p,q泄露,就算e,d都保密,也可以被解密而这种方法也存在于实际中,是用于RSA的加快解密的,推导一遍,感觉又复习了不少东西XD

RSA之拒绝套路(2)_公式推导


RSA之拒绝套路(2)_公式推导_02

标签:套路,拒绝,RSA,cd,m1,m2,dq,dp,mod
From: https://blog.51cto.com/u_14601424/6410412

相关文章

  • RSA密钥证书的生成
    @@rsa密钥生成 首先需要下载OpenSSL软件,一直点击下一步就好,链接:链接:https://pan.baidu.com/s/1uHNpKGF9j9c1bQ6QAwtpOA提取码:myit(百度网盘分享无须官网下载,如若不好使请私信或者评论) 启动位置是在你软件安装的位置下,找到bin目录,然后在上方文件位置直接输入cmd,或者打开dos......
  • 强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析
    强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析1.SARSASARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决策过程策略的算法,通常应用于机器学习和强化学习学习领域中。它由Rummery和Niranjan在技术论文“ModifiedConnectionistQ-Learning(MCQL)......
  • leetcode 107. Binary Tree Level Order Traversal II
    Givenabinarytree,returnthebottom-uplevelordertraversalofitsnodes'values.(ie,fromlefttoright,levelbylevelfromleaftoroot).Forexample:Givenbinarytree[3,9,20,null,null,15,7],3/\920/\157returnits......
  • 107. Binary Tree Level Order Traversal II刷题笔记
    问题描述自底向上层序搜索python代码#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deflevelOrd......
  • 102. Binary Tree Level Order Traversal刷题笔记
    考察二叉树的层序遍历问题描述leetcode代码:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deflev......
  • 94. Binary Tree Inorder Traversal刷题笔记
    问题描述中序遍历,用的是递归法,当然也可以用迭代法(栈)代码#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution......
  • 145. Binary Tree Postorder Traversal刷题笔记
    问题描述后序遍历代码:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defpostorderTraversal(sel......
  • 144. Binary Tree Preorder Traversal刷题笔记
    问题描述前序遍历。注意嵌套函数里的list应该用append而不是+=来添加元素#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=right......
  • CF1819C The Fox and the Complete Tree Traversal
    \(\color{purple}\text{TheFoxandtheCompleteTreeTraversal}\)比较有意思的一题。先考虑一个序列的权值。对长度为\(len\)的序列排序,价值为\(len-1\),那么有时候如果后面的元素很大,前面的很小:321300200100我们可以将序列切为\([1,3]\),和\([4,6]\)两部分分别......
  • RSA之低加密指数广播攻击------2023.5.22
    使用条件:模数n,密文C不同,明文m,加密指数e相同。(一般的话e=k,k是题目给出的n和c的组数)例如:e=k=3同余式组:C1≡m^emodn1C2≡m^emodn2C3≡m^emodn3由中国剩余定理:设n1,n2,n3是两两互素的正整数,M=n1∗n2∗n3Mi=M/ni (i=1,2,3)则同余式组: m^e≡Ci mod ni  (i=1,2,3)有唯一解......