在网络和操作系统安全通信中经常涉及到这几个名词:RSA,公钥,私钥,CA,数字签名,数字证书。
我找了很多资料,很少有把疑难点讲全面的。但不讲清楚这几个,很难有一个清晰的认识和理解。
我现在也尝试这样的方式,自己总结,以便后来查看,同时也希望能帮助一些人少走弯路,省去百度,谷歌,看RFC的时间。
-
<李>
<强>对称和非对称,公钥和私钥:强>
加密的两种方式:对称加密和非对称加密。
对称加密:加密的密钥也叫公钥和解密的密钥(也叫私钥)相同。特点是算法公开,计算量小,加密速度快,加密效率高。
非对称加密:加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法.RSA是一种非对称加密算法。
RSA是取的研究这个算法的三个专家的首字母。
<强> <代码>加密算法中,公钥用于对数据进行加密,私钥用于对数据进行解密。代码> 强>当然了,这个也可以很直观的理解:
公钥就是公开的密钥,其公开了大家才能用它来加密数据。私钥是私有的密钥,谁有这个密钥才能够解密密文。
<强> <代码>在签名算法中,私钥用于对数据进行签名,公钥用于对签名进行验证代码> >强。这也可以直观地进行理解:
对一个文件签名,当然要用私钥,因为我们希望只有自己才能完成签字。验证过程当然希望所有人都能够执行。
大家看到签名都能通过验证证明确实是我自己签的。如果你用私钥加密了,所有人都能查到公钥并解密,所以其实不能叫加解密。
数字签名并不是签一个字来证明这个东西是我的,而是做了一个数学计算。<强>数字签名(数字签名)是先对消息内容做散列得到一串数字,然后用私钥对这个数字进行加密强>。
数字签名就两个目的:证明这消息是你发的,证明这消息内容确实是完整的。(认证和完整性)。
<代码>对消息做一次哈希(md5或者sha1都行),然后用你的私钥加密这段哈希作为签名,并一起公布出去代码>
当别人收到你的公告时,他可以用你的公钥解密你的签的名,如果解密成功,并且解密出来的哈希值确实和你的公告原文一致,
那么他就证明了两点:这消息确实是你发的,而且内容是完整的。
我们在网上下载文件,经常会有一个长串的字符MD5值。我们下载资料后,linux可以用md5sum检查一下这个资料,命令输出得到的值和网站上的MD5值比较。如果一致,说明文件下载完整。如果不一致,说明下载的文件发生改变.windows可以用winmd5等软件验证。
3。<强>数字证书数字证书和证书中心证书颁发机构强>
“服务器”要对外发布公钥,那“服务器”如何把公钥发送给“客户”呢?我们第一反应可能会想到以下的两个方法:
)把公钥放到互联网的某个地方的一个下载地址,事先给“客户”去下载。
b)每次和“客户”开始通信时,“服务器”把公钥发给“客户”。
但是这个两个方法都有一定的问题,
对于一方法,“客户”无法确定这个下载地址是不是“服务器”发布的,你凭什么就相信这个地址下载的东西就是“服务器”发布的而不是别人伪造的呢,万一下载到一个假的怎么办?另外要所有的“客户”都在通信前事先去下载公钥也很不现实。
对于b)方法,也有问题,因为任何人都可以自己生成一对公钥和私钥,他只要向“客户”发送他自己的私钥就可以冒充”服务器”了。
为了解决这个问题,数字证书出现了,它可以解决我们上面的问题。先大概看下什么是数字证书,一个证书包含下面的具体内容:
-
<李>证书的发布机构李>
<李>证书的有效期李>
<李>公钥李>
<李>证书所有者(主体)李>
<李>签名所使用的算法李>
<李>
指纹以及指纹算法
证书发布机构除了给别人发布证书外,他自己本身也有自己的证书。证书发布机构的证书是哪里来的呢? ? ?
这个证书发布机构的数字证书(一般由他自己生成)在我们的操作系统刚安装好时(例如windows xp等操作系统),
这些证书发布机构的数字证书就已经被微软(或者其它操作系统的开发机构)安装在操作系统中了,
微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,
把这些<强>证书发布机构的证书默认就安装在操作系统里面了>强,并且设置为