公钥密码学中大部分引用了数论的成果,所以必要在介绍RSA密码体制之前,详细介绍一下所使用的几个数论的知识点
欧几里得算法主要是解决最大公约数问题,记两个正整数 r0 和 r1 的 gcd 表示:
扩展欧几里得算法可以用来计算模逆元,不难理解,上文所述的欧几里得算法就是轮询反复互减最终得到结果的,换句话说,可以将这样的反复互减看作是原始两个参数的s倍与t倍相加,即:
可以得到,扩展的欧几里得算法(EEA):
输入:正整数 r0 和 r1 ,且 r0>r1
输出: gcd(r0,r1) ,以及满足 gcd(r0,r1)=s⋅r0+t⋅r1 的s和t
initialize:
s[0] = 1
t[0] = 0
s[1] = 0
t[1] = 1
i = 1
algorithm:
do
i = i + 1
r[i] = r[i - 2] mod r[i - 1]
q[i - 1] = (r[i - 2] - r[i]) / r[i - 1]
s[i] = s[i - 2] - q[i - 1] * s[i - 1]
t[i] = t[i - 2] - q[i - 1] * t[i - 1]
while r[i] != 0
return:
gcd(r[0], r[1] = r[i - 1]
s = s[i - 1]
t = t[i - 1]
在环 Zm=0,1,⋯,m−1 中,我们感兴趣的问题是在这个集合中,有多少个数字与m互素。
于是我们可以定义欧拉函数来进行计算:
Zm 内与m互素的整数个数可以表示为 Φ(m)
如果数值非常大的话,将集合内的元素从头到尾都处理一遍,计算每一个的gcd非常慢,对应的欧拉函数值得求解也非常困难,但是,如果m的因式分解是已知的,则存在一个更简单的计算方法:
假设m可以因式分解为一下的数的连乘:
需要强调的是,这种方法来快速计算欧拉函数,我们必须知道m的因式分解,这个特征你刚刚也是RSA公钥方案的核心。
费马小定理如下描述:假设a为一个整数,p为一个素数,则
将费马小定理的模数推广到任何整数模,即不一定为素数的模,就可以得到欧拉定理:
假设a和m都是整数,且 gcd(a,m)=1 ,则有:
该密码体系是目前最广泛使用的一种非对称密码方案,在实际中常用于以下几个方面:
* 数据小片段的加密,尤其用于密钥传输
* 数字签名,譬如Internet上的数字证书
这里必须要注意,RSA加密并不是为了取代对称密码,因为它非常慢。利用RSA通常是用于安全地交换对称密码体系中的密钥。所以RSA通常与对称密码一起使用。
RSA的加密与解密都是在整数环 Zm 内完成的,模计算发挥了核心作用。
使用公钥进行加密和使用密钥进行解密的方法可以表示为如下:
给定公钥 (n,e)=kpub 和明文 x ,则加密函数为:
给定私钥 d=kpr 及密文 y ,则解密函数为: