上文说到,alice借了blob 100w的借条怎样安全地进行传输,里面提到了两种方案,一种是双密钥加密机制,另一种是通过证书方式,这次我们来说说证书怎么保证信息的不被篡改和安全传递的
数字证书概念首先理解下什么是证书?先回顾下数字签名:数字签名是确保信息是正确的人发出的,那么就需要发送者用自己的私钥进行加密信息,接收者拿着发送者的公钥解密成功就能说明这个信息是发送者的身份发出的,确保了信息的可靠性。
但是在借条这个场景下,怎样保证接收者拿到的是真实发送者发过来的公钥呢?不是中间人发过来的替换过的公钥呢?
为了防止这种情况的发生,出现了数字证书
数字证书里面引入了新的概念-CA(Certificate Authority)机构,这个可以理解为公证处或者政府机关,他是发送者和接收者都信任的一个机构,CA给双方提供数字证书
数字证书又是怎样解决中间人劫持的问题呢?
原理首先数字证书包含了发送人的信息、公钥、数字签名等等信息。数字证书存在发送人的信息是不是确认就不是中间人?答案是否,原因是一样的,公钥能替换,证书也能替换,为了解决这个问题,需要用增加CA机构的私钥进行保护
一个证书中包含了三部分:证书内容、散列算法、加密密文。证书内容会被hash计算出hash值,然后用ca机构提供的私钥进行加密处理
对比借款场景,alice首先向公正机构申请一个证书,证书里面内容就是“我是alice,我的公钥信息是‘asdasdasd’,数字签名是alice私钥对内容的hash值做的加密“
公正机构用自己的私钥加密这个证书信息的hash值,并且附上我用的hash算法是sha256,讲这些组合起来乘了一个证书发给blob
blob收到这个证书后,向公正机构注册,获CA的公钥信息,blob拿到公钥解密出hash值,同时将证书内容使用相同的散列算法进行Hash得到另一个散列值,比对两个散列值,如果两者相等则说明证书没问题。
证书没问题,保存的信息内容呢,用证书的公钥信息对证书对借款内容hash进行解密,同时用散列算法hash借款内容,一致说明内容也没有问题,借条传递完毕
实际应用
上述只是对借款场景的利用,在实际中的具体应用就是https流程了,先把网上可以搜索到的信息引入,
- 单向认证,这个也是用得最多的:
第三步验证是否合法,就是利用了CA机构,一般浏览器中会内置疙瘩CA公司的公钥信息
- 双向认证,这个在公司内部用到的比较多
主要多了服务端也需要对客户端做认证,不是直接发送的客户端的公钥信息了
图片比较懒,不自己画了,引用地址:https://www.jianshu.com/p/29e0ba31fb8d
其实里面还有密钥交换算法的使用,比如对于单向认证中并不是只有客户端收到加密方式后产生随机码作为对称密钥,这块服务端也有随机码产生,两个随机码合并到一起才能算作传输密钥。
https里面涉及到了非对称机密、对称加密、证书、数字签名,是个完整的应用场景,保证了信息在传递过程中的完整性、可靠性。
讨论上述借款场景也是基于证书的使用做出来的方案,各位有想法或者方案不对之处欢迎指正。
,