0X00 RSA简介:
1977年,三位数学家Rivest、Shamir 和 Adleman
设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。
从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。
0X01 数学背景:
互质
从小学开始,我们就了解了什么是质数。互质是针对多个数字而言的,如果两个正整数,除了1以外,没有其他公因子,那么就称这两个数是互质关系(注意,这里并没有说这两个数一定是质数或有一个为质数。比如15跟4就是互质关系)。以下有一些关于质数与互质的性质:
1:质数只能被1和它自身整除
2:任意两个质数都是互质关系
3:如果两个数之中,较大的那个数是质数,则两者构成互质关系
4:如果两个数之中,较小的那个数是质数,且较大数不为较小数的整数倍,则两者构成互质关系 1和任意一个自然数是都是互质关系
5:p是大于1的整数,则p和p-1构成互质关系 p是大于1的奇数,则p和p-2构成互质关系
欧拉函数
欧拉函数是求小于x并且和x互质的数的个数。其通式为:
φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)。
其中p1, p2……pn为x的所有质因数,x是不为0的整数。看到这里是不是有一些头疼,太理论的东西的确不够具象。我们且不去理会后面公式计算与论证,因为已经超出本文的范围了。就前一句来说说吧,欧拉函数是求小于x并且和x互质的数的个数。这里我可以列举一个例子:
令x = 16,那么x的所有质因数为:φ(16) = 16 * (1 - 1/2) = 8
我们也可以枚举出所有比16小,且与16互质的数:1, 3, 5, 7, 9, 11, 13, 15欧拉函数的性质具体可以百度
模反元素
定义:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。
关于模反元素的求解,使用的是朴素的解法。如果想要更进一步了解的话,请自行搜索其他解法(比如:辗转相除法、欧几里德算法)。
0X03 RSA原理
RSA是一种算法,并且广泛应用于现代,用于保密通信。
RSA算法涉及三个参数,n,e,d,其中分为私钥和公钥,私钥是n,d,公钥是n,e
n是两个素数的乘积,一般这两个素数在RSA中用字母p,q表示,e是一个素数, d是e模varphi(n)
的逆元,d是由e,p,q可以求解出的
> > > 一般CTF就是把我们想要获得的flag作为明文,RSA中表示为m,然后通过RSA加密,得到密文,RSA中表示为C。
加密过程
c=m^e mod n
c=pow(m,e,n)
解密过程
m=c^d mod n
m=pow(c,d,n)
求解私钥d
d = gmpy2.invert(e, (p-1)*(q-1))
一般来说,n,e是公开的,但是由于n一般是两个大素数的乘积,所以我们很难求解出d,所以RSA加密就是利用现代无法快速实现大素数的分解,所存在的一种安全的非对称加密。
0X04 CTF中常见的类型:
1,已知 p ,q,e 求 d
(ed 除以 (q-1)(p-1) 的 余数 为 1 )
import gmpy2
p = 38456719616722997
q = 44106885765559411
e = 65537
s = (p-1)*(q-1)
d = gmpy2.invert(e,s)
print ("dec: " + str(d))
print ("hex: " + hex(d))
2,已知 n(比较小),e 求 d
(n = q * p , ed 除以 (q-1)(p-1) 的 余数 为 1 )(n往往是一个 1024bit 的超大数,很难分解为两个 质数)
n的分解使用yafu 中的 factor(t) 命令 ,简单的也可以使用在线网站
3,已知 公钥(n, e) 和 密文 c 求 明文 m
方法一:(n,e不太大的情况下)
首先将 n 分解为 q 和 p
再利用脚本 :
import libnum
from Crypto.Util.number import long_to_bytes
c = 0x6cd55a2bbb49dfd2831e34b76cb5bdfad34418a4be96180b618581e9b6319f86
n = 108539847268573990275234024354672437246525085076605516960320005722741589898641
#n = int("",16)
e = 65537
#e = int("",16)
q = 333360321402603178263879595968004169219
p = 325593180411801742356727264127253758939
d = libnum.invmod(e, (p

本文详细介绍了RSA算法的数学背景,包括互质、欧拉函数和模反元素,深入浅出地讲解了非对称加密的工作原理,以及在CTF挑战中的各种应用场景,如密钥计算、密文破解和低指数攻击等。
最低0.47元/天 解锁文章
3980





