RSA详解

RSA详解最近在复习计算机安全的内容,发现网上关于RSA算法的讲解都不够详细,所以自己写一篇。RSA算法是一个常用的公钥加密算法。所谓的公钥加密就是用两个密钥,一个公钥一个私钥。通常来说,加密是用的公钥,解密用的私钥。而这两个密钥都是接收方的。要理解公钥加密的优越性首先要看看对称密码的缺陷。所谓的对称加密呢就是用一个密钥来加密解密。这个时候发送方用密钥加密完了,要想办法把密钥发给接收方...
摘要由CSDN通过智能技术生成

RSA详解

最近在复习计算机安全的内容,发现网上关于RSA算法的讲解都不够详细,所以自己写一篇。

RSA算法是一个常用的公钥加密算法。

所谓的公钥加密就是用两个密钥,一个公钥一个私钥。通常来说,加密是用的公钥,解密用的私钥。而这两个密钥都是接收方的。

要理解公钥加密的优越性首先要看看对称密码的缺陷。所谓的对称加密呢就是用一个密钥来加密解密。这个时候发送方用密钥加密完了,要想办法把密钥发给接收方去解密。这就可能导致在发送密钥的时候密钥被人截获。

而公钥密码呢,接收方把公钥发给发送方去加密,而解密的私钥一直在接收方手上。这样密钥就不会被截获。公钥是公开的,就算拿到公钥也不能倒推解密出明文,当然也不能从公钥推出私钥,这就是它的安全之处。下面我们以RSA为例来看看神奇的公钥加密。

先来看看RSA的伪代码:
n = p ∗ q p,q是随便两个大质数 φ ( n ) = ( p − 1 ) ( q − 1 ) φ ( n ) 是欧拉函数,见下详解 e = r a n d ( 1 ,   φ ( n ) ) , g c d ⁡ ( e ,   φ ( n ) ) = 1 e是公钥,gcd是公约数 d e ≡ 1 ( m o d   φ ( 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=pqp,q是随便两个大质数=(p1)(q1)φ(n)是欧拉函数,见下详解=rand(1,φ(n)),gcd(e,φ(n))=1e是公钥,gcd是公约数1(modφ(n))d是私钥,这个式子的意思见下详解

生成两个密钥后,加密过程非常简单:
m是明文,c是密文 c = m e    m o d    n 用公钥e,n加密 m = c d    m o d    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 ∈ Z p ∗ 既x是2到p之间和p互质的整数 x p − 1 = 1   m o d   p x φ ( p ) = 1   m o d   p 其中欧拉函数   φ ( p ) = ∣ Z p ∗ ∣ ∣ Z p ∗ ∣ 是 Z p ∗ 中的元素个数 φ ( p ∗ q ) = ( p − 1 ) ( q − 1 ) 其中p, q皆为素数。 若   g c d ⁡ ( e ,   φ ( p ) ) = 1 , e d + k φ ( p ) = 1 , 则   e d = 1   m o d   φ ( p ) , 则   d = e − 1   m o d   φ ( p ) e − 1 是 e 的乘法逆元,既   e − 1 e   m o d   φ ( 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} xxp1xφ(p)其中欧拉函数φ(p)φ(pq)gcd(e,φ(p))ed+kφ(p)edde1e的乘法逆元,既e1emodφ(p)Zp=1modp=1modp=Zp=(p1)(q1)=1,=1,=1modφ(p),=e1modφ(p)=1x2p之间和p互质的整数ZpZp中的元素个数其中p, q皆为素数。

欧几里得算法(辗转相除法)

好像高中就学过,是用来算两个数的公因数的。

欧几里得算法本质上就是一个递推式:
g c d ⁡ ( a ,   b ) = g c d ⁡ ( b ,   a % b ) , a ≥ b gcd⁡(a,\,b)=gcd⁡(b,\,a\%b), a\geq b gcd(a,b)=gcd(b,a%b),ab
下面是它的证明(嫌长可以不看):
i f a = q b + r , r < b t h e n r = a − q b = a   %   b ∵   a , b   %   g c d ( a , b ) = 0 ∴   r   %   g c d ( a , b ) = [ a   %   g c d ( a , b ) − q b   %   g c d ( a , b ) ]   %   g c d ( a , b ) = 0 ∴   g c d ( a ,   b )

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值