目录
说一下HTTPS咋保证通信安全的?
谈谈对称加密与非对称加密的区别
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。
而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
谈谈机密性怎么实现的?
- 对称加密:加密和解密时使用的密钥都是同一个,只要保证了密钥的安全,那整个通信过程就可以说具有了机密性。
TLS提供的最常用的两个:AES。意思是“高级加密标准”。还有ChaCha20。
加密分组模式:让算法用固定长度的密钥加密任意长度的明文,把小秘密(即密钥)转化为大秘密(即密文)。
(注:明文的长度不固定,而密钥一次只能处理特定长度的一块数据,这就需要进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组模式)
- 非对称加密:为解决密钥交换安全问题,有两个密钥,一个叫“公钥”,一个叫“私钥”。两个密钥是不同的,“不对称”,公钥可以公开给任何人使用,而私钥必须严格保密。
公钥和私钥有个特别的“单向”性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。
RSA最著名,基于整数分解。
ECC后起之秀,基于椭圆曲线离散对数。
非对称加密为什么慢,非对称加密除了慢外还有什么缺点?
非对称加密基于大数运算,比如大素数或者椭圆曲线,是复杂的数学难题,所以消耗计算量,运算速度慢。
除了慢,可能还有一个缺点就是需要更多的位数,相同强度的对称密钥要比非对称密钥短。
对称密钥一般都128位、256位,而rsa一般要2048位,不过椭圆曲线的会短一点。
在混合加密中用到了公钥加密,因为只能由私钥解密。那么反过来,私钥加密后任何人都可以用公钥解密,这有什么用呢?
私钥加密用公钥解是为了做身份认证,不可抵赖,因为默认私钥只有持有人知道
- 混合加密:
目的:为了达到既能高效地加密解密,又能安全地密钥交换。
TLS 里使用混合加密:
在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE,首先解决密钥交换的问题。
然后用随机数产生对称算法使用的“会话密钥”,再用公钥加密。
对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换,后续就不再使用非对称加密,全都使用对称加密。
SSL 就是通信双方通过非对称加密协商出一个用于对称加密的密钥。
谈谈完整性怎么实现的?
摘要算法:把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文。
MD5、SHA-1安全性低被TLS禁用,TLS 推荐使用的是 SHA-1 的后继者:SHA-2。
保证完整性:在原文后附上它的摘要,就能够保证数据的完整性。建立在机密性之上,摘要和计算消息出的摘要比对就行。
怎么实现身份认证和不可否认呢?
- 数字签名:
把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密。
(注:因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。)
只要你和网站互相交换公钥,就可以用“签名”和“验签”来确认消息的真实性,因为私钥保密,黑客不能伪造签名,就能够保证通信双方的身份。
比如,你用自己的私钥签名一个消息“我是小明”。网站收到后用你的公钥验签,确认身份没问题,于是也用它的私钥签名消息“我是某宝”。你收到后再用它的公钥验一下,也没问题,这样你和网站就都知道对方不是假冒的,后面就可以用混合加密进行安全通信了。
公钥的信任问题怎么解决?怎么判断公钥真假?
- 数字证书和 CA
公钥的分发需要使用数字证书,必须由 CA 的信任链来验证,否则就是不可信的;
作为信任链的源头 CA 有时也会不可信,解决办法有 CRL(证书吊销列表)、OCSP(在线证书状态协议)来废止有问题证书,还有终止信任。
总结
保密性:靠混合加密解决,非对称加密实现对称加密秘钥传递,对称加密实现内容加密。
完整性:靠摘要算法解决。
身份认证:靠数字证书解决,数字证书因为CA机构的信任变成一个完整信任链条,从而实现通过数字证书证明了对方真实身份,但注意身份真实也可能是挂羊头卖狗肉,是一个坏人,所以,有了CRL、OCSP,还有终止信任。
不可否认:靠数字签名解决,内容摘要算法得到摘要,私钥加密摘要,对方使用对应公钥解密,得到摘要,再和自己得到的服务器提供的原文摘要对比,一致说明这个内容就是原服务器提供的,由证书说明了服务器的身份。
关于证书验证:
服务器返回的是证书链(不包括根证书,根证书预置在浏览器中),然后浏览器就可以使用信任的根证书(根公钥)解析证书链的根证书得到一级证书的公钥+摘要验签,然后拿一级证书的公钥解密一级证书拿到二级证书的公钥和摘要验签,再然后拿二级证书的公钥解密二级证书得到服务器的公钥和摘要验签,验证过程就结束了。
加餐部分!!!!!!!!!!!!!
- 因为 HTTP 是明文传输,所以不安全,容易被黑客窃听或篡改;
- 通信安全必须同时具备机密性、完整性、身份认证和不可否认这四个特性;
- HTTPS 的语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了 SSL/TLS;
- SSL/TLS 是信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全;
- OpenSSL 是著名的开源密码学工具包,是 SSL/TLS 的具体实现。
说一下HTTP 和 HTTPS 的区别?
-
开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;
-
资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;
-
端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
-
安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全
什么是数字签名?
为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如 MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行 MD5 加密,如果和签名一样,则说明数据确实是真的。
什么是数字证书?
对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA 证书机构会负责颁发一个证书,里面的公钥保证是真的,用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。