黃杰彬,王立斌
(華南師范大學 計算機學院, 廣東 廣州 510631)
密鑰交換(Key Exchange,KE)協議是確保互聯網安全的核心構件之一,用于公開不可信的網絡信道下通信雙方進行會話密鑰協商。在保障安全性的前提下,效率一直是該類協議的主要設計目標之一[1-3]。此前,協議主體的加密運算過程是引發通信延遲產生的主要原因,但隨著計算設備和相關算法的不斷優化,此類影響已大幅降低。進而,有效負載數據發送前建立臨時會話密鑰所需的往返時間(Round-Trip Time,RTT)成為協議效率考量的重要指標。
傳統的認證密鑰交換(Authenticated Key Ex-change,AKE)協議設計往往具有較高的RTT時延。如廣泛使用的傳輸層安全(Transport Layer Secu-rity,TLS)協議標準[2],其舊版(TLS1.0,1.1和1.2)的握手協議需要2-RTT時延進行臨時會話密鑰協商。即使是經典的高效AKE協議HMQV[4],其建立臨時會話密鑰也需要兩個報文發送時間,即1-RTT的傳輸時延。
0-RTT密鑰交換協議是確保網絡通信安全和高效的重要密碼學構件。該類協議允許客戶端在會話發起的首個報文時間內建立臨時會話密鑰,因此,無需任何報文交換便可加密傳輸有效負載數據,從而最小化通信連接時延。QUIC(Quick UDP Internet Connection)協議[5]是首個實際應用的0-RTT密鑰交換協議,得到了學者們的廣泛關注并開展了許多相關研究[1-3,5-10]。隨后,TLS1.3[2]標準制訂明確了當前密鑰交換協議的主要設計目標有實現零往返時長的密鑰交換協議、協議必須具備前向安全性及舊有協議應遷移至更高效的密碼體制等3個方面。
在后量子時代,RSA問題、Diffie-Hellman(DH)問題等傳統的數論難題,存在概率性多項式時間的求解算法[11],導致現有的0-RTT密鑰交換協議設計不具備后量子安全性。
強安全的0-RTT密鑰交換協議分析與設計的主要工作內容包括以下3個方面。
1)分析總結該領域當前的發展狀況,包括協議設計和安全模型定義等,指出若干亟待解決的問題。
2)分析當前存在的問題,給出一種0-RTT密鑰交換協議的強安全模型定義。
3)針對后量子安全的0-RTT密鑰交換協議設計,在新模型的指導下,給出格密碼體制下該協議設計的若干思路。
根據協議的構造方式不同,現有0-RTT密鑰交換協議可分為基于Diffie-Hellman(DH)密鑰交換的0-RTT密鑰交換協議、基于預共享密鑰(Pre-share Key)模式的0-RTT密鑰交換協議和基于可穿刺加密(Puncturable Encryption)協議的0-RTT密鑰交換協議等3類。
QUIC協議[5]是基于DH密鑰交換的0-RTT密鑰交換協議。該協議假設客戶端在實際的密鑰交換進行前,通過之前與服務器發生的會話,已緩存了相關的服務器配置信息。該配置信息實際包含一個由服務器簽名認證的半靜態DH公鑰,并且對應秘密指數在有效期內(通常為兩天)存儲于服務器本身。通信發生時,客戶端基于該半靜態DH公鑰可實時建立起臨時會話密鑰K1,用于首輪通信內有效負載數據(payload)的對稱認證加密(Authenticated Encrypt,AE),達到0-RTT通信時延的要求。由于K1的建立未有服務器生成的臨時信息參與,不具備前向安全性,攻擊者通過后續的服務器秘密指數泄露可計算出該密鑰(會話結束后的相當長時間內),解密監聽協議報文。因此,后續協議過程需要將通信會話密鑰升級到前向安全的主密鑰K2。具體協議過程如圖1所示。

