RSA学习笔记

流程

密钥生成流程

  • 选取两个质数p,q
  • 令n=p*q
  • 求n的欧拉函数值为 ϕ ( n ) \phi(n) ϕ(n)
  • 取任意的一个e,使得e在1到 ϕ ( n ) \phi(n) ϕ(n)内并且e和 ϕ ( n ) \phi(n) ϕ(n)互素
  • 求d为e在 ϕ ( n ) \phi(n) ϕ(n)下的逆元
  • 则私钥为(d,n),公钥为(e,n)
  • 在这里插入图片描述

加密解密流程

假设Alice有一个信息需要发给Bob,但是没有可靠的通路来传递信息

那么Bob使用上面的方式生成私钥对和公钥对,将公钥对发给Alice,自己留着私钥对。公钥可以被通路上的窃听者收到

Alice收到公钥对(e,n)后对信息进行加密。假设信息为数字m,加密后的密文为C,则加密方式为 C = m e m o d    n C=m^e\mod n C=memodn,然后Alice将密文C发给Bob,密文可以被通路上的窃听者收到

Bob收到密文后使用密钥对(d,n)解密: m = C d m o d    n m=C^d\mod n m=Cdmodn得到原文

窃听者只能收到的是公钥对(e,n)和密文C,不能收到私钥对(d,n),理论上无法破解原文

原理

数学运算正确性证明:

已知:
e d ≡ 1 ( m o d ϕ ( n ) ) ed\equiv 1 \pmod {\phi (n)} ed1(modϕ(n))

C = ( m e ) m o d    n C = (m^e) \mod n C=(me)modn

求证:

m = ( C d ) m o d    n m = (C^d) \mod n m=(Cd)modn

证明:

∵ e d ≡ 1 ( m o d ϕ ( n ) ) \because ed\equiv 1 \pmod {\phi (n)} ed1(modϕ(n))

∴ e d − 1 = k ϕ ( n ) \therefore ed-1=k\phi(n) ed1=kϕ(n)

∵ 由 欧 拉 定 理 : a ϕ ( n ) ≡ 1 ( m o d n ) , g c d ( a , m ) = 1 \because 由欧拉定理:a^{\phi(n)}\equiv1\pmod n,gcd(a,m)=1 aϕ(n)1(modn),gcd(a,m)=1

又 ∵ C = ( m e ) m o d    n , 即 C = m e + k n , k ∈ Z 又\because C = (m^e) \mod n,即C=m^e+kn,k\in Z C=(me)modnC=me+kn,kZ

∴ C d m o d    n = m e d m o d    n = m k ϕ ( n ) + 1 m o d    n = m k ϕ ( n ) m o d    n × m m o d    n \therefore C^d\mod n \\=m^{ed}\mod n\\=m^{k\phi(n)+1}\mod n\\=m^{k\phi(n)}\mod n\times m\mod n Cdmodn=medmodn=mkϕ(n)+1modn=mkϕ(n)modn×mmodn

此时对m和n的关系展开分类讨论

  • 1:当 g c d ( m , n ) = 1 gcd(m,n)=1 gcd(m,n)=1

1 ≡ m k ϕ ( n ) ( m o d n ) 1\equiv m^{k\phi(n)}\pmod n 1mkϕ(n)(modn)

C d ≡ m ( m o d n ) C^d\equiv m\pmod n Cdm(modn)

  • 2: 当 g c d ( m , n ) ≠ 1 gcd(m,n)\not= 1 gcd(m,n)=1

由于 n = p q n=pq n=pq,则 m = p k 1 q k 2 , k 1 , k 2 ∈ N m=p^{k_1}q^{k_2},k_1,k_2\in N m=pk1qk2,k1,k2N

此时: m k ϕ ( n ) m o d    n = p k 1 k ϕ ( n ) q k 2 k ϕ ( n ) m o d    n = ( p k 1 k ϕ ( n ) m o d    n × q k 2 k ϕ ( n ) m o d    n ) m o d    n = [ { ( p ϕ ( n ) m o d    n ) k 1 k } m o d    n × { ( q ϕ ( n ) m o d    n ) k 2 k } m o d    n ] m o d    n = 1 m o d    n m^{k\phi(n)}\mod n\\= p^{k_1k\phi(n)}q^{k_2k\phi(n)}\mod n\\=(p^{k_1k\phi(n)}\mod n\times q^{k_2k\phi(n)}\mod n)\mod n\\=[\{(p^{\phi(n)}\mod n)^{k_1k}\}\mod n\times\{(q^{\phi(n)}\mod n)^{k_2k}\}\mod n]\mod n\\=1\mod n mkϕ(n)modn=pk1kϕ(n)qk2kϕ(n)modn=(pk1kϕ(n)modn×qk2kϕ(n)modn)modn=[{(pϕ(n)modn)k1k}modn×{(qϕ(n)modn)k2k}modn]modn=1modn,即此时也满足 1 ≡ m k ϕ ( n ) ( m o d n ) 1\equiv m^{k\phi(n)}\pmod n 1mkϕ(n)(modn)

综上所述, C d ≡ m ( m o d n ) , Q . E . D . C^d\equiv m\pmod n,Q.E.D. Cdm(modn)Q.E.D.

流程可靠性证明

假设窃听者收到了公钥对和密文,那么破解的关键就是解出密钥参数d。已知 d e ≡ 1 m o d    ϕ ( n ) de\equiv1\mod {\phi(n)} de1modϕ(n),也就是 d e = k n + 1 de=kn+1 de=kn+1,那么关键就是要解出来 ϕ ( n ) \phi(n) ϕ(n)

关于欧拉函数的计算有三种方法:

  • 如果知道p和q,那么就可以有 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p1)(q1),时间复杂度为 O ( 1 ) O(1) O(1)

  • 如果不知道p和q,那么可以尝试线性素数筛法,时间复杂度为 O ( n ) O(n) O(n)

  • 或者可以尝试将n分解为p和q,现在最先进的算法可以做到时间复杂度为 O ( n ) O(\sqrt n) O(n )

但在现实生活中,p和q至少都是512位长的数字(512个二进制位),基本上是 1 0 154 10^{154} 10154的数量级,那么n就是 1 0 308 10^{308} 10308的数量级,就算使用时间复杂度为 O ( n ) O(\sqrt n) O(n )的算法也需要 1 0 154 10^{154} 10154数量级的操作。按照CPU每秒钟操作 1 0 8 10^8 108来算,也需要大概 1 0 20 10^{20} 1020秒,也就是大约 1 0 15 10^{15} 1015天才能破解出一个512位长的密码。

当然,量子计算机出来后另说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AndrewMe8211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值