【https】对称加密与非对称加密再理解

本文详细介绍了HTTPS的安全性,包括对称加密与非对称加密的区别和结合使用。混合加密通过非对称加密传输对称加密的密钥,确保数据安全。此外,数字证书在验证服务器身份和保证完整性方面起着关键作用。HTTPS的请求流程中,客户端与服务器通过三个随机数生成会话密钥,确保通信安全。

对称加密与非对称加密再理解

一、对称加密与非对称加密

HTTPS 的安全性是由 TLS 来保证的。

加密可以分为两大类:对称加密和非对称加密

对称加密

对称加密的方法是,双方使用同一个秘钥对数据进行加密和解密。但是对称加密的存在一个问题,就是如何保证秘钥传输的安全性,因为秘钥还是会通过网络传输的,一旦秘钥被其他人获取到,那么整个加密过程就毫无作用了。 这就要用到非对称加密的方法。速度要比非对称加密快。

非对称加密

非对称加密的方法是,我们拥有两个秘钥,一个是公钥,一个是私钥。公钥是公开的,私钥是保密的。用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。我们可以将公钥公布出去,任何想和我们通信的客户, 都可以使用我们提供的公钥对数据进行加密,这样我们就可以使用私钥进行解密,这样就能保证数据的安全了。但是非对称加密有一个缺点就是加密的过程很慢,因此如果每次通信都使用非对称加密的方式的话,反而会造成等待时间过长的问题。



二、混合加密

对称加密和非对称加密搭配使用。

基于以上两点原因,最终选择了一个更加完美的方案,那就是在传输数据阶段依然使用对称加密,但是对称加密的密钥我们采用非对称加密来传输

https使用混合加密,并且还要配合数字证书来实现安全性。

在这里插入图片描述

从图中可以看出,改造后的流程是这样的:

  • 首先浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数 client-random;
  • 服务器保存随机数 client-random,选择对称加密和非对称加密的套件,然后生成随机数 service-random,向浏览器发送选择的加密套件、service-random 和公钥;
  • 浏览器保存公钥,并利用 client-random 和 service-random 计算出来 pre-master,然后利用公钥对 pre-master 加密,并向服务器发送加密后的数据;
  • 最后服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息。

到此为止,服务器和浏览器就有了共同的 client-random、service-random 和 pre-master,然后服务器和浏览器会使用这三组随机数生成对称密钥,因为服务器和浏览器使用同一套方法来生成密钥,所以最终生成的密钥也是相同的。

有了对称加密的密钥之后,双方就可以使用对称加密的方式来传输数据了。

需要特别注意的一点,pre-master 是经过公钥加密之后传输的,所以黑客无法获取到 pre-master,这样黑客就无法生成密钥,也就保证了黑客无法破解传输过程中的数据了

注:什么是加密套件?

加密套件(CipherList)是指在ssl通信中,服务器和客户端所使用的加密算法的组合。在ssl握手初期,客户端将自身支持的加密套件列表发送给服务器;在握手阶段,服务器根据自己的配置从中尽可能的选出一个套件,作为之后所要使用的加密方式。

其实就是服务器选择一个双方要使用的加密方法。



三、添加数字证书 + 混合加密

对称加密和非对称加密,以及两者结合起来的混合加密,实现了机密性。
但仅有机密性,离安全还差的很远。

黑客虽然拿不到会话密钥,无法破解密文,但可以通过窃听收集到足够多的密文,再尝试着修改、重组后发给网站。因为没有完整性保证,服务器只能“照单全收”,然后他就可以通过服务器的响应获取进一步的线索,最终就会破解出明文。

另外,黑客也可以伪造身份发布公钥。如果你拿到了假的公钥,混合加密就完全失效了。你以为自己是在和“某宝”通信,实际上网线的另一端却是黑客,银行卡号、密码等敏感信息就在“安全”的通信过程中被窃取了。

所以,在机密性的基础上还必须加上完整性、身份认证等特性,才能实现真正的安全。


https的真正请求流程

https使用混合加密,并且还要配合数字证书来实现安全性。

  • 客户端向服务器发起请求,请求中包含使用的TLS版本号、生成的一个随机数、以及客户端支持的加密方法。
  • 服务器端接收到请求后,确认双方使用的加密方法和TLS版本号、并给出服务器的证书、以及一个服务器生成的随机数。
  • 客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中解密拿到的服务器公钥,加密这个随机数,然后发给服务器。
  • 服务器使用自己的私钥,来解密客户端发送过来的随机数。这样服务器就拿到了第三个随机数。而且只有客户端和服务器端知道这第三个随机数,因为第三个随机数是通过加密传输的。
  • 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成会话秘钥,以后的对话过程都使用这个秘钥(即会话秘钥)来加密信息。
  • 以后客户端和服务器端都使用这个会话秘钥来加密。