圖1 QUIC協議
隨后,Hale和Jager等人基于非交互式密鑰交換(Non-Interactive Key Exchange,NIKE)協議和數字簽名,給出了0-RTT密鑰交換協議的首個通用構造方案[1]。但該方案使用的NIKE構件在實現上依賴經典密碼體制的Paring結構,因此,通用性較差,在其他密碼體制下實例化較為困難。
TLS1.3的0-RTT握手協議[2-3]基于預共享密鑰模式設計,本質上是0-RTT的會話恢復協議。該協議在通信發生時,首先使用1-RTT的密鑰交換協議建立會話密鑰,以此進一步協商出Pre-share Key。該密鑰有效期與會話時長綁定,并在會話重用時直接用于本輪通信數據的加密傳輸。同樣的,該類協議存在前述的0-RTT密鑰前向安全性問題,因此,在后續的協議過程中,將根據獲取的報文信息升級到前向安全的主密鑰K2。
2017年,Günther和Hale等人針對該類協議0-RTT 密鑰的前向安全性問題和重放攻擊問題,提出了基于可穿刺加密的一次前向安全密鑰交換協議(Forward-Secret One-Pass Key Exchange Protocol,FSOPKE)[6]。該協議指出,解決問題的關鍵在于服務器存儲和處理密鑰的方式,并基于層次化身份加密(Hierarchical Identity-based En-cryption,HIBE)協議和一次簽名(One-Time Sig-nature)方案,提出了實現FSOPKE的通用構造方案。該方案在保持公鑰不變的情況下,私鑰信息實質上是鏈式的二叉樹,并且在每次密鑰協商后更新(舍棄當前解密節點,保留剪枝后的其余節點信息),使相同報文后續無法重新解密。該方案確實有效解決了0-RTT密鑰交換協議首輪通信的重放攻擊問題和前向安全性問題,但要求通信雙方建立起同步時鐘,以避免多次通信后服務器的長期私鑰存儲過度增長的問題。
2018年,Derler和Jager等人基于布隆過濾器加密(Bloom Filter Encryption)給出了一種效率改進的FSOPKE通用構造方案[7],但該方案密鑰協商失敗的概率是不可忽略概率的。
目前,基于可穿刺加密的0-RTT 密鑰交換協議仍只是概念上的啟發性工作,盡管其明確了完善前向安全性和抗重放攻擊是可行的安全目標,但該類協議目前效率較低,并且同步時鐘維護在現實計算環境中難以大范圍實現。
安全模型是分析協議安全性、指導協議設計的基礎理論工具,具體定義了協議的理論運行環境、與攻擊者能力匹配的可查詢預言機和協議的具體安全目標(通常基于不可區分性安全游戲)。借助安全模型的理論框架,協議安全性可與相關難題求解的困難性建立規約,從而滿足現代密碼學可證明安全的理論需要。因此,迫切需要通用和面向實踐的0-RTT密鑰交換安全模型。
2014年,Fischlin和Günther旨在分析QUIC協議的安全性,提出了用于多階段密鑰交換協議安全性分析的安全模型定義[8]。該模型主要考究通信過程中,信道安全屬性變化的情況下密鑰交換協議和對稱加密協議組合的安全性。該模型具有較高的通用性,可用于TLS1.3握手協議的安全性分析。但為描述各類通信階段,該模型運行環境需要維護大量階段狀態信息,規范細節十分復雜。一方面其安全證明不直觀且易于出錯;另一方面掩蓋了0-RTT密鑰交換協議的核心構造思想,不適合指導具體的設計。該模型后續被進一步拓展[9],用于分析多階段密鑰交換協議的重放攻擊問題。
2016年,Krawczyk和Wee針對OPTLS協議定義了新的0-RTT密鑰交換安全模型[2]。該模型融合了經典雙邊認證密鑰交換協議的Canetti-Krawczyk安全模型[12](CK模型),但將安全性分析劃分為0-RTT密鑰和主密鑰兩個階段,不能考究各密鑰的相關性,無法整體分析協議的安全性。
2017年,Hale和Jager定義了一個簡潔0-RTT 密鑰交換安全模型[1],主要針對現有單邊認證形式為主體的0-RTT密鑰交換協議。保持結構清晰的前提下,該模型完善地考慮了該類協議的主要安全目標,強調了協議整體安全的強密鑰獨立性(Strong Key Independence)和主密鑰的前向安全性,但在信息泄露安全上刻畫較為薄弱,未考慮實踐計算環境下存在的中間信息泄露問題。
2018年,Günther和Hale等人針對FSOPKE協議的提出建立了新的安全模型[6]。該模型針對性較強,主要面向基于可穿刺加密的完善前向安全性0-RTT密鑰交換協議設計。
綜合以上,現階段的0-RTT密鑰交換安全模型定義或過度考慮適用性,存在模型定義過于復雜的問題;或針對性過強,僅適合某單一類型的0-RTT密鑰交換協議分析。Hale和Jager等人提出的安全模型[1]盡管已有較好的通用性并適合指導具體的協議設計,但該模型沒有很好地對攻擊者信息泄露能力進行刻畫,其存在對攻擊者能力限定過強,與實踐攻擊情形不匹配的問題,仍具有改進的空間。
首先給出服務器單邊認證形式下,0-RTT密鑰交換協議的概念定義。
定義1服務器單邊認證的0-RTT密鑰交換協議由以下4個算法構成。
1)Gen(1λ)→(Kpj,Ksj)。該算法為概率性多項式時間算法,用于生成服務器Sj的公私鑰對,輸入安全參數λ,輸出公私鑰對(Kpj,Ksj)。



