【区别】摘要、数字签名、数字证书


 

1、摘要 

一段信息,经过摘要算法得到一串哈希值,就是摘要(dijest)。

信息是任意长度,而摘要是定长。

摘要算法有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同)

摘要不同于加密算法,因为不存在解密,只不过从摘要反推原信息很难(可以认为能加密但无法解密还原,但可以用于比对)。

摘要相同,信息一定相同。如果两张图片的md5相同,说明图片完全一样,不需要重复爬取。

利用这个特点,摘要还可以用于应用在网站后台数据库中,用于比对用户的输入密码和预设密码是否相同。这里都无需关心密码本身是什么,关注的是密码是否相同,而密码是否相同取决于摘要是否相同,所以问题转化成了摘要是否相同。将用户密码的摘要而不是密码本身保存在数据库中,因为反推很难,所以真实密码是保密的……非要暴露的话,也是通过比对而不是反推。

 

2、非对称加密算法

算法重要的概念是公钥和私匙。

先有私钥,再用函数生成公钥。公钥包含了私钥的信息,但也掺杂了其他随机变量,因此不能反推。

私匙不要泄露,公钥要告诉和你通信的对方。公钥加密,只有对应私钥能解开(保密);私钥加密,只有对应公钥能解开(不可抵赖)。

具体有两种情形:

(1)对方用你的公钥加密信息,你收到后用私钥解开。

只有你有私钥,所以只有你能解开,换句话说,有私钥才能看到信息,很安全。

(2)你拿私钥加密信息,对方收到后用你的公钥解开。

公钥是公开的,所以其他人也可以看到你的信息,不保密。

私钥加密,只有对应公钥能解开。既然用你的公钥能解开,说明加密一定是你的私钥。私钥只有你有,所以一定是你发送的,你不可抵赖。

 

3、数字签名

摘要经过加密,就得到数字签名

数字签名在发送方,分两步:(1)从内容算摘要(哈希算法)(2)从摘要明文到摘要密文,也称数字签名(发送方私钥+加密算法)

数字签名验证在接收方,分两步:(1)从摘要密文(数字签名)到摘要明文(发送方公钥+解密算法)(2)从收到的内容当场计算摘要(哈希算法),与(1)的结果比对是否一致

 

如果一致,可以说明两点:

(1)内容未被篡改(摘要一致)

(2)内容只能是私钥拥方发送,不可抵赖(密文能够用对方的公钥解开)

 

然后单独想一下,

(1)为什么要对摘要加密后再发送?为什么不直接发摘要?摘要不可以逆向推导原文,摘要泄露了也没事……

答:摘要泄露是没事,但不怀好意的人的目的可能并不在想要窃听你发送了什么,而是想伪造发送的内容让你相信。通过同时替换摘要和内容,很简单就实现了。所以摘要需要经过加密,不怀好意的人没有私钥,无法完成加密。或者说你收到的东西只要能用公钥解密,你才认为这个东西确实是对应私钥持有者完成的。这叫做当事人不可抵赖,同时别人无法仿冒。(数字签名:不可抵赖+无法仿冒)

(2)为什么不直接对内容加密,而是先生成摘要,对摘要加密?

答:可能是内容很长吧,直接加密算半天!摘要算法可以把无限长的内容输出成长度固定的摘要,再进行加密时间就是可以预估的

 

4、数字证书

上面的一切都很完美,你用公钥能够解密,说明确实是私钥方发送的,你很放心……

但有没有想过,万一这把公钥本身,就被人做了手脚???

为了保证“公钥”是可信的,数字证书应运而生。

数字证书里有个重要概念,CA,发送方先把自己的公钥给CA,CA对其进行加密得到加密后的发送方公钥(用的是CA的私钥和CA加密算法),也就是CA的数字证书。

注意这里有两个不同的非对称算法(对应2个公钥私钥对),一个算法是发送方加密摘要的,用于生成数字签名;另一个算法是CA加密发送方公钥的,用于生成数字证书。两个算法相互独立,没有必然联系。

