共模攻击 & 例题

文章目录

  • 共模攻击
      • 特点
      • 原理
      • 脚本
  • 题一
      • 题目描述
      • 题目分析

共模攻击

特点

多e,多c,其中n相同,e,c不同

原理

两组
s , s 1 , s 2 = g c d e x t ( e 1 , e 2 ) s 1 ∗ e 1 + s 2 ∗ e 2 = s = g c d ( e 1 , e 2 ) c 1 s 1 ∗ c 2 s 2 ≡ m e 1 ∗ s 1 ∗ m e 2 ∗ s 2 ≡ m s 1 ∗ e 1 + s 2 ∗ e 2 ≡ m g c d ( e 1 , e 2 ) ≡ m s ( m o d n ) s,s1,s2 = gcdext(e1,e2)\\ s1 * e1 + s2 * e2 = s = gcd(e1,e2)\\ \begin{aligned} c1^{s1} * c2^{s2} &\equiv m^{e1 * s1} * m^{e2 * s2} \\ &\equiv m^{s1 * e1 + s2 * e2} \\ &\equiv m^{gcd(e1,e2)}\\ &\equiv m^s \pmod n \end{aligned} s,s1,s2=gcdext(e1,e2)s1e1+s2e2=s=gcd(e1,e2)c1s1c2s2me1s1me2s2ms1e1+s2e2mgcd(e1,e2)ms(modn)
通常情况解
⇒ m = ( p o w ( c 1 , s 1 , n ) ∗ p o w ( c 2 , s 2 , n ) ) % n , ( s = 1 ) m = i r o o t ( ( p o w ( c 1 , s 1 , n ) ∗ p o w ( c 2 , s 2 , n ) ) % n , s ) , ( s > 1 ) \Rightarrow m = (pow(c1,s1,n) * pow(c2,s2,n)) \% n,(s = 1)\\ m = iroot((pow(c1,s1,n) * pow(c2,s2,n)) \% n,s),(s > 1) m=(pow(c1,s1,n)pow(c2,s2,n))%n,(s=1)m=iroot((pow(c1,s1,n)pow(c2,s2,n))%n,s),(s>1)
特殊情况解
m s = c 1 s 1 ∗ c 2 s 2 + k ∗ n 之后再按通常情况解即可 m^s = c1^{s1} * c2^{s2} + k * n\\ 之后再按通常情况解即可 ms=c1s1c2s2+kn之后再按通常情况解即可

脚本

import gmpy2
from Crypto.Util.number import *
n = 
e1 = 
e2 = 
c1=
c2=

s,s1,s2 = gmpy2.gcdext(e1,e2)
m1 = (pow(c1,s1,n))*(pow(c2,s2,n))%n
k = 0
while k < 1000:
    m11 = m1 + k*n
    m,s = gmpy2.iroot(m11,s)
    if s:
        print(long_to_bytes(m)) 
        # 之前遇到过一题此处是转ascii码,不是转字节,有点特殊故标记一下
        break
    k += 1

题一

题目描述

n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e=59128088630385702091793322397875412615287778093553340394935198771980934904409635908137056137500955809593299368744838440346273289970555396051144990989797210863701146919141975211913752717972107017909298545594800443496132062216604362311000654559609679035644414116340707213965027649030838962137050094466321514829
c=19976175496420780796848436562459254725655766819091829085826918149358308150771183434480326036444720888245566133903361432778229861271628280695446732985230796743181959883517331552003617993267709377216621765393365663340987203137917844628578695625623022062000732096723407958157462077180258074203352729060778611766833177607902362002125820905015209529089499964424943030945604025254397014677619659288363721977711532716145967636667129377981985698990030569256843762007665249718164170703617756181999278131026660565301567535403114776187577089832813139785291746759358023750990811762789636834511123590738087173954711684926601615115

n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e=56215169078945305147968681282252756439303068274069910023349833198776537639158983027295991346383182982930396088736536749365734429090657910300545074934035046118793611766878525139472732747606948579166089291432351453511111034598283193727196891373071637478129067053858908528278572028109519929965821246065475778933
c=4898586865590583349791168503497061263814474412917633892983260889915349146399251850580778058010671768731276622207144220430686590775349599075240855807281580243699788240580753584404973075025832012668575962081086112249777937293916819176020066376650920291361510348493449272807270898408762007189419333896769659437430852768446544404264173201280880803402814516726579877461957611421823994569622178100898519381415592111331870831221465078296676862706869630494365712999543574411096657312292324237752979866718985721293323434244021916237004185669910990599469829124257580347870877094040597883857029513765244082636393726155793249758

