HTTPS加密以及认证手段以及优化

HTTPS

SSL即安全套接字层,SSL 在1999年被IETF(互联网工程组)更名为TLS,即传输安全层,直到现在,TLS 一共出现过三个版本,1.1、 1.2 和1.3,目前最广泛使用的是1.2,所以接下来的探讨都是基于TLS 1.2的版本上的。

TLS用于两个通信应用程序之间提供保密性和数据完整性

TLS由 记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

ECDHE - ECDSA-AES256-GCM- SHA384

因为TLS的密码套件规范,基本格式就是

密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法组成的一个密码串

有时候还有分组模式

TLS在根本上使用对称加密和非对称加密两种形式。

对称加密(AES)

需要对加密和解密使用相同密钥加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密

所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

在对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK等。

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高

对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。如果一方的秘钥被泄露,那么加密信息也就不安全了。

另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。


非对称加密(RSA)

 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。

对称加密算法不同,非对称加密算法需要两个密钥公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对

  • 如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;

  • 如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

  • 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法

密码体制的安全性依赖于密钥的安全性,现代密码学不追求加密算法的保密性,而是追求加密算法的完备,即:使攻击者在不知道密钥的情况下,没有办法从算法找到突破口。

根据加解密算法所使用的密钥是否相同,或能否由加(解)密密钥简单地求得解(加)密密钥。密码体制可分为对称密码体制和非对称密码体制。

非对称密码体制也叫公钥加密技术,该技术是针对私钥密码体制(对称加密算法)的缺陷被提出来的。

与对称密码体制不同,公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,这样就大大加强了信息保护的力度。

公钥密码体制不仅解决了密钥分配的问题,它还为签名和认证提供了手段。

非对称密码算法有很多,其中比较典型的是RSA算法,它的数学原理是大素数的分解。

工作过程

1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。

同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

分析

非对称加密算法在使用时需要同时拥有公开密钥和私有密钥,公开密钥与私有密钥相对应,如果在对数据的加密过程中使用了公开密钥,那么只有使用相对应的私有密钥才能解密;

反之,如果在对数据进行加密时使用了私有密钥,也只有使用与之相对应的公开密钥才能解密。

非对称加密算法对传信息进行加密的基本过程是:

  • 甲方首先生成一对密钥同时将其中的一把作为公开密钥;
  • 得到公开密钥的乙方再使用该密钥对需要加密的信息进行加密后再发送给甲方;
  • 甲方再使用另一把对应的私有密钥对加密后的信息进行解密,这样就实现了机密数据传输。

与上面的工作过程同理。

非对称加密算法的另一种加密过程是:

  • 甲方使用自己的私有密钥对信息进行加密后再发送给乙方;
  • 乙方使用甲方提供的公开密钥对加密后的信息进行解密;
  • 如果成功解密即可证实信息确实是由甲方所发,并非他人冒充,这就是常用的数字签名技术

优缺点

非对称加密算法的特点是算法强度复杂,其安全性依赖于算法与密钥。由于其算法复杂,而使得加密解密的速度远远低于对称加密算法,因此不适用于数据量较大的情况。

由于非对称加密算法有两种密钥,其中一个是公开的,所以在密钥传输上不存在安全性问题,使得其在传输加密数据的安全性上又高于对称加密算法。

常用算法

  • RSA:RSA 是一种目前应用非常广泛、历史也比较悠久的非对称秘钥加密技术,在1977年被麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家提出,由于难于破解,RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过RSA算法来进行签名验证。它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为 1024位、2048位、4096位等,理论上秘钥越长越难于破解,按照维基百科上的说法,小于等于256位的秘钥,在一台个人电脑上花几个小时就能被破解,512位的秘钥和768位的秘钥也分别在1999年和2009年被成功破解,虽然目前还没有公开资料证实有人能够成功破解1024位的秘钥,但显然距离这个节点也并不遥远,所以目前业界推荐使用 2048 位或以上的秘钥,不过目前看 2048 位的秘钥已经足够安全了,支付宝的官方文档上推荐也是2048位,当然更长的秘钥更安全,但也意味着会产生更大的性能开销。
  • DSA:既 Digital Signature Algorithm,数字签名算法,他是由美国国家标准与技术研究所(NIST)与1991年提出。和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。
  • ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC(Elliptic curve cryptography,椭圆曲线密码学)和 DSA 的结合,椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障,据称256位的ECC秘钥的安全性等同于3072位的RSA秘钥,和普通DSA相比,ECDSA在计算秘钥的过程中,部分因子使用了椭圆曲线算法。

混合加密

机密性

RSA的运算速度非常慢,而AES的加密速度比较快,而TLS正是使用了这种混合加密方式。

摘要算法

完整性

在TLS中,实现完整性的手段主要是摘要算法(Digest Algorithm) 。

消息摘要算法的特点:

  • 消息摘要是把任意长度的输入揉和而产生长度固定的伪随机输出的算法。

消息摘要算法的主要特征是加密过程不需要密钥

并且经过加密的数据无法被解密,可以被解密逆向的只有CRC32算法,

只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文

消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密。

 

认证性

我们在上面的叙述过程中出现过公钥加密,私钥解密的这个概念。提到的私钥只有你一个人所有,能够辨别唯一性。

所以我们可以把顺序调换一下,变成私钥加密,公钥解密。使用私钥再加上摘要算法,就能够实现数字签名,从而实现认证。

这里还存在一个数字签名的认证问题。因为私钥是是自己的,公钥是谁都可以发布,所以必须发布经过认证的公钥,才能解决公钥的信任问题。所以引入了CA, CA的全称是Certificate Authority ,证书认证机构,你必须让CA颁布具有认证过的公钥,才能解决公钥的信任问题。

