RSA详解
最近在复习计算机安全的内容,发现网上关于RSA算法的讲解都不够详细,所以自己写一篇。
RSA算法是一个常用的公钥加密算法。
所谓的公钥加密就是用两个密钥,一个公钥一个私钥。通常来说,加密是用的公钥,解密用的私钥。而这两个密钥都是接收方的。
要理解公钥加密的优越性首先要看看对称密码的缺陷。所谓的对称加密呢就是用一个密钥来加密解密。这个时候发送方用密钥加密完了,要想办法把密钥发给接收方去解密。这就可能导致在发送密钥的时候密钥被人截获。
而公钥密码呢,接收方把公钥发给发送方去加密,而解密的私钥一直在接收方手上。这样密钥就不会被截获。公钥是公开的,就算拿到公钥也不能倒推解密出明文,当然也不能从公钥推出私钥,这就是它的安全之处。下面我们以RSA为例来看看神奇的公钥加密。
先来看看RSA的伪代码:
n=p∗qp,q是随便两个大质数φ(n)=(p−1)(q−1)φ(n)是欧拉函数,见下详解e=rand(1, φ(n)),gcd(e, φ(n))=1e是公钥,gcd是公约数de≡1(mod φ(n))d是私钥,这个式子的意思见下详解 \begin{aligned}n&=p∗q\quad\text{p,q是随便两个大质数}\\\varphi(n)&=(p−1)(q−1)\quad\text{$\varphi(n)$是欧拉函数,见下详解}\\e&=rand(1,\,\varphi(n)),\quad gcd(e,\,\varphi(n))=1\quad\text{e是公钥,gcd是公约数}\\de&\equiv1 (mod\,\varphi(n))\quad\text{d是私钥,这个式子的意思见下详解}\end{aligned} nφ(n)ede=p∗qp,q是随便两个大质数=(p−1)(q−1)φ(n)是欧拉函数,见下详解=rand(1,φ(n)),gcd(e,φ(n))=1e是公钥,gcd是公约数≡1(modφ(n))d是私钥,这个式子的意思见下详解
生成两个密钥后,加密过程非常简单:
m是明文,c是密文c=me mod n用公钥e,n加密m=cd mod n用私钥d,n解密 \begin{aligned}&&\text{m是明文,c是密文}\\c&=m^e\;mod\;n&\text{用公钥{e,n}加密}\\m&=c^d\;mod\;n&\text{用私钥{d,n}解密}\end{aligned} cm=memodn=cdmodnm是明文,c是密文用公钥e,n加密用私钥d,n解密
首先明确常识:mod就是%。
下面我们来详细地看看RSA。
欧拉函数
欧拉函数代表的是2到x之间和x互质的数的数量。既给了一个x,想看看有多少个小于x的数和x互质,就用欧拉函数。
∀x∈Zp∗既x是2到p之间和p互质的整数xp−1=1 mod pxφ(p)=1 mod p其中欧拉函数 φ(p)=∣Zp∗∣∣Zp∗∣是Zp∗中的元素个数φ(p∗q)=(p−1)(q−1)其中p, q皆为素数。若 gcd(e, φ(p))=1,ed+kφ(p)=1,则 ed=1 mod φ(p),则 d=e−1 mod φ(p)e−1是e的乘法逆元,既 e−1e mod φ(p)=1 \begin{aligned} \forall x&∈Z_p^∗&\text{既x是2到p之间和p互质的整数}\\ x^{p−1}&=1\,mod\,p\\ x^{\varphi(p)}&=1\,mod\,p\\ \text{其中欧拉函数}\,\varphi(p)&=|Z_p^∗ |&\text{$|Z_p^∗ |$是$Z_p^*$中的元素个数}\\ \varphi(p∗q)&=(p−1)(q−1)&\text{其中p, q皆为素数。}\\ \text{若}\,gcd(e,\,\varphi(p))&=1,\\ ed+k\varphi(p)&=1,\\ \text{则}\,ed&=1\,mod\,\varphi(p),\\ \text{则}\,d&=e^{−1}\,mod\,\varphi(p)\\ \text{$e^{−1}$是$e$的乘法逆元,既}\,e^{−1}e\,mod\,\varphi(p)&=1\\ \end{aligned} ∀xxp−1xφ(p)其中欧拉函数φ(p)φ(p∗q)若gcd(e,φ(p))ed+kφ(p)则ed则de−1是e的乘法逆元,既e−1emodφ(p)∈Zp∗=1modp=1modp=∣Zp∗∣=(p−1)(q−1)=1,=1,=1modφ(p),=e−1modφ(p)=1既x是2到p之间和p互质的整数∣Zp∗∣是Zp∗中的元素个数其中p, q皆为素数。
欧几里得算法(辗转相除法)
好像高中就学过,是用来算两个数的公因数的。
欧几里得算法本质上就是一个递推式:
gcd(a, b)=gcd(b, a%b),a≥b gcd(a,\,b)=gcd(b,\,a\%b), a\geq b gcd(a,b)=gcd(b,a%b),a≥b
下面是它的证明(嫌长可以不看):
ifa=qb+r,r<bthenr=a−qb=a % b∵ a,b % gcd(a,b)=0∴ r % gcd(a,b)=[a % gcd(a,b)−qb % gcd(a,b)] % gcd(a,b)=0∴ gcd(a, b)=gcd(b, r){
a=q0b+r0b=q1r0+r1…rn−1=qn+1rn+rn+1, qi≥2rn+1=0rn为最大公约数。 \begin{aligned}if\qquad a &= qb + r, r < b\\then\qquad r &= a − qb\\ &= a\,\%\,b\\ \\ ∵\,a, b\,\%\,gcd(a, b) &= 0\\ ∴\,r\,\%\,gcd(a, b) &= [a\,\%\,gcd(a, b) − qb\,\%\,gcd(a, b)]\,\%\,gcd(a, b) \\&= 0\\ ∴\,gcd(a,\,b) &= gcd(b,\,r)\\\\\begin{cases}a&=q_0b+r_0\\b&=q_1r_0+r_1\\&…\\r_{n−1}&=q_{n+1}r_n+r_{n+1}\end{cases}&,\,q_i≥2\\\\r_{n+1}&=0\quad\text{$r_n$为最大公约数。}\end{aligned} ifathenr∵a,b%gcd(a,b)∴r%gcd(a,b)∴gcd(a,b)⎩⎪

本文深入探讨RSA加密算法,包括欧拉函数、欧几里得算法、扩展欧几里得算法在RSA中的应用,以及RSA的安全性基于大素数分解难题。通过理解这些概念,阐述了公钥加密的优势,并提到了RSA的优化技术。

2191

被折叠的 条评论
为什么被折叠?



