数字签名和数字证书
参考链接:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://blog.csdn.net/weixin_37887248/article/details/82805508
https://www.jianshu.com/p/4932cb1499bf
这里涉及到了非对称加密的原理,一般加密和解密过程使用的是不同的密钥:公钥和私钥
对要传输的内容,使用公钥加密的话,只能用私钥解密
对要传输的内容,使用私钥加密的话,则只能用公钥解密。
而常说的数字签名,就与以上的第2个步骤有关,当然实际上还有其他步骤
比较典型的有RSA加密,算法安全性依赖于:大素数难以分解。因此其算法复杂度比较大,加解密效率相对来说不高。
通过下面的例子来说明数字签名和证书中心的作用
通信双方:A、B;
A的公钥和私钥:PuA、PrA;
B的公钥和私钥:PuB、PrB
RSA通信过程,简单使用一次加密和解密,然后问题多多的方式如下
1. A准备发送内容,对内容使用公钥PuB进行加密,然后将密文传输给B
2. B收到A发送的数据,使用私钥PrB,解密并得到明文;读取之后,B现在要给A回复,因此使用公钥PuA对内容进行加密,将密文传输给A
3. A收到B的回复,使用公钥PuB对内容进行解密,得到明文。至此,一次完整的通信过程完成。
以上的通信步骤完成了AB双方的通信,并且保证了数据传输的安全性:在网络上传输的是密文,即使被第三方截获,因为其没有私钥(并且这里假设他很难通过公钥推导出私钥),也无法对密文进行解密操作。
但是有两个问题:无法确认数据来源是否可靠、无法确认数据是否被篡改过。解决方法:数字签名
RSA通信过程优化:加入数字签名
数字签名步骤:对需要发送的内容正文使用hash函数进行摘要,再使用自己的私钥对摘要内容进行加密。
数字签名验证:使用对方的公钥对数字签名数据进行解密,得到明文c(该数据实际上是正文内容的摘要),然后使用hash函数对正文内容进行摘要得到d,如果c和d相等,说明两点:数据内容是正确完整的,没有被篡改;数据是由给出公钥的那一方发出的,因为只有公钥和私钥是对应的才能正常加解密数据。
数字签名作用:摘要保证数据的正确和完整,私钥加密保证数据来源,因此才叫做签名。
1. A准备发送内容,对其进行数字签名,在内容里附上该数字签名,然后使用公钥PuB对所有数据(包括内容正文和数字签名)进行加密,将密文传输给B
2. B收到A发送的数据,使用私钥PrB,解密并得到明文,对其中的数字签名的数据,使用公钥PuA进行解密操作,得到正文内容的数据摘要,然后使用hash函数对正文内容进行摘要,对比两者,如果相等,说明内容没有被篡改过,而且该内容是由A发出的。读取之后,B现在要给A回复,步骤和1类似,也是要对内容进行数字签名,然后使用公钥PuA对内容进行加密,将密文传输给A
3. A收到B的回复,使用公钥PuB对内容进行解密,得到明文,然后验证数字签名以及数据的完整性。至此,一次完整的通信过程完成。
以上的通信过程看似完美,实际上还有个问题:对于A来说,我所持有的公钥PuB,真的是B给我的吗?就算一开始是,但是有可能我的电脑被其他人篡改了数据内容,把PuB偷偷更换成为另外一把钥匙。(这里可以设想,如果PuB被篡改了,那么PrA即自己的私钥也可能被盗窃(或者篡改了,但是篡改的实际收益不如盗窃来的实在)这里就会有两种问题,一个是我无法确定数据来源方是否可靠,另外一个是我的身份信息暴露了,会有被别人冒充的危险,并且其截获了别人发给我的通信数据后,可以通过我的私钥得到明文,数据安全性也丧失了。因此后面要说的证书中心其存在意义是有一个前提的:即我所持有别人的公钥的保密性和我自己的私钥的保密性是不同的,后者保密性好比较安全)
为了保证公钥的来源可靠性,证书中心CA,certificate authority 就派上用场了。
RSA通信过程优化:加入数字证书。
数字证书:为了验证手上的公钥正确性,需要要求对方去证书中心认证自己的公钥,证书中心会把其公钥,加上一些额外的信息,使用CA的私钥进行加密,生成数字证书
数字证书可靠性前提:CA提供的公钥必须正确无法被篡改。而这正是证书中心作用的保证。
在A和B通信时,在正文、数字签名后面再附上数字证书,那么对方就可以通过CA的公钥,解密数字证书获取到对方的公钥。
关于https, ssl, tls的联系和区别:https://blog.csdn.net/enweitech/article/details/81781405
https的工作过程:https://blog.csdn.net/wangjun5159/article/details/51510594