网络协议相关面试问题-https加密算法相关面试问题
密钥:
密钥是一种参数,它是在使用密码cipher算法过程中输入的参数,同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。所以说算法既使公开了但是密钥参数不同其结果也是不同的,其中关于明文和密文下面用一张图来描述一下:
而密钥又分为对称与不对称两种,下面具体来看一下:
密钥:对称
又称为共享密钥加密,对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC5、RC6。
优点是计算速度快;
缺点是密钥需要在通讯的两端共享,也就是不安全啦,因为一个密钥对应两端。
密钥:非对称
又称为公开密钥加密。服务端会生成一对密钥,一个私钥保存在服务端,仅自己知道,另一个是公钥,公钥可以自由发布供任何人使用。 客户端的明文通过公钥加密过的密文需要服务端生成的私钥来解密。
与对称密钥加密相比,非对称加密无需在客户端与服务端之间共享密钥,只要私钥不发给任何用户,即使公钥在网上被截获,也无法被解密,仅有被窃取的公钥是没有任何用处的。
密钥:RSA加密简单过程
- 服务器生成配对的公钥和私钥。
- 私钥保存在服务端,公钥发关给客户端。
- 客户端使用公钥加密明文传输给服务端。
- 服务端使用私钥解密密文得到明文。
数字签名:
思考这样一个问题:数据在浏览器和服务器之间传输时,有可能在传输过程中被冒充的盗贼把内容替换了,那么如何保证数据是真实服务器发送的而不被调包呢?同时如何保证传输的数据没有被人篡改呢?数字签名就诞生了。
数字签名它是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有木有被篡改过,它就干这两件事,是非对称加密的一种应用场景。不过它是反过来用私钥来加密的,通过与之配对的公钥来解密【这跟不对称密钥的方式正好相反】。
下面来看一下整个数字签名的过程:
第一步:服务器把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥private-key加密之后就生成签名,服务器把签名连同报文一起发送给客户端:
第二步:客户端接收到数据后,把签名提取出来用公钥public-key解密,如果能正常的解密出来Digest2,那么就能确认是对方发的。
第三步:客户端把报文Text提取出来做同样的Hash处理,得到的摘要信息Digest1,再与之前解密出来的Digest2对比,如果两者相等则表示内容木有被篡改过,否则就是已经被篡改了啦,
CA(Certificate Authority)数字证书:
那么如何保证你现在使用的公钥就是真实服务器发给你的呢?数字证书又出现了,它是由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的。