BUAA^AITMCLAB&Level2题解

Level2题解

  • msg部分

    • < N , d > <N,d>已知,密文 c c c已知,直接使用RSA解密变换即可

    • msg = n2s(fast_power(c, d, N))
      # store_your_private_key}
      
  • flag部分

    • 使用公钥 < N , e 2 > <N,e2>进行了加密得到密文 c 2 c2 c2

    • 发现无法直接求解 d 2 d_2 d2,考虑从msg部分获取信息——是否能分解 N = p q N=pq N=pq?

    • 问题转换为:已知 < N , e , d > <N,e,d>,如何求解 N = p q N=pq N=pq?

      • 算法如下:

      I n p u t : < N , e , d > O u t p u t : p 、 q ( N = p q ) 1. 初 始 化 : k = d e − 1 2. 生 成 随 机 整 数 g : 1 < g < N , 并 设   t = k 3. 分 析 t : 如 果 2 ∣ t , 设 t = t 2 , x = g t ( m o d   N ) , 否 则 回 到 第 2 步 4. 结 束 条 件 : 如 果 x > 1 并 且 y = g c d ( x − 1 , N ) > 1 , 那 么 设 p = y , q = N y 并 输 出 , 否 则 回 到 第 3 步 Input:\\ Output:p、q(N=pq)\\ 1.初始化:k=de-1\\ 2.生成随机整数g:11并且y=gcd(x-1, N)>1,那么设p=y,q=\frac{N}{y}并输出,否则回到第3步 Input:<N,e,d>Output:pq(N=pq)1.k=de12.g1<g<N, t=k3.t2t,t=2t,x=gt(mod N),24.x>1y=gcd(x1,N)>1p=y,q=yN3

      • 代码实现:
        def get_pq(n, e, d):
            """
            已知(n,e,d)求解(p,q)
            """
            k = d * e - 1
            f = 1
            while f:
                g = randint(2, n - 1)
                while f and k % 2 == 0:
                    k = k // 2
                    x = pow(g, k, n)  # 可以使用快速幂
                    p = gcd(x - 1, n)
                    # print(p)
                    if x > 1 and p > 1:
                        q = n // p
                        f = 0
            return p, q
        
    • flag解密实现:

      p, q = get_pq(N, e, d)
      phi = (p - 1) * (q - 1)
      d2 = invmod(e2, phi)
      flag = n2s(rsa_decrypt(N, d2, c2))
      # aitmc{It_is_important_to_
      

注:本文rsa相关函数实现在rsalib.py

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