理解数字签名和数字证书前需要了解其所用到的加密算法。
加密算法
加密算法分为:对称加密和非对称加密。
1、对称加密
对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
常见的对称加密算法有:DES算法、3DES算法。
2、非对称加密
非对称加密算法有两个密钥:公钥和私钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
例:小A和小B都生成一对公私密钥,想在他俩将公钥通过网络发给对方(注意:因为这两个公钥都是在网络上传播,可能会被C获取),A跟B通信,A将原文用B给的公钥进行加密生成密文,这段密文只能用B的私钥解密,所以即使C获取密文和A/B的公钥也不能解密。
数字签名(Digital Signature)
上图为A和B的通信过程。前提是 A和B都以获取对方的公钥
A将原文加工生成发送内容:
1、A用哈希算法(如MD5)计算要发送内容的Hash值(摘要)。
2、用非对称加密算法(如RSA算法)加密摘要,生成数字签名。
3、将原文加数字签名作为发送内容。
B收到数据,进行解密验证内容:
1、首先对原文进行同样的哈希计算,算出原文的Hash值(摘要1)。
2、用A的公钥解密签名,得到摘要2。
3、比对两个摘要是否相等。如果不相等,证明原文或者签名被修改过。
为什么要通过哈希算法计算发送内容的Hash值?就是防止在发送过程中,内容被修改,如果内容被修改,那么修改后的内容的Hash值就不是之前的了。这时你可能会问,那在传输过程中如果同时修改内容,并将对应的Hash值也修改了,不就行了。这里要注意的是:Hash值已经被A用私钥加密了,就算你计算出修改后内容的Hash值,但是没法用A的私钥加密得到数字签名。
但是这里有一个Bug:C也有自己的公钥私钥,如果C替换了B手中A的公钥,然后C用自己的私钥给B发送数据,这个时候B是不知道他收到的数据时来自C。为了解决这个问题就出现了证书
数字证书(Digital Certificate)
数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证。颁发证书机构它也有一对公钥和私钥。证书机构用它的私钥将 A的公钥 和 一些A的信息 加密得到数字证书。然后A发送数据给B时,包含了三个部分:原文+数字签名+数字证书 ,注意,现在B不持有A的公钥,B持有的是证书机构的公钥,通过证书机构的公钥解密数字证书拿到A的公钥,然后在重复之前的过程计算数字签名,跟发来的数字签名比对。但是有同样的一个问题:如果B现在持有的证书机构的公钥被别人替换呢?这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。
参考:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html