自学RSA加密算法

本文介绍了RSA加密算法的基础,包括互质关系的概念及其与欧拉函数的关系。欧拉函数φ(n)用于计算与n互质的数的数量,对于质数和质数幂次有特定计算公式。RSA算法通过选取两个大质数p和q生成公钥和私钥,利用欧拉函数确保解密的安全性,其安全性基于大数因式分解的困难性。
摘要由CSDN通过智能技术生成

RSA算法基础

互质关系

如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。

关于互质关系,不难得到以下结论:

1. 任意两个质数构成互质关系,比如3132. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如2113. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如1164. 1和任意一个自然数是都是互质关系,比如1885. p是大于1的整数,则p和p-1构成互质关系,比如97966. p是大于1的奇数,则p和p-2构成互质关系,比如9795

欧拉函数

用来解决一个问题:

  任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在18之中,有多少个数与8构成互质关系?)

计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。

φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。
第一种情况
如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。
第二种情况
如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。
第三种情况
如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则

比如 φ(8) = φ(2^3) =2^3 - 2^2 = 8 -4 = 4。
这是因为只有当一个数不包含质数p,才可能与n互质。而包含质数p的数一共有p(k-1)个,即1×p、2×p、3×p、…、p(k-1)×p,把它们去除,剩下的就是与n互质的数。
上面的式子还可以写成下面的形式:

可以看出,上面的第二种情况是 k=1 时的特例。
第四种情况
如果n可以分解成两个互质的整数之积,

 n = p1 × p2

φ(n) = φ(p1p2) = φ(p1)φ(p2)

即积的欧拉函数等于各个因子的欧拉函数之积。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。
这一条的证明要用到"中国剩余定理",这里就不展开了,只简单说一下思路:如果a与p1互质(a<p1),b与p2互质(b<p2),c与p1p2互质(c<p1p2),则c与数对 (a,b) 是一一对应关系。由于a的值有φ(p1)种可能,b的值有φ(p2)种可能,则数对 (a,b) 有φ(p1)φ(p2)种可能,而c的值有φ(p1p2)种可能,所以φ(p1p2)就等于φ(p1)φ(p2)。
第五种情况
因为任意一个大于1的正整数,都可以写成一系列质数的积。

根据第4条的结论,得到

再根据第3条的结论,得到
 也就等于

这就是欧拉函数的通用计算公式。比如,1323的欧拉函数,计算过程如下:

RAS 算法

公钥和私钥的生成
假设Alice想要通过一个不可靠的媒体接收Bob的一条私人消息。她可以用以下的方式来产生一个公钥和一个私钥:

  • 随意选择俩个大的素数p和q,p不等于q,计算N=p*q
  • 根据欧拉函数,求得:r=φ(N) =φ§*φ(q) =(p-1)(q-1)
  • 选择一个小于r的整数e,使e与r互质。并求得e关于r的模逆元,名为d(求d令ed模1(mod r即ed后对r取模))。(模逆元存在,当且仅当e与r互质)
  • 将p和q的记录销毁。
  • (N,e)是公钥,(N,d)是私钥。Alice将他的公钥(N,e)传给Bob,而将他的私钥(N,d)藏起来。
    加密消息
    假设Bob想给Alice送一个消息,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的非负整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将加密为:

    计算c并不复杂。Bob算出c后就可以将它传递给Alice。
    解密消息
    Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
    得到n后,他可以将原来的信息m重新复原。
    解码原理:

    已知ed模r等于1,即ed=1+hφ(N)那么就有

    由欧拉定律得:

    我们知道像RSA这种非对称加密算法很安全,那么到底为啥子安全呢? 我们来看看上面这几个过程产生的几个数字:
    p,q:我们随机挑选的两个大质数;
    N:是由两个大质数p和q相乘得到的。N = p * q;
    r:由欧拉函数得到的N的值,r = φ(N) = φ§φ(q) = (p-1)(q-1)。
    e:随机选择和和r互质的数字,实际中通常选择65537;
    d: d是以欧拉定理为基础求得的e关于r的模反元素,ed = 1 (mod r);

N和e我们都会公开使用,最为重要的就是私钥中的d,d一旦泄露,加密也就失去了意义。那么得到d的过程是如何的呢?如下:

  • 比如知道e和r,因为d是e关于r的模反元素;r是φ(N) 的值
  • 而φ(N)=(p-1)(q-1),所以知道p和q我们就能得到d;
  • N = pq,从公开的数据中我们只知道N和e,所以问题的关键就是对N做因式分解能不能得出p和q
    所以得出了在上篇博客说到的结论,非对称加密的原理:

将a和b相乘得出乘积c很容易,但要是想要通过乘积c推导出a和b极难。即对一个大数进行因式分解成俩个素数极难

目前公开破译的位数是768位,实际使用一般是1024位或是2048位,所以理论上特别的安全。

参考:
https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95
https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E5%AE%9A%E7%90%86_(%E6%95%B0%E8%AE%BA)
https://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山羊哥-老宋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值