爱陪小樱桃

导航

 

加密那些事儿

我们了解https的时候是不是很困惑的,里面涉及到公钥、私钥,有时候自己也困惑加密和解密的逻辑,自己迷糊。


为什么公钥加密不能原路返回,用公钥解密?


在工作的时候,我们把一段明文转换为看不懂的密文,就叫做加密。
有时候 比如,一段字母左移,然后知道规则的人,左移一下就明白其中的意思了。
像这种左移的方法,就叫做秘钥,像这种加密和解密用的是同一套加密形式,就叫做对称加密,过程就是:原文--公钥--密文-公钥--原文,这种

既然有对称加密就有非对称加密。过程是“原文---公钥----密文----私钥---原文”
公钥负责加密,私钥负责解密,公钥人人可得,私钥只有自己可见。
为啥用公钥加密,咋不直接用私钥加密

这就是要涉及到对应的原理了,说直白一点加密就是将一个已知的数字根据一定的规则转换为另一个数字,以前这个数字放在一起都认识,但是经过变换,变换为不认识了。
比如:5^2 mod 7=25 mod 7=x
所以:X=4,如果换一下X的位置,求X等于多少的时候,上边的等示儿能够成立呢?
5^X mod 7=4
虽然麻烦但是也能算到X的值。
如果上边的模数变得巨大无比呢5^X mod 38998e768998900 =4,这种尝试的话cpu估计冒烟了。
因此说这样取值不逆的,虽然取模运算不可逆,如果用数据公式欧拉定理,可以推算出来:原文^(p) mod N=密文
密文^q mod N=原文
p是公钥,q是私钥。
例如:加密:mP(p次方) mod N=x
解密:xq(q次方) mod N=m
m:原文,x:密文

qp,位置是可以互换的,所以反过来,用私钥加密的过的密文,用公钥解密,这也就是验证数据签名,因为大数据取模,运算是不可逆的,因此他人无法暴力解密,结合数学原理,我可以算出合适的qp,让原本不可逆的变得可逆,说不定未来科技强大就可逆了,数学原理决定了,我们用公钥加密,只能用私钥解密,用私钥加密只能用公钥解密。


https

公司里面有的时候服务只针对内网服务的,那么大概率我们用的是HTTP
如果服务要对外网访问的时候,这个时候如果是http,那么信息的收发就是铭文了,那么只有有人通过通信链路抓包就会发现内容,所以是不安全的。


为了让明文变为密文,我们在HTTP的层面上增加了TLS层,目的就是加密。
这就变为了https


https的握手过程

首先建立了tcp连接,毕竟http是基于tcp协议的。
tcp建立后,就进入了https的加密过程了。


第一次握手:
客户端告诉服务端,他支持什么版本的假面协议版本,比如:TLS1.2,使用什么样的加密套件,比如RSA,同时还给出一个客户端的随机数。


第二次握手:
server:服务端告诉客户端,服务器随机数+服务器证书+确定加密的版本号。


第三次握手:
此时客户端在生成一个随机数,pre_master_key,从第二次握手的服务器证书里面取出服务器公钥,用公钥加密pre_master_key,发给服务器。

客户端这边已经有3个随机数:客户端随机数,服务器随机数和pre_master_key,用这个三个随机数进行计算得到一个会话秘钥,此时客户端通知服务端,后面会有这个会话密钥进行对称机密通信。

客户端会把迄今为止,通信数据内容生成一个摘要,用会话密钥,加密一下,发给服务器做校验,此时客户端这边握手流程就结束了,因此也叫做finished报文。


第四次握手:
服务端此时拿到客户端传来的pre_master_key(虽然被服务公钥加密过,但是服务器有私钥,能解密获得原文,)集齐3个随机数,跟客户端一样,用这个三个随机数通过同样的算法,获得会话密钥,此时服务告诉客户端,后面会用到这个会话密钥,进行加密通信。

跟客户端的通信一样,将通信数据,用会话密钥加密一下,发给客户端做校验,到这里,服务端的握手流程也就结束了,因此这也叫finished报文。


https 到底是对称还是非对称加密呢?
都用到了,前4次握手,本身就是在利用非对称加密的特点,交换3个随机数,目的就是用3个随机数,生成会话密钥,后边就是用对称的密钥进行通信。
为啥不一直非对称呢,因为非对称慢,对称快。

服务器证书,本质是被权威数字证书机构(CA)的私钥加密过的服务公钥,上面提到过,被私钥加密过的数据,是可以通过公钥来解密的,而公钥是任何人都能得到,所以第二次握手客户端是可以通过CA的公钥,来解密服务器证书,从而拿到藏在里面的服务器的公钥。

为啥我们不能只传公钥,拿CA的私钥加密一次传过去?
如果传公钥可能被黑客发现。


那么如何获取 CA的公钥,所以如果直接调接口,CA会被弄挂了,所以只要生成配置文件,生成证书,

随机数,大家只要有心还是可以拿到的,但是pre_master_key他在客户端生成后,发给服务器之前,被服务器的公钥加密过,因此只有服务器本身才能用私钥解密,就算被别人拿到了,没有服务的私钥,无法解密。

为啥用3个随机数,而不是一个2个呢?

关键的随机数据就是第三个,但是如果只用第3个就容易被破解,增加了前面2个就增加了难度,


为啥第三次和第四次握手,还要摘要
摘要说白了,就是对文本进行了hash操作,目的防止通信数据被篡改。
为啥要hash一次,不直接那原文进行对比。
因为原文太长了,hash后原文变短了。

总之:
https是基于tcp的三次握手,后面增加了tls四次握手。
TLS四次握手要关注三个随机数,理解。

posted on 2025-02-05 12:16  cherry小樱桃  阅读(35)  评论(0)    收藏  举报