在这里插入图片描述



四、数字证书

服务器获取证书?

在这里插入图片描述

  • 首先,服务器先用Hash算法将自己的公钥和其他信息(例如认证时长,服务器域名…)进行加密,生成一个信息摘要,传递给认证机构,并且认证机构也会有自己的公钥和私钥,并且认证机构会将自己的公钥给了浏览器。
  • 然后认证机构会用自己的私钥对已经拿到的浏览器摘要进行加密,生成签名,签名和信息摘要合在一起称为数字证书,(认证机构生成的签名是证书的关键,有了这个认证机构的签名,证书就合法了)。
  • 然后再把这个证书传递给服务器,服务器会保存自己的证书,服务器并且也会把证书传递给浏览器。
  • 浏览器用认证机构传给自己的公钥对证书进行解密拿到摘要A,并读取证书中相关的明文信息,采用 CA 签名时相同的 Hash 函数来计算并得到摘要B,对比信息摘要 A 和信息摘要 B,如果一致,则可以确认证书是合法的,同时在摘要A中也拿到了服务器的公钥

摘要

给计算机一篇文章,计算机用摘要算法(主要是哈希类算法)生成一个字符串,如果文章内容改变,哪怕是一个字,一个标点符号,摘要也会完全改变。和完全加密一篇文章相比,摘要的体积很小,因此非常有利于存储和传输。

通常对于一个给定的摘要算法,无论你的文章多大,有多少字节,最终生成摘要的字节数是固定的。

摘要是对原文的证明,从原文到摘要是一个不可逆的过程

通过原文可以计算出摘要,一旦原文发生变化,哪怕是一个标点符号,摘要也会发生变化。而已知一个摘要,想要反推出原文,几乎是不可能的。因为摘要和原文并不是一对一的关系,是多个原文对应一个摘要。而且,想要找到两个摘要碰撞的原文是非常困难的发生概率相当于买彩票中大奖 。而且就算黑客找到了碰撞的原文,也未必可以起到作用。


签名

如果张三将合同生成摘要,再用自己的私钥加密摘要,得到一个密文串,那么这个串就是张三对合同的数字签名

### HTTP HTTPS 中的非对称加密 #### 非对称加密在HTTPS中的角色 HTTPS协议通过SSL/TLS层来保障通信的安全性。在这个过程中,非对称加密主要用于初始连接建立时的身份验证以及密钥交换阶段,在这个特定环节之后的内容传输则依赖于效率更高的对称加密方式完成[^1]。 当客户端尝试访问一个HTTPS网站时,服务器会向客户端发送其数字证书,该证书包含了服务器的公钥。客户端利用此公钥对随机生成的一次性对称密钥进行加密并传回给服务器;只有持有对应私钥的合法服务器才能解密获得这一临时密钥,进而双方以此为基础开展后续高效且安全的信息交流[^2]。 #### 数学基础支持下的安全性 非对称加密技术背后的核心在于一些复杂的数学难题,比如大整数因子分解或是椭圆曲线上离散对数问题等。这些问题的特点是在现有计算机能力下求解极其困难,这使得即使攻击者截获了加密后的消息也很难从中推导出原始信息或对应的私钥[^4]。 具体到HTTPS场景里,这种特性确保了一方面任何人都可以通过公开渠道获取到某一方(通常是服务端)发布的公钥来进行加密操作而不必担心泄露风险;另一方面仅限于拥有匹配私钥的那一方能够成功解读被加密的信息,从而实现了良好的保密性身份鉴别功能[^5]。 ```python # Python示例:模拟简单的RSA非对称加密过程(仅为示意用途) from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import binascii keyPair = RSA.generate(bits=1024) pubKey = keyPair.publickey() message = b'Hello, this is a secret message.' encryptor = PKCS1_OAEP.new(pubKey) encryptedMsg = encryptor.encrypt(message) print(f"Encrypted Message: {binascii.hexlify(encryptedMsg)}") decryptor = PKCS1_OAEP.new(keyPair) decryptedMsg = decryptor.decrypt(encryptedMsg).decode('utf-8') print(f"Decrypted Message: {decryptedMsg}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛小y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值