云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_网站建设方案ppt_免费

小七 141 0

无密钥SSL:本质的技术细节

我们昨天宣布了无密钥SSL,得到了压倒性的积极响应。我们通读了这个博客、Reddit、Hacker News上的评论,人们似乎有兴趣了解更多、更深入地了解技术细节。在这篇博文中,我们将深入探讨无密钥SSL的设计原理、工作原理以及安全性。在我们这样做之前,我们需要一些关于加密如何在互联网上工作的背景知识。如果你已经很熟悉了,可以跳到前面。TLS公司传输层安全(TLS)是web安全的主力军。它可以让网站向网络浏览器证明自己的身份,并通过加密保护所有交换的信息不被窥视。TLS协议已经存在多年了,但它对于那些铁杆科技爱好者来说仍然是个谜。理解TLS的基本原理是理解无密钥SSL的关键。双重目标TLS有两个主要目标:机密性和身份验证。两者对于在互联网上进行安全通信都至关重要。当双方都确信没有人能理解他们的谈话时,交流就被认为是保密的。使用对称加密可以实现机密性:在发送消息之前,使用只有双方都知道的密钥对消息进行加密。在TLS中,这种对称加密通常使用像AES这样的强分组密码来完成。旧的浏览器和平台可能会使用像tripledes或流密码RC4这样的密码,现在被认为是不安全的。TLS的另一个关键目标是身份验证。身份验证是确保另一端的人是他们所说的人的一种方法。这是通过公钥实现的。网站使用证书和公钥加密技术向web浏览器证明其身份。浏览器需要两件事来信任证书:证明另一方是证书的所有者,以及证书是可信的。一个网站证书包含一个公钥,如果这个网站能够证明它控制了相关的私钥,那就证明他们是证书的所有者。如果证书是由受信任的证书颁发机构授予的,并且包含站点的域名,则浏览器认为该证书是可信的。关于信任如何与web证书一起工作的更多技术细节在之前关于我们的开源SSL工具包CFSSL的博客文章中描述。在web环境中,机密性和身份验证是通过建立共享密钥和证明证书所有权的过程来实现的。TLS通过一系列称为"握手"的消息来实现这一点。握手是什么意思?TLS协议是由Netscape在20世纪90年代中期开发的安全套接字层(SSL)协议演变而来的。1999年,Internet工程任务组(IETF)标准化了一种称为TLS的新协议,它是SSL的更新版本。事实上,TLS与SSL非常相似,tls1.0使用SSL协议版本号3.1。乍一看,这可能令人困惑,但这是有道理的,因为TLS只是ssl3.0的一个小更新。TLS的后续版本遵循了这种模式。由于TLS是SSL协议的一个演变,人们仍然在某种程度上互换使用术语TLS和SSL。TLS中有两种主要的握手方式:一种基于RSA,另一种基于Diffie-Hellman。RSA和Diffie-Hellman是两种开创了现代密码学时代的算法,并将密码学推向了大众。这两次握手的区别仅仅在于如何实现密钥建立和身份验证这两个目标:RSA和DH握手各有优缺点。RSA握手只使用一个公钥算法操作RSA。与RSA证书的DH握手需要相同的RSA操作,但需要附加DH操作。假设证书是RSA,RSA握手的计算速度更快。像RSA和DH这样的公钥算法占用大量CPU,是TLS握手过程中最慢的部分。一台笔记本电脑每秒只能执行几百次RSA加密,而对称密码AES每秒只能执行大约1000万次。DH握手需要两种算法来运行,但它带来的好处是,它允许密钥建立独立于服务器的私钥。这给了连接前向保密性,这是一个有用的属性,可以在私钥被泄露后保护会话不被解密。DH版本的握手还提供了使用非RSA证书(包括ECDSA密钥)来提高性能的可能性。椭圆曲线提供了相同的安全性和较小的计算开销。与椭圆曲线DSA证书和椭圆曲线Diffie-Hellman密钥协商的DH握手比单操作RSA握手更快。CloudFlare支持这两种握手,但是,正如我们稍后将要描述的,所使用的握手类型是由服务器选择的。CloudFlare将尽可能选择DH握手。TLS术语表在我们了解握手的步骤之前,这里有几个定义。1会话密钥这是握手的最终结果。它是对称密码的密钥,允许客户端和服务器彼此加密消息。2客户随机这是由客户机创建的32字节序列。它对于每个连接都是唯一的,应该包含一个4字节的时间戳,后面跟着28个随机字节。最近,googlechrome改用了32字节的随机字节,以防止客户端指纹。这些随机值通常称为nonce。三。服务器随机服务器随机与客户端随机相同,但由服务器生成。4前主密钥这是一个48字节的数据块。它可以与客户端随机和服务器随机结合使用"伪随机函数"(PRF)创建会话密钥。5密码套件这是一个用于组合组成TLS连接的算法的唯一标识符。它为以下各项定义了一种算法:密钥建立(通常是Diffie-Hellman变体或RSA)身份验证(证书类型)机密性(对称密码)完整性(哈希函数)例如,"AES128-SHA"定义了一个会话,该会话使用:密钥建立RSA(隐含)RSA认证(隐含)密码块链(CBC)模式下的128位高级加密标准160位完整性安全哈希算法(SHA)更令人生畏但有效的密码套件是"ECDHE-ECDSA-AES256-GCM-SHA384",它定义了一个会话,该会话使用:椭圆曲线Diffie-Hellman临时密钥交换(ECDHE)密钥建立用于认证的椭圆曲线数字签名算法(ECDSA)Galois/Counter模式(GCM)的256位高级加密标准,用于保密完整性的384位安全哈希算法有了这些定义,让我们来看看RSA握手。RSA握手请注意,握手中的消息都不是用会话密钥加密的;它们都是以明文形式发送的。![SSL握手RSA](https:留言1:"客户你好"客户机hello包含客户机希望使用的协议版本,以及启动握手的其他一些信息,包括客户机随机数和密码套件列表。现代浏览器还包括它们要查找的主机名,称为服务器名称指示(SNI)。SNI允许web服务器在同一个IP地址上托管多个域。消息2:"服务器你好"在接收到客户机hello之后,服务器为下一步的握手选择参数。密码套件的选择决定了要执行的握手类型。服务器"hello"消息包含服务器random、服务器选择的密码套件和服务器的证书。证书包含服务器的公钥和域名。注意:CloudFlare的密码套件首选项在我们的Github页面上公开发布。消息3:"客户端密钥交换"在验证证书是可信的并且属于他们尝试访问的站点之后,客户机创建一个随机的pre-main机密。这个秘密用证书中的公钥加密,然后发送到服务器。在接收到此消息时,服务器使用其私钥来解密此pre-main机密。既然双方都有pre-main机密,并且客户端和服务器都是随机的,那么它们都可以派生出相同的会话密钥。然后他们交换一条短消息,表示他们发送的下一条消息将被加密。当客户机和服务器交换"完成"消息时,握手正式完成。实际的文本是用会话密钥加密的"client finished"或"server finished"。双方之间的任何后续通信都使用会话密钥加密。这种握手非常优雅,因为它将密钥交换和身份验证结合在一个步骤中。其逻辑是,如果服务器能够正确地派生会话密钥,那么它们必须有权访问私钥,因此,必须是证书的所有者。这种握手的缺点是,它保护的消息与私钥一样安全。假设第三方已经记录了握手和随后的通信。如果该方将来能够访问私钥,他们将能够解密pre-main机密并派生会话密钥。这样他们就可以解密整个消息。即使证书已过期或吊销,也是如此。这就导致了另一种形式的握手,即使私钥被泄露,也能提供保密性。短暂的Diffie Hellman握手短暂的Diffie-Hellman握手是TLS握手的另一种形式。它使用两种不同的机制:一种用于建立共享的pre-main机密,另一种用于验证服务器。它所依赖的关键特性是Diffie-Hellman密钥协商算法。在Diffie-Hellman中,具有不同秘密的双方交换消息以获得共享的秘密。这种握手依赖于一个简单的事实,即指数是可交换的。具体地说,取一个数的幂,结果取a的幂