• 1.摘要
  • 2.操作
  • 2.1.公钥与私钥的产生
  • 2.2.加密消息
  • 2.3.解密消息
  • 2.4.签名消息
  • 3.安全
  • 4.实现细节
  • 4.1.密钥生成
  • 4.2.速度
  • 4.3.密钥分配
  • 4.4.时间攻击
  • 5.典型密钥长度
  • 6.已公开的或已知的攻击方法

RSA加密算法

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

1983年9月12日麻省理工学院在美国为RSA算法申请了专利。这个专利2000年9月21日失效。由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被承认。

操作

公钥与私钥的产生

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人消息。她可以用以下的方式来产生一个公钥和一个私钥

  1. 1.

    随意选择两个大的质数imageimageimage不等于image,计算image

    根据欧拉函数,求得image

    选择一个小于image的整数image,使imageimage互质。并求得image关于image的模反元素,命名为image(求imageimage)。(模反元素存在,当且仅当imageimage互质)

    imageimage的记录销毁。

image是公钥,image是私钥。Alice将她的公钥image传给Bob,而将她的私钥image藏起来。

加密消息

假设Bob想给Alice送一个消息image,他知道Alice产生的imageimage。他使用起先与Alice约好的格式将image转换为一个小于image的非负整数image,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为image。用下面这个公式他可以将image加密为image

image

计算image并不复杂。Bob算出image后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息image后就可以利用她的密钥image来解码。她可以用以下这个公式来将image转换为image

image

得到image后,她可以将原来的信息image重新复原。

解码的原理是

image

已知image,即 image。 由欧拉定理得:

image

签名消息

RSA也可以用来为一个消息署名。假如Alice想给Bob传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的私钥“加密”(如同前面“加密消息”的步骤)这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。Bob获得这个消息后可以用Alice的公钥“解密”(如同前面“解密消息”的步骤)这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么Bob就可以知道发信人持有Alice的私钥,以及这个消息在传播路径上没有被篡改过。