浅析数字签名和数字证书
基础知识
对称加密与非对称加密
概述
在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊。16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码、猪圈密码,基于多表代换的维吉尼亚密码,二战中德军广泛使用的恩格玛加密机….但最终都找到了有效的破解算法。
现代密码学的诞生标志是1977年1月由美国国家标准局公布的数据加密标准(Data Encryption Standard,DES)。
在经过20多年之后,为适应现代的安全要求,2000年美国国家和标准技术协会筛选和评测出了被称为AES(Advanced Encryption Standard)的加密算法作为新的加密标准。目前,AES已被广泛使用,且未发现致命缺陷。到目前为止,AES是一个安全的加密算法。
然而,在加密算法之外,面临一个问题,那就是:秘钥的分发。就是说,解密方如何获得加密方的秘钥呢? 从而出现了:对称加密和非对称加密。
对称加密
对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:DES,AES,3DES等等。
非对称加密
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:RSA,ECC
区别
对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.
数字摘要
数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。
数字签名
1. image鲍勃有两把钥匙,一把是公钥,另一把是私钥。
鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3. image
苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
5. image
鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
6. image
然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
7. image
鲍勃将这个签名,附在信件下面,一起发给苏珊。
8. image
苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
9. image
苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10. image
复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11. image
后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
12. image
鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13. image
苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
C/S模型
主要原理分为两部分:
- 第一步是客户端验证并获取服务器公钥,然后客户端生成对称加密的私钥发送给服务器。
- 第二步就是服务器和客户端通过对称加密的私钥对通讯内容进行加解密。
详细步骤:
- 首先,客户端(浏览器)向服务器发出加密请求。
- 服务端预先计算出一对秘钥pub/pri。将私钥保密,将公钥公开。
- 服务器会将自己的公钥用CA证书的私钥加密,然后将数字证书发送给客户端。
- 客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
- 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
- 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
- 如果数字证书是可靠的,客户端就可以使用列表中的公钥解密证书,获取服务器公钥(pub),如果能解密证书,则验证了获取的公钥是来自服务器的。
- 接下来客户端会通过AES计算出一个对称加密的秘钥X。 然后使用服务器公钥(pub)将X进行加密。
- 客户端将加密后的密文发送给服务端。服务端通过私钥(pri)解密获得X。
- 然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。
数字摘要与数字签名、加密等技术结合使用的过程如下:
-
发送方S将原文信息进行Hash运算,得到Hash值,即数字摘要MD;
-
发送方S用自己的私钥PVS,采用非对称加密算法RSA,对数字摘要MD进行加密,得到数字签名DS;
-
发送方S用对称算法DES的对称密钥SK对原文信息、数字签名DS及发送方证书的公钥PBS采用对称算法加密,得到加密信息E;
-
发送方S用接收方R的公钥PBR,采用RSA算法对对称密钥SK进行加密,形成数字信封DE。该过程就像将对称密钥SK,装进了一个用接收方的公钥加密的信封里。
-
发送方S将加密信息E和数字信封DE一起发送给接收方R;
-
接收方R将收到的数字信封DE用自己的私钥PVR解密,取出对称密钥SK;
-
接收方R用对称密钥SK通过DES算法对接收到的加密信息E进行解密,还原出原文信息、数字签名DS以及发送方证书的公钥PBS;
-
接收方R用发送方S的公钥PBS解密数字签名,得到数字摘要MD;
-
接收方R将原文信息用同样的Hash算法,求得一个新的数字摘要MD1;
-
比较两个数字摘要MD和MD1,若一致,则认为收到的就是未被篡改的原文,否则,认为原文被篡改,拒绝该签名。