非对称加密之RSA公钥加密算法
一. 公钥加密原理
Diffie和Hellman在1976年首次公开提出了公钥加密思想,这是有文字记载的几千年以来密码领域第一次真正革命性的进步。公钥算法基于数学函数,而不像对称加密算法那样是基于比特模式的简单操作。更为重要的是公钥加密系统是非对称的,它使用两个单独的密钥,使用两个密钥对于保密性、密钥分发和认证都产生了意义深远的影响。
公钥加密方案由6个部分组成:明文、公钥、加密算法、密文、私钥、解密算法。顾名思义,密钥对中的公钥是公开供其他人使用的,而只有自己知道私钥。通常的公钥加密算法根据一个密钥进行加密,根据密钥对中的另一个密钥进行解密(注意:并非只能使用公钥加密而使用私钥解密,某些非对称加密算法也可以使用私钥加密而使用公钥解密。)
对于一个公钥加密算法,必须满足以下要求:
- 容易计算生成密钥对;
- 已知公钥和明文,使用加密算法计算生成相应的密文对于软硬件是容易实现的;
- 已知私钥和密文,使用解密算法计算恢复原始的明文对于软硬件是容易实现的;
- 当攻击者已知公钥 PUb P U b 时,不可能通过计算推算出私钥 PRb P R b ;
- 当攻击者已知公钥 PUb P U b 和密文 C C 时,通过计算不可能恢复原始消息 ;
- 密钥对中任何一个都可用于加密,另一个则用于解密(这一点对于公钥加密算法来说不是必需的)。
二. 欧拉函数和扩展欧几里得算法
RSA加密算法是一种非对称加密算法,在公开密钥加密中被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA就是他们三人姓氏开头字母拼在一起组成的。从那时起RSA便占据了公钥方案的绝对统治地位,成为最广泛接受和实现的公钥加密方法。
如上节所说,公钥加密算法基于数学函数,RSA也不例外,因此在正式介绍RSA之前,有必要先了解一下这个算法所用到的数据原理基础——欧拉函数和扩展欧几里得算法。
2.1 欧拉函数
互质数:公因数只有1的两个数,称为互质数。判断两数互质有以下法则:
- 任意两个质数互质;
- 两个不相等的数,较大的那个数是质数,两者互质;
- 两个不相等的数,较小的数是质数,较大的数不是较小数的倍数,两者互质;
- 1和任意自然数互质;
- 2和任意奇数互质;
- 如果 p>1 p > 1 ,那么 p p 和 互质;
- 如果 p>1 p > 1 且 p p 是奇数,那么 和 p−2 p − 2 互质。
欧拉函数 φ(n) φ ( n ) 求的是满足和 n n 互质且小于等于 的整数个数。
欧拉函数有以下法则:
- n=1 n = 1 , φ(n)=1 φ ( n ) = 1 ;
- n n 为质数, ;
- n=pm n = p m 其中 p p 为质数时, ;
- n=p1∗p2 n = p 1 ∗ p 2 其中 p1 p 1 , p2 p 2 都为质数时, φ(n)=φ(p1)∗φ(p2) φ ( n ) = φ ( p 1 ) ∗ φ ( p 2 ) ;
- 对于任意一个大于1的正整数 n n ,都可以写成质数的乘积: ,那么 φ(n)=n∗(1−1/p1)∗(1−1/p2)∗...∗(1−1/pr) φ ( n ) = n ∗ ( 1 − 1 / p 1 ) ∗ ( 1 − 1 / p 2 ) ∗ . . . ∗ ( 1 − 1 / p r ) 。
以上就是欧拉函数的通用计算公式。
简要证明一下上述法则3~5:
第3点, n=pm n = p m 时,由互质法则可知,比 p p 大的整数中,只要不是
的倍数,都和 p p 互质,因此在
中,只要不是 p p 的倍数,就都和
,也和 pm p m 互质,因此 φ(pm)=pm−pm−1 φ ( p m ) = p m − p m − 1 ;
第4点, n=p1∗p2 n = p 1 ∗ p 2 时,同样由互质法则可知, 1∼p1∗p2