傳輸層安全性協定
















傳輸層安全性協定英语:Transport Layer Security,縮寫作 TLS),及其前身安全套接层Secure Sockets Layer,縮寫作 SSL)是一种安全协议,目的是為網際網路通信提供安全及数据完整性保障。網景公司(Netscape)在1994年推出首版網頁瀏覽器,網景領航員時,推出HTTPS協定,以SSL進行加密,這是SSL的起源。IETF將SSL進行標準化,1999年公布第一版TLS標準文件。隨後又公布RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)。在瀏覽器、電子郵件、即時通訊、VoIP、網路傳真等應用程式中,廣泛支持這個協定。主要的網站,如Google、Facebook等也以這個協定來建立安全連線,傳送資料。目前已成为互联网上保密通信的工业标准。


SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。傳輸層安全協議使用X.509認證,之後利用非對稱加密演算來對通訊方做身份認證,之後交換對稱金鑰作為會談金鑰(Session key)。這個會談金鑰是用來將通訊兩方交換的資料做加密,保证两个应用间通信的保密性和可靠性,使客户與服务器应用之间的通信不被攻击者窃听。




目录





  • 1 概論


  • 2 發展歷史

    • 2.1 安全网络编程


    • 2.2 SSL 1.0、2.0和3.0


    • 2.3 TLS 1.0


    • 2.4 TLS 1.1


    • 2.5 TLS 1.2


    • 2.6 TLS 1.3



  • 3 算法

    • 3.1 密钥交换和密钥协商


    • 3.2 加密密码


    • 3.3 数据完整性



  • 4 过程

    • 4.1 TLS



  • 5 参考文献


  • 6 外部链接


  • 7 参见




概論


TLS協定採用主從式架構模型,用于在兩個應用程式間透過網路建立起安全的連線,防止在交換資料时受到竊聽及篡改。


TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行建立加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。


TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通訊埠(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:邮件、新闻协议和STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据[1]。通过握手,客户端和服务器协商各种参数用于建立安全连接:


  • 当客户端连接到支持TLS协议的服务器要求建立安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。

  • 服务器从该列表中决定加密和散列函数,并通知客户端。

  • 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。

  • 客户端确认其颁发的证书的有效性。

  • 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。

  • 利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。


發展歷史


























協議發布時間
狀態
SSL 1.0未公佈未公佈
SSL 2.01995年
2011年禁止
SSL 3.01996年
2015年禁止
TLS 1.01999年
建議棄用
TLS 1.12006年
建議棄用
TLS 1.22008年

TLS 1.32018年


安全网络编程


早期的研究工作,为方便改造原有网络应用程序,在1993年已经有了相似的Berkeley套接字安全传输层API方法[2]



SSL 1.0、2.0和3.0


SSL(Secure Sockets Layer)是网景公司(Netscape)设计的主要用于Web的安全传输协议,这种协议在Web上获得了广泛的应用[3]


基础算法由作为网景公司的首席科学家塔希爾·蓋莫爾(Taher Elgamal)编写,所以他被人称为“SSL之父”。[4][5]


2014年10月,Google發布在SSL 3.0中發現設計缺陷,建議禁用此一協議。攻擊者可以向TLS發送虛假錯誤提示,然後將安全連接強行降級到过时且不安全的SSL 3.0,然後就可以利用其中的設計漏洞竊取敏感信息。Google在自己公司相關產品中陸續禁止回溯相容,強制使用TLS協議。Mozilla也在11月25日發布的Firefox 34中徹底禁用了SSL 3.0。微軟同樣發出了安全通告[6]


  • 1.0版本从未公开过,因为存在严重的安全漏洞。

  • 2.0版本在1995年2月发布,但因为存在数个严重的安全漏洞而被3.0版本替代[7]

  • 3.0版本在1996年发布,是由網景工程師Paul Kocher、Phil Karlton和Alan Freier完全重新设计的。较新版本的SSL/TLS基于SSL 3.0。SSL 3.0作为历史文献IETF通过 RFC 6101 发表。


TLS 1.0


IETF将SSL标准化,即 RFC 2246 ,并将其称为TLS(Transport Layer Security)。从技术上讲,TLS 1.0与SSL 3.0的差異非常微小。但正如RFC所述"the differences between this protocol and SSL 3.0 are not dramatic, but they are significant enough to preclude interoperability between TLS 1.0 and SSL 3.0"(本协议和SSL 3.0之间的差异并不是显著,却足以排除TLS 1.0和SSL 3.0之间的互操作性)。TLS 1.0包括可以降级到SSL 3.0的实现,这削弱了连接的安全性[8]:1–2



TLS 1.1


TLS 1.1在 RFC 4346 中定义,于2006年4月发表[9],它是TLS 1.0的更新。在此版本中的差异包括:


  • 添加对CBC攻击的保护:
    • 隐式IV被替换成一个显式的IV。

    • 更改分组密码模式中的填充错误。


  • 支持IANA登记的参数。[8]:2


TLS 1.2


TLS 1.2在 RFC 5246 中定义,于2008年8月发表。它基于更早的TLS 1.1规范。主要区别包括:


  • 可使用密码组合选项指定伪随机函数使用SHA-256替换MD5-SHA-1组合。

  • 可使用密码组合选项指定在完成消息的哈希认证中使用SHA-256替换MD5-SHA-1算法,但完成消息中哈希值的长度仍然被截断为96位。

  • 在握手期间MD5-SHA-1组合的数字签名被替换为使用单一Hash方法,默认为SHA-1。

  • 增强服务器和客户端指定Hash和签名算法的能力。

  • 扩大经过身份验证的加密密码,主要用于GCM和CCM模式的AES加密的支持。

  • 添加TLS扩展定义和AES密码组合[8]:2。所有TLS版本在2011年3月发布的RFC 6176中删除了对SSL的兼容,这样TLS会话将永远无法协商使用的SSL 2.0以避免安全问题。


TLS 1.3



TLS 1.3在 RFC 8446 中定义,于2018年8月发表。[10]它基于更早的TLS 1.2规范,与TLS 1.2的主要区别包括:


  • 将密钥协商和认证算法从密码套件中分离出来。

  • 移除脆弱和较少使用的命名椭圆曲线支持(参见椭圆曲线密码学)。

  • 移除MD5和SHA-224密碼雜湊函數的支持。

  • 请求数字签名,即便使用之前的配置。

  • 集成HKDF英语Key derivation function和半短暂DH提议。

  • 替换使用PSK英语TLS-PSK和票据的恢复。

  • 支持1-RTT握手并初步支持0-RTT。

  • 通过在(EC)DH密钥协议期间使用临时密钥来保证完善的前向安全性。

  • 放弃许多不安全或过时特性的支持,包括数据压缩、重新协商、非AEAD密码本、静态RSA和静态DH密钥交换、自定义DHE分组、点格式协商、更改密码本规范的协议、UNIX时间的Hello消息,以及长度字段AD输入到AEAD密码本。

  • 禁止用于向后兼容性的SSL和RC4协商。

  • 集成会话散列的使用。

  • 弃用记录层版本号和冻结数以改进向后兼容性。

  • 将一些安全相关的算法细节从附录移动到标准,并将ClientKeyShare降级到附录。

  • 添加带有Poly1305消息验证码的ChaCha20流加密。

  • 添加Ed25519英语EdDSA#Ed25519和Ed448数字签名算法。

  • 添加x25519和x448密钥交换协议。

  • 将支持加密服务器名称指示(Encrypted Server Name Indication, ESNI)。[11]

网络安全服务(NSS)是由Mozilla开发并由其网络浏览器Firefox使用的加密库,自2017年2月起便默认启用TLS 1.3。[12]随后TLS 1.3被添加到2017年3月发布的Firefox 52.0中,但它由于某些用户的兼容性问题,默认情况下禁用。[13]直到Firefox 60.0才正式默认启用。[14]


Google Chrome曾在2017年短时间将TLS 1.3设为默认,然而由于类似Blue Coat Systems英语Blue Coat Systems等不兼容组件而被取消。[15]


wolfSSL在2017年5月发布的3.11.1版本中启用了TLS 1.3。[16] 作为第一款支持TLS 1.3部署,wolfSSL 3.11.1 支持 TLS 1.3 Draft 18( 现已支持到Draft 28),[17]同时官方也发布了一系列关于TLS 1.2和TLS 1.3性能差距的博客。[18]



算法




密钥交换和密钥协商


在客户端和服务器开始交换TLS所保护的加密信息之前,他们必须安全地交换或协定加密密钥和加密数据时要使用的密码。用于密钥交换的方法包括:使用RSA算法生成公钥和私钥(在TLS 握手协议中被称为TLS_RSA),Diffie-Hellman(在TLS握手协议中被称为TLS_DH),临时Diffie-Hellman(在TLS握手协议中被称为TLS_DHE),橢圓曲線迪菲-赫爾曼(在TLS握手协议中被称为TLS_ECDH),临时椭圆曲线Diffie-Hellman(在TLS握手协议中被称为TLS_ECDHE),匿名Diffie-Hellman(在TLS握手协议中被称为TLS_DH_anon)[19]和预共享密钥(在TLS握手协议中被称为TLS_PSK)。[20]


TLS_DH_anon和TLS_ECDH_anon的密钥协商协议不能验证服务器或用户,因为易受中间人攻击因此很少使用。只有TLS_DHE和TLS_ECDHE提供前向保密能力。


在交换过程中使用的公钥/私钥加密密钥的长度和在交换协议过程中使用的公钥证书也各不相同,因而提供的強健性的安全。2013年7月,Google宣布向其用户提供的TLS加密将不再使用1024位公钥并切换到2048位,以提高安全性。[21]

























































































































































身份验证和密钥交换协议列表
算法SSL 2.0SSL 3.0TLS 1.0TLS 1.1TLS 1.2TLS 1.3状态

RSA
RFC中TLS 1.2的定義

DH-RSA


DHE-RSA(具有前向安全性)


ECDH-RSA


ECDHE-RSA(具有前向安全性)


DH-DSS英语Digital Signature Algorithm


DHE-DSS英语Digital Signature Algorithm(具有前向安全性)
[22]

ECDH-ECDSA


ECDHE-ECDSA(具有前向安全性)

SRP


P S K英语Pre-shared key-RSA


DHE-P S K英语Pre-shared key(具有前向安全性)


ECDHE-P S K英语Pre-shared key(具有前向安全性)

SRP

SRP-DSS英语Digital Signature Algorithm

SRP-RSA


Kerberos


DH-ANON(不安全)


ECDH-ANON(不安全)


GOST R 34.10-94 / 34.10-2001英语GOST[23]

在RFC草案中提出


加密密码




































































































































































针对公开可行的攻击的密碼安全性
密碼协议版本状态
类型
算法
长度(bits)
SSL 2.0
SSL 3.0
[n 1][n 2][n 3][n 4]
TLS 1.0
[n 1][n 3]
TLS 1.1
[n 1]
TLS 1.2
[n 1]
TLS 1.3

分组密码及其加密方式

AES GCM[24][n 5]
256, 128
不適用不適用不適用不適用安全安全RFC中TLS 1.2的定義

AES CCM[25][n 5]
不適用不適用不適用不適用安全安全

AES CBC[n 6]
不適用不適用依赖于后期加入的措施依赖于后期加入的措施依赖于后期加入的措施不適用

Camellia GCM[26][n 5]
256, 128
不適用不適用不適用不適用安全不適用

Camellia CBC[27][n 6]
不適用不適用依赖于后期加入的措施依赖于后期加入的措施依赖于后期加入的措施不適用

ARIA GCM[28][n 5]
256, 128
不適用不適用不適用不適用安全不適用

ARIA CBC[28][n 6]
不適用不適用依赖于后期加入的措施依赖于后期加入的措施依赖于后期加入的措施不適用

SEED CBC[29][n 6]
128
不適用不適用依赖于后期加入的措施依赖于后期加入的措施依赖于后期加入的措施不適用

3DES EDE CBC[n 6][n 7]
112[n 8]不安全不安全不安全不安全不安全不適用

GOST 28147-89 CNT[23][n 7]
256
不適用不適用不安全不安全不安全不適用定义于RFC 4357

IDEA CBC[n 6][n 7][n 9]
128
不安全不安全不安全不安全不適用不適用从TLS 1.2标准中移除

DES CBC[n 6][n 7][n 9]

056
不安全不安全不安全不安全不適用不適用

040[n 10]
不安全不安全不安全不適用不適用不適用在TLS 1.1及之后版本禁止

RC2 CBC[n 6][n 7]

040[n 10]
不安全不安全不安全不適用不適用不適用

流加密

ChaCha20-Poly1305[34][n 5]
256
不適用不適用不適用不適用安全安全RFC中TLS 1.2的定義

RC4[n 11]
128
不安全不安全不安全不安全不安全不適用由RFC 7465定义所有版本TLS禁止

040[n 10]
不安全不安全不安全不適用不適用不適用
None
Null[n 12]
不適用不安全不安全不安全不安全不適用RFC中TLS 1.2的定義
标注


  1. ^ 1.01.11.21.3 RFC 5746 must be implemented to fix a renegotiation flaw that would otherwise break this protocol.


  2. ^ If libraries implement fixes listed in RFC 5746, this violates the SSL 3.0 specification, which the IETF cannot change unlike TLS. Fortunately, most current libraries implement the fix and disregard the violation that this causes.


  3. ^ 3.03.1 The BEAST attack breaks all block ciphers (CBC ciphers) used in SSL 3.0 and TLS 1.0 unless mitigated by the client and/or the server. See § Web browsers.


  4. ^ The POODLE attack breaks all block ciphers (CBC ciphers) used in SSL 3.0 unless mitigated by the client and/or the server. See § Web browsers.


  5. ^ 5.05.15.25.35.4 AEAD ciphers (such as GCM and CCM) can be used in only TLS 1.2.


  6. ^ 6.06.16.26.36.46.56.66.7 CBC ciphers can be attacked with the Lucky Thirteen attack if the library is not written carefully to eliminate timing side channels.


  7. ^ 7.07.17.27.37.4 The Sweet32 attack breaks block ciphers with a block size of 64 bits.[30]


  8. ^ Although the key length of 3DES is 168 bits, effective security strength of 3DES is only 112 bits,[31] which is below the recommended minimum of 128 bits.[32]


  9. ^ 9.09.1 IDEA and DES have been removed from TLS 1.2.[33]


  10. ^ 10.010.110.2 40 bits strength of cipher suites were designed to operate at reduced key lengths to comply with US regulations about the export of cryptographic software containing certain strong encryption algorithms (see Export of cryptography from the United States). These weak suites are forbidden in TLS 1.1 and later.


  11. ^ Use of RC4 in all versions of TLS is prohibited by RFC 7465 (because RC4 attacks weaken or break RC4 used in SSL/TLS).


  12. ^ Authentication only, no encryption.



数据完整性


訊息鑑別碼(MAC)用于对数据完整性进行认证。HMAC用于CBC模式的块密码和流密码,AEAD用于身份验证加密,例如GCM模式和CCM模式。























































數據的完整性
算法SSL 2.0SSL 3.0TLS 1.0TLS 1.1TLS 1.2TLS 1.3狀態

HMAC-MD5
RFC中TLS 1.2的定義

HMAC-SHA1


HMAC-SHA256/384


AEAD


GOST 28147-89 IMIT英语GOST (hash function)
在RFC草案中提出

GOST R 34.11-94英语GOST (hash function)


过程




双向证书认证的SSL握手过程。


以下简要介绍SSL协议的工作方式。客户端要收发几个握手信号:


  1. 发送一个「ClientHello」消息,内容包括:支持的协议版本,比如TLS1.0版,一个客户端生成的随机数(稍后用于生成“会话密钥”),支持的加密算法(如RSA公钥加密)和支持的压缩算法。

  2. 然后收到一个「ServerHello」消息,内容包括:确认使用的加密通信协议版本,比如TLS 1.0版本(如果浏览器与服务器支持的版本不一致,服务器关闭加密通信),一个服务器生成的随机数(稍后用于生成“对话密钥”),确认使用的加密方法(如RSA公钥加密),服务器证书。

  3. 当双方知道了连接参数,客户端与服务器交换证书(依靠被选择的公钥系统)。这些证书通常基于X.509,不过已有草案支持以OpenPGP为基础的证书。

  4. 服务器请求客户端公钥。客户端有证书即双向身份认证,没证书时随机生成公钥。

  5. 客户端与服务器通过公钥保密协商共同的主私钥(双方随机协商),这通过精心谨慎设计的伪随机数功能实现。结果可能使用Diffie-Hellman交换,或简化的公钥加密,双方各自用私钥解密。所有其他关键数据的加密均使用这个「主密钥」。数据传输中记录层(Record layer)用于封装更高层的HTTP等协议。记录层数据可以被随意压缩、加密,与消息验证码压缩在一起。每个记录层包都有一个Content-Type段用以记录更上层用的协议。


TLS


TLS利用密钥算法在互联网上提供端点身份认证与通讯保密,其基础是公钥基础设施。不过在实现的典型例子中,只有网络服务者被可靠身份验证,而其客户端则不一定。这是因为公钥基础设施普遍商业运营,电子签名证书通常需要付费购买。协议的设计在某种程度上能够使主从架构应用程序通讯本身预防窃听、干扰和消息伪造。


TLS包含三个基本阶段:


  1. 对等协商支援的密钥算法

  2. 基于非对称密钥的信息传输加密和身份认证、基于PKI证书的身份认证

  3. 基于对称密钥的数据传输保密

在第一阶段,客户端与服务器协商所用密码算法。当前广泛实现的算法选择如下:


  • 公钥私钥非对称密钥保密系统:RSA、Diffie-Hellman、DSA;

  • 对称密钥保密系统:RC2、RC4、IDEA、DES、Triple DES、AES以及Camellia;

  • 单向散列函数:MD5、SHA1以及SHA256。

TLS/SSL有多样的安全保护措施:


  • 所有的记录层数据均被编号,用于消息验证码校验。


参考文献




  1. ^ "SSL/TLS in Detail". Microsoft TechNet. Updated July 31, 2003.


  2. ^ Thomas Y. C. Woo, Raghuram Bindignavle, Shaowen Su and Simon S. Lam, SNP: An interface for secure network programming Proceedings USENIX Summer Technical Conference, June 1994


  3. ^ THE SSL PROTOCOL. Netscape Corporation. 2007. (原始内容存档于14 June 1997). 


  4. ^ Messmer, Ellen. Father of SSL, Dr. Taher Elgamal, Finds Fast-Moving IT Projects in the Middle East. Network World. [30 May 2014]. (原始内容存档于2014年5月31日). 


  5. ^ Greene, Tim. Father of SSL says despite attacks, the security linchpin has lots of life left. Network World. [30 May 2014]. (原始内容存档于2014年5月31日). 


  6. ^ POODLE: SSLv3 vulnerability (CVE-2014-3566). [21 October 2014]. 


  7. ^ Rescorla 2001


  8. ^ 8.08.18.2 Polk, Tim; McKay, Terry; Chokhani, Santosh. Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations (PDF). National Institute of Standards and Technology: 67. April 2014 [2014-05-07]. 


  9. ^ Dierks, T. and E. Rescorla. The Transport Layer Security (TLS) Protocol Version 1.1, RFC 4346. April 2006. 


  10. ^ Joseph A. Salowey; Sean Turner; Christopher A. Wood. TLS 1.3. IETF. 2018-08-10 [2018-08-11] (英语). 


  11. ^ pigsrollaroundinthem. TLS 1.3 下的 SNI 将让审查变得更困难. Solidot. 2018-08-16 [2018-08-27]. 


  12. ^ NSS 3.29 release notes. Mozilla Developer Network. February 2017. (原始内容存档于2017-02-22). 


  13. ^ Enable TLS 1.3 by default. Bugzilla@Mozilla. 16 October 2016 [10 October 2017]. 


  14. ^ Firefox — Notes (60.0). Mozilla. [2018-05-10] (美国英语). 


  15. ^ ProxySG, ASG and WSS will interrupt SSL connections when clients using TLS 1.3 access sites also using TLS 1.3. BlueTouch Online. 16 May 2017 [11 September 2017]. (原始内容存档于12 September 2017). 


  16. ^ wolfSSL TLS 1.3 BETA Release Now Available. info@wolfssl.com. 11 May 2017 [11 May 2017]. 


  17. ^ TLS 1.3 PROTOCOL SUPPORT. info@wolfssl.com. 


  18. ^ TLS 1.3 Draft 28 Support in wolfSSL. info@wolfssl.com. 14 June 2018 [14 June 2018]. 


  19. ^ RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2. Internet Engineering Task Force. [9 September 2013]. 


  20. ^ P. Eronen, Ed. RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer Security (TLS). Internet Engineering Task Force. [9 September 2013]. 


  21. ^ Gothard, Peter. Google updates SSL certificates to 2048-bit encryption. Computing. Incisive Media. [9 September 2013]. 


  22. ^ Sean Turner. Consensus: remove DSA from TLS 1.3. September 17, 2015. (原始内容存档于October 3, 2015). 



  23. ^ RFC 5288


  24. ^ RFC 6655


  25. ^ RFC 6367


  26. ^ RFC 5932


  27. ^ 28.028.1 RFC 6209


  28. ^ RFC 4162


  29. ^ On the Practical (In-)Security of 64-bit Block Ciphers — Collision Attacks on HTTP over TLS and OpenVPN (PDF). 2016-10-28 [2017-06-08]. (原始内容存档 (PDF)于2017-04-24). 


  30. ^ NIST Special Publication 800-57 Recommendation for Key Management — Part 1: General (Revised) (PDF). 2007-03-08 [2014-07-03]. (原始内容 (PDF)存档于June 6, 2014). 


  31. ^ Qualys SSL Labs. SSL/TLS Deployment Best Practices. [2 June 2015]. (原始内容存档于4 July 2015). 


  32. ^ RFC 5469


  33. ^ RFC 7905



外部链接




  • SSL/TLS/WTLS原理

  • SSL配置指南

  • SSL状态检查、格式转换、漏洞扫描工具


参见



  • 应用层协议协商

  • SSL加速

  • 扩展验证证书



Popular posts from this blog

京昆高速公路

【情報】本週珍珠商品重點:煉金時裝 + 艾港勞工宿舍!!

【攻略】陳戈-謝勒汗智慧的古書 (完成)