rsa
rsa作为一种非对称加密方式,被广泛用于计算机领域。其加密模式大致为:
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
其公匙与私匙不同,因此被称为非对称加密。
那公式与私匙是如何生成的呢?又是如何做到用不同的密匙分别进行加密与解密的呢?
rsa的前置理论基础
互质关系
如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
关于互质关系,不难得到以下结论:
1. 任意两个质数构成互质关系,比如13和61。
2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
4. 1和任意一个自然数是都是互质关系,比如1和99。
5. p是大于1的整数,则p和p-1构成互质关系,比如57和56。
6. p是大于1的奇数,则p和p-2构成互质关系,比如17和15。
欧拉定理
在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若n,a为正整数,且n,a互质,则:
也就是说,a的φ(n)次方被n除的余数为1。
其中,φ(n)是欧拉函数,其意义是任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系。
在rsa中只需用到其中的一个性质:φ(n) = φ(p1p2) = φ(p1)φ(p2),具体用法下文再进行讲述。
rsa的算法
(1)任意选取两个不同的大素数p和q计算乘积n
即:n = p * q
由于pq都为素数,其欧拉函数φ§=p-1;φ(q)=q-1
根据前文提到的性质,φ(n)=(p-1)*(q-1)
(2)随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
(3)计算e对于φ(n)的模反元素d
所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。
ed ≡ 1 (mod φ(n))
这个式子等价于
ed - 1 = kφ(n)
于是,找到模反元素d,实质上就是对下面这个二元一次方程求解。
ex + φ(n)y = 1
(6)将n和e封装成公钥,n和d封装成私钥
加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,…, mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是:
ci = mi^e ( mod n )
解密时作如下计算:
mi = ci^d ( mod n )