EDI
JOIN US ▶▶▶
招新
EDI安全的CTF战队经常参与各大CTF比赛,了解CTF赛事。
欢迎各位师傅加入EDI,大家一起打CTF,一起进步。(诚招web re crypto pwn misc方向的师傅)有意向的师傅请联系邮箱root@edisec.net、shiyi@edisec.net(带上自己的简历,简历内容包括但不限于就读学校、个人ID、擅长技术方向、历史参与比赛成绩等等。
点击蓝字 · 关注我们
01
出题脚本
import libnum
import gmpy2
#生成素数
p=libnum.generate_prime(1024)
q=libnum.generate_prime(1024)
e1 = 2333
e2 = 23333
m = "flag{welc0me_t0_crypt0}"
m = libnum.s2n(m)
n= p * q
c1 = pow(m,e1,n)
c2 = pow(m,e2,n)
print("n1=",n)
print("e1=",e1)
print("c1=",c1)
print("n2=",n)
print("e2=",e2)
print("c2=",c2)
'''
n1=
232386709436368212294181983036964840335465487253207895119051841544642165747413364204
621134762327433176742228667510937265639270464797770043359166623856543636719811459708
384817804673141226893181977655413390809439644017122880192619972788805693056098670729
951563699705413269178069248282662526715939950484425322050001738083273246890046229101
389729730208438997996300651271287958375819406567610589424021292872374186021462595358
497730335478976449715709075441544929289943903261810405141143808402498800962662132479
689095824813325194886611549303879663878262693954307608251386268674849319955795771388
60619071549478038088017447009
e1= 2333
c1=
182499511238279361651105801086265804955699834728862526475489209548137438888528301510
461700177812310917000331843742327357676592671529937806554190317880645730744328527374
211700186950915083126137917129685694260444460038935244999939424699240559176105814379
340183952059233657223080580607017535500026875597537417228974392611120146466402652598
516879384158293989418917112879153229506315159697692974885533880511950494988883557884
497669546643093284591585230262842223871386847773170173595063356178168248812155159258
340009300197191015275403255460513415452480048385279489924461992458151166774607778637
56165903160043717884206023382
n2=
232386709436368212294181983036964840335465487253207895119051841544642165747413364204
621134762327433176742228667510937265639270464797770043359166623856543636719811459708
384817804673141226893181977655413390809439644017122880192619972788805693056098670729
951563699705413269178069248282662526715939950484425322050001738083273246890046229101
389729730208438997996300651271287958375819406567610589424021292872374186021462595358
497730335478976449715709075441544929289943903261810405141143808402498800962662132479
689095824813325194886611549303879663878262693954307608251386268674849319955795771388
60619071549478038088017447009
e2= 23333
c2=
795513931626540345441086932455908667979245229108247829493862669645544050151877072089
061892471060061872889280500282629155430952824271855677879922093499795725259815652265
131607156857771710348436576167599464458168687444731880205259716735521027185069483393
008772069360109389029136711134295174857478278337997240012299161227378092927415332835
624925375559924862436222180469822907722270427843762050910840536640713984606042887446
449271344845880841096695340933959839938215727699780460128368760911636658156001224232
858920136464429117896528104264149851439835204097847326440194543577606575224052227385
7215764354822976705881386403
'''
02
攻击原理
1、攻击条件:
相同的模数:多个明文使用了相同的模数进行加密
不同的指数:每个明文都有不同的公钥指数e
2、相同的模数
密文c1、c2都公用一个模数n。
c1 = pow(m,e1,n)
c2 = pow(m,e2,n)
3、不同的指数
2333 =
23333 =
4、共模方式加密的同余式
5、攻击思路:我们的思路是求出明文m,所以要想办法把明文m的指数给去掉
6、根据裴蜀定理,如果两个数互质(最大公因数为1),那么它可以表示为:
7、那么这里我们可以将指数e1,e2代入式子中
注意这个前提:gcd(e1,e2) = 1,我们知道e1=233,e2 = 23333,所以可以适用此定理。
8、现在我们将两个方程式结合起来看:这里如果可以让和分别乘上和那么就可以抵消掉的指数 即因为可以得到
9、根据同余式相乘的性质:
10、所以这里有:将这两个式子分别乘上和的次方
11、根据同余式相乘的性质:
12、所以这里有:
13、所以我们知道了,求解明文的方程为:
14、x、y的结果肯定是一正一负,所以要判断一下x、y的值如果为负数就要进行模逆运算。
03
解题脚本
n =
232386709436368212294181983036964840335465487253207895119051841544642165747413364204
621134762327433176742228667510937265639270464797770043359166623856543636719811459708
384817804673141226893181977655413390809439644017122880192619972788805693056098670729
951563699705413269178069248282662526715939950484425322050001738083273246890046229101
389729730208438997996300651271287958375819406567610589424021292872374186021462595358
497730335478976449715709075441544929289943903261810405141143808402498800962662132479
689095824813325194886611549303879663878262693954307608251386268674849319955795771388
60619071549478038088017447009
e1 = 2333
e2 = 23333
c1 =
182499511238279361651105801086265804955699834728862526475489209548137438888528301510
461700177812310917000331843742327357676592671529937806554190317880645730744328527374
211700186950915083126137917129685694260444460038935244999939424699240559176105814379
340183952059233657223080580607017535500026875597537417228974392611120146466402652598
516879384158293989418917112879153229506315159697692974885533880511950494988883557884
497669546643093284591585230262842223871386847773170173595063356178168248812155159258
340009300197191015275403255460513415452480048385279489924461992458151166774607778637
56165903160043717884206023382
c2 =
795513931626540345441086932455908667979245229108247829493862669645544050151877072089
061892471060061872889280500282629155430952824271855677879922093499795725259815652265
131607156857771710348436576167599464458168687444731880205259716735521027185069483393
008772069360109389029136711134295174857478278337997240012299161227378092927415332835
624925375559924862436222180469822907722270427843762050910840536640713984606042887446
449271344845880841096695340933959839938215727699780460128368760911636658156001224232
858920136464429117896528104264149851439835204097847326440194543577606575224052227385
7215764354822976705881386403
# e1,e2必须互质,即最大公因数必须是1
if libnum.gcd(e1,e2) != 1:
gcd(e1,e2) != 1")
exit(0)
# 使用扩展欧几里得求出x,y的值
_ , x ,y=gmpy2.gcdext(e1,e2)
if x < 0:
c1 = libnum.invmod(c1,n)
x = abs(x)
if y < 0:
c2 = libnum.invmod(c2,n)
y = abs(y)
m = (pow(c1,x,n) * pow(c2,y,n)) % n
# flag{welc0me_t0_crypt0}
print(long_to_bytes(m).decode())
EDI安全
扫二维码|关注我们
一个专注渗透实战经验分享的公众号
原文始发于微信公众号(EDI安全):RSA共模攻击 by shenqi
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论