【密码学04】非对称密码算法
上一篇【密码学03】对称密码算法 介绍了对称密码算法,其主要特性就是加密解密密钥能互相推算,而实际应用中绝大多数对称加密算法的加密密钥和解密密钥是相同的。正因为如此,加密者指定一个密钥后,必须得想方设法把密钥分发出去给解密者,同时还得小心翼翼确保密钥不被泄露。这是对称密码算法固有的一个矛盾,如何解决呢?
还是前面提到的斯坦福两位密码学大师Diffie 和Helman,1976年提出了一种全新的密码系统概念:非对称密码算法。下面看看非对称密码算法的特性。
与对称密码算法相反,非对称密码算法的加密密钥和解密密钥不相同,而且从加密密钥推算出解密密钥极其困难。简单来说,非对称密码算法的特性如下:
1) EK1(P) =
C //E:加密算法,K1:加密密钥,P:明文,C:密文,下同。
DK2(C) = P //D:解密算法,K2:解密密钥。
综合上面两个式子,可得:
DK2(EK1(P)) = P
2) 从K1 推断出K2极其困难。如果密钥长度足够长,银河系中的任何一种生物都应该不可能轻易从K1推出K2,或者从K2推算K1。
3) 某些优秀的非对称密码算法还具有如下特性,但不是所有的算法都具备:
EK1(DK2(P)) = P
也就是加密函数E与解密函数D互为反函数,解密函数可以当成加密函数来用,加密函数也可以当成解密函数来用。这个特性非常迷人。
具备前面两个特性以后,加密密钥就可以放心地公之于众了。 Alice要用非对称密码算法秘密地传送消息给Bob,过程是怎么样的呢?首先Bob自己要生成一对密钥BK1和BK2,他可以任意选择一个密钥比如BK1公布给所有人包括Alice,他自己保留BK2不让任何人知道。Alice知道Bob 公开的密钥BK1后,就可以用BK1加密明文P得到密文C,然后传送给Bob。她不用担心别人能解密消息,因为BK1加密的消息只有BK2才能解密,而BK2只有Bob才知道,想从BK1推算出BK2几乎不可能。Bob收到消息,用私密的BK2解密即可得到明文。反过来,Bob要传送消息给Alice,Alice也要先生成一对密钥AK1和AK2,并按照同样的过程进行。
由于非对称密码算法可以把加密密钥公开,因此也叫做公开密钥密码算法,简称公钥密码算法,或公钥算法。公钥算法的确是非常优雅地解决了密钥既要保密又要公开的矛盾。下面是一些常见的公钥密码算法。
1) RSA,是MIT(麻省理工学院)三个密码学大师Rivest、Shamir、Adleman于1978年共同发表,因此名字就是三个人名的首字母。RSA是最优秀的公钥算法,它满足上面提到的全部三个特性。RSA算法的数学基础是【密码学02】密码系统原理及数学背景 一文提到的因子分解。RSA算法经受住了密码分析学家们三十年来的大量攻击,虽然密码分析学家们不能证明RSA是安全的,但也不能证明RSA是不安全的。RSA已经被广泛使用,为整个地球村的信息安全尤其是电子商务的安全做出了极大贡献。
2) El Gamal,该算法的数学基础是【密码学02】密码系统原理及数学背景 一文中提到的“计算有限域中的离散对数”的难题。El Gamal算法也是非常优秀的公钥密码算法。
3) 其它公钥密码算法还有很多,例如背包算法、Rabin算法、Pohlig-Hellman算法、McEliece算法、基于椭圆曲线的算法、LUC算法等等。
关于背包算法,Tanenbaum的《Computer Networks》(4th)中讲述了一个有趣的故事:背包算法设计这Merkle曾悬赏100美金破解该算法,RSA组合中的S,即Shamir迅速破解算法并领走奖金。Merkle于是增强了算法,再次悬赏破解,奖金加到1000美金。RSA组合中的R,即Rivest又迅速破解领走奖金。此后Merkle就没再悬赏了,因此RSA组合中的另外一个人A,即Adleman也就没能拿到预期的10000美金了。从这个故事可以看出RSA这个信息安全领域的黄金组合的确超级牛叉!
公钥密码算法非常优雅,但是几乎所有的公钥算法都有一个问题:速度太慢。RSA算法的速度是DES的1000分之一,并且密钥越长,速度会急剧变慢。因此实际应用中密码系统都是把公钥密码算法与对称密码算法结合在一起使用。
浙公网安备 33010602011771号