发送时不仅发送内容、数字签名,还包含发送方的数字证书。接收方拿到后,首先从数字证书中解密出发送方公钥(用的是CA的公钥和CA解密算法),这个公钥必然是可信的。然后就是和前面一样的流程,拿发送方公钥去解密数字证书,得到摘要;最后比对摘要是否一致。

 

一个问题:既然数字证书是为了保证发送方公钥不是别人伪造的,那怎么保证“CA”的公钥不是伪造的呢?

答:CA是第三方机构,CA公钥是公开的,接收方可以跟别人比对(比如在网上查询),因此不可能伪造。但是发送方公钥,接收方是通过通信得到的,收到后无法验证。

 

【实例1】https

工作流程,基本分为三个阶段:
1、认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果签发该证书的CA,存在于浏览器的受信任CA列表中(也就是签发该证书的CA的根证书,能够与客户端中保存的CA根证书比对上),说明这个CA是可信任的,可以保证证书不假。然后,再进一步判断服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。 客户端是否能够信任这个站点的证书,首先取决于客户端程序是否导入了证书颁发者的根证书。

2、协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

3、加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

客户端是否能够信任这个站点的证书,首先取决于客户端程序是否导入了证书颁发者的根证书。

 服务器找CA签发证书,以及客户端识别证书的过程(加密机找CA签证书基本也是这个流程,只不过两台加密机通信,两台都要签证书)

IE浏览器在验证证书的时候主要从下面三个方面考察,只要有任何一个不满足都将给出警告

  1. 证书的颁发者是否在“根受信任的证书颁发机构列表”中
  2. 证书是否过期
  3. 证书的持有者是否和访问的网站一致

这会儿我正好在装Fiddler。默认Fiddler不对https traffic加密,如果勾选,就会弹出如下对话框,大意是:Fiddler会在https流量收发双方中间,类似代理的角色,为了参与https通信,Fiddler自己也要有一个证书,然后这个证书由一个CA颁发,现在这个CA的根证书需要导入windows,用户需要让windows信任这个CA。

 之后是windows的警告:因为在往系统里加一个新的CA根证书,windows并不确定这个根证书是否是真的,所以问你(根证书责任重大,选择相信根证书意味着相信这个CA的一切操作……))

【实例2】加密机

个人理解,可能有错。欢迎指正~

加密机A和加密机B双向通信,没有绝对的客户端和服务端之分。或者更准确地说,每台加密机既是服务端,需要找CA给自己签个签证书;也是客户端,需要提前导入CA根证书,用于识别收到的证书是否是可靠CA签发的(比对收到证书的根证书是否在可靠CA列表中)。CA签发证书的过程,就是对【包括发送方公钥在内的发送方信息】进行加密(用CA加密算法和CA私钥)。因此签出来的证书,在接收方可以被解密得到【包括发送方公钥在内的发送方信息】(用CA解密算法和CA公钥)。

此外,A需要导入B的证书,B需要导入A的证书。

上述准备工作(初始化)完成后,A和B首先建立连接(不涉及应用数据,只是协商一致建立一条加密隧道),其实就是A需要验证现在与我通信的另一端、证书里生成的B,是不是真正的B。这个就依靠B发送自己的证书给A,A收到后首先确认这个证书颁发CA是可靠的(依据CA的根在自己的可靠根列表中),说明证书可信,再从对证书进行解密(CA的公钥+CA解密算法),得到【包括B的公钥在内的B的信息】,据此证明对端就是真正的B,并拿到了B真正的公钥,验证完成。同理,B也要验证对端确实是A,就不再赘述。

互相验证完成后,A与B的链接建立,等待真正的数据收发。之后的加解密,应该就是加密机自己的算法和秘钥了,硬件上是由加密卡完成,加密卡也是加密机最值钱最核心的部件……

(加密机部分纯属个人理解,欢迎指正。有时间我会再带着这个思路去阅读加密机的说明书……)

 

转载:https://zhuanlan.zhihu.com/p/32754315

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
Bing Webmaster Portal Back