数字签名是拿来对数据做认证的,帮助接收者确认数据是否真实有效。
就像你在合同上签名,合同生效后,内容就不能再改动了。两者作用是一样的,区别在于认证的原理和方式。
数字签名的实现原理是哈希算法和非对称加密算法。
哈希算法特点:
非对称加密算法特点:
非对称加密算法进入实际应用领域后,两个密钥分别有了名字:一个叫公钥,一个叫私钥。
至于谁当公钥,谁当私钥,无所谓,随便你定,定好就别再改了,因为起这两个名字是有寓意的。
私钥自己保管好,不要让别人知道,公钥可以满世界分发,谁想要给谁。
如此这般,两个密钥一明一暗,用途就不一样了。
公钥用来加密数据,普天之下,只有自己能解密,因为私钥只有自己有。这种用途可以防止数据内容泄漏,因为即使密文被人窃取,窃取者没有私钥也是无法解密的。
用私钥对数据加密,不能防止数据内容泄露,因为公钥满世界都是,谁都能解密!
私钥用来做数字签名,具体分三个步骤:
接收者收到数据后的认证逻辑:
计算出摘要后,用公钥加密,也能得到一个数字签名,但是签名只有私钥能认证,显然,这样的认证没有意义。
数字签名的认证逻辑存在漏洞。
正常情况下,接收者手上持有着发送者的公钥,发送者用私钥签名,接收者用公钥认证,这样没有问题。
但是,假如有一个窃取者,中途截获了数据,并偷偷做了两件事情:
做完这两件事情,窃取者再把数据和签名发送给接收者,接收者用持有的公钥认证数据,能完美的认证通过。
这就是问题,接收者不知道公钥已经被窃取者替换,还以为收到的是发送者给的数据,其实是窃取者的数据。
该问题产生的原因是:接收者不能确认自己持有的公钥是不是发送者的。
这是“中间人攻击”的一种典型应用场景,也是数字证书诞生的背景。
数字证书就是用来防“中间人攻击”的,其原理是对发送者公钥进行权威认证,提供一种方法,让接收者可以确信自己持有的是发送者的公钥。
从单纯的技术角度看,数字证书谁都能做,但是一般人做出来的数字证书没有权威性,不能广泛应用。
所以,基于人类社会的诚信体系,地球上有影响力的组织搞出了具有权威性的认证机构,专门给别人制作颁发数字证书。
这样的机构叫CA
中心,或者CA
机构。
数字证书的制作过程:
发送者有权威机构颁发的数字证书以后,就可以通过数字证书把自己的公钥交给接收者,逻辑如下:
如此这般,接收者认证发送者数据的过程就变成了:
社会信用体系,加上技术算法,环环相扣,中间人就没办法再替换发送者公钥了。
原因是中间人没有CA
机构的私钥,无法对数字证书造假。
可能有人会说,中间人可以用自己的私钥制作数字证书,然后替换到数字证书,发给接收者。
存在这种可能,但是接收方是通过公开途径获取CA
公钥的,CA
公钥解密不了中间人的数字证书。
如果中间人神通广大,能欺骗接收者,用自己的公钥替换掉CA
的公钥,那么他就还能当中间人,继续窃取数据。
想欺骗接收者,替换CA公钥,不是没有可能,但是实际应用中,难度很大!
通篇讲下来,数字签名和数字证书的原理应该是讲明白了。可能有人注意到另外一个点:发送者发送的数据始终都是明文的,中间人虽然不能篡改数据,但是他可以窃取数据内容。
保护数据内容不泄漏,这不是数字签名、数字证书要解决的问题,这是网络层SSL
协议要解决的问题。
如果有兴趣,可以看看我的另一篇博客:
[网络] SSL/TLS协议的原理机制
数字证书的应用场景非常广泛,通俗的理解,数字证书就是网络环境中的身份证,能起到认证主体的作用。
只要有需要网络身份认证的场景,数字证书基本就都能用的上。
生活中,最常见的应用场景有:
https
协议访问网站根据业务场景和认证要求的严格程度,数字证书的认证模式又可以分为两种:
浏览器和服务器的https
交互,不涉及非常重要的信息时,通常都是单向认证,如果涉及信息非常重要,也可以采用双向认证机制增强安全性,但是这么做会牺牲部分效率。
银行系统安全性永远是排在第一位的,所以进行网上银行业务时,银行都会给用户颁发个人数字证书,采用严格的双向认证机制,努力保证绝对的业务安全。