BUAA^AITMCLAB&Level4题解

Level4

  • 分析加密过程:

    • 基础条件:

      • p是一个512bit的素数, p < q < 2 p pp<q<2p

      • d < N 0.32 dd<N0.32并不满足wiener’s attack条件

    • wiener’s attack数学基础:

      ∣ e N − k d ∣ < 1 2 d 2 是 利 用 N 近 似 ϕ ( N ) \left| \frac{e}{N}-\frac{k}{d} \right| <\frac{1}{2d^2} \\ 是利用N近似\phi(N) Nedk<2d21Nϕ(N)

  • 我们查寻资料可知有更好的近似方式⬇️

    • implementation of wiener’s attack:

      ∣ e N + 1 − 2 N − k d ∣ < 1 2 d 2 是 利 用 N + 1 − 2 N 近 似 ϕ ( N ) \left| \frac{e}{N+1-2\sqrt{N}}-\frac{k}{d} \right| <\frac{1}{2d^2}\\ 是利用N+1-2\sqrt{N}近似\phi(N) N+12N edk<2d21N+12N ϕ(N)

    • 一小点数学证明:

      N = p q ϕ ( N ) = ( p − 1 ) ( q − 1 ) = p q − ( p + q ) + 1 = N + 1 − ( p + q ) 而 p + q < 2 N 可 得 , N + 1 − 2 N < ϕ ( N ) < N N=pq\\ \phi(N)=(p-1)(q-1)=pq-(p+q)+1=N+1-(p+q)\\ 而p+q<2\sqrt{N}\\ 可得,N+1-2\sqrt{N}<\phi(N)N=pqϕ(N)=(p1)(q1)=pq(p+q)+1=N+1(p+q)p+q<2N N+12N <ϕ(N)<N

    • 其余数学证明:太复杂…orz,感兴趣的同学可自行查询(x),主要是证明满足连分数理论中的勒让德定理,也就是 k d \frac{k}{d} dk e N + 1 − 2 N \frac{e}{N+1-2\sqrt{N}} N+12N e的收敛分数,进而使用wiener‘s attack

  • 解密实现:

    • 优化wiener’s attack代码实现:

      def implementation_wiener_attack(e, n1, n):
          """
          维纳攻击近似优化,n1=n+1-2n^(1/2)
          """
          for (d, k) in cal_fra(e, n1):
              if k == 0:
                  continue
              if (d * e - 1) % k != 0:
                  continue
              phi = (d * e-1) // k
              # print(d)
              x = (phi-n-1)//2
              y = iroot(x**2-n, 2)
              if y[1]:
                  y = y[0]
                  p, q = x+y, x-y
                  return d, abs(p), abs(q)
          raise ValueError("unsolvble")
      
    • 解密主流程:

      n1 = n+1-2*iroot(n, 2)[0]
      d, p, q = implementation_wiener_attack(e, n1, n)
      print(n2s(rsa_decrypt(c, (n, d))))
      # aitmc{W00o!Y0u_3re_a_half_true_m3ster_of_W1ener_H3ck!!!}
      

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