数字签名与数字证书
- 数字签名
- 数字证书
- 数字证书的原理
- 数字证书的特点
- 如何验证证书机构的公钥不是伪造的
数字签名
数字签名是非对称密钥加密技术与数字摘要技术的应用,数字签名就是用加密算法加密报文文本的摘要(摘要通过hash函数得到)而生成的内容。
发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用发送方的私钥对这个摘要进行加密生成数字签名,之后将数字签名和报文一起发送给接收方,即数字证书。
接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再公钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该报文是发送方的。举一个例子,A和B都已经获取了对方的公钥,以下是A和B利用数字签名的通信过程:
(1)A将原文加工生成发送内容
- A用哈希算法(如MD5)计算要发送内容message的Hash值(message的摘要)。
- 用非对称加密算法(如RSA算法)加密摘要,生成数字签名。 将message加数字签名作为发送内容。
(2)B收到数据,进行解密验证内容
- 首先对message进行同样的哈希计算,算出原文的Hash值(摘要1)。
- 用A的公钥解密签名,得到摘要2。
- 比对两个摘要是否相等。如果不相等,证明原文或者签名被修改过。
数字证书
采用公钥机制进行加密传输面临的一个问题是公钥的发布是未受信任的。任何一个用户都可以通过网络向所有人发布伪造的公钥,如果某个用户假冒真正用户的名义发布一个公钥,在该假冒者被揭穿以前,他可以解读所有发向真正用户的加密消息,还可以通过签名冒充真正用户的身份。
数字证书的原理
数字证书就是一个人或者组织在网络世界中的身份证,其发证机关是证书管理机构(certificate authority,CA)。CA用自己的私钥对用户的身份信息(主要是用户名和该用户的公钥)进行签名,该签名和用户的身份信息一起就形成了证书。
用户A把自己的证书发送给用户B。用户B使用CA的公钥对证书的签名进行验证,由于只有CA才能生成该证书,因此只要证书验证正确,即说明证书是由CA发布的,证书中用户A的公钥是值得信赖的。用户B以后就可以使用该公钥验证用户A的签名或者进行和A进行加密通信。使用数字证书验证用户的身份的过程如下:
整个数字证书的使用流程如下:
数字证书的特点
- 由专门的机构签发的数字证书才安全有效。
- 签发数字证书是收费的。
- 不会被冒充,安全可信。
- 数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。
如何验证证书机构的公钥不是伪造的
这里有一个有趣的问题,用户B使用证书机构的公钥来验证用户A的数字证书,但如何又能够知道用户B拿到的证书机构的公钥不是伪造的呢?
解决办法是再找一个证书管理机构(certificate authority,CA)对该证书机构的公钥颁发一个证书,这样形成了一个公钥证书的嵌套循环,该循环的终点就是根证书机构。根证书机构较少,其公钥可以通过安全的方式发布,如通过USB拷贝、书面文件当面移交。