RSA加密算法是一种非对称加密算法,基于大整数分解问题。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
一、RSA密码体制参数
独立地选取两个大素数和
,计算
=
×
,其欧拉函数值为:
随机选择一整数,
,
且,即
与
互素。
计算的逆元:
由此可得公钥为:,
;私钥为:
(
,
)不再需要,可以销毁。)
陷门函数: = (
,
,
)。
二、RSA加密与解密
令为明文,
为
经过加密之后的密文,
为两个大素数之积。用公钥加密,用私钥签名;
加密:
解密:
证明: =
=
=
=
由欧拉定理, =
意味着
=
=
=
=
三、RSA签名
令为明文空间,
为密文空间,
=
=
,
为签名;
签名:对消息
的签名
=
=
验证:对给定的和
,可按下式验证:
= 真
=
四、RSA盲签名
一般数字签名中,总是要先知道消息的内容之后才签署。但是有时需要某人对一个消息签名,但又不让他知道消息内容,称此为盲签名,一般利用盲变换可以实现,由Chaum在1983年最先提出的,在选举投票和数字货币中广泛运用。比如某人想要其他人在文件上签名,但是又不想让其他人知道内容,所以他将文件放入信封中,并放入复写纸,这个过程相当于盲变换,然后将信封给对方签名,对方通过验证后进行签名,签名就通过复写纸签在了文件上。
盲签名算法:
Alice、Bob是盲签名的双方,Bob的公钥为,密钥为
,模为
1)Alice要对消息进行盲签名,选
,作盲变换:
,并将
发送给Bob;
2)Bob对签名:
,并将
发送给Alice
3)Alice计算:
=
,得到
=
证明:
=
=
=
五、RSA安全性
1)分解模数
在理论上,RSA的安全性取决于模分解的困难性,求
等价于分解
的困难。
2)迭代攻击法
Simmons和Norris曾提出迭代或循环攻击法。例如,给定一RSA的参数为 =
,可由
=
= 3,计算
=
= 33
35。再由
计算
=
= 3
35,从而得到明文
=
= 33
35。一般对明文加密多次,直到再现
为止。Rivest证明,当
和
中含有大素数因子,且
足够大时,这种攻击法成功的概率趋于0。
3)选择明文攻击
攻击者收集用户A以公钥加密的密文
=
,并想分析出消息
。选随机数
,计算
=
,
=
,现在攻击者请A对消息
进行解密得到
。攻击者计算
=
,得到了明文
。
4)共用模攻击
设 和
是两个互素的不同密钥,共用模
,对同一消息
加密得
=
,
=
。分析者知道
。因为
= 1,所以有
,
与
为一正一负,从而由Euclidean算法可计算
=
。
5)参数的选择
的选择:
=
,
与
必须为强素数。
,
的选择:
,
要足够大,以使
分解在计算上不可行。
与
之差要大:
如果与
之差很小,则可由
估计
此外由
=
于是由和
可以试验给出
的值。
的选择
小,加密速度快, Knuth和 Shamir曾建议采用
=3。但
太小易遭低指数攻击。而且若
小,
小,当
,则
=
,由
直接开
次方可求
。
的选择
小,签字和解密运算快,这在IC卡中尤为重要(复杂的加密和验证签字可由主机来做)。类似于加密下的情況,
不能太小,否则由已知明文攻击。 Wiener给出对小
的系统攻击法,证明了当
长度小于
的
时,由连分式算法,可在多项式时间内求出
值。因此,
要大于
。
与
的最大公因子要小
在唯密文攻击下,设破译者截获密文
。破译者做下述计算(迭代攻击法):
=
若 =
,则有
=
,且
=
,即
=
。若
小,则由此攻击法易得明文
由Euler定理知,。若
和
的最大公因子小,则
值大。如
=
,此方法难于奏效。
六、其他问题
(1)不可用公共模:
由一个密钥产生中心(KGC)用一个公共接分发多对密钥,并公布相应公钥,这当然使密钥管理简化,存储空间小,且无重新分组问题,但如前所述,它在安全上会带来问题。
(2)明文嫡要尽可能地大:
明文熵要尽可能地大,以使在已知密文下,要猜测明文无异于完全随机等概情况。
(3)用于签字时,要采用Hash函数