原理:

0.基本数学公式

a=kb+pa = kb + pa=kb+p

amodb=pa mod b =pamodb=p

1.RSA的基本公式

c≡memodnc \equiv m^emodnc≡memodn
m≡cdmodnm\equiv c^dmodnm≡cdmodn
ϕ(n)=(p−1)×(q−1)\phi(n)=(p-1)\times(q-1)ϕ(n)=(p−1)×(q−1)
d×e≡1modϕ(n)d\times e \equiv1mod\phi (n)d×e≡1modϕ(n)

2.dp是什么

dp≡dmod(p−1)dp\equiv d mod(p-1)dp≡dmod(p−1)

3.推导过程

将该公式变形:

dp≡dmod(p−1)dp\equiv d mod(p-1)dp≡dmod(p−1)
⇒\Rightarrow⇒ dp×edp \times edp×e ≡\equiv≡ d×emod(p−1)d \times e mod (p-1)d×emod(p−1)
⇒\Rightarrow⇒ d×e≡k×(p−1)+dp×ed \times e \equiv k \times (p-1) + dp \times ed×e≡k×(p−1)+dp×e

变形后的公式与下式结合

d×e≡1modϕ(n)d\times e \equiv1mod\phi (n)d×e≡1modϕ(n)

因为:

ϕ(n)=(p−1)×(q−1)\phi(n)=(p-1)\times(q-1)ϕ(n)=(p−1)×(q−1)

所以我们可以进行变形:

⇒\Rightarrow⇒d×e≡1mod(p−1)×(q−1)d\times e \equiv1mod(p-1) \times (q-1)d×e≡1mod(p−1)×(q−1)

得到:

k×(p−1)+dp×e=1modϕ(n)k \times (p-1) + dp \times e=1mod\phi (n)k×(p−1)+dp×e=1modϕ(n)

再次变形:

k1×(p−1)+dp×e=1mod(p−1)×(q−1)k_1 \times (p-1) + dp \times e =1mod (p-1)\times(q-1)k1​×(p−1)+dp×e=1mod(p−1)×(q−1)

结合:

k1×(p−1)+dp×e=k2×(p−1)×(q−1)+1k_1 \times (p-1) + dp \times e = k_2 \times (p-1) \times (q-1) +1k1​×(p−1)+dp×e=k2​×(p−1)×(q−1)+1

⇒\Rightarrow⇒ dp×edp \times edp×e= [k2×(p−1)×(q−1)+1]−[k1×(p−1)][k_2 \times (p-1) \times (q-1) +1] - [k_1 \times (p-1)][k2​×(p−1)×(q−1)+1]−[k1​×(p−1)]

⇒\Rightarrow⇒ dp×edp \times edp×e= [k2×(q−1)−k1]×(p−1)+1[k_2 \times (q-1) - k_1] \times (p-1) +1[k2​×(q−1)−k1​]×(p−1)+1

设:X=k2×(q−1)−k1设:X = k_2 \times (q-1) - k_1设:X=k2​×(q−1)−k1​

⇒\Rightarrow⇒ dp×e=dp \times e=dp×e=X×(p−1)+1X \times (p-1) +1X×(p−1)+1

⇒\Rightarrow⇒ dp<p−1dp < p-1dp<p−1
⇒\Rightarrow⇒ X<eX < eX<e
⇒\Rightarrow⇒X∈(0,e)X \in (0,e)X∈(0,e)

4.求p

遍历XXX(65537种可能),求出(p−1)(p-1)(p−1),得到ppp且能被nnn整除;接下来就是常规RSA的解法

for i in range(1,65538):if (dp*e-1)%i == 0:if n%(((dp*e-1)/i)+1)==0:p=((dp*e-1)/i)+1q=n/(((dp*e-1)/i)+1)phi = (p-1)*(q-1)d = gmpy2.invert(e,phi)%phi

例题:

[WUSTCTF2020]dp_leaking_1s_very_d@angerous
题目:
e = 65537
n = 156808343598578774957375696815188980682166740609302831099696492068246337198792510898818496239166339015207305102101431634283168544492984586566799996471150252382144148257236707247267506165670877506370253127695314163987084076462560095456635833650720606337852199362362120808707925913897956527780930423574343287847
c = 108542078809057774666748066235473292495343753790443966020636060807418393737258696352569345621488958094856305865603100885838672591764072157183336139243588435583104423268921439473113244493821692560960443688048994557463526099985303667243623711454841573922233051289561865599722004107134302070301237345400354257869
dp = 734763139918837027274765680404546851353356952885439663987181004382601658386317353877499122276686150509151221546249750373865024485652349719427182780275825
解密脚本:
import gmpy2 e = 65537
n = 156808343598578774957375696815188980682166740609302831099696492068246337198792510898818496239166339015207305102101431634283168544492984586566799996471150252382144148257236707247267506165670877506370253127695314163987084076462560095456635833650720606337852199362362120808707925913897956527780930423574343287847
c = 108542078809057774666748066235473292495343753790443966020636060807418393737258696352569345621488958094856305865603100885838672591764072157183336139243588435583104423268921439473113244493821692560960443688048994557463526099985303667243623711454841573922233051289561865599722004107134302070301237345400354257869
dp = 734763139918837027274765680404546851353356952885439663987181004382601658386317353877499122276686150509151221546249750373865024485652349719427182780275825for x in range(1, e):if(e*dp%x==1):p=(e*dp-1)//x+1if(n%p!=0):continueq=n//pphin=(p-1)*(q-1)d=invert(e, phin)m=powmod(c, d, n)if(len(hex(m)[2:])%2==1):continueprint("m:",m)#print(hex(m)[2:])print("flag:",bytes.fromhex(hex(m)[2:]))

RSA-详解dp泄漏相关推荐

  1. 0-1背包问题详解(DP分支限界回溯三种方法)

    0-1背包 将n个项目的权重和值,放入一个容量为W的背包中,得到背包中最大的总价值.换句话说,给定两个整数数组val[0..n - 1]和wt [0 . .n-1],分别表示与n个项目相关的值和权重. ...

  2. 非对称加密(RSA)详解

    前言 网上搜非对称加密,里面详解说的的确很详细,公式都拉出来了,本文通过简单易懂的方式讲解非对称加密 什么是非对称加密? 对称加密 先了解一下对称加密,对称加密就是客户端和服务端都有一个共同的秘钥(可 ...

  3. 表单提交对数据进行加密详解(RSA加密)

    一.使用背景 以前在做项目的时候就觉得表单直接明文提交非常不安全.有心之人只要稍加操作就能轻易获取用户的信息,这是非常可怕的事情,但又苦于不知道该如何加密,如何提高安全性. 后来慢慢接触到RSA,才知 ...

  4. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  5. C#实现RSA加密和解密详解

    C#实现RSA加密和解密详解 原文:C#实现RSA加密和解密详解 RSA加密解密源码: using System; using System.Collections.Generic; using Sy ...

  6. TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别

    我的TLS实现:https://github.com/mrpre/atls/ 大家可以参考,代码里面的逻辑较清晰. 我的SSL专栏见:https://blog.csdn.net/mrpre/artic ...

  7. ios php rsa加密解密,php rsa加密解密使用详解

    第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...

  8. 密码学:RSA加密算法详解

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  9. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

最新文章

  1. 如何在CrossOver里应用Windows容器的存档(备份)与恢复?
  2. python爬虫系列之数据的存储(二):csv库的使用
  3. 04:网络层协议介绍
  4. 新Hibernate SessionFactory().getCurrentSession()猫腻
  5. 浅谈C#中的数组(一)
  6. java - 百钱百鸡小算法
  7. java 同域名下怎么访问同事的项目_喜大普奔,两个开源的前后端分离项目可以在线体验了...
  8. python 数组去重复_numpy数组去掉重复的行,保留唯一的行数据
  9. 数据库链接池c3p0的配置
  10. B. Hierarchy
  11. Windows小功能合集
  12. 那些年我们一起用过的Hybrid App
  13. 记录一个找直线三等分点的方法及其证明
  14. 阿里小蜜这一年,经历了哪些技术变迁?
  15. QQ客户端管理聊天记录漫游功能 | 解决经常弹窗消息漫游安全验证,QQ服务独立密码的问题
  16. Python Gstreamer播放rtsp视频(含音频)(海康IPCAM)
  17. 消金主流市场外的灰色地带:vivo应用商店聚集大量“伪现金贷平台”
  18. 文章标题 Chris and Magic Square
  19. 《无缘社会》读书笔记及读后感范文2100字
  20. 阿里架构师的成长之路,Java开发者的技术梦要如何实现

热门文章

  1. 电容屏物体识别_一种基于触摸屏触摸点的物体识别方法与流程
  2. 苹果产品中投影的秘密在这里
  3. Turbo Autoencoder: Deep learning based channel code for point-to-point communication channels
  4. 900年历史的万安桥失火!传统古建筑又该如何保护?
  5. 人脉就是钱脉,培养人脉的100个技巧。。。
  6. studio 不能输入中文
  7. MySQL installer直接解决安装(包括不想安在c盘也OK)、更新、卸载问题
  8. 总结30个Python赚钱的接单平台!兼职月入5000+,成年人的世界,钱是活下去的筹码
  9. 【食品加工技术】第一章 食品加工技术概述 笔记
  10. MT6737/MT6737T/MT6737M处理器参数差异分析资料