n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e=73156897345576580733336254416875446312135920505234241583955377458351670307425321903141332045390781579660774735374640610101410104174523838973391291498719274252868469620986514997919898470027086712768194090825851384606653867575710280385622236269294531071134614036937731776500204830836190134333882217896008543457
c=9099883293285607188457315377060923795389227851572672279537581985537813863184558195642805032976629001480514343235938921302176128381899613102386249993227001360190335966378018345908405925306216793296591916375901967580479064607956351257642318992575443552673489793187341405994074952704302526250535547037471646429167885887202208019598232257237310090543218540763411250961204711239409925361176839906514774379481609219818539741463273640959146818464495377132354754189255581006486953675501357979989730786548601066328450328018325649032865158696166428191373110380437099547406040746960175538556202450225910237128767465615939587757

题目分析

n同,e1,e2,e3,c1,c2,c3不同,解m
得出是共模攻击,只不过不是常规的,e也特别大
可以知道gcd(e1,e2),gcd(e2,e3),gcd(e1,e3) ≠ 1,并且大得出奇,所以开根就不要想了
按原理中的过程,可以得到
m g c d ( e 1 , e 2 ) , m g c d ( e 2 , e 3 ) , m g c d ( e 1 , e 3 ) 再加上 m e 1 , m e 2 , m e 3 , 一共六组数据了 上下各选一组,再来一次共模攻击即可 (套娃共模攻击) m^{gcd(e1,e2)},m^{gcd(e2,e3)},m^{gcd(e1,e3)}\\ 再加上m^{e1},m^{e2},m^{e3},一共六组数据了\\ 上下各选一组,再来一次共模攻击即可\\ (套娃共模攻击) mgcd(e1,e2),mgcd(e2,e3),mgcd(e1,e3)再加上me1,me2,me3,一共六组数据了上下各选一组,再来一次共模攻击即可(套娃共模攻击)

from gmpy2 import *
from Crypto.Util.number import *
n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e1=59128088630385702091793322397875412615287778093553340394935198771980934904409635908137056137500955809593299368744838440346273289970555396051144990989797210863701146919141975211913752717972107017909298545594800443496132062216604362311000654559609679035644414116340707213965027649030838962137050094466321514829
c1=19976175496420780796848436562459254725655766819091829085826918149358308150771183434480326036444720888245566133903361432778229861271628280695446732985230796743181959883517331552003617993267709377216621765393365663340987203137917844628578695625623022062000732096723407958157462077180258074203352729060778611766833177607902362002125820905015209529089499964424943030945604025254397014677619659288363721977711532716145967636667129377981985698990030569256843762007665249718164170703617756181999278131026660565301567535403114776187577089832813139785291746759358023750990811762789636834511123590738087173954711684926601615115

n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e2=56215169078945305147968681282252756439303068274069910023349833198776537639158983027295991346383182982930396088736536749365734429090657910300545074934035046118793611766878525139472732747606948579166089291432351453511111034598283193727196891373071637478129067053858908528278572028109519929965821246065475778933
c2=4898586865590583349791168503497061263814474412917633892983260889915349146399251850580778058010671768731276622207144220430686590775349599075240855807281580243699788240580753584404973075025832012668575962081086112249777937293916819176020066376650920291361510348493449272807270898408762007189419333896769659437430852768446544404264173201280880803402814516726579877461957611421823994569622178100898519381415592111331870831221465078296676862706869630494365712999543574411096657312292324237752979866718985721293323434244021916237004185669910990599469829124257580347870877094040597883857029513765244082636393726155793249758

n=22050953768202021481010915313335403389948821591290284021528823110055078952801744325742584338632743222564116025569201609100099140217395018016506154677038588910158433553200597007004268715220573321589629347699068502486270203492908109836129720897763672586681625070576997967568522356194367741554734864232958659587053761759661478814378254701518735932796643357210227340562329360114827890815519720551495219551873035412573398259484498825938763675850434100787696383253997179331644466947544341986360021205157678182603783695524965051557767005272125386048836833015580253783584964102467821576852398803546108481537310174321919050353
e3=73156897345576580733336254416875446312135920505234241583955377458351670307425321903141332045390781579660774735374640610101410104174523838973391291498719274252868469620986514997919898470027086712768194090825851384606653867575710280385622236269294531071134614036937731776500204830836190134333882217896008543457
c3=9099883293285607188457315377060923795389227851572672279537581985537813863184558195642805032976629001480514343235938921302176128381899613102386249993227001360190335966378018345908405925306216793296591916375901967580479064607956351257642318992575443552673489793187341405994074952704302526250535547037471646429167885887202208019598232257237310090543218540763411250961204711239409925361176839906514774379481609219818539741463273640959146818464495377132354754189255581006486953675501357979989730786548601066328450328018325649032865158696166428191373110380437099547406040746960175538556202450225910237128767465615939587757

s,s1,s2 = gcdext(e1,e2)
m1 = (pow(c1,s1,n) * pow(c2,s2,n)) % n

a,a1,a2 = gcdext(s,e3)
print(gcd(s,e3)) # 1
m = pow(m1,a1,n) * pow(c3,a2,n) % n
print(long_to_bytes(m))
# DASCTF{22daf333ea2dcfde83f9b07bca758d4b}

你可能感兴趣的:(密码RSA,密码学,安全,ctf)