一种Web通信加密方法

文档序号:7975408阅读:188来源:国知局
专利名称:一种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日
发明者韦韬, 毛剑, 邹维, 王铁磊, 李佳静, 王伟 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1