RSA算法

RSA算法的安全性

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

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

  1. 比如知道e和r,因为d是e关于r的模反元素;r是φ(N) 的值
  2. φ(N)=(p-1)(q-1),所以知道p和q我们就能得到d;
  3. N = pq,从公开的数据中我们只知道N和e,所以问题的关键就是对N做因式分解能不能得出p和q

所以得出了在上篇博客说到的结论,非对称加密的原理:

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

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

 

引理
欧几里得有个非常强的定理,即gcd(a,b)=gcd(b,a mod b),让我们来证明一下(mod 是取余,gcd是最大公约数,| 是能整除)
假设a、b的公约数为k,a = bx + y
则 k | a,k | b,a mod b=y
因为 k | b,所以 k |bx,又因为 k | a,所以 k | (a - bx),即 k | y
而a mod b = y,所以 k | a mod b
再假设b、a mod b的公约数为kk,同理得 kk | a,所以(a,b)和(b,a mod b)的公约数是相同的,所以它们的最大公约数也是相同的
所以gcd(a,b)=gcd(b,a mod b)

扩展欧几里得算法

简介扩展欧几里得算法
扩展欧几里得算法的功能就更强大了,它可以用来求二元一次方程的通解,还可以用来求乘法逆元。
在此顺便简介一下乘法逆元:
若有 a*x ≡ 1 (mod m),则称 x 为a关于m的乘法逆元,等价式 a * x+m * y = 1
这就也是个二元一次方程了,ExGcd可搞。

 


裴蜀定理:若ax+by = z,则 gcd(a,b)| z
再顺手证明一下裴蜀定理:
设k = gcd(a,b),则 k | a, k | b,根据整除的性质,有 k | (ax+by)
设 s为ax+by的最小正数值
再设 q = [a / s](a整除s的值);r = a mod s = a-q(ax+by) = a(1 - qx)+b(-qy);
由此可见r也为a,b的线性组合;(ax+by称为a,b的线性组合)
又因为s为a,b的线性组合的最小正数值,0<= r < s,所以r的值为0,即 a mod s = r =0;s | a;
同理可得 s | b,则 s | k;
又因为 k | (ax+by),s为ax+by的最小正数值,所以 k | s;
因为 s | k,k | s,所以s = k;
原命题得证。

 

如何求解 (以下讨论a>b)
显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
当a>b>0 时
设 ax1+ by1= gcd(a,b);
bx2+ (a mod b)y2= gcd(b,a mod b);
根据欧几里德原理有 gcd(a,b) = gcd(b,a mod b);
则:ax1+ by1= bx2+ (a mod b)y2;
即:ax1+ by1= bx2+ (a - [a / b] * b)y2 = ay2+ bx2- [a / b] * by2;(a mod b = a - [a / b]*b;[a / b]代表a整除b)
也就是ax1+ by1 = ay2 + b(x2- [a / b] *y2);
根据恒等定理得:x1=y2;y1=x2- [a / b] *y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2
由引理我们知道:ax+by = z,z为gcd(a,b)若干倍,所以我们先求解ax+by = gcd(a,b),再将求出的解乘以 z/gcd(a,b)就好了。 

 

 

 

你可能感兴趣的:(RSA算法)