針對0-RTT密鑰交換協議,Hale和Jager等人定義了簡潔0-RTT密鑰交換安全模型[1](以下簡稱HJ模型),其本質是傳統的一輪AKE安全模型的變體。該模型描述了該類協議的主要安全目標,并強調了強密鑰獨立性,即0-RTT臨時會話密鑰K1和K2相互獨立,其中一個密鑰泄露不影響另一密鑰的安全性,以及主密鑰K2的前向安全性。
不同于傳統AKE安全模型,HJ模型的會話標識單獨使用客戶端預言機或服務器預言機表示,從而使會話歸屬方清晰且會話標識更加簡單。但是在模擬執行環境時,客戶端預言機需要維持相關的中間狀態信息以記錄當前的匹配服務器,而且僅能保存當前會話狀態,之前的會話信息將丟失,不便于匹配會話的概念表達。該種標識方式在HJ模型中是合理的,因為其安全定義中明確攻擊者挑戰服務器密鑰時,必須有真實客戶端預言機的會話信息與之匹配。這意味著攻擊者僅能對首輪協議報文進行被動攻擊,否則是無意義的。實際上,0-RTT密鑰交換協議首輪報文信息內包含有加密的負載數據,攻擊者通過部分篡改報文的主動攻擊方式存在獲取該數據的可能。因此,該定義不能很好地刻畫攻擊者在現實環境下的攻擊能力。
在信息泄露安全定義上,HJ模型未完善考慮現實環境中存在的信息泄露問題,攻擊者不具備State Reveal的預言機查詢功能,與現實環境中攻擊者通過木馬病毒等方式入侵實體監聽內存信息的攻擊方式不匹配。除此之外,該模型在攻擊者挑戰服務器密鑰信息時,安全定義上未考慮攻擊者是否對服務器發起過Corrupt查詢,在會話新鮮性的定義上不嚴謹。
新安全模型旨在解決上述HJ模型存在的相關問題,以指導更面向實踐的強安全0-RTT密鑰交換協議設計。
針對信息泄露安全的形式化定義,首先明確現實計算環境中主要存在的信息泄露方式,即實踐網絡環境下,攻擊者通過木馬病毒等方式入侵通信實體可監聽內存獲取協議中間計算信息,或通過邊信道攻擊等方式獲取當前會話密鑰,或攻擊者為內部人員,具有某一實體的長期公私鑰信息。
指導抗信息泄露的0-RTT密鑰交換協議設計,需要精確刻畫該類威脅的強安全模型,明確信息泄露安全的形式化定義。傳統雙邊認證密鑰交換協議的CK模型[12]在給予攻擊者通信鏈路控制能力的同時,還定義了攻擊者獲取信息泄露的3種預言機查詢能力。
1)StateReveal。攻擊者指定某未完成會話的會話標識,獲得該會話的中間狀態信息(不包括長期密鑰信息)。該預言機匹配攻擊者入侵通信實體,監聽內存協議中間狀態信息過程。
2)KeyReveal。攻擊者指定某完成會話的會話標識,獲得該會話達成的臨時協商密鑰。該預言機匹配現實場景下的會話密鑰泄露。
3)Corrupt。攻擊者指定某一通信實體,獲得長期密鑰信息在內的所有會話信息,并可偽裝成該用戶。該預言機描述現實中攻擊者為內部人員的攻擊方式。
區別于傳統密鑰交換協議的雙邊認證形式,現有0-RTT密鑰交換協議主要是服務器單邊認證形式,客戶端不具備長期的公私密鑰信息。因此,引入以上的信息泄露安全定義時,應根據單邊認證的協議形式適應性修改。如果定義太強,則難以構造滿足安全定義的協議設計;反之太弱,則無法指導抵抗實踐攻擊類型的協議設計。因此,需遵循原則:會話密鑰泄露不影響其他會話安全:包括0-RTT臨時密鑰K1和主密鑰K2;中間狀態值泄露不影響到其他會話安全,如臨時密鑰信息和部分中間計算值;服務器長期私鑰泄露不影響其泄露之前發生會話的安全性。
基于HJ模型,給出一種新的0-RTT 密鑰交換強安全模型。新模型沿用CK模型的符號標記以便于匹配會話等相關概念表述,在保留強密鑰獨立性和主密鑰前向安全性的屬性刻畫前提下,允許攻擊者通過StateReveal預言機查詢獲取服務器的中間計算信息。此外,新模型允許攻擊者主動攻擊客戶端發送的首輪協議報文,以更精確地刻畫實際攻擊情形。
運行環境令λ為安全參數,將客戶端和服務器模擬為概率性多項式時間圖靈機。假設客戶端數量d=poly(λ),標記為Ci,i∈[d]。服務器數量l=poly(λ),標記為Sj,j∈[l]。各服務器均擁有一對長期的公私鑰(Kpj,Ksj),j∈[l]。客戶端不具有長期公私鑰。客戶端可獲取各服務器的長期公鑰Kp1,…,Kpl。
會話客戶端Ci被初始化執行一個0-RTT協議實例,稱為會話。
會話標識使用四元組(Pa,Pb,Mout,Min)標識會話,其中,P分別表示客戶端Ci和服務器Sj,Pa是會話的擁有者,Pb為對等方,Mout表示Pa發送給Pb的報文,Min表示Pa接收到來自Pb的報文。每個會話由唯一的會話標識確定。
匹配會話會話sid=(Pa,Pb,Mout,Min)和會話sid*=(P′b,P′a,Mout′,Min′)為匹配會話,當且僅當以下條件成立
Pa=P′a且Pb=P′b
Mout=Min′且Min=Mout′
攻擊者基本能力對概率性多項式時間攻擊者A,使用查詢Send預言機的方式形式化定義攻擊者控制通信鏈路的能力。
1)Send(Ci,Sj)。攻擊者在客戶端Ci處激活會話初始化,Sj為該會話對等方,客戶端Ci根據協議生成首輪的協議報文,返回客戶端Ci發出的報文信息或錯誤信號“⊥”。
2)Send(Sj,Ci,Mout)。攻擊者在服務器端Sj激活會話,其中,Mout是客戶端Ci發出的協議報文,根據協議執行過程,返回服務器Sj發出的報文信息或錯誤信號“⊥”。
3)Send(Ci,Sj,Mout,Min)。攻擊者激活客戶端Ci處會話,其中,Min和Mout分別是服務器Sj的接收報文和響應報文。根據協議定義,客戶端Ci完成會話或返回錯誤信號“⊥”。
攻擊者獲取信息泄露此處形式化定義概率性多項式時間攻擊者A獲取信息泄露預言機,具體如下。
1)KeyReveal(sid,tmp)。依攻擊者發起查詢,檢查該階段會話sid擁有者是否生成臨時會話密鑰K1。若是則返回K1,否則返回錯誤信號“⊥”。
2)KeyReveal(sid,main)。依攻擊者發起查詢,檢查該階段會話sid擁有者是否生成主密鑰K2。若是則返回K1,否則返回錯誤信號“⊥”。
3)StateReveal(sid)。返回會話sid擁有者協議執行過程中的中間狀態信息,包括臨時隨機數和中間計算值。
4)Corrupt(Sj)。根據輸入的服務器身份標識Sj,返回該服務器的長期私鑰KSj。
與此同時,攻擊者A為區分隨機密鑰和真實會話密鑰,進行以下某一查詢,且攻擊者僅能選擇其中一種查詢。
1) Test(sid,tmp)。攻擊者僅能發起一次該查詢。若會話sid擁有者的臨時會話密鑰K1為空,或會話sid擁有者為服務器且與對等方臨時會話密鑰K1不等,返回錯誤信號“⊥”;否則,隨機選取b←{0,1},當b=0時,返回會話擁有者根據協議執行計算得到的臨時會話密鑰K1。當b=1時,則返回與臨時會話密鑰K1等長同分布的隨機比特串K′1。
2)Test(sid,main)。攻擊者只能發起一次該詢問。若會話sid擁有者的主密鑰K2為空,返回錯誤信號“⊥”;否則,隨機選取b←{0,1},當b=0時,返回會話擁有者根據協議執行計算得到的主密鑰K2。當b=1時,則返回與臨時會話密鑰K1等長同分布的隨機比特串K′2。
現實中的攻擊行為可通過上述預言機查詢的組合和限制進行描述。下面先給出會話新鮮性的形式化定義。


