现在的位置: 首页 > 综合 > 正文

非对称加密(2)非对称加密算法

2013年05月09日 ⁄ 综合 ⁄ 共 4354字 ⁄ 字号 评论关闭

非对称加密2)非对称加密算法

基本流程很简单,那么公钥加密,私钥解密的算法原理到底是什么呢?本节简要阐述RSA算法、DSA算法、ECC算法、Diffie-Hellman算法的基本原理,其中涉及很多数论、离散数学以及解析几何方面的数学知识,感兴趣的读者可以借此加强相关理论基础。

RSA算法

RSA算法是当前最著名、应用最广泛的公钥系统,1978年由美国麻省理工学院的Ron Rivest Adi Shamir Leonard Adleman在论文《获得数字签名和公开钥密码系统的方法》中提出的。这是一个基于数论的非对称(公开钥)密码体制,采用分组加密方式。其名称来自于三个发明者的姓名首字母。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。

RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,一个是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接收。为提高保密强度,RSA密钥一般为1024或者2048位。

RSA算法的工作原理如下:

步骤 1  任意选取两个不同的大质数pq,计算乘积r=p*q

步骤 2   任意选取一个大整数ee与(p-1*q-1)互质,整数e用做加密密钥。注意:e的选取是很容易的,所有大于pq的质数都可用。

步骤 3  确定解密密钥d d * e = 1 modp - 1*q - 1根据epq可以容易地计算出d

步骤 4  公开整数re,但是不公开d

步骤 5  将明文PP是一个小于r的整数)加密为密文C,计算方法为C = P^e  mod r

步骤 6  将密文C解密为明文P,计算方法为: P = C^d modulo r

然而只根据re(不是pq)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

如果你对RSA算法的数学证明感兴趣的话,可以看扩展阅读。

扩展阅读   RSA算法的数学证明

定理   p, q 是相异质数, rm == 1 mod p-1)(q-1); a 是任意一个正整数,b == a^m mod pq, c == b^r mod pq,  c == a mod pq 

费马小定理    m 是任一质数, n 是任一整数 n^m = = n mod m 。(或者如果 n  m 互质 n^m-1 = = 1 mod m 
证明
因为 rm = = 1 mod p-1)(q-1所以 rm = kp-1)(q-1 + 1, 其中 k 是整数 
因为在 modulo 中是 preserve 乘法的 

x = = y mod z  and  u =
= v mod z  =>  xu = = yv mod z

 所以 

c = = b^r =
a^m^r = = a^rm = = a^kp-1)(q-1+1 mod pq 
1. 
如果 a 不是 p 的倍数也不是 q 的倍数时,    

 a^p-1 = = 1 mod p (费马小定理)  =>  a^kp-1)(q-1)) = = 1 mod p 
       a^
q-1 = = 1 mod q (费马小定理)  =>  a^kp-1)(q-1)) = = 1 mod q 
   
所以 p, q 均能整除

 a^kp-1)(q-1)) - 1  =>  pq | a^kp-1)(q-1)) - 1 
   
 

a^kp-1)(q-1)) == 1 mod pq    =>  c =
= a^
kp-1)(q-1+1 = = a mod pq 
2. 
如果 a  p 的倍数但不是 q 的倍数时,     

a^q-1 == 1 mod q (费马小定理) 
   =>  a^
kp-1)(q-1)) = = 1 mod q 
   =>  c = = a^
kp-1)(q-1+1 = = a mod q 
   =>  q | c - a 
   
 p | a 
   =>  c = = a^
kp-1)(q-1+1 = = 0 mod p 
   =>  p | c - a 
   
所以

 pq | c - a  =>  c =
= a mod pq 
3. 
如果 a  q 的倍数但不是 p 的倍数时证明同上 
4. 
如果 a 同时是 p  q 的倍数时

 pq | a 
   =>  c = = a^
kp-1)(q-1+1 == 0 mod pq 
   =>  pq | c - a =>  c =
= a mod pq 

在做编码解码时限制 0 <= a < n, 0 <= c < n, 这就是说 a = =c, 所以这个过程确实能做到编码解码的功能。

为了说明该算法的工作过程,下面给出一个简单例子。显然,这里只能取很小的数字,但是如上所述,为了保证安全,在实际应用上所用的数字要大得多。


选取p=3, q=5,则r=15,(p-1*q-1=8。选取e=11(大于pq的质数),通过d * 11 = 1 modulo 8,计算出d =3

假定明文为整数13。则密文C

 C = P^e mod r

 = 1311 mod 15

 = 1,792,160,394,037 mod 15

 = 7

复原明文P为:

 P = C^d mod r

= 73 mod 15

= 343 mod 15

= 13

因为ed互逆,公开密钥加密方法也允许采用这样的方式对加密信息进行"签名",以便接收方能确定签名不是伪造的。

RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。但是它同时也存在一定的缺点:

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2)安全性。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某信息伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
XM d = Xd *Md mod n。前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征:每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φn)等攻击。

3)速度慢。由于RSA 的分组长度太大,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SETSecure
Electronic Transaction
)协议要求CA采用2048比特的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛采取单、公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA给文件密钥加密,极好地解决了单钥密码的密钥分发问题。

DSA算法

DSADigital Signature
Algorithm
,数字签名算法)是SchnorrElGamal签名算法的变种,被美国NIST作为DSSDigitalSignature Standard,数字信号标准)。DSA算法是基于整数有限域离散对数难题的,其安全性与RSA相似。DSA的一个重要特点是两个素数公开,这样,当使用别人的pq时,即使不知道私钥,也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

(1)  DSA算法参数

pL bits长的素数。L64的倍数,范围是5121024

qp - 1160bits的素因子;

gg = h^((p-1/q mod ph满足h < p - 1, h^((p-1/q mod p > 1

xx < qx为私钥

yy = g^x mod p ,( p, q, g, y )为公钥;

H x ):One-Way Hash函数。DSS中选用SHA Secure Hash
Algorithm
)。

其中,p qg可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。

(2)  签名及验证协议

1)       
p产生随机数kk <
q

2)       
p计算

r = g^k mod p mod q

s = k^-1Hm + xr)) mod q

签名结果是( m, r, s )。

3)       
验证时计算

w = s^-1mod q

u1 = H m * w mod q

u2 = r * w mod q

v = (( g^u1 * y^u2 mod p mod q

v = r,则认为签名有效。

(3)  安全性

DSA主要依赖于整数有限域离散对数难题。素数 P 必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &
Hellman
算法的攻击。M一般都应采用信息的HASH值(官方推荐为SHA算法)。DSA的安全性主要依赖于pg,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。个人认为:DSA的安全性要次于ECC RSA不相上下。但是,在DSA算法的验证过程中, RS 是以明文形式出现的,这点很容易被恶意攻击者利用。

DSA算法在破解时关键的参数就是X,根据 Y = G^X mod P ,只要知道 PGYQ 且能分解出
X
,就可以伪造RS,从而写出KeyGen了。

ECC算法

ECCElliptic Curve
Cryptosystem
,椭圆曲线密码体制)算法中,椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程所确定的平面曲线。如下:

 y2+a1xy+a3yx3+a2x2+a4x+a6(1)                                               
    

F是一个域(ai
∈F,i=1,2,…,6
),且满足式(1)的数偶(x,y)称为F域上的椭圆曲线E的点。F域可以是有理数域,还可以是有限域GF

抱歉!评论已关闭.