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