專利名稱:一種Web通信加密方法
技術領域:
本發明屬于計算機、通信和信息安全領域,具體涉及一種針對Web通信的加密方法。
背景技術:
隨著基于World Wide Web應用的迅速普及,電子商務已經成為人們日常工作和生活的一部分。Web的成長也在安全性和個人隱私方面給我們帶來了威脅。在一般場合下,瀏覽網頁、收發郵件等Web通信過程中均未能夠提供足夠的安全防護,直接導致了通信數據流可被輕易監聽并且不為所知地被截取、篡改、重放,進而造成用戶敏感信息泄漏、丟失、Web服務失敗等嚴重后果。
為了保證Web業務的安全性,首先應確保客戶端(Client)、服務端(Server)之間業務流的安全。針對Web通信的安全威脅一般分為被動攻擊和主動攻擊被動攻擊有對客戶端、服務端之間業務流的竊聽;主動攻擊有對業務流的篡改。
目前,旨在保證瀏覽器(客戶端)與Web站點(服務端)間通信安全的傳輸層安全協議主要有SSL(安全套接字層)協議和SSH(安全殼遠程登錄)協議。
SSL指定了一種在應用層協議(例如http、telnet、NNTP、FTP)和TCP/IP之間提供數據安全性分層的機制。它為TCP/IP連接提供數據加密、服務端認證、消息完整性以及可選的客戶機認證等保障。SSL的主要目的是在兩個通信應用程序之間提供私密性和可靠性。當一個SSL客戶機和服務端第一次開始通信時,它們在一個協議版本上達成一致,選擇加密算法,選擇相互認證,并使用公鑰技術來生成共享密鑰。
SSH則是一種在不安全網絡上用于安全遠程登錄和其他安全網絡服務的協議。SSH傳輸層是一種安全的低層傳輸協議。它提供數據加密、加密主機認證和完整性保護。這種協議中的密鑰交互方法、公鑰算法、對稱加密算法、消息認證算法以及哈希算法(hash)等都需要協商。數據完整性是通過在每個包中包括一個消息認證碼(MAC)來保護的,這個MAC根據一個共享密鑰、包序列號和包的內容計算得到。
在使用上面兩種通信加密協議時,每次客戶端建立會話連接均需要重新進行密鑰交換,而SSL、SSH均采用非對稱加密方式進行密鑰協商。重復協商直接導致服務端的運算負荷急劇加重,處理時延增大而導致握手失敗,進而無法建立安全連接,嚴重影響服務質量。由于密鑰協商代價過大,使得Web通信加密的門檻過高,以至于很多站點無法提供Web通信加密服務。因此,對于敏感數據的機密性和用戶隱私難以做到有效保護。
發明內容
本發明的目的在于提供一種保護Web通信安全的加密方法,有效地進行密鑰交換,降低服務端的運算負荷,有效防止第三方監控。
為實現上述目的,本發明提供的技術方案如下一種Web通信加密方法,包括以下步驟(1)客戶端向服務端發送hello消息進行連接請求;服務端向客戶端發送hello消息接受連接請求,并在服務端本地生成通信主密鑰(masterkey);服務端驗證是否是會話重復連接,如果是會話重復連接則進入步驟6,否則進入步驟2;(2)客戶端與服務端協商確定通信的密碼算法,客戶端并保存該經協商確定的密碼算法;服務端向客戶端發送證書,使得服務端能夠向客戶端進行認證,所述服務端證書中包括服務端公鑰;(3)客戶端根據步驟2中協商確定的加密算法對所述服務端公鑰進行非對稱加密,隨機生成一次性加密密鑰(one-time-key),并傳送至服務端;(4)服務端解密獲取一次性加密密鑰,并用它對通信主密鑰(masterkey)進行對稱加密,傳送至客戶端;(5)客戶端解密獲取通信主密鑰(masterkey),保存該通信主密鑰(masterkey);(6)客戶端隨機生成會話密鑰(sessionkey),并采用服務端提供的主密鑰(masterkey)進行對稱加密,傳送至服務端;(7)服務端解密獲取步驟6生成的會話密鑰(sessionkey),密鑰交換完成;(8)客戶端、服務端采用會話密鑰(sessionkey)對通信數據進行對稱加解密,實現保密通信。
進一步地,上述的通信加密方法,步驟1中驗證是否是會話重復連接的方法是客戶端發送給服務端的hello消息中包括連接次數,如果客戶端發送給服務端的hello消息中的連接次數值為0,則確認雙方的會話連接為首次會話連接;如果客戶端發送來的hello消息中的連接次數值大于或等于1,則確認雙方的會話連接為重復連接。進一步,在服務端接收到客戶端發來的hello消息后,將該消息中的連接次數值加上1并發送給客戶端保存以作為下一次會話連接時客戶端發送給服務端的連接次數值。
進一步地,上述的通信加密方法,步驟2中協商確定通信密碼算法的過程如下客戶端發送的hello消息中包括客戶端所支持的密碼選項,服務端接收到該消息后從中選取密碼算法并告知客戶端達成一致。當步驟1中客戶端與服務端是重復會話連接,客戶端發送給服務端的hello消息中就包括首次會話連接時雙方協商確定的密碼算法。
進一步地,上述的通信加密方法,步驟1中的hello消息包括客戶端標識,該客戶端標識由服務端隨機生成并賦予客戶端,通信主密鑰是由服務端根據自身秘密信息與該客戶端標識生成。
進一步地,上述的通信加密方法,在特定的安全需求下,步驟2中還包括如下步驟客戶端向服務端發送證書,使得客戶端能夠向服務端進行認證。
進一步地,上述的通信加密方法,步驟3中的非對稱加密算法選自RSA算法,Rabin算法或EIGamal算法。
進一步地,上述的通信加密方法,步驟4、6、8中的對稱加密算法相同或不同,選自AES算法、三重DES算法或IDEA算法。
進一步地,上述的通信加密方法,步驟1中雙方交換的hello消息中包括隨機數,相應地在步驟6和7之間增加如下步驟a.服務端向客戶端發送安全已連接建立信息,該信息為會話密鑰(sessionkey)控制下對所述服務端、客戶端隨機數的HMAC;b.客戶端收到步驟a中服務端發送的安全已連接建立信息后,對會話密鑰sessionkey正確傳遞加以驗證,確認安全連接已建立。
本發明的有益效果本發明的通信加密方法的總體流程如圖1所示。針對實際網絡訪問時普遍存在單一客戶端短期內重復訪問固定站點(服務端)這一情形,本發明提供的Web通信加密方法,首先驗證客戶端是首次訪問服務端還是再次訪問服務端,即區分是首次用戶登錄還是過往用戶登錄兩種情況進行Web通信加密。
首次訪問的客戶端(NewClient)與服務端進行Web通信時,需要協商確定通信的密碼算法,客戶端保存該經協商確定的密碼算法,再次通信時,客戶端可以在發送給服務端的hello消息中包括首次通信時確定的密碼算法,無需再次協商。
另外,首次通信時,需要通過加解密方式密傳通信主密鑰,獲得通信主密鑰的過程是客戶端根據協商確定的加密算法對服務端公鑰進行非對稱加密,隨機生成一次性加密密鑰并傳送至服務端;服務端解密獲取一次性加密密鑰,并用它對通信主密鑰進行對稱加密,傳送至客戶端;客戶端解密獲取通信主密鑰并保存該通信主密鑰。再次通信時,無需經過前述繁瑣過程加密傳輸通信主密鑰,同時避免了公鑰加解密運算,服務端只需在本地計算生成通信主密鑰而無需在本地存儲每一個客戶端的通信主密鑰,客戶端直接采用首次通信時本地保存的通信主密鑰,即可完成會話密鑰的加密傳輸,隨后雙方采用會話密鑰對通信數據進行對稱加解密,實現保密通信。
很顯然,本發明的通信加密方法對于大量出現的單一客戶端重復訪問同一服務端情形下的通信加密操作進行了簡化。對于過往用戶再次訪問站點情形,會話密鑰協商過程僅需采用通信主密鑰進行一次對稱加解密運算(相當于一次乘法運算量)即可完成,而SSL、SSH等協議同樣情形下(即再次訪問情形)的會話密鑰協商需1次非對稱加解密運算加上一次對稱加解密運算。基于非對稱加解密運算的巨大運算量(指數級),本發明的通信加密方法對于服務端密鑰交換運算負荷的降低是顯而易見的。
此外,本發明的通信加密方法中,客戶端本地存儲與服務端交換所得主密鑰,服務端在客戶端發出再次連接請求后,可由自身秘密與客戶端發送的客戶端標識信息快速計算出通信主密鑰。該方法大大減少了服務端密鑰存儲量。同時加密強度依賴于所選密碼算法強度,等同于SSL等協議安全性。
本方法在相當的安全性下,極大降低服務端提供通信加密的運算、存儲復雜度,易于推廣實現,可有效防止第三方監控,進而保護用戶隱私、確保Web通信中敏感數據的安全傳遞。本方法采用客戶端新鮮度對客戶端連接情況予以標識,此標識可擴展應用于用戶信用等級、服務優先級等屬性。進一步實現業務流優化以及其他Web通信安全應用。
圖1為本發明的Web通信加密流程2為客戶端初次訪問服務端建立加密通信連接所需交互信息流圖3為客戶端再次訪問服務端建立加密通信連接所需交互信息流圖4為客戶端/服務端連接請求消息(Client/ServerHello)格式具體實施方式
下面結合附圖,更詳細地描述本發明的具體實施方式
。
參看圖2,首次訪問用戶即客戶端(Client)與服務端(Server)通信加密方法為步驟1客戶端——>服務端客戶端發送ClientHello消息發起會話連接。
其中ClientHello所含域參看圖4。消息包含“ClientID”、“Connect_Num”、“random”、“ciphersuite”域。“ClientID”域為客戶端標識,初次登陸為“Null”;“Connect_Num”域標識客戶端的連接次數,初次登錄時值為0;“random”域包含隨機數(一次性隨機數作為通信新鮮度標識符),該數據由客戶端隨機產生,含時戳Tc與隨機詢問值Nc;“ciphersuite”域是客戶端計算機支持的一些密碼選項,這些選項按照客戶端最想用的順序排列。客戶端可以提出系列的對稱密碼算法、非對稱密碼算法、數字簽名機制、MAC機制和雜湊函數。
典型運行Client→ServerClientHello.ClientID=‘Null’ClientHello.Connect_Num=‘0’ClientHello.random=Tc,NcClientHello.ciphersuite=‘RSA,AES:encryption,SHA-1:HMAC’步驟2服務端——>客戶端服務端發送ServerHello消息響應客戶端,同時發送服務端證書提交客戶端認證。
服務端由步驟1消息中ClientHello.Connect_Num值獲知此次為初次連接。
ServerHello所含域參看圖4。消息包含“ClientID”、“Connect_Num”、“random”、“ciphersuite”域。“ClientID”域為服務端隨機生成擬賦予客戶端的客戶端標識;“Connect_Num”域為服務端對客戶端連接次數的更新值,ServerHello.Connect_Num=ClientHello.Connect_Num+1;“random”域包含隨機數(一次性隨機數作為新鮮性標識符),該數據由服務端隨機產生,含時戳Ts以及隨機應答值Ns;“ciphersuite”域中為服務端選取的密碼算法、參數等信息,用以告知客戶端達成一致。本實例采用RSA-1024作為非對稱加密算法,AES為對稱加密算法,采用SHA-1為基于密鑰雜湊函數的HMAC。HMAC的相關詳細信息可參看HMAC文獻(Krawczyk,H.,Bellare,M.,and R.Canetti,″HMACKeyed-Hashing for Message Authentication,″RFC 2104,February,1997);SHA的相關詳細信息可以參見SHA文獻(NIST FIPS PUB 180-1,″Secure HashStandard,″National Institute of Standards and Technology,U.S.Department ofCommerce,Work in Progress,May 31,1994);RSA的詳細信息可以參見文獻PKCS1(RSA Laboratories,″PKCS#1RSA Encryption Standard,″version 1.5,November 1993)PKCS6(RSA Laboratories,″PKCS#6RSA ExtendedCertificate Syntax Standard,″version 1.5,November 1993)PKCS7(RSALaboratories,″PKCS#7RSA Cryptographic Message Syntax Standard,″version1.5,November 1993)。
服務端證書為X.509.v3證書,包含足夠的關于姓名和證書所有者公鑰以及簽發證書機構的信息。有關詳細內容可參看PKIX文獻(Housley,R.,Ford,W.,Polk,W.and D.Solo,″Internet Public Key InfrastructurePart IX.509 Certificate andCRL Profile″,RFC 2459,January 1999)。
同時,服務端本地計算通信主密鑰(masterkey),通信主密鑰由服務端對客戶端標識(ClientID)在其服務端秘密(serversecret)控制下做哈希(hash)運算生成,masterkey=SHA-1(serversecret,ClientID)。
典型運行Server→ClientServerHello.ClientID=‘xyz123’ServertHello.Connect_Num=‘1’ServerHello.random=Ts,NsServerHello.ciphersuite=‘RSA,AES:encryption,SHA-1:HMAC’ServerCertificate=point_to(server’s certificate)步驟3客戶端——>服務端客戶端向服務端發送一次性加密密鑰信息One-time-keyexchange。
該信息為客戶端隨機生成用于對稱加密的一次性加密密鑰(one-time-key)采用服務端公鑰(Pkserver)加密后的密文。服務端公鑰(Pkserver)由步驟2中服務端證書中獲取。
同時,客戶端將由步驟2中獲取的ServerHello.Connect_Num對此前本地存儲的客戶端連接次數值(Client.Connect Num)進行替換更新。
典型運行Client→ServerOne-time-keyexchange=RSA_Encryption(PKsever,one-time-key‖Ts‖Ns‖ClientID)(‖表示級聯,下同)步驟4服務端——>客戶端服務端向客戶端發送主密鑰交換信息master-keyexchange。
該信息為服務端用一次性加密密鑰(one-time-key)作為加密密鑰進行對通信主密鑰(masterkey)進行對稱后生成的密文。
典型運行Server→Clientmaster-keyexchange=AES_Encryption(one-time-key,masterkey‖Tc‖Nc)步驟5客戶端——>服務端客戶端向服務端發送會話密鑰交換信息session-keyexchange。
該信息為客戶端采用通信主密鑰(masterkey)對會話密鑰(sessionkey)進行對稱加密后生成的密文。客戶端由步驟4中消息解密后獲取通信主密鑰(masterkey)并保存,會話密鑰(sessionkey)為客戶端隨機生成用于AES加密的密鑰。
典型運行Client→Serversession-keyexchange=AES_Encryption(masterkey,session-key‖Ts‖Ns)步驟6服務端——>客戶端服務端向客戶端端發送安全已連接建立信息connection-ready。
該信息為會話密鑰(sessionkey)控制下對服務端、客戶端隨機數的HMAC。用于客戶端對會話密鑰正確傳遞加以驗證,以示安全連接已建立。
典型運行Server→Clientconnection-ready=SHA-1(sessionkey,Nc‖Ns)步驟7客戶端<——>服務端雙方采用會話密鑰(sessionkey)作為數據加密密鑰,對通信數據流(comm data)采用AES算法進行對稱加密后進行密文(Ciphertext)傳輸。
典型運行Client<—>ServerCiphertext=AES_encryption(sessionkey,comm_data)參看圖3,過往用戶再次訪問時,與服務端通信加密方法為步驟1客戶端——>服務端客戶端發送ClientHello消息發起會話連接其中ClientHello所含域及其標識意義與此前描述一致。此時的ClientHello.Connect_Num非0,具體數值為最后一次與服務端通信時,服務端給出的客戶端連接次數返回值。ClientHello.ciphersuite域內容為初次登錄時協商給定的相關密碼算法。
典型運行Client→ServerClientHello.ClientID=‘xyz123’ClientHello.Connect_Num=‘5’ClientHello.random=Tc,NcClientHello.ciphersuite=‘RSA,AES:encryption,SHA-1:HMAC’步驟2服務端——>客戶端服務端發送ServerHello消息響應客戶端。
同時,服務端本地計算通信主密鑰(masterkey)。通信主密鑰由加密服務端對其在步驟1消息中客戶端標識(ClientID)在其服務端秘密(serversecret)控制下做哈希(hash)運算生成,masterkey=SHA-1(serversecret,ClientID)。
服務端由步驟1消息中ClientHello.Connect_Num,確認此為再次連接。
其中ServerHello所含域及其意義與此前描述同。其中,ServerHello.ciphersuite域內容為步驟1中ClientHello.ciphersuite內容拷貝,確認本次通信采用的密碼算法。
典型運行Server→ClientServerHello.ClientID=‘xyz123’ServerHello.Connect_Num=‘6’ServerHello.random=Ts,NsServerHello.ciphersuite=‘RSA,AES:encryption,SHA-1:HMAC’步驟3客戶端——>服務端客戶端向服務端發送會話密鑰交換信息session-keyexchange。
該信息為客戶端采用通信主密鑰(masterkey)對會話密鑰(sessionkey)進行對稱加密后生成的密文。通信主密鑰(masterkey)為客戶端由初次訪問服務端建立安全連接時獲取并保存的通信主密鑰,會話密鑰(sessionkey)為客戶端隨機生成用于AES加密的密鑰。
同時,客戶端將由步驟2中獲取的ServerHello.Connect_Num對此前本地存儲的客戶端連接次數值(Client.Connect_Num)進行替換更新。
典型運行Client→Serversession-keyexchange=AES_Encryption(masterkey,session-key‖Ts‖Ns)步驟4服務端——>客戶端服務端向客戶端發送安全已連接建立信息connection-ready。
該信息為會話密鑰(sessionkey)控制下對服務端、客戶端隨機數的HMAC。用于客戶端對會話密鑰正確傳遞加以驗證,以示安全連接已建立。
典型運行Client→Serverconnection-ready=SHA-1(sessionkey,Nc‖Ns)步驟5客戶端<——>服務端雙方采用會話密鑰(sessionkey)作為數據加密密鑰,對通信數據流采用AES算法進行對稱加密后進行密文傳輸。
典型運行Client<—>ServerCiphertext=AES_encryption(sessionkey,comm_data)
權利要求
1.一種Web通信加密方法,包括以下步驟(1)客戶端向服務端發送hello消息進行連接請求;服務端向客戶端發送hello消息接受連接請求,并在服務端本地生成通信主密鑰;服務端驗證是否是會話重復連接,如果是會話重復連接則進入步驟6,否則進入步驟2;(2)客戶端與服務端協商確定通信的密碼算法,客戶端并保存該經協商確定的密碼算法;服務端向客戶端發送證書,使得服務端能夠向客戶端進行認證,所述服務端證書中包括服務端公鑰;(3)客戶端根據步驟2中協商確定的加密算法對所述服務端公鑰進行非對稱加密,隨機生成一次性加密密鑰,并傳送至服務端;(4)服務端解密獲取一次性加密密鑰,并用它對通信主密鑰進行對稱加密,傳送至客戶端;(5)客戶端解密獲取通信主密鑰,保存該通信主密鑰;(6)客戶端隨機生成會話密鑰,并采用服務端提供的主密鑰進行對稱加密,傳送至服務端;(7)服務端解密獲取步驟6生成的會話密鑰,密鑰交換完成;(8)客戶端、服務端采用會話密鑰對通信數據進行對稱加解密,實現保密通信。
2.如權利要求1所述的通信加密方法,其特征在于,所述步驟1中驗證是否是會話重復連接的方法是客戶端發送給服務端的hello消息中包括連接次數,如果客戶端發送給服務端的hello消息中的連接次數值為0,則確認雙方的會話連接為首次會話連接;如果客戶端發送來的hello消息中的連接次數值大于或等于1,則確認雙方的會話連接為重復連接。
3.如權利要求2所述的通信加密方法,其特征在于,所述步驟1中服務端接收到客戶端發來的hello消息后,將該消息中的連接次數值加上1并發送給客戶端保存以作為下一次會話連接時客戶端發送給服務端的連接次數值。
4.如權利要求1所述的通信加密方法,其特征在于,所述步驟2中協商確定通信密碼算法的過程如下客戶端發送的hello消息中包括客戶端所支持的密碼選項,服務端接收到該消息后從中選取密碼算法并告知客戶端達成一致。
5.如權利要求1所述的通信加密方法,其特征在于,所述步驟1中客戶端與服務端是重復會話連接,客戶端發送給服務端的hello消息中包括首次會話連接時雙方協商確定的密碼算法。
6.如權利要求1所述的通信加密方法,其特征在于,所述步驟1中的hello消息包括客戶端標識,該客戶端標識由服務端隨機生成并賦予客戶端;所述步驟1中的通信主密鑰是由服務端根據自身秘密信息與該客戶端標識生成。
7.如權利要求1所述的通信加密方法,其特征在于,所述步驟2中還包括如下步驟客戶端向服務端發送證書,使得客戶端能夠向服務端進行認證。
8.如權利要求1所述的通信加密方法,其特征在于,所述步驟3中的非對稱加密算法選自RSA算法、Rabin算法或E1Gamal算法。
9.如權利要求1所述的通信加密方法,其特征在于,所述步驟4、6、8中的對稱加密算法相同或不同,選自AES算法、三重DES算法或IDEA算法。
10.如權利要求1所述的通信加密方法,其特征在于,所述步驟1中雙方交換的hello消息中包括隨機數,相應地在所述步驟6和7之間增加如下步驟a.服務端向客戶端發送安全已連接建立信息,該信息為會話密鑰控制下對所述服務端、客戶端隨機數的HMAC;b.客戶端收到步驟a中服務端發送的安全已連接建立信息后,對會話密鑰正確傳遞加以驗證,確認安全連接已建立。
全文摘要
本發明提供了一種Web通信加密方法,該方法區分客戶端與服務端是首次通信還是再次通信兩種情況。首次訪問的客戶端與服務端進行Web通信時,需要協商確定通信的密碼算法,再次通信時無需再次協商;首次通信時,客戶端獲取服務端提供的通信主密鑰后保存該通信主密鑰,再次通信時,服務端只需在本地計算生成密鑰,客戶端采用本地保存的通信主密鑰實現會話密鑰的傳送,隨后雙方采用會話密鑰對通信數據進行加解密,實現保密通信。本發明的通信加密方法大大減少了服務端密鑰存儲量,并且對于服務端密鑰交換運算負荷的降低也是顯而易見的。
文檔編號H04L9/12GK101022455SQ200610170718
公開日2007年8月22日 申請日期2006年12月26日 優先權日2006年12月26日
發明者韋韜, 毛劍, 鄒維, 王鐵磊, 李佳靜, 王偉 申請人:北京大學