孫曉鵬
摘 要:SSL/TLS是應用非常廣泛的網絡安全協議,其目的是為通信雙方建立一個安全的信道,提供認證、機密性和完整性保護。DTLS基于TLS實現,為運行在數據報(UDP)之上的應用提供安全保護。TLS和DTLS目前的版本是1.2,已經使用了很長時間,在目前的應用環境尤其是物聯網通信中出現了一些弊端,因此新的TLS1.3和DTLS1.3協議草案提出了很多改進,本文簡要介紹了DTLS1.3協議及其給物聯網通信帶來的優化。
關鍵詞:TLS;DTLS;DTLS1.3;0-RTT;IoT;物聯網
中圖分類號:TP391.44 文獻標識碼:A 文章編號:1004-7344(2018)11-0264-02
引 言
SSL/TLS協議是應用非常廣泛的網絡安全協議,它的主要目的是在不可信的通信環境中為通信的雙方建立起一個安全的通道,能夠防止通信過程中被偷聽、避免消息被篡改和偽造。
SSL協議最初由網景公司設計實現,于1996年SSL3.0成為RFC標準,并在之后改稱為TLS(Transport Layer Security),版本號1.0(實際對應SSL3.1)。經過幾年的發展,2008年的RFC5246定義了TLS1.2版本,成為目前最廣泛使用的網絡安全協議。然而TLS1.2距現在也已過去了近十年,在此期間出現的針對TLS協議的攻擊與日俱增,網絡應用對于傳輸性能的要求也越來越高,TLS迫切需要一次更新,于是TLS1.3的制定也就備受關注。
1 DTLS介紹
SSL/TLS被設計運行在可靠連接(例如TCP)之上。但是在實際使用中,有部分應用對于時延或者帶寬比較敏感,例如VoIP和物聯網傳感器等,這些應用希望運行在數據報協議(例如UDP)之上。于是DTLS應運而生,它將TLS進行了一些改造,使得能夠運行在不可靠的數據報協議上。DTLS為這些基于數據報協議的應用提供了與TLS相當的機密性、完整性和認證保護。
DTLS的第一個版本是1.0,基于TLS1.1協議,于2006年發布。目前的版本是1.2,基于TLS1.2協議,2012年發布。DTLS沒有1.1版本,因為人們希望DTLS和TLS的版本號之后能夠同步,由此也可見DTLS和TLS兩者的緊密關1.1TLS1.2協議。
TLS1.2協議由四個子協議組成,分別是握手協議、密碼狀態變更協議、告警協議和記錄層協議,它們之間以及和傳輸層、應用層協議的關系如圖1。
TLS連接由客戶端發起,雙方通過握手協議協商協議版本、協商密碼算法和參數、并(可選的)認證對方身份。握手協議成功后雙方計算會話密鑰,通過密碼狀態變更協議通知對方開始加密。協商過程中產生的錯誤會通過告警協議通知對端。握手協議、密碼狀態變更協議、告警協議,以及對應用層協議的傳輸,都封裝在記錄層協議里。
1.1 握手協議
TLS1.2完整的握手流程如下:
其中,帶有*的消息是可選的,ChangeCipherSpec屬于密碼狀態變更協議。
握手協議通過ClientHello和ServerHello消息交換協議版本、密碼算法和相關參數,通過Certificate和CertificateVerify來驗證身份。如果握手成功完成,雙方會計算出通信所使用的會話密鑰,發送用會話密鑰加密的Finished消息來確認握手過程的完整性。
TLS1.2支持會話重用機制,如果雙方之前進行過完整的握手,那么通過在ClientHello和ServerHello中使用之前的會話ID來重用會話。會話重用的握手流程如下:
1.2 記錄層協議
記錄層協議用來承載上層協議,這里的上層協議除了包括TLS的握手和告警等協議外,還包括應用層協議。TLS記錄層會對上層協議做分段、加密等處理后發送,然后在接收方做解密和重組。記錄層協議的格式和處理方式如圖2。
其中類型、協議版本、負載長度這三個字段屬于記錄層協議的頭部,總共占用5個字節。
1.3 DTLS協議
為了適用于數據報協議,DTLS對TLS進行了一些改造,主要有以下幾點:
(1)握手協議頭部增加了序列號、分片偏移、分片長度三個字段,用于解決丟包和亂序問題,保證握手協議的可靠性。
(2)記錄層協議頭部在協議版本和負載長度之間增加了epoch和序列號兩個字段。epoch用于區分同一UDP“連接”中的多個DTLS會話,系列號用于解決丟包引起的HMAC計算錯誤以及防止重放攻擊。這兩個字段的添加使得DTLS記錄層頭部長度增長到了10個字節。
(3)為了一定程度上防御DoS攻擊,添加了HelloVerifyRequest消息來要求客戶端記錄狀態。
2 DTLS1.3的主要變化
DTLS1.3是基于TLS1.3制定的,因此DTLS1.3的主要變化在很大程度上包含了TLS1.3所作的修改。
2.1 TLS1.3的變化
相對于1.2版本,TLS1.3做了相當大的修改,主要有以下幾點:
(1)僅保留了AEAD(Authenticated Encryption with Associated Data)算法,去掉了所有其他的對稱加密和HMAC算法。
(2)增加了0-RTT模式,可以在握手協商的同時傳輸應用數據。
(3)去掉了RSA和DH相關的密碼套件,保證前向安全性。
(4)從ServerHello之后的消息就開始進行加密。
(5)密鑰生成算法有PRF變更為安全性更高的HKDF算法。
(6)不再使用握手消息中的協議版本協商機制,改為使用專門的協議版本選項。
TLS1.3完整的握手流程如下:
其中,+表示握手消息中附帶的選項,*表示可選的消息,{ }表示該消息使用發送端的握手密鑰加密,[ ]表示該消息使用發送端的業務密鑰加密。
完整協商完成后,服務端可以給客戶端發送若干會話票據(SessionTicket),每個會話票據代表了一個預共享密鑰,之后的協商可以使用會話票據指示的預共享密鑰來進行。在此基礎上新添加了0-RTT模式,0-RTT模式的協商流程如下:
0-RTT模式下客戶端在發起ClientHello消息的同時就可以發送應用層數據,這里的應用層數據會使用客戶端早期業務密鑰加密(用()包圍的消息),而早期密鑰會通過ClientHello中pre_shared_key選項的指示和之前完整協商產生的會話票據(SessionTicket)來計算。
2.2 DTLS1.3的改進
除了繼承TLS1.3的變化,DTLS1.3還做了一些其他改進,主要是在記錄層協議方面。
首先是修改了密文記錄層頭部的結構,去掉了協議版本字段,將epoch和序列號兩者壓縮合并為一個四字節的字段。
其次是定義了更短的DTLSShortCiphertext的密文記錄層結構,去掉了類型字段,進一步壓縮epoch和序列號字段為兩個字節,甚至去掉了長度字段,改為由下面的傳輸層(UDP)來指示DTLS記錄層消息的長度。
另外,DTLS1.2中的HelloVerifyRequest消息變更為TLS1.3中的HelloRetryRequest+cookie機制。對握手協議中的某些消息增加了ACK機制以保證可靠性。
3 DTLS協議和物聯網通信
物聯網尤其是窄帶物聯網(NB-IoT)對網絡通信的要求比較苛刻,大都需要低時延、高并發、很多時候要求使用UDP協議因為有些設備甚至沒有TCP協議棧。另外物聯網的安全需求也是顯而易見的,諸如智能門鎖、遠程控制等業務是必須要有安全性保護的。基于UDP的DTLS協議就非常適合物聯網通信場景,實際上,RFC7925專門定義了TLS/DTLS在物聯網環境下實施的規范。
目前的DTLS1.2協議完整握手需要2個RTT,會話重用需要1個RTT,但如果加上HelloVerifyRequest的話則分別都需要在加上一個RTT。在DTLS1.3中,完整握手只需要1個RTT,加HelloRetryRequest則需要2個RTT,而借助新增加了0-RTT模式,客戶端和服務端只需要首次進行完整握手,之后都可以在握手的同時就發送應用數據。就握手協商來說,DTLS1.3大大減少了連接建立的時延,使得物聯網應用可以在需要的時候更迅捷的進行聯系。
應用層數據需要封裝到DTLS記錄層中傳輸。在DTLS1.2中,記錄層頭部需要10個字節;而在DTLS1.3中,記錄層頭部減少至7個字節,如果使用了DTLSShortCiphertext則記錄層頭部僅需2個字節。DTLS記錄層頭部的縮小對物聯網應用影響巨大,因為物聯網本身傳輸的數據量大都很小,有時甚至只傳輸幾個字節,在這種情況下DTLS1.2記錄層頭部的10個字節就成為一定的流量負擔,而DTLS1.3則很大程度上減輕了這種負擔。
4 結 語
本文描述了TLS和DTLS協議的結構和握手流程,然后分析了DTLS1.3版本的變化,最后說明了這些變化對于物聯網通信的影響。
隨著物聯網的發展,通信的安全始終伴隨,而安全性保護如何盡量少的影響應用業務,是DTLS設計和實現人員的目標和努力方向。
參考文獻
[1]Dierks, T. and E. Rescorla, “The Transport Layer Security(TLS) Protocol Version 1.2”, RFC 5246, DOI 10.17487/RFC5246, August 2008.
[2]Rescorla, E. and N. Modadugu, “Datagram Transport Layer Security Version 1.2”, RFC 6347, DOI 10.17487/RFC6347, January 2012.
[3]Eric Rescorla,“The Transport Layer Security(TLS) Protocol Version 1.3”, draft-ietf-tls-tls13-26, Mar 2018.
[4]E. Rescorla and H. Tschofenig and N. Modadugu,“The Datagram Transport Layer Security(DTLS) Protocol Version 1.3”, draft-ietf-tls-dtls13~26,Mar 2018.
[5]沈若愚,盧盛祺,趙運磊.TLS1.3協議更新發展及其攻擊與防御研究[J].計算機應用與軟件,2017,11:049.
收稿日期:2018-2-20