全世界具有认证的CA就几家,分别颁布了DV、OV、EV三种,区别在于可信程度。DV是最低的,只是域名级别的可信,EV是最高的,经过了法律和审计的严格核查,可以证明网站拥有者的身份(在浏览器地址栏会显示出公司的名字,例如Apple、GitHub 的网站)。 不同的信任等级的机构一起形成了层级关系。

HTTPS 如何优化?

这里着重介绍会话复用这个模块。

 

会话复用

TLS 握⼿的⽬的就是为了协商出会话密钥,如果我们把⾸次 TLS 握⼿协商的对称加密密钥缓存起来,

待下次需要建⽴ HTTPS 连接时,直接「复⽤」这个密钥,不就减少 TLS 握⼿的性能损耗了吗?

这种⽅式就是会话复⽤(TLS session resumption),会话复⽤分两种:

  • 第⼀种叫 Session ID;
  • 第⼆种叫 Session Ticket;

Session ID

Session ID 的⼯作原理是,客户端和服务器⾸次 TLS 握⼿连接后,双⽅会在内存缓存会话密钥,

并⽤唯⼀的Session ID 来标识,Session ID 和会话密钥相当于 key-value 的关系。

当客户端再次连接时,hello 消息⾥会带上 Session ID,服务器收到后就会从内存找,

如果找到就直接⽤该会话密钥恢复会话状态,跳过其余的过程,只⽤⼀个消息往返就可以建⽴安全通信。

当然为了安全性,内存中的会话密钥会定期失效。


缺点:

服务器必须保持每⼀个客户端的会话密钥,随着客户端的增多,服务器的内存压⼒也会越⼤。

现在⽹站服务⼀般是由多台服务器通过负载均衡提供服务的,

客户端再次连接不⼀定会命中上次访问过的服务器,于是还要⾛完整的 TLS 握⼿过程;

Session Ticket

服务器不再缓存每个客户端的会话密钥,⽽是把缓存的⼯作交给了客户端,类似于 HTTP 的 Cookie。

客户端与服务器⾸次建⽴连接时,服务器会加密「会话密钥」作为 Ticket 发给客户端,交给客户端缓存该Ticket。

客户端再次连接服务器时,客户端会发送 Ticket,服务器解密后就可以获取上⼀次的会话密钥,

然后验证有效期,如果没问题,就可以恢复会话了,开始加密通信。


对于集群服务器的话,要确保每台服务器加密 「会话密钥」的密钥是⼀致的,

这样客户端携带 Ticket 访问任意⼀台服务器时,都能恢复会话。

Session ID 和 Session Ticket 都不具备前向安全性,

因为⼀旦加密「会话密钥」的密钥被破解或者服务器泄漏「会话密钥」,前⾯劫持的通信密⽂都会被破解。

为了避免重放攻击的⽅式就是需要对会话密钥设定⼀个合理的过期时间。

Pre-shared Key

前⾯的 Session ID 和 Session Ticket ⽅式都需要在 1 RTT 才能恢复会话。

对于重连 TLS1.3 只需要 0 RTT,原理和 Ticket 类似,只不过在重连时,

客户端会把 Ticket和 HTTP 请求⼀同发送给服务端,这种⽅式叫 Pre-shared Key。

同样的,Pre-shared Key 也有重放攻击的危险。

总结

对于硬件优化的⽅向,因为 HTTPS 是属于计算密集型,应该选择计算⼒更强的 CPU,

⽽且最好选择⽀持 AES-NI特性的 CPU,这个特性可以在硬件级别优化 AES 对称加密算法,加快应⽤数据的加解密。


对于软件优化的⽅向,如果可以,把软件升级成较新的版本。


对于协议优化的⽅向:

  • 密钥交换算法应该选择 ECDHE 算法,⽽不⽤ RSA 算法,

    因为 ECDHE 算法具备前向安全性,⽽且客户端可以在第三次握⼿之后,就发送加密应⽤数据,节省了 1 RTT。

  • 将 TSL1.2 升级 TSL1.3,因为 TSL1.3 的握⼿过程只需要 1 RTT,⽽且安全性更强。


对于证书优化的⽅向:

  • 服务器应该选⽤ ECDSA 证书,⽽⾮ RSA 证书,因为在相同安全级别下,ECC 的密钥⻓度⽐ RSA 短很多,这样可以提⾼证书传输的效率;

  • 服务器应该开启 OCSP Stapling 功能,由服务器预先获得 OCSP 的响应,并把响应结果缓存起来,这样TLS 握⼿的时候就不⽤再访问 CA 服务器,减少了⽹络通信的开销,提⾼了证书验证的效率;

对于重连 HTTPS 时,我们可以使⽤⼀些技术让客户端和服务端使⽤上⼀次 HTTPS 连接使⽤的会话密钥,直接恢
复会话,⽽不⽤再重新⾛完整的 TLS 握⼿过程。

常⻅的会话重⽤技术有 Session ID 和 Session Ticket,⽤了会话重⽤技术,当再次重连 HTTPS 时,只需要 1 RTT
就可以恢复会话。对于 TLS1.3 使⽤ Pre-shared Key 会话重⽤技术,只需要 0 RTT 就可以恢复会话。

这些会话重⽤技术虽然好⽤,但是存在⼀定的安全⻛险,它们不仅不具备前向安全,⽽且有重放攻击的⻛险,所以
应当对会话密钥设定⼀个合理的过期时间。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值