BUAA^AITMCLAB&Level1题解

Level1题解

  • 分析加密过程:

    • 加密特点:

      f l a g flag flag只有一个,但采用两个公钥 < N , e 1 > 与 < N , e 2 > <N,e1><N,e2>加密了两次得到了 c 1 与 c 2 c1与c2 c1c2,其中, g c d ( e 1 , e 2 ) = 1 gcd(e1,e2)=1 gcd(e1,e2)=1

    • 回顾RSA算法:

      • 安全性:依赖于大整数质因数分解的难度

      • 加密变换: m e = c   m o d   N m^e = c~mod~N me=c mod N

        • 公钥: < N , e > <N,e> 任何人拥有了公钥即可进行加密

          1 < e < ( p − 1 ) ( q − 1 ) g c d ( e , ( p − 1 ) ( q − 1 ) ) = 1 11<e<(p1)(q1)gcd(e,(p1)(q1))=1

      • 解密变换: c = m d   m o d   N c=m^d~mod~N c=md mod N

        • 私钥: < N , d > <N,d> 其中: N = p q N=pq N=pq(p,q均为质数),

      d e = 1   m o d   ( p − 1 ) ∗ ( q − 1 ) de=1~mod~(p-1)*(q-1) de=1 mod (p1)(q1)

  • 共模攻击:

    • 条件:

      < n , e 1 , e 2 , c 1 , c 2 > <n,e1,e2,c1,c2>已知且 g c d ( e 1 , e 2 ) = 1 gcd(e_1,e_2)=1 gcd(e1,e2)=1

      c 1 ≡ m e 1   ( m o d   n ) c_1\equiv m^{e_1}~(mod~n) c1me1 (mod n)

      c 2 ≡ m e 2   ( m o d   n ) c_2\equiv m^{e_2}~(mod~n) c2me2 (mod n)

    • 需要的模运算性质:

      ( a ∗ b ) % p = ( ( a % p ) ∗ ( b % p ) ) % p (a*b)\%p=((a\%p)*(b\%p))\%p (ab)%p=((a%p)(b%p))%p

      ( a b ) % p = ( ( a % p ) b ) % p (a^b)\%p = ((a\%p)^b)\%p (ab)%p=((a%p)b)%p

    • 数学原理:

      g c d ( e 1 , e 2 ) = 1   ⇒   e 1 ∗ x + e 2 ∗ y = 1 假 设 x > 0 , y < 0 ( c 1 x ∗ c 2 y ) % n = ( ( m e 1 ∗ x % n ) ∗ ( m e 2 ∗ y % n ) ) % n = ( m e 1 ∗ x + e 2 ∗ y ) % n = m gcd(e_1,e_2)=1~\Rightarrow~e_1*x+e_2*y=1\\ 假设x>0,y<0\\ (c_1^x*c_2^y)\%n=((m^{e_1*x}\%n)*(m^{e_2*y}\%n))\%n =(m^{e_1*x+e_2*y})\%n=m gcd(e1,e2)=1  e1x+e2y=1x>0y<0(c1xc2y)%n=((me1x%n)(me2y%n))%n=(me1x+e2y)%n=m

      • 如果 x < 0 x<0 x<0,则取 x = − x 且 c 1 = i n v m o d ( c 1 , n ) x=-x且c_1=invmod(c_1, n) x=xc1=invmod(c1,n), y < 0 y<0 y<0同理
    • 代码实现:

      def common_mod(e1, e2, c1, c2, N):
          """
          共模攻击:同一段明文m使用不同的e,相同的N进行加密
          """
          _, u, v = Egcd(e1, e2)
          if u < 0:
              u = -u
              c1 = invmod(c1, N)
          if v < 0:
              v = -v
              c2 = invmod(c2, N)
          m = pow(c1, u, N) * pow(c2, v, N) % N
          return m
      
      
  • 解密主流程

    if __name__ == "__main__":
        e1 = 65537
        e2 = 963419
        N = 20048647887341205523444977355010707765274240820198740886063888512502033587769868314486271129333694413109387071562055690005228525559934043277161046308311898000752776999092327421061595311829921997532854204267161578079801012624727196123588374430846179213325016005397490266026738972638808337545990055369928552466997411587675852222761794026180507707966312432274067453296967666621591533386520756842441943051773725015532974723116491660055937060298790330345606870309743138118459434346796923102887514775287881883439908089582632640061259258740007419870718966707607521159291791097624067229969281077143354643001664403913991644467
        c1 = 1413750055207022941568329187446066487403500765460761572227376144607660240395326522973307046004979624601604213224918988321501270059071500066882064209247917554745581793896555798560939410733596915266418532287017013823435344990036597967445573969487062227380529627028612285802464882496212301769067172853758330070138009767394870042613078386721339264858678615843222784832621954578982376854514839736276400798150419214497934598226180352252977305319622252080960481078671833413346188828033910689631932089823729264542083315620234674282590493797576023672980537919574980902978546192003654543357786779471585690173302454429025344059
        c2 = 3375578062147608533850942853901102056040887531669784350666079177604242560382170075843460566578012075575179567441729528870198216253852376401440958520033848614051445851340337944894932838437790028030819526143444835060144971455117365151495541390380862298201820501237365577224283542534902146440674742286322212972077455029961075853352777137395404560387408496866501461784748715553927384312433630677956229220272763083964452080984735875087340855266572703126596019883254182483014350864897489088531330274319866910219337758689741037902819077568689721448942277419844163504591449807017766332629276288893591669645092166348329361353
        msg = common_mod(e1, e2, c1, c2, N)
        print(n2s(msg))
        # aitmc{the_same_m0d_1s_not_s4fe}
    

你可能感兴趣的:(安全,python,网络安全)