共模攻击
特点
多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)s1∗e1+s2∗e2=s=gcd(e1,e2)c1s1∗c2s2≡me1∗s1∗me2∗s2≡ms1∗e1+s2∗e2≡mgcd(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=c1s1∗c2s2+k∗n之后再按通常情况解即可
脚本
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}