题目:
{21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111,2767}
{21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111,3659}
message1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
message2=112986973231409888120577353242859084805047214541457965350144187389590352456006799472978745178189281815090815450270565237900225982339180112610119731963863956893715267747855823261219591861955860698515924676378193666240441336610163733608851589569552636456143458813504940123282752158213069552127882826178126865488831510668661490603634829587083647269829087983401822887021010233938397814273865372304594365126130473115858750680082108189969414601565893141350104383624475224282068849449526398266772478190668127068357731070595670828223
我们首先审计题目,可以发现题目中给了我们两个c和不同的{n,e}值,所以我们可以推断本题为共模攻击题目。
共模攻击:
c1 = m^e1 mod n =>c1^s1 = m^(e1*s1) mod n
c2 = m^e2 mod n =>c2^s2 = m^(e2*s2) mod n
两者相乘,通过扩展欧几里得定理,我们可知e1与e2互质,必存在s1和s2使e1*s1+e2*s2=1
由此可求出相对应的s1和s2.
m=(c1*s1+c2*s2)%n
代码实现:
n=21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111
e1=2767
e2=3659
c1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
c2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227
#已知两者n相同,e不同,共模攻击
import gmpy2
from Crypto.Util.number import isPrime, sieve_base as primes,long_to_bytes
def egcd(a,b):
if b==0:
return a,0;
else:
x,y=egcd(b,a%b)
return y,x-(a//b)*y #扩展欧几里得算法
s=egcd(e1,e2)
s1=s[0]
s2=s[1]
print(s[0],s[1])
m = gmpy2.powmod(c1, s1, n) *gmpy2.powmod(c2, s2, n) % n
print(long_to_bytes(m))
运行代码后可得最终结果为:
-201 152
b'BJD{r3a_C0mmoN_moD@_4ttack}'