共模攻击

介绍 #

同一明文,使用相同的n,不同e进行加密

c1 = m^e1 mod n
c2 = m^e2 mod n

存在 t,s ,满足
te1 + se2 = gcd(e1,e2) = 1

所以
m^(te1 + se2) = m = c1^t*c2^s mod n

题目 #

n = 91988711096585254014061902029475785803436775040554413428256857601825281840455608000774499416291457871961485087751117936437502930850587505865207476188105549312952072118122473162952400356867887948408387500334877603885410549445229594299085046830314155571330761098182289454294497671288261064082431841717340592187
e1 = 44711
e2 = 36107
c1 = 45785021880113060583057817298928264078319672990057453058535114930745081117350671804547532293189756511044707050358716998140422860602096919314641673748035892210055235733849526369450014412275302283454864946883454538070831344218113408123784371750701629215262246625257443708313921084008244294488544498144136325671
c2 = 82157023975190324829950195353512888766091853099212035316581414227270256183328901829718074761557585217027148568170314345005671176170566675734144091265695558355594124080382697434235537650169471002210604280903079558999016166723084575878943269434519454156000332232807389767834129476229838924645359587705755210849

答案 #

import libnum
import gmpy2

n = 91988711096585254014061902029475785803436775040554413428256857601825281840455608000774499416291457871961485087751117936437502930850587505865207476188105549312952072118122473162952400356867887948408387500334877603885410549445229594299085046830314155571330761098182289454294497671288261064082431841717340592187

e1 = 44711
e2 = 36107
c1 = 45785021880113060583057817298928264078319672990057453058535114930745081117350671804547532293189756511044707050358716998140422860602096919314641673748035892210055235733849526369450014412275302283454864946883454538070831344218113408123784371750701629215262246625257443708313921084008244294488544498144136325671
c2 = 82157023975190324829950195353512888766091853099212035316581414227270256183328901829718074761557585217027148568170314345005671176170566675734144091265695558355594124080382697434235537650169471002210604280903079558999016166723084575878943269434519454156000332232807389767834129476229838924645359587705755210849

t, s, gcd = libnum.xgcd(e1, e2)
result = pow(c1, t, n)*pow(c2, s, n) % n

# b'flag{Share_M0dulus_i2_Danger0u2}'
print(libnum.n2s(result))