在上篇博文中给大家留了一道作业,现在可以公布答案了,在那道题目的4个选项中,也只有C算是比较靠谱,即“甲选取密钥后通过双方事先已有的共享密钥加密后通过网络传送给乙”,但这种方法中存在的问题也很明显,那个“事先已有的密钥”又是如何安全地在通信双方之间传送的呢?
只靠对称式加密算法自身是无法解开这个密钥管理的死结了,所以才又产生了另外一类与之完全不同的加密算法——非对称式加密。
非对称加密就是为了解决对称式加密的密钥分配问题而产生的,非对称式加密也称为公钥密码系统,它要求密钥必须成对出现,一个为公开密钥(简称公钥),一个为私有密钥(简称私钥),而且这两个密钥不能从其中一个推导出另一个。
公钥要发布出去,私钥则要保证绝对的安全,用公钥加密的信息只能用相应的私钥解密,反之亦然。
使用非对称式加密算法进行数据加密时,发送方使用接收方的公钥加密数据,接收方使用自己的私钥解密数据。如发送方A要给接收方B发送数据,其加/解密流程如下图所示。
非对称式加密的最大优点是密钥管理简单,相比对称式加密具有更高的安全性,但它也有缺点,那就是因为算法复杂,所以通信效率不高,因而主要用于对小数据块的加密。
既然对称式加密的效率高,但密钥管理困难,而非对称式加密密钥管理简单,效率却低,那将这两种加密算法结合起来使用是不是效果会更好呢?
在实践中也正是这样使用:数据加密采用对称式加密,而用非对称加密传送对称加密的密钥。
正是通过非对称式加密才最终解决了对称式加密的密钥管理难题。
RSA是最常用的非对称加密算法,由于软考中涉及这个算法的考题比较多,因而对它的基本原理做下简单介绍:
- 选取2个素数p和q。
- 计算n=p*q,r=(p-1)*(q-1)。
- 随机选取一个与r互质的整数d作为私钥。
- 计算公钥e,使得(e*d)mod r =1,即e和d的乘积,除以r,余数为1。
RSA算法也是先要将数据进行分组然后再分别进行加密,数据分组的长度是由n决定的,分组的长度必须小于等于log2n。
下面看几道软考的相关考题:
1、按照RSA算法,若选两奇数p=5,q=3,公钥e=7,则私钥d为 。
A.6 B.7 C.8 D.9
试题分析:根据RSA算法原理,r=(p-1)*(q-1),即r=4*2=8,然后再根据(e*d)mod r =1的原则,将4个选项中的数值分别代入公式中计算,答案很明显就是7了。
2、RSA是一种具有代表性的公钥加密方法,如果选定了用于加解密的两个素数分别为37、53,则每个分组的位数是 。
A.10 B.12 C.18 D.25
试题分析:p=37,q=53,则n=37*53=1961,按照分组的大小必须小于等于log2n的原则,2的10次方是1024,2的11次方是2048,1961介于1024和2048之间,所以分组的长度应该介于10位和11位之间,分组长度只能是整数位,所以也就是10位了。
了解了非对称式加密之后,我们再来思考一个问题,在我们上面所讲的加密过程中,都是用公钥加密,用私钥解密,那能否反过来,用私钥加密,而用公钥解密呢?
比如下面这道软考的题目:
公钥体系中,私钥用于 (49) ,公钥用于 (50) 。
(49)A.解密和签名 B.加密和签名 C.解密和认证 D.加密和认证
(50)A.解密和签名 B.加密和签名 C.解密和认证 D.加密和认证
这道题目的答案该选谁,签名和认证又是什么,呵呵,且听下文分解。
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1186191