这个东西的概念纷繁复杂尤其是里面的公钥和私钥
当时特别想知道为什么用公钥加密却不用公钥解密。
今天我们先从对称加密和非对称加密说起。
对称加密和非对称加密
你小学的时候有传小纸条吗递纸条的时候,每个拿到的人都会忍不住看一眼一点隐私都没有
假设班花想向我表白,但在传递的过程中不想让别人发现她的情意。
你会在课间十分钟告诉我,向左移动一个字母,这就是我想对你说的话。
然后,在课堂上,发一张纸条,上面写着eb tib cj每一个帮忙送纸条的同学看完后都暗暗骂谜语人,滚出哥谭镇
嘿嘿,你不懂,我懂。
拿到纸条后,我把每个字母都向左移动了一个位置,得到了达沙比。
什么话这些是什么词
坏女人想毁我心向道我果断拒绝了她的表白
现在回想起来,感动之余会发现,像这样,把一条大家都能看懂的信息转换成另一条大家都看不懂的信息,其实就是加密。
像这种左移的加密方法,其实就是所谓的秘钥这种加密和解密使用相同的密钥加密形式,称为对称加密
对称加密
既然有对称加密,就有非对称加密。
不同的是,非对称加密,加密和解密使用的不是同一个密钥,而是两个不同的密钥,即公钥和私钥。
不对称加密
公钥负责加密,私钥负责解密公钥对每个人都可用,但私钥永远不会泄露
那么问题来了。
为什么用公钥加密,而不用公钥解密。
实际上,这涉及到公钥和私钥加密的数学原理。
说白了,加密就是把一个已知的数按照一定的规则转换成另一个数以前,这些数字在一起都是可读的,但经过这样的转换后,它们就变得不可读了
也就是说加密的本质是num—gt,十.
比如类花运算加一减一,就是一个很简单的转换方法。
我们换个复杂点的,比如余数运算。
假设有一个计算余数的公式。
5^2mod7=25mod7=x
这个公式很简单给定5和7的2次方,很容易得到x=4
但是如果我们改变x的位置。
5^xmod7=4
当x等于时,上述等式成立吗。
那就麻烦多了。
5^0mod7=15^1mod7=55^2mod7=45^3mod7=65^4mod7=2
虽然有点麻烦,但我们还是可以推导出,当x=2时,方程成立。
但是如果上面的模数值变得巨大呢。
5^xmod56374677648=4
那时候电脑只能一个个算出来CPU正常算出来需要很多年,可以认为算不出来
其实上面的公式就是把5加密成4如果已知x,很容易计算出等式右边的结果是4,反过来,就很难从4推导出x的值因此,这种模块化算法是不可逆的
虽然模运算是不可逆的,但结合欧拉定理,公式在一定条件下是可以可逆的。
让我们看看它是怎么做的。
让我们把X掰成两半,成为P和q的乘积。
原始modn =原始
如果P,Q,N选择得当,经过一波模运算,原文还是会变回原文。
知道这些是没用的,但是结合欧拉定理,经过一些我们无法理解的推导过程,可以把上面的公式转化成下面的。
原文modn =秘密文本 modn =原文
结合欧拉公式的计算过程,有兴趣可以查一下但是知道这里的结论就够了
也就是说,知道P就可以加密,知道Q就可以解密。
这里,P是公钥,Q是私钥。
用公钥加密的密文只能用私钥解密。
加密公式
甚至更好。
其实公式中P和Q的位置是可以互换的,所以说用私钥加密的密文只能用公钥解密也是可以的这种操作通常被称为验证数字签名
就像古装电视剧里,经常会有这样的故事,两个失散多年的亲人,各有一片碎成两瓣的玉佩有一天,当他们发现两个玉佩裂缝刚好可以拼在一起时,他们确认了另一个就是他们失散已久的大儿子
这两块碎玉有点像公钥和私钥。
公钥和私钥的关系
原理大家知道这么多其实就够了。
看到这里,就可以回答题目的问题了。
为什么用公钥加密,而不用公钥解密。
因为大数的模运算是不可逆的,别人无法暴力解密但结合欧拉定理,我们可以选择适当的p,q和N,使原本不可逆的操作在一定情况下可以有些可逆数学决定了我们用公钥加密的数据只能用私钥解密相反,只有公钥才能解密用私钥加密的数据
从数学原理可以看出,公钥和私钥的加密是安全的,但这件事的前提是基于目前的计算机运算速度还不够快所以,如果有一天科技更加发达,我们变成了更高维度的科技文明,那可能就是现在的密文和明文没什么区别了
总的来说整个加密过程实际上分为两个阶段
加密的两个阶段
第一阶段是TLS四次握手,主要利用非对称加密的特性来交换信息,最后得到一个会话密钥。
第二阶段是基于第一阶段会话密钥的对称加密通信。
我们来看看TLS四次握手的第一阶段。
第一次握手:
你好:是客户端告诉服务器它支持什么加密协议版本,比如TLS1.2,使用什么加密套件,比如最常见的RSA,还给了一个客户端的随机数。
第二次握手:
你好:服务器你好客户端,服务器随机数+服务器证书+确定的加密协议版本。
三次握手:
ClientExchange:此时,客户端生成另一个随机数,称为pre_master_key从第二次握手的服务器证书中取出服务器公钥,用公钥加密pre_master_key并发送给服务器
更改密码规范:客户端已经有三个随机数:客户端随机数,服务器随机数和pre_master_key使用这三个随机数计算并获得一个会话密钥此时,客户端通知服务器该会话密钥将用于对称保密通信
加密握手消息:客户端将生成到目前为止的通信数据内容的摘要,用会话密钥加密并发送给服务器进行验证此时客户端的握手过程已经结束,所以也叫完成消息
第四次握手:
更改密码规范:此时服务器从客户端获取pre_master_key,收集三个随机数就像客户端一样,它使用这三个随机数通过相同的算法获得一个会话密钥此时,服务器告诉客户端,这个会话密钥将在将来用于加密通信
加密握手消息:与客户端的操作一样,生成到目前为止的通信数据内容的摘要,用会话密钥加密,并发送给客户端进行验证此时,服务器的握手过程就完成了,所以这也叫完成消息
只是几次握手,满满的细节,没有什么多余的。
下面就来一一解释一下。
因为大家肯定都晕了,下面的问题我尽量用短句来解释。
都是二手的前期的四次握手,本质上是利用非对称加密的特性,交换三个随机数
目的是最终使用这三个随机数来生成对称加密的会话密钥后期一直以对称保密的方式沟通
为什么不对对称和非对称加密都使用非对称加密。
因为非对称加密很慢,所以对称加密相对更快。
第二次握手中的服务器证书是什么怎么把公钥弄出来
本质上,服务器证书是由权威数字证书颁发机构的私钥加密的服务器公钥。
什么是服务器证书。
如上所述,用私钥加密的数据可以用公钥解密并且公钥对任何人都是可用的因此,在第二次握手过程中,客户端可以通过CA的公钥解密服务器证书,从而得到隐藏在其中的服务器公钥
用CA公钥解密证书
看起来有点多余。
那么问题来了。
为什么不能直接传递公钥,而是用CA的私钥加密一次再传递。
另一方面,如果只传输公钥,公钥可能在传输过程中被黑客替换然后在三次握手中,客户端会用一个假的公钥加密第三个随机数pre_master_key,解密后黑客自然就知道了最关键的pre_master_key因为第一和第二随机数是公开的,所以可以计算出会话密钥
所以需要有一种方法来证明客户端获得的公钥是真正的服务器公钥,所以用CA的私钥进行加密成为服务器证书,这样客户端就可以通过解密CA公钥来验证是否是真正的服务器公钥。
那么问题又来了。
如何获取CA的公钥。
考虑到能颁发证书的CA机构不多,所以对应的CA公钥也不多,直接把它们作为配置放入操作系统或者浏览器就能完美解决上述问题。
CA公钥是内置在操作系统或者浏览器里的,别人拿不到你的三个随机数。
这三个随机数,两个来自客户端,一个来自服务器第一次和第二次握手中的客户端随机数和服务器随机数是明文只要你有心,每个人都能得到
而第三个随机数pre_master_key不能,因为它是在客户端生成之后,发送到服务器之前,用服务器的公钥加密的,所以只有服务器自己才能用私钥解密即使别人拿到了,没有服务器的私钥也无法解密原文
pre_master_key加解密为什么要用三个随机数而不是一两个
三个随机数生成对称密钥。
好像第三个随机数pre_master_key才是关键,其他两个好像可有可无。
为什么要总结第三次和第四次握手。
在第三次和第四次握手结束时,有一个完成的消息,其中包含一个总结。
抽象,说白了就是对一大段文本进行哈希运算目的是确认数据在通信过程中没有被篡改
三次握手,客户端生成摘要,服务器验证如果验证通过,说明客户端生成的数据没有被篡改,服务器可以放心的和客户端通信
第四次握手由服务器生成,并由客户端验证验证通过,表明该服务器可以信任
那么问题来了。
为什么非要哈希一次而不是直接对比原文。
这是因为原始内容太长,哈希可以让数据变短越短意味着传输成本越低
算法中涉及多少对私钥和公钥。
两对。
服务器自己的公钥和私钥:在第二次握手中,服务器将自己的公钥发送给客户机在三次握手中,第三个随机数pre_master_key用这个服务器公钥加密服务器得到它后,用自己的私钥解密
CA的公钥和私钥:在第二次握手中,传输的数字证书包含由CA的私钥加密的服务器公钥在客户端获得它之后,它将使用操作系统或浏览器内置的CA公钥来解密它
摘要
大数的模运算是不可逆的,别人无法暴力解密但结合欧拉定理,我们可以选择适当的p,q和N,使原本不可逆的操作在一定情况下可以有些可逆数学决定了我们用公钥加密的数据只能用私钥解密相反,只有公钥才能解密用私钥加密的数据
TLS四次握手中涉及两对私钥和公钥它们是服务器本身的私钥和公钥,以及CA的私钥和公钥
很难记住TLS四次握手建议关注三个随机数的流向,了解一下作为依据,大概就能记下来了
郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。