dp,dq泄露攻击以及dp泄露攻击

dp,dq泄露攻击以及dp泄露攻击

Zz1f

2025-04-19 发布34 浏览 · 0 点赞 · 0 收藏

dp,dq泄露攻击

  • 攻击条件:
    已知dp,dq,p,q,c
    其中:dp=d%(p-1), dq=d%(q-1)

  • 原理:dp,dq泄露攻击原理.png

  • 解题脚本:

    	            print('----------------dp,dq泄露攻击----------------')
    	
    	            dp = int(input('输入dp:'))
    	
    	            dq = int(input('输入dq:'))
    	
    	            n = int(input('输入n:'))
    	
    	            c = int(input('输入c:'))
    	
    	            e = int(input('输入e:'))
    	
    	            invp = inverse(p,q)
    	
    	            m1 = pow(c,dp,p)
    	
    	            m2 = pow(c,dq,q)
    	
    	            m = (((m2-m1)*invp)%q)*p+m1
    	
    	            print(long_to_bytes(m))
    	
    	            Cnotrol()
    	```
    	
    
    
  • 例题:BUUCTF_RSA
    题目附件:BUUCTF_RSA1.png
    发现给了dp,dq,应该是dp,dq泄露攻击,放大脚本里尝试
    BUUCTF_RSA1flag.png
    得到flag为noxCTF{W31c0m3_70_Ch1n470wn}

dp泄露攻击

  • 特点:当题目中出现了dp这样的字眼时,就可以考虑是 dp 泄露了
  • 攻击原理:dp = d mod (p-1),则 dp * e ≡ 1 mod (p-1)
  • 攻击条件:已知e,n,dp,c
  • 关系公式:dp泄露关系公式.png
  • 解密数学原理:dp泄露数学原理.jpg
  • 解题代码:
    dp = int(input('输入dp:'))
    
                n = int(input('输入n:'))
    
                c = int(input('输入c:'))
    
                e = int(input('输入e:'))
    
                for i in range(1, e):
    
                    if(e*dp-1%x==0):
    
                        q = n//p
    
                        d = inverse(e,(p-1)*(q-1))
    
                        m = pow(c, d, n)
    
                print(long_to_bytes(m))                            
    
请前往 登录/注册 即可发表您的看法…