公钥,私钥,数字签名,数字证书的相互关系

我们经常听到数字证书,数字签名这些词。
这些证书,签名到底是什么?
他们又起到什么样的作用? 其原理是什么?
了解这些我们需要先了解加密方式,以及什么是公钥?什么是私钥?

1. 加密方式

先解释一下2种常用的加密方式。

◆ 对称加密
加密的传统方法是对称加密。发出讯息者用一把钥匙对讯息加密。
接收讯息者需用这把钥匙将加密了的讯息解密。
这把钥匙必须以一种其他人没有机会得到它的方式给予接收讯息者。
如果其他人得到了这把钥匙,这种加密方式就没用了。

◆ 非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
公开密钥与私有密钥是一对,可以相互加密和解密。
如果用公钥对数据进行加密,只有用对应的密钥才能解密。
如果用密钥对数据进行加密,那么只有用对应的公钥才能解密。

因为非对称加密算法安全性比较高,所以下面的数字签名,数字证书都是用了非对称加密算法。

2. 数字签名digital signature

在现实生活中,签名是为了表示这是签名者写的。计算机中,数字签名也是相同的含义。
举一个例子如果A,B两台计算机相互通讯:
A计算机传输给B计算机信息的时候,A计算机会在消息的最后写上去自己的签名,以代表这些信息是A计算机的。 B计算机接到消息后,先看签名是不是A计算机判断不是别人冒充A计算机发送不安全或是无效的信息(有效性)。 除此之外,数字签名还能证明消息传输过程中没有被篡改(完整性)。

◆ 原理
简单的说的话其实就是:
A计算机给B计算机传输信息的时候,
A计算机在信息后面加自己的签名(字符串),用自己的私钥(privatekey)加密。
B计算机接到数据后,用A计算机的公钥(publickey)解密,确认来源是不是A计算机。
这样确保了完整性,而且A计算机也不可抵赖
(因为用A计算机公钥解密的信息只能是A计算机的私钥加密的信息)

3. 数字证书

先预想一个场景,如果有10台计算机,10台计算机需要记住相互之间的公钥(publickey),
那有100台计算机,1000台呢? 他们之间都需要记住相互的公钥吗?
答案肯定是不能,那如何解决这些问题呢?
其实很简单,有个第三方中介机构。记住了这些1000台的公钥相对应的资料。
这种机构称为认证机构(Certification Authority, CA)。
CA开一个证明这是计算机A的信息,发给B计算机。
B计算机通过CA的证明,可以确认这是A计算机的信息。

◆ 如何生成证书?
A计算机将自己的【公钥A】给CA
CA用自己的【私钥CA】给【公钥A】加密,生成【数字签名A】
CA把【公钥A】,【数字签名A】,附加一些【A计算机的信息】整合在一起,生成证书,发给A计算机。

◆ 如何验证证书?
A计算机发信息给B计算机的时候,会附加【数字签名A】
B计算机通过CA的公钥解密【数字签名A】,既可以确认这是A计算机发的信息。
(其实详细原理不是这样,是解证书得到哈希值,通过算法比较这个哈希值的。)

总结

两台计算机相互通讯的时候,为了确保有效性和完整性。需要签名证明是自己(数字签名)。
这签名不能随便公开,所以需要加密。
加密的时候使用的是非对称加密算法。(公钥私钥)
相互通讯的计算机多了后,需要一个中介公司来证明这个签名是合法的(数字证书)。
这中介机构叫(Certification Authority, CA)。
以后通讯的时候,A计算机拿着CA开的数字证书一起发送给对应的B计算机。
接受信息的B计算机是可以通过CA的证明书,确认是A计算机发送的信息是合法的。


欢迎大家的意见和交流

email: li_mingxie@163.com