2)如果攻擊者A發起Test(sid,main)查詢,則有:攻擊者A未查詢KeyReveal(sid,main),或sid*存在且未查詢KeyReveal(sid*,main);攻擊者A未查詢StateReveal(sid),或sid*存在且未查詢KeyReveal(sid*);攻擊者A在Test(sid,main)查詢發起前,未對會話sid的服務器端Sj發起過Corrupt(Sj)查詢。

定義攻擊者獲得該安全游戲勝利的優勢為
0-RTT密鑰交換安全對0-RTT密鑰交換協議∏,若任意的概率性多項式時間攻擊者A,獲得上述安全游戲勝利的概率為關于安全參數λ的可忽略函數negl(λ),即
則稱協議∏是0-RTT密鑰交換安全的。
針對現有通用構造過度依賴經典密碼體制Paring結構的問題,基于強安全模型,提出一種新的通用構造方案,以期具有更好的通用性和高效實例化可能,用于指導后量子安全的強安全0-RTT密鑰交換協議設計。
基于Hale和Jager等人的0-RTT密鑰交換通用構造[1],提出一種新的通用構造方案。
Hale與Jager等人的通用構造方案使用了“NIKE+數字簽名”的協議構件進行設計,并且在HJ模型[1]下可證明安全。然而,該方案使用的NIKE構件在實現上依賴經典密碼體制的Paring結構,存在效率較低、難以實例化的問題[13]。其次,在該協議中,服務器的簽名信息未與客戶端發送的臨時公鑰綁定,在強安全模型下存在平行會話攻擊:攻擊者通過StateReveal查詢可獲取服務器端的中間計算信息,包括本次通信中服務器生成的臨時私鑰、臨時公鑰和認證該臨時公鑰的服務器簽名,借此可偽裝為服務器與其他客戶端建立通信。該種攻擊方式一方面難以發現,另一方面泄露了后續會話長期使用的主密鑰,因而危害性較大。
針對NIKE構件通用性較差的問題,并且考慮該類協議在客戶端不具備長期公私鑰情況下,通過單個協議報文協商0-RTT會話密鑰的協議需求,新構造將使用各密碼體制下均易于構造的密鑰封裝機制(Key Encapsulation Mechanism,KEM)作為首輪通信協議的主要設計構件。
在新協議中,由服務器返回的通信報文需要服務器進行身份認證并建立前向安全的主密鑰,因此,新構造將使用文獻[14]的密鑰封裝機制(Signcryption KEM,SC-KEM)作為該輪協議的主要設計構件,原因是上述討論的平行會話攻擊實質上與簽密方案(Signcryption Scheme)的多方安全問題[15-16]一致,可通過加密過程引入通信雙方身份標識解決。但是,廣義密碼學定義的KEM僅可封裝隨機的臨時會話密鑰,不能指定加密內容,嚴格意義上無法滿足該條件,而SC-KEM在安全模型定義上已考慮了多方安全[17-19],可用于解決該問題。
新模型允許客戶端對首輪會話發起主動攻擊,為避免攻擊者通過部分修改首輪協議信息(簡單替換客戶端臨時生成的公鑰)構造出新鮮會話并查詢KeyReveal預言機直接獲取0-RTT會話密鑰,新構造將使用抗碰撞的哈希函數對首輪報文信息進一步綁定。

