北方工業(yè)大學信息學院 門凱旋 李天昊 王廣碩 姚辰宇 盛愷曦
密碼學技術已廣泛應用于社會中的各個領域,在重要的網絡系統(tǒng)和信息平臺也發(fā)揮著不可或缺的作用。自2019年10月26日《中華人民共和國密碼法》頒布以來,作為網絡空間安全國家戰(zhàn)略的基石,密碼學技術得到了越來越多的社會關注,密碼也逐漸的與人們的生活不可分割。密碼學的安全性本質上是密鑰的安全性,但是公開信道上的密鑰傳輸并不能保證完全不被竊取和篡改。為達到保護密鑰安全傳輸的目的,密鑰協(xié)商協(xié)議這一概念應運而生。X3DH密鑰協(xié)商協(xié)議以DH協(xié)議為基礎,為異步通信而設計。在DH協(xié)議的基礎上了實現了轉發(fā)保密性和加密可否認性。為了使用戶能夠通過操作實現更加清楚地了解X3DH協(xié)議的原理和過程,本文面向用戶設計了一個可以具體操作和展示X3DH 密鑰協(xié)商協(xié)議過程的演示系統(tǒng)。該系統(tǒng)實現了X3DH密鑰協(xié)商協(xié)議中的三方交互過程,使用戶可通過該系統(tǒng)模擬X3DH協(xié)議的實現過程,從而獲得更為深刻的理解。
密碼技術是保障網絡安全和信息安全的基礎支撐和核心技術。密碼學是研究編制密碼和破譯密碼的技術科學,并且它具有機密性、完整性和不可否認性。自2020年《中華人民共和國密碼法》實施以來,社會公眾密碼安全意識不斷提高。直到今日實施近兩周年,密碼學領域發(fā)展日新月異,科研方面碩果累累,公民的個人信息得到強有力的保障。
為了解決通信安全問題,密鑰協(xié)商協(xié)議的概念被提出。所謂密鑰協(xié)商協(xié)議主要是為了能夠在通信過程中產生臨時的會話密鑰,進而進行保密通信。采用的加密技術使用了密碼學原理,將傳送的密鑰在傳遞時從發(fā)送方進行加密,之后在接收方進行解密。主要的協(xié)商過程是由兩個或者多個實體參與,這幾個實體共同建立會話密鑰,任何一個參與會話的實體都將會對結果產生影響。一般的密鑰協(xié)商協(xié)議需要至少兩個參與者,協(xié)議能夠給參與通信的雙方在公開的信道提供一種安全的通信方式。
X3DH協(xié)議是被稱為“擴展三重的Diffie Hellman”密鑰協(xié)商協(xié)議,在DH密鑰協(xié)商協(xié)議的基礎上增加了更多的公鑰參數用來提高自身的安全性,其本質是在基于公鑰進行身份驗證的雙方之間建立共享型密鑰。
X3DH協(xié)議支持在Bob離線的情況下進行密鑰協(xié)商。首先,需要接收方Bob在通信建立之前先連接服務器,將自己的身份密鑰等公鑰材料進行存儲。當發(fā)送方Alice想要與接收方Bob進行通信時,需要先連接服務器獲取Bob預先上傳的公鑰包,供后續(xù)的密鑰協(xié)商過程使用。在這個過程中不需要Bob參與。Alice根據X3DH協(xié)議過程生成會話密鑰后,會將其與初始消息一并發(fā)送給Bob。至此,便完成了第一輪的X3DH通信過程。
以下部分將接收方稱為Bob,發(fā)送方稱為Alice:
(1)Bob首先產生自己的身份認證公鑰IK-B,之后產生預共享公鑰SPK-B,并且生成預共享公鑰的簽名Sig(IK-B,Encode(SPK-B))和一組Bob的一次性于共享公鑰(OPK-B1、OPK-B2、OPK-B3……);
(2)Bob將這些公鑰包發(fā)送給服務器,服務器端進行保存;
(3)Alice在向Bob方發(fā)送消息前,進行密鑰協(xié)商的操作:先要連接服務器,下載Bob預先上傳至服務器的公鑰包;
(4)在獲取到Bob的公鑰包之后,Alice用預共享公鑰包進行驗證,此處的驗證是對Alice對收到的預共享公鑰的簽名進行驗證,如果驗證失敗則終止協(xié)議;
(5)驗證通過之后,Alice方生成一個臨時密鑰對EK;
(6)如果公鑰包中中不包含一次性預共享,Alice方會進行如下的計算:
若在公鑰包中含有一次性預共享公鑰,則計算時還需要多加一個步驟:
(7)在進行SK的計算之后,Alice方要進行對剛才生成過的臨時密鑰對進行刪除, 并且也要刪除掉進行計算的DH值。之后按照以下過程進行計算:AD=Encode(IK-A)||Encode(IK-B)在進行AD的計算之中,可以自行進行添加一些附加信息;
(8)Alice方正式開啟通訊,Alice向Bob發(fā)送的初始信息中含有IK-A,EK-A,初始密文(使用AEAD);
(9)Bob在上線之后會接收到Alice所發(fā)送的消息包,Bob會從消息中檢索到Alice的身份公鑰IK-A和臨時密鑰對EK-A,并且加載Bob的IK-B對應的私鑰,以及Alice所使用的SPK-B和OPK-B(若存在),按照上文中提到的DH算法計算三次或者四次的DH,之后刪除計算的DH中間值;
(10)計算得到了與Alice方相同的SK的值,解碼加密的AEAD密文(若存在OPK-B的話要及時進行刪除對應的私鑰)若解碼成功,則消息在Bob處可以進行發(fā)送。之后,Bob還可用之前生成的SK或者SK的密鑰來進行與Alice的通信。
為了實現整個X3DH密鑰協(xié)商協(xié)議,首先需要先產生橢圓曲線公鑰。本系統(tǒng)實現協(xié)議實現時使用的是x25519橢圓曲線產生的公鑰包,Curve25519曲線是由著名的密碼學家Bernstein于2005年提出的,在2013年開始被廣泛運用。Curve25519是基于Montgomery曲線形式,不同于國際的NIST P曲線和國密算法的SM2,這兩個都是基于Weierstrass形式,而Montgomery曲線形式是在1987年被提出的,見式(1)
另一種Edwards的曲線,見式(2)
Curve25519被提出后最初是被用來實現ECDH密鑰協(xié)商協(xié)議使用的,可以提供128bit的安全性。這樣的設計操作使得Curve25519有著參數選取明確,不容易受到隨機數生成器的攻擊和時序攻擊的影響,而且能夠接受任意的32字節(jié)的字符串作為公鑰。
Curve25519曲線使用的是Montgomery曲線,GF(2-19),是基于素數,他的函數形式見式(3)
在計算中僅需要每個點的x坐標,y坐標可以忽略掉,這可以避免側信道攻擊,是世界上目前最快速的橢圓曲線的密碼算法之一。
本系統(tǒng)分為三方的界面展示,即作為用戶需要運行處三個不同的界面,分別是發(fā)送方界面,接收方界面和服務器界面,在打開界面之后需要運行服務器界面中的打開服務器才能繼續(xù)進行后續(xù)的協(xié)議的操作。
主要的功能設計如圖1所示。
圖1 系統(tǒng)具體功能模塊圖Fig.1 Diagram of specific functional modules of the system
協(xié)議的主要流程大致分為三個步驟:
(1)首先,接收方(Bob)先要自行連接服務器,想服務器發(fā)起請求,并且將自己產生的公鑰包出存在服務器;
(2)之后,當發(fā)送方(Alice)想要與接收方(Bob)進行通信時,需要連接服務器取得接收方(Bob)的公鑰包進行驗證,并且發(fā)送初始消息;
(3)接收方(Bob)接受消息并且驗證后開始通信
其中,X3DH協(xié)議的具體流程如圖2所示。
圖2 X3DH密鑰協(xié)商協(xié)議具體內容Fig.2 Specific contents of X3DH key agreement protocol
X3DH密鑰協(xié)商協(xié)議演示系統(tǒng)的界面如圖3所示??梢愿鶕存I的提示進行操作,操作步驟以及產生密鑰對、DH值、SK、EK的值會對應進行顯示。功能鍵里面包括生成IK-A,向服務器請求公鑰包,驗證簽名(EK-A),DH公鑰密鑰(SK),計算關聯數據(AD),發(fā)起會話和連接Bob。
圖3 發(fā)送方和接收方演示Fig.3 Demonstration of sender and receiver
其中,用戶在點擊“生成IK-B”按鈕后,本系統(tǒng)將逐次生成SPK-B和Sig(IK-B,Encode (SPK-B))等,并隨之在在右側顯示區(qū)中顯示出相應字符串;所需公鑰包生成完畢后,點擊“上傳公鑰包”按鈕即可連接服務器,完成公鑰包的上傳;當Bob欲和Alice進行交互時,點擊“接受IK-A”按鈕,請求Alice的身份公鑰并進行驗證,驗證成功后,即可成功建立通訊。(在整個通信過程中,隨著發(fā)送消息的過程不同,發(fā)送方和接收方的身份會隨之轉換。對后續(xù)過程中轉變?yōu)榘l(fā)送方的Bob而言,所需要的流程與Alice相同。)開啟會話之后,Bob的界面可以顯示關于Alice方所發(fā)送的內容。
服務器端Server的界面如圖4所示。
圖4 服務器端Server界面Fig.4 Server interface
本文設計的X3DH密鑰協(xié)商協(xié)議演示系統(tǒng),能極大程度上幫助用戶理解X3DH密鑰協(xié)商協(xié)議的原理以及流程。用戶能夠從中了解到密鑰協(xié)商協(xié)議的作用,對協(xié)議的交互流程能夠獲得更加直觀的認識,為用戶研究X3DH密鑰協(xié)商協(xié)議帶來幫助,具有較高的實際應用價值。