RSA公开密钥算法

RSA公开密钥算法

RSA算法是Merkle背包算法出现后的第一个较为完善的公开密钥算法。
包含公开密钥和私人密钥,如果Alice想发送消息给Bob,应该怎么做呢?

  1. Alice用公开密钥对消息加密
  2. Alice将加密后的密文发送给Bob
  3. Bob用私人密钥对密文进行解密

产生两个密钥的方法:

  1. 选取两个大素数 p p p q q q,为了安全,两数的长度一样长
  2. 计算乘积 n = p q n=pq n=pq
  3. 然后随机选取加密密钥 e e e,并且 e e e ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1)互素
  4. 最后使用扩展欧几里得算法,得到解密密钥 d d d
    e d = 1   m o d   ( p − 1 ) ( q − 1 ) ed=1 \ \mathrm{mod}\ (p-1)(q-1) ed=1 mod (p1)(q1)
    d d d e e e ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1)的逆
    d , n d,n d,n也互素, e e e n n n就是公开密钥, d d d就是私人密钥

公开密钥 n , e 私人密钥 d 加密 C = P e ( m o d n ) 解密 P = C d ( m o d n ) \begin{array}{|c|c|c|} \hline 公开密钥& n,e \\ \hline 私人密钥& d\\ \hline 加密&C=P^e \pmod{n} \\ \hline 解密&P=C^d \pmod{n} \\ \hline \end{array} 公开密钥私人密钥加密解密n,edC=Pe(modn)P=Cd(modn)
例如我们需要加密消息 P = 857 P=857 P=857

  1. 取素数 p = 37 , q = 91 p=37,q=91 p=37,q=91
  2. 计算乘积 n = p q = 3367 n=pq=3367 n=pq=3367
  3. 随机选取加密密钥 e e e,与 ( p − 1 ) ( q − 1 ) = 3240 (p-1)(q-1)=3240 (p1)(q1)=3240互素, e = 137 e=137 e=137
  4. 扩展欧几里得算法 e x t e n d extend extend_ g c d ( e , ( p − 1 ) ( q − 1 ) , d , y ) gcd(e,(p-1)(q-1),d,y) gcd(e,(p1)(q1),d,y),求出 d = 473 d=473 d=473
  5. 加密:密文 C = P e ( m o d n ) = 85 7 137 ( m o d 3367 ) = 376 C=P^e \pmod n=857^{137}\pmod {3367}=376 C=Pe(modn)=857137(mod3367)=376
  6. 解密:明文 P = C d ( m o d n ) = 37 6 473 ( m o d 3367 ) = 857 P=C^d\pmod{n}=376^{473}\pmod {3367}=857 P=Cd(modn)=376473(mod3367)=857

解密原理:

欧拉定理&费马小定理

定义:
  1. a , m ∈ N + , a,m\in N^+, a,mN+ g c d ( a , m ) = 1 , gcd(a,m)=1, gcd(a,m)=1则有 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}\equiv 1\pmod{m} aφ(m)1(modm)其中 φ ( m ) \varphi(m) φ(m)是小于 m m m且与 m m m互质的自然数的个数当 m m m是素数 , a φ ( m ) = m − 1 , a m − 1 ≡ 1 ( m o d m ) ,a^{\varphi(m)}=m-1,a^{m-1}\equiv 1\pmod{m} aφ(m)=m1am11(modm)什么?这不是费马小定理吗?
    所以费马小定理是欧拉定理的一个特殊情况
  2. a , m a,m a,m是互素的正整数,那么 φ ( a m ) = φ ( a ) φ ( m ) , \varphi(am)=\varphi(a)\varphi(m), φ(am)=φ(a)φ(m)这说明欧拉函数是一个积性函数

那有 n = p q , φ ( n ) = φ ( p q ) = φ ( p ) φ ( q ) = ( p − 1 ) ( q − 1 ) n=pq,\varphi(n)=\varphi(pq)=\varphi(p)\varphi(q)=(p-1)(q-1) n=pqφ(n)=φ(pq)=φ(p)φ(q)=(p1)(q1)

C d ( m o d n ) C^d\pmod{n} Cd(modn)
= P e d ( m o d n ) =P^{ed}\pmod{n} =Ped(modn)
= P k ( p − 1 ) ( q − 1 ) + 1 ( m o d n ) =P^{k(p-1)(q-1)+1}\pmod{n} =Pk(p1)(q1)+1(modn)
= P ∗ P k ( p − 1 ) ( q − 1 ) ( m o d n ) =P*P^{k(p-1)(q-1)}\pmod{n} =PPk(p1)(q1)(modn)
= P ∗ ( P φ ( n ) ( m o d n ) ) k ( m o d n ) =P*(P^{\varphi(n)}\pmod n)^k \pmod{n} =P(Pφ(n)(modn))k(modn)
= P ∗ 1 k ( m o d n ) =P*1^k \pmod{n} =P1k(modn)
= P =P =P

不过,既然我们知道公开密钥 e e e n n n,还知道 n = p q , g c d ( e , ( p − 1 ) ( q − 1 ) ) = 1 , d = e − 1 m o d   ( p − 1 ) ( q − 1 ) n=pq,gcd(e,(p-1)(q-1))=1,d=e^{-1} \mathrm{mod}\ (p-1)(q-1) n=pq,gcd(e,(p1)(q1))=1d=e1mod (p1)(q1),那我们通过分解 n n n,得到正确的 p p p q q q,就可以得到私人密钥 d d d(其实还可以猜测 ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1),这显然比分解 n n n还要难)
这个想法的确很美好, B u t But But难度极其大
1976 1976 1976年, R i c h a r d G u y Richard Guy RichardGuy说道,“本世纪如果有人不采用特殊的方式成功地对 1 0 80 10^{80} 1080大小的数进行因子分解的话那我将非常惊讶”。
1977 1977 1977年, R o n R i v e s t Ron Rivest RonRivest说,分解一个 125 125 125位的十进制数大约需要 40 ∗ 1 0 50 40*10^{50} 401050年。
1994 1994 1994年,一个 129 129 129位的数据被成功分解。

两个大素数进行相乘是一个单向函数,得到乘积很容易,但是想分解却特别困难了,目前, 129 129 129位十进制数字的模数被认为是能分解的临界数,所以 n n n更应该大于这个数

随着密钥长度的增加,分解的难度更大,但是解密时间也会增加
现今,有很多针对RSA的攻击方法,例如选择密文攻击,公共模数攻击,低加密指数攻击,加密和签名攻击


谢谢🙏

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值