Aotle

你所看到的惊鸿,都曾被平庸磨练

介绍了数字签名和数字证书

散列函数和消息摘要

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

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

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

摘要不同于加密算法,因为不存在解密,只不过从摘要反推原信息很难(可以认为能加密但无法解密还原,但可以用于比对)。类比到人的话:时间一直向前走 ,我没有办法从现在的你身上反观到你过去的样子,也没法从现在的他身上反观到他过去的样子……但你们现在的样子依然有作用,那就是在于“是否相同”:我可以通过比对现在的你和现在的他是否相同,来判断过去的你和他是否相同,而无需知道过去的你和过去的他具体是什么样子。

摘要相同,信息一定相同。如果两张图片的md5相同,说明图片完全一样。

一个安全的摘要算法需要满足:

1、输入长度是任意的,输出是固定的
2、对每一个给定的输入,计算输出是很容易的
3、给定H,找到两个不同的输入,输出同一个值在计算上不可行
4、给定H和一个消息x,找到另一个不同的消息y,使它们散列到同一个值在计算上不可行
常见的散列算法:MD2、MD4、MD5、SHA、SHA-1

数字签名

数字签名是指发送方以电子形式签名一个消息或文件,签名后的消息或文件能在网络中传输,并表示签名人对该消息或文件的内容负有责任。数字签名综合使用了消息摘要和非对称加密技术,可以保证接受者能够核实发送者对报文的签名,发送者事后不抵赖报文的签名,接受者不能篡改报文内容和伪造对报文的签名。

数字签名需要做到两点:

1、确认信息是由签名者发送的;
2、确认信息从签发到接受没有被修改过。

数字签名的过程与示意图:

1、发送方要发送消息运用散列函数(MD5、SHA-1等)形成消息摘要;
2、发送方用自己的私钥对消息摘要进行加密,形成数字签名;
3、发送方将数字签名附加在消息后发送给接收方;
4、接受方用发送方的公钥对签名信息进行解密,得到消息摘要;
5、接收方以相同的散列函数对接收到的消息进行散列,也得到一份消息摘要;
6、接收方比较两个消息摘要,如果完全一致,说明数据没有被篡改,签名真实有效;否则拒绝该签名。

img

如果通信的内容是加密的,就需要采用数字信封:发送方用对称密钥加密明文,然后用对方的公钥加密对称密钥发送给对方,对方收到电子信封,用自己的私钥解密,得到对称密钥解密,还原明文。此时数字签名的过程如下:

1、发送方要发送消息运用散列函数(MD5、SHA-1等)形成消息摘要;
2、发送方用自己的私钥对消息摘要进行加密,形成数字签名;
3、发送方用对称加密算法对消息原文、数字签名进行加密,得到密文信息;
4、发送方用接收方的公钥加密对称加密算法的密钥进行加密,形成数字信封;
5、发送方将3中的密文信息和数字信封一起发给接收方;
6、接收方首先用自己的私钥解密数字信封,还原对称加密算法的密钥;
7、接受方用6中的密钥解密接收到的密文,得到原文信息和数字签名;
8、接受方用发送方的公钥对签名信息进行解密,得到消息摘要;
9、接收方以相同的散列函数对接收到的消息进行散列,也得到一份消息摘要;
10、接收方比较两个消息摘要,如果完全一致,说明数据没有被篡改,签名真实有效;否则拒绝该签名。

数字证书

数字签名中“公钥”可能被攻击者替换,为了保证“公钥”是可信的,数字证书应运而生。

数字证书是一种权威的电子文档,由权威公正的第三方认证机构(CA)签发,广泛用于涉及需要身份认证和数据安全的领域。

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

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

CA是第三方权威机构,CA公钥是公开的,因此不可能伪造。

@example : https

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

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

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

img

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

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

数字证书种类:

1、服务器证书:证明服务器的身份和进行通信加密,客户端可以与服务器端建立SSL连接,然后通信数据都会被加密。
2、电子邮件证书:证明电子邮件发件人的真实性,也可发送加密邮件,只有接收方才能打得开。
3、客户端证书:主要用于身份验证和数字签名,安全的客户端证书经常存储的专门的USBKey中,使用的时候需要输入保护密码,以防被导出和复制,如指纹识别、语音播报、带显示器的USBKey等等。

数字证书功能:

1、信息保密
2、身份确认
3、不可否认性
4、数据完整性

数字证书的格式:

最简单的可以是:公钥、名称和证书授权中心的数字签名,目前 X.509 是一种通用的证书格式,它的第三个版本目前使用广泛,证书内容包括:版本、序列号、签名算法标识、签发者、有效期、主体、主体公开密钥、CA的数字签名、可选型等等

img

评论