加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

TLS和HTTPS加密,公钥私钥体系

发布时间:2019-02-23 22:43:17 所属栏目:策划 来源:Developer_HZH
导读:副标题#e# 写在最前面 最近一段时间,国内各大网站纷纷用上了https连接,在访问这些网站的时候,很多浏览器会给予特别关照,给它们的链接旁边加上一个绿色的小锁,那么,什么是https,它与网络安全又有什么关系呢?今天我们就来谈谈https与tls(传输层安全)。

至此信件的安全问题已经被完美解决了,然而在实际操作中还有一些细节,比如非对称加密很复杂,消耗的计算时间较长,因此不用在正常的通信中,仅作为链接发起时,协商对称加密的密钥时使用,正常通信是使用对称加密进行的。

非对称加密

因为本人实在水平有限,因此这部整段搬运了知乎用户刘叔的文章非对称加密算法与TLS中的内容,侵删……

RSA利用的核心思想就是大素数分解的问题。这个问题虽然理解起来简单,但是破解起来非常难,以至于RSA至今为止仍旧是应用最广泛的非对称加密算法。虽然描述起来是两个大素数分解因式,但是实际的实现相对复杂很多。不是任何的两个大素数都可以用,而必须要满足一系列的条件。本书不是一本密码学的书,不进行深入探讨。

数学上,RSA算法的原理非常简单(密文为X,明文为A):

加密:

解密:

也就是说加密和解密的运算形式是完全一样的,公式里面或者叫做离散对数。RSA算法的数学基础就建立在已知其他值,D不可解的前提下。这里面E和N共同组成公钥,D和N共同组成私钥。所以整个加密算法剩下的唯一问题就是如何确定E,D,N三个字母了。

确定的方法是取两个大素数p和q。和相乘就是:N=pq。在计算和之前要计算一个中间值,这个值叫做:L=lcm(p-1,q-1)。lcm的意思是最小公倍数,也就是说的值等于和的最小公倍数。下面就可以得到了:gcd(E,L)=1。gcd表示最大公约数,也就是说的值为与互质的数。这个数在数学上的求法并不是多么的高端,而是简单的随机生成大数,然后与求最大公约数,看看结果是不是1。也就是说是一个暴力尝试的方法。得到了E和N,我们就得到了公钥了。D的值是根据E计算得到的:

解这个式子就可以得到D,也就是得到了私钥。整个RSA过程就结束了。RSA的加密与解密非常的简介易懂,这也是其迅速普及的原因。广泛使用的原因。整个RSA的安全性依赖于分解,N对外部是已知的,已知N的情况下,如果能分解得到N=pq,那么RSA就没有安全性可言。所以也可以说整个RSA的安全性就依赖于大素数分解因式了,当然也可以说依赖于求离散对数问题,他们是一个问题的两个方面,主要的破解方式是大素数分解因式。主要依赖于离散对数安全性的非对称加密算法是EIGamal算法。

ECC椭圆曲线

另一个常用的加密算法是ECC算法,采用椭圆曲线来构造密钥:

Server Key Exchange里面的最重要的参数就是ECDHE算法需要构造的密码学参数。可以看到一个是椭圆曲线的名字:secp256r1。这个椭圆曲线不但在HTTPS中,还在比特币中有广泛的应用,所有的椭圆曲线实际上都是方程:

这里面两个参数,这个椭圆曲线是一大类的曲线,对于secp256r1来说,a=0, b=7。所以对于secp256r1来说,这条曲线是TLS和HTTPS加密,公钥私钥体系,参数的取值并不是随便取的,必须要满足一定的条件,并且一条密码学曲线都是固定取值的。不同的,会得到非常不一样形状的图形,不同的图形有不同的用途,我们这里讨论的secp256r1曲线的图形如下:

这条曲线的形状如图。在密码学上,所有的椭圆曲线都是使用的有限域版本GF(p),所以p也是一个椭圆曲线的一个值。对于secp256k1来说,他的TLS和HTTPS加密,公钥私钥体系,椭圆曲线的方程是TLS和HTTPS加密,公钥私钥体系

椭圆曲线之所以被选择出来是因为他有众多非常有意思的特性,例如在椭圆曲线上拉一条直线,经过三个点,那三个点的和是0(那就看曲线怎么定义和这个操作了,这里是数论里的阿贝尔群)。本质上,使用椭圆曲线是使用了椭圆曲线的性质来得到一个数学运算系统,最终在参与密码学计算的是数论系统,与椭圆曲线就没有太大关系了,但是仍然可以用曲线来理解,因为数论运算是基于椭圆曲线构造的。

当这个椭圆曲线算法用于非对称加密的密钥交换的时候,我们知道两个人都能看到对方的公钥,并且都知道自己的私钥。椭圆曲线算法在使用的时候能够看到与RSA的一个最大的不同,就是RSA需要一个私钥,椭圆曲线并不需要。对于椭圆曲线做密钥交换,每一次通信的私钥和公钥都是临时生成的,这也是椭圆曲线比RSA安全性高的原因。因为RSA一旦私钥泄漏,历史的加密数据都能破解,而椭圆曲线不能。每一次通信都用完全不同的私钥公钥对进行信道协商。所以对于椭圆曲线来说,在每一次通信的时候都会首先生成这个私钥和公钥,生成私钥的方法就是在椭圆曲线上取一个点,根据上面说过的三点和等于0的特性,让两个点重合,重合之后,这条曲线就是椭圆的切线,与椭圆相交于两个点。非切点的那个点就是私钥,切点取反再多切线得到一个新的切点,如果多次取反做切点就得到了公钥点。Q=NG,G是私钥点,N是做切线的次数,是公钥。已知Q,算不出G,就是椭圆曲线生成公钥私钥的原理了。这里面对于椭圆曲线来说,N是一个公开的常数,双方都知道并且相同,也就是说,这个数学难题是已知了一个点,求次反向的求切线运算得到的那个点。这个点是计算难度上得不出来的。也就是说已知一点曲线上的切点,得到切线的难度比已知一个随意点,对曲线做切线的计算度复杂很多,多到多次计算就是计算不可能问题。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读