RSA加密算法

前言

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman), 是第一个既能用于数据加密也能用于数字签名的算法,易于理解和操作,应用广泛。RSA的安全性依赖于大整数因子分解。目前来看,攻击RSA算法最有效的方法便是分解模n。一般认为RSA需要1024位或更长的密钥才有安全保障。

一、RSA算法简介

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA绝对是当今应用最为广泛的加密算法,像数字签名,数字证书,SSH,HTTPS加密连接全部都是他的典型应用。

二、数学基础

1.互质

互质又称为互素,如果两个或两个以上的整数的最大公约数是 1,则称它们为互质。

2.欧拉函数

欧拉函数指的是对正整数n,求小于或等于n的正整数中与n互质的数的数目,记作φ(n)。
RSA加密算法_第1张图片

3.欧拉定理

欧拉定理也称费马-欧拉定理,指的是:如果两个正整数m和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立。
RSA加密算法_第2张图片

三、RSA 算法原理

1.解密解密选择单向函数标准

对于解密和解密来讲,实际上就是要找一个单向函数,函数的正向运算要很容易,但是函数的逆向运算要很难。
对于RSA这种情况,把公玥和信息转递给函数进行运算得到密文的过程要很容易,但是反过来,如果有人看到了密文,知道了密钥,要想得到原文这个过程要非常困难。
而且这个函数还要有一个特点,如果拥有特定的提示信息,那么逆向操作也会由很难变得很容易,也就是说,如果知道私钥,那么解密过程也会变得很容易。
RSA加密算法_第3张图片

2.RSA单向函数的选择

RSA加密算法选择的就是正向运算很容易,但是逆向运算很难的模函数作为单向函数。
RSA构造的加密函数是这样的:
RSA加密算法_第4张图片
首先将信息转化成整数(计算机中,信息都可以转化成二进制的形式,自然转化为整数也不难),根据RSA的计算规则,要选取一个整数e,对整数m进行e次方运算,然后选取一个整数N,对m的e次方进行求模运算,这样就得到了密文c。
举个很简单的例子,大家先感受以下:
在这里插入图片描述
熟悉了RSA算法的加密规则之后,我们就可以把(e,N)公布作为算法的公钥;根据模函数的运算规则,如果知道密文c,并且知道公钥(e,N),求原文m是一个很难的问题。但是根据RSA的运算规则,只要恰当选取了e和N,就一定会存在一个d,使得下面这个式子成立:
在这里插入图片描述
我们就可以把(d,N)作为私玥,进行解密。
到这里,问题就很清晰了,第一个问题就是公玥e和N的选取,第二个问题就是知道公玥之后,如何快速的求出私钥d。
RSA加密算法_第5张图片

3.RSA原理解析

根据上面介绍,我们可以得到RSA的加解密公式:
RSA加密算法_第6张图片
我们把它写到一起:
RSA加密算法_第7张图片
然后对数学原理中介绍的欧拉定理公式做一下变形:
RSA加密算法_第8张图片
一眼便知,这里的指数是一样的,很容易便可以得到私钥d的运算公式:
RSA加密算法_第9张图片
这样就可以通过选取k、n、e来计算私玥d,这个式子看起来很简单,但是真正困难的地方是φ(n)(前面数学基础章节有介绍)的计算,计算φ(n)的唯一方法就是对n进行质因数分解,而大数的质因分解本身就是一件非常困难的事情。
但是如果n本身是一个质数的话,情况就大不相同了,我们通过两个例子:
RSA加密算法_第10张图片
φ(7)很明显等于6。
RSA加密算法_第11张图片
φ(13)很明显等于12。
于是得到一条规律:如果p本身就是一个质数的话
φ§=p-1
然后欧拉函数还有一个特性,φ(pq)可以拆分为φ§和φ(q)单独的乘积。
RSA加密算法_第12张图片
看到这里,一个很明显的灵感涌上心头,那就是我们完全可以选择两个较大的质数p和q,让n=p
q,这样就可以得到一个很大的数字n,如果不知道这两个质数p和q的话,对n进行质因数分解是非常困难的,但是如果知道p和q的话,使用上面的公式:
φ(n) = φ(p*q) = (p-1)(q-1)可以轻松求得φ(n)。
得到φ(n) 之后,恰当选取e和k,便可对d求解。
RSA加密算法_第13张图片
在这里插入图片描述
到这里,核心的问题就都解释通了,最后我们总结以下算法流程:
RSA加密算法_第14张图片

总结

公钥加密就是利用信息不对等,让加密者可以快速的构造出φ(n),而其他人却无法在有限的时间内去破解它。
由于公钥加密的计算量大,速度慢,通常会与对称加密算法一同使用。公钥加密算法常被用做最初连接的建立,而真正数据传输的过程交由对称加密算法来处理。

你可能感兴趣的:(非对称加密算法,算法,密码学,加密解密)