RSA入门:
写在前面:
这篇文章是帮助对RSA不熟悉的朋友且需要较为快速、深入的了解RSA而写的
不涉及非常晦涩难懂的数学知识和算法(不过最简单的原理说明还是有的)
攻击方法也是最容易遇到的(RSA的进阶篇除外)
并且所有的例题都是比较新的,甚至还有刚刚结束的比赛的题目
基本原理:
公钥与私钥的产生:
(1)进行加密之前,首先找出2个不同的大质数p和q
(2)计算n=p*q
(3)根据欧拉函数,求得φ(n)=φ(p)φ(q)=(p−1)(q−1)
(4)找出一个公钥e,e要满足: 1
(5)根据e*d除以φ(n)余数为1,找到私钥d。
(6)所以,公钥就是(n,e) 私钥就是(n,d)
消息加密:
m^e除以n求余数即为c(密文)
消息解密:
c^d除以n求余数即为m(明文)
关于基本原理的一些说明:
算法原理:
RSA公开密钥密码体制的原理是:
根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
模运算规则:
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p
(a ^ b) % p = ((a % p)^b) % p
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((a*b) % p * c)% p = (a *(b*c)%p) % p (6)
交换律:
(a + b) % p = (b+a) % p
(a * b) % p = (b * a) % p
分配律:
((a +b)% p * c) % p = ((a * c) %p + (b * c) % p) % p
重要定理:
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p)
若a≡b (% p),则对于任意的正整数c,都有(a * c) ≡ (b * c) (%p)
若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
(a * c) ≡ (b * d) (%p)
欧拉函数:
定义:
在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)
例如φ(8)= 4,因为1,3,5,7均和8互质
特殊性质:p^k型欧拉函数:
若N是质数p的k次幂(即N=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。
mn型欧拉函数(联想rsa算法的p和q)
设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值。
若m,n互质,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。
基础知识的练习:
buuctf-RSA:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flag提交
buuctf-rsarsa:
题目:
解题:
倒数第二行的gmpy2.powmod也可以用pow函数替代,不过前者比后者的计算速度快很多,之后有道题可以体现出来
RSA的基础攻击方式:
自此