• CTF_RSA解密学习


    CTF_RSA解密学习

    00X00 、先看了一边李永乐老师的视频

    https://www.bilibili.com/video/av26639065/
    
    • 1

    00X01、对称、非对称算法了解

    对称算法,加解密双方使用一个密钥。即加密秘钥和解密秘钥相同。
    对称加密又分为:分组加密和流加密

    常见的分组算法有:DES、3DES、DESX、Blowfish、IDEA、RC2、
    RC5、RC6和AES,以及中国的SSF33、SM1、SM4。
    
    分组加密又可以根据其迭代模式分为ECB,CBC,OFB,CFB,CTR。
    
    • 1
    • 2
    • 3
    • 4

    非对称算法也叫公钥算法,在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。
    这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;
    而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。

    主要的公钥算法有: RSA、 DSA、 DH 和 ECC。
    
    • 1

    在这里插入图片描述

    00X02、RSA简介

    RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德 · 李维斯特(Ron Rivest)、阿迪 · 萨莫尔(Adi Shamir)和伦纳德 · 阿德曼(Leonard Adleman)一起提出的。RSA 就是他们三人姓氏开头字母拼在一起组成的。

    RSA 算法的可靠性由极大整数因数分解的难度决定。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。如今,只有短的 RSA 密钥才可能被强力方式解破。到 2017 年为止,还没有任何可靠的攻击 RSA 算法的方式。

    00x03、RSA算法原理

    1、公钥与私钥的产生:

    (1)进行加密之前,首先找出2个不同的大质数p和q

    (2)计算n=p*q

    (3)根据欧拉函数,求得φ(n)=φ§φ(q)=(p−1)(q−1)

    (4)找出一个公钥e,e要满足: 1

    (5)根据e*d除以φ(n)余数为1,找到私钥d。

    (6)所以,公钥就是(n,e) 私钥就是(n,d)

    2、 消息加密:

    m^e除以n求余数即为c(密文)

    在这里插入图片描述

    也就是说RSA加密是对明文的E次方后除以N后求余数的过程。
    从通式可知,只要知道E和N任何人都可以进行RSA加密了,所以说E、N是RSA加密的密钥,也就是说E和N的组合就是公钥,我们用(E,N)来表示公钥

    公钥=(E,N)公钥=(E,N)
    
    • 1

    3、 消息解密:

    c^d除以n求余数即为m(明文)
    在这里插入图片描述
    也就是说对密文进行D次方后除以N的余数就是明文,这就是RSA解密过程。知道D和N就能进行解密密文了,所以D和N的组合就是私钥。

     私钥=(D,N)私钥=(D,N)
    
    • 1

    4、如下

    公钥(E,N)
    私钥(D,N)
    密钥对(E,D,N)
    加密密文=明文EmodN密文=m^EmodN
    解密明文=密文DmodN明文= c^DmodN

    5、小结

    求NN= p * q ;p,q为质数
    求φ(n)φ(n)=φ§φ(q)=(p−1)(q−1)
    求E找出一个公钥e,e要满足: 1
    求D根据e*d除以φ(n)余数为1,找到私钥d。

    00x04、实践

    1、求n

    我们准备两个很小对质数,
    p = 17
    q = 19
    n = p * q = 323

    2、求φ(n)

    φ(n)=φ§φ(q)=(17−1)(19−1)=144

    3、求e

    求E必须要满足2个条件:1 < e < L ,gcd(e,φ(n))=1
    即1 < e < 144,gcd(e,144) = 1
    e和144互为质数,5显然满足上述2个条件
    故E = 5

    4、求d

    求D也必须满足2个条件:1 < d < φ(n),e*d mod φ(n)= 1
    即1 < e < 144,5 * d mod 144 = 1
    显然当d= 29 时满足上述两个条件
    1 < 29 < 144
    5*29 mod 144 = 145 mod 144 = 1
    此时私钥=(d,n)=(29,323)

    5、加密

    准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N
    假设明文 = 123
    则 密文=明文EmodN
    则 密文=明文EmodN=1235mod323=225密文=明文EmodN=1235mod323=225

    q = 19
    p = 17
    e = 5
    n = q * p
    d = 29
    m1=123
    c1= pow(m1, e, n)
    print(c1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、 解密

    明文=密文DmodN=225^29mod323=123
    解密后的明文为123。

    
    # 解密
    q = 19
    p = 17
    e = 5
    n = q * p
    d = 29
    m1=123
    c1= pow(m1, e, n)
    print(c1)
    c=225
    #m=10# print(n)
    m2= pow(c, d, n)
    print(m2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    225
    123
    
    • 1
    • 2
  • 相关阅读:
    MotoGP Ignition:准备好参加 Spotlight 活动!
    CFdiv1+2-Bash and a Tough Math Puzzle-(线段树维护gcd+单点+区间)
    今日头条文章采集ChatGPT3.5/4.0驱动浏览器改写文章软件说明文档
    【大学英语视听说上】Topic Presentation
    pytorch 修改tensor数据类型
    MariaDB 数据文件 迁移
    TCP协议之《Pacing功能》
    el-table双击编辑功能实现
    使用vue-cli来搭建vue项目
    从转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?...
  • 原文地址:https://blog.csdn.net/szgyunyun/article/details/127809530