前言
什么是数字签名呢?数字签名其实是消息摘要和非对称加密的一起应用。
正文
数字签名是怎么来的呢?
在非对称加解密中,公钥方对私钥方发送消息,只需要公钥方用公钥加密即可,因为私钥只有一人持有。
那么私钥方给公钥方发送数据是否可以用私钥发送即可呢?当然可以的啊。
但是又一个问题就是私钥加密后,所有的公钥都可以解开,那么问题来了是否安全呢?
也就是说私钥加密公钥去解密的意义并不大。而且私钥是单方,单方作为服务器的话去加密可想而知效率问题就很大了。
回到问题得原点上,我们要验证的是什么问题呢?
验证的是如何保证公钥方如何确认私钥方的身份,收到私钥方的信息没有串改过?
确定私钥方的身份只能通过私钥要确认,那么如果用私钥加密效率低,那么是否记得如何进行文件校验的呢?文件校验就是消息摘要,取一部分进行加密啊。
那么数字签名就是这样子的:
私钥方 通过hash要发送的内容,然后用私钥进行加密就是数字签名和内容一起发送出去。
公钥方取下数字签名,然后对签名进行解密,也就是得到hash的内容。这个时候就确认了秘钥方的身份。
那么如果确认信息没有在中途改过呢?
那么可以这样,公钥方对内容进行hash,然后和数字签名解密出来的进行对比,如果相等就没有串改,如果不相等就串改了。
这样似乎就很愉快了,那么为啥又有数字证书这东西呢?
是这样的,我们知道公钥方是靠公钥作为探头来识别私钥信息。
那么问题来了,如果发生一件这种事情就是公钥方的公钥被黑客换了,那么这个时候就有一个情况了。
加入公钥被换了,那么和原来的私钥方无法确认关系了,但是这不是最恐怖的,最恐怖的在于假设有一个黑客,生成了B私钥和B公钥。
把B公钥和公钥方的公钥换了,然后用私钥B和公钥方沟通,那么这个时候呢,可想而知多么恐怖。公钥方会一直认为是在和私钥方沟通,其实一直在和黑客玩耍。
这时候数字证书的作用就来了。
首先有一家公共的CA机构,专门管理证书。它做了这么一件事,那就是用自己的私钥对其他私钥方的公钥和其他信息进行加密。
那么私钥方在公钥方第一次请求自己信息的时候,把证书给公钥方,公钥方通过证书拿到公钥,而不是一个固定的公钥,这样子就很好了。
来看下https的吧。
下面是阮一峰的解释:
1.
首先,客户端向服务器发出加密请求。
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
3.
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。