1)Gen(1λ)→(Kp,Ks)。給定安全參數1λ,服務器使用KEM以及SCKEM的密鑰生成算法,按以下方式生成長期公私鑰,即


Ktmp←KDEC(KKEMsj,Ctmp)
注意,如果Ktmp=⊥,即協商報文不合法,服務器Sj則終止該會話,不生成會話密鑰。

注意,如果Kmain=⊥,即協商報文不合法,客戶端Ci則終止該會話,不生成會話密鑰。
相比于Hale和Jager等人的構造,新方案使用的KEM和SCKEM均是易于構造的。其中,SCKEM可直接通過任意的簽密方案進行實例化,如簡單的“公鑰加密+數字簽名”樸素構造,此外也可通過“Tag-KEM+數字簽名”方案[19]進行實現。
結合通用構造方案,提出格密碼體制下后量子安全的0-RTT密鑰交換協議的若干設計思路。
格密碼(Lattice Cryptography)作為近年發展成熟的基礎密碼理論,有成為后量子密碼技術標桿的趨勢。在計算上,格密碼通常僅涉及簡單的整數加法乘法運算,數學概念簡單直觀,計算效率優勢明顯。安全層面上,格上的相關難題尚不存在可預見的結構弱點,量子計算下也是求解困難的。
經典格密碼體制下的主流協議,主要基于平均情況困難問題的短整數解問題(Short Integer Solution Problem,SIS)和帶誤差學習問題(Learn-ing with Errors Problem,LWE)設計,均可量子規約到格上最壞情況困難問題的最短線性無關向量問題,安全性基礎完備,但存在通信數據和密鑰體積較大的先天性劣勢。目前,高效格密碼協議設計主要基于模短整數解問題(Module-SIS Problem,MSIS)和模帶誤差學習問題[20-21](Module-LWE Problem,MLWE)。該類難題盡管暴露了更多的結構特征,但仍未有多項式時間的量子求解算法,存儲和運算上的解決方案也更加高效。
根據前文討論,實例化格密碼體制的0-RTT密鑰交換協議需重點關注該體制下KEM和SC-KEM協議的具體實現。其中,SC-KEM可通過公鑰加密方案、KEM和數字簽名等構件實現,并且在格密碼體制下已有一些高效方案被提出[22-26]。參考當前由美國國家標準和技術研究所(National Institute of Stan-dards and Technologies)推進的后量子密碼標準競選,目前在格密碼體制下已有多種高效的KEM和數字簽名方案,如基于LWE的實用Frodo KEM[27],基于MLWE設計的Kyber[28](包含公鑰加密方案和KEM),基于MSIS及MLWE的高效簽名方案CRYSTALS-Dilithium[26]等,均可用于通用構造的實例化。
實例化格密碼體制下的數字簽名方案時,可參考基于格陷門算法的Hash and Sign通用構造[29]。此外,新型的Gadget陷門算法[30-31]由于具有多種效率優化策略并且適配多項式環結構格,可用于上述的算法優化。
分析和總結了現有0-RTT 密鑰交換協議的研究工作,設計了一種0-RTT 密鑰交換安全模型,相對于現有的模型,該模型對攻擊者的能力刻畫更精確。在該模型的指導下,提出了一種0-RTT密鑰交換協議的通用構造,并給出了格密碼體制下協議設計的若干思路。基于此,該領域仍存在一些問題有待解決,將是今后工作推進的重點,總結如下。
1)后量子安全協議設計。目前僅提出了格密碼體制下的若干協議設計思路,仍未具體實例化。在確保高效和安全性的基礎上,應進一步考慮其他后量子安全密碼體制下的具體設計策略,并給出緊致的安全性規約證明。
2)量子計算下的安全模型設計。現有安全模型未考慮量子環境下的攻擊者能力,應通過引入量子隨機預言機[32]等方式進一步強化0-RTT 密鑰交換協議的安全模型形式化定義。
以上研究對后量子時代的網絡通信安全具有重要影響和實踐意義,相關工作有必要適時展開,為量子時代的網絡通信提供更強而有力的理論保障。