概述
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
前置知识
欧拉函数
在数论中,对正整数n,欧拉函数是小于等于n的正整数中与互质的数的数目。例如,因为1、3、5和7均与8互质。
欧拉函数是积性函数,即是说若互质,则:
使用中国剩余定理有较简略的证明:设是跟互质的数的集,据中国剩余定理,和可建立双射(一一对应)关系,因此两者元素个数相等。
欧拉定理
在数论中,欧拉定理(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若为正整数,且互素(即),则:
即aφ(n)与在模下同余。欧拉定理实际上是费马小定理的推广。
模逆元
模逆元(Modular multiplicative inverse)也称为模倒数、数论倒数。
一整数对同余之模逆元是指满足以下公式的整数:
也可以写成或者。
整数对模数之模逆元存在的充分必要条件是和互素,若此模逆元存在,在模数下的除法可以用和对应模逆元的乘法来达成,此概念和实数除法的概念相同。
RSA算法
公钥与私钥的产生
假设Alice想要通过不可靠的媒体接收Bob的私人消息。她可以用以下的方式来产生一个公钥和一个私钥:
- 随意选择两个大的素数和,不等于,计算。
- 根据欧拉函数,求得。
- 选择一个小于r的整数,使与互质。并求得关于的模逆元,命名为(求令)。(模逆元存在,当且仅当与互质。)
- 将和的记录销毁。
其中,是公钥,是私钥。Alice将她的公钥传给Bob,而将她的私钥藏起来。
加密消息
假设Bob想给Alice送消息,他知道Alice产生的和。他使用起先与Alice约好的格式将转换为一个小于N的非负整数,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为。用下面这个公式他可以将加密为:
这里的可以用模幂算法快速求出来。Bob算出后就可以将它传递给Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
与Bob计算类似,这里的也可以用模幂算法快速求出。得到后,她可以将原来的信息重新复原。
解码的原理是
已知,即 。那么有
- 若与互素,则由欧拉定理得:
- 若与不互素,则不失一般性考虑,以及,得:
故得证。
签名消息
RSA也可以用来为一个消息署名。假如Alice想给Bob传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的私钥“加密”(如同前面“加密消息”的步骤)这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。Bob获得这个消息后可以用Alice的公钥“解密”(如同前面“解密消息”的步骤)这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么Bob就可以知道发信人持有Alice的私钥,以及这个消息在传播路径上没有被篡改过。
RSA安全性
假设偷听者Eve获得了Alice的公钥和以及Bob的加密消息,但她无法直接获得Alice的密钥。要获得,最简单的方法是将分解为和,这样她可以得到同余方程
并解出,然后代入解密公式
导出(破密)。
至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,也没有找到比因数分解更简单的破密方法。因此今天一般认为只要足够大,黑客就没有办法破解。
NIST建议的RSA密钥长度为至少2048位。实现上,强制设置密钥长度为2048位的称RSA或RSA2(意即RSA version 2),而未强制设置的称RSA1以资区别,两者差异主要在密钥长度。
参考资料
维基百科:欧拉函数
维基百科:欧拉定理(数论)
维基百科:模逆元
维基百科:模幂
维基百科:RSA加密算法
Comments NOTHING