背景技术
为了保护敏感数据在传送过程中的安全,越来越多的企业、政府、银行开始部署SSL(Secure Sockets Layer,安全套接层)通信。SSL是Netscape公司所提出的安全保密协议,在浏览器和Web服务器之间构造安全通道来进行数据传输,SSL协议位于TCP/IP协议和各种应用层协议之间,为应用程序提供加密数据通道。SSL是在Internet基础上提供的一种保证网上传输的数据私密性的安全协议。它能使客户端/服务器应用之间的通信不被攻击者窃听。
为了保证数据的安全传输,HTTPS协议(全称:Hypertext Transfer Protocolover Secure Socket Layer,安全超文本传输协议)使用对称加密算法对传输的数据进行加密,接收方使用和发送方相同的密钥进行解密,其中的密钥是通过发送方和接收方通过交换共同的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。HTTPS实际上应用了Netscape的安全套接层(SSL)作为HTTP应用层的子层。
然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能。如果将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低。为了解决上述问题,提高电子安全服务器的处理能力,因此出现了SSL加速解决方案,将繁重的、极易消耗服务器CPU以及内存资源的数据加解密处理交给专用的设备处理,而提供给服务器的是解密好的或重新加密的数据,因此可以极大提高安全服务器的性能。
其中CBC(加密块链模式,Cipher Block Chaining)不容易主动攻击,安全性好,适合传输长度长的报文等优点,因此大多数应用采用此类模式的加密算法进行数据的加解密。
现有的SSL加速方案是在专用设备上对数据进行以固定块大小为单位来进行加密或解密,现有技术方案加密或解密需要接收完整个数据块再去进行加密或解密。对于加密,首先将明文分成固定长度的块,然后将前面一个加密块输出的密文与下一个要加密的明文块进行异或操作,将计算结果再用密钥进行加密得到密文。对于解密,首先利用密钥得到加密的结果,然后执行和加密相反的操作得到明文。
由于加密或解密时数据报文以固定块的字节长度为单位分组进行加密或解密,所以加解密数据报文时候必须以同样的固定块的字节长度为单位进行分组加解密;但是在实际网络中数据报文的传输长度是不确定的,则现有技术方案存在如下缺陷:
如果报文长度不够加密或解密需要的长度时,会使CPU进行等待下一次报文到达的时候继续进行加密或解密,造成设备CPU效率下降。
发明内容
有鉴于此,本发明提供一种基于流处理的SSL异步代理方法,解决SSL块加密模式造成的接收数据与加密或解密不同步造成的资源浪费问题。
具体来说,一种基于流处理的SSL异步代理方法,应用于SSL加速设备上,该方法包括以下步骤:
a)SSL加速设备接收主机发送的数据报文,该数据报文为明文数据报文或密文数据报文;
b)若当前报文为明文数据报文,则提取其中明文数据进行加密生成加密数据块;其中该加密数据块的长度为协商的加密算法块长度的整数倍,该加密数据块中的密文数据是由该报文的明文数据、摘要分析数据以及填充数据三个部分进行加密生成的;将生成的加密数据块放在报文中发送出去;
c)若当前报文为密文数据报文则提取该报文加密数据块中的密文数据进行解密生成明文数据;其中解密时以协商的加密算法块长度的整数倍对该密文数据进行解密生成明文数据;将生成的明文数据放在报文中发送出去。
进一步地,所述协商的加密算法块长度为加密算法中设定的固定块字节长度。
进一步地,所述对明文数据报文提取明文数据进行加密生成加密数据块,具体为:
提取明文数据报文中的明文数据并且对该明文数据进行摘要分析,将明文数据和摘要分析数据的总长度按协商的加密算法块长度的整数倍填充后进行数据加密。
进一步地,所述按协商的加密算法块长度的整数倍填充后进行数据加密具体为:
将明文数据和摘要分析数据的总长度与协商的加密算法块长度的差值进行填充,填充的数据长度为N-(M%N),填充的数据值为[N-(M%N)]-1,N表示协商的加密算法块长度,M表示提取的明文数据长度和摘要分析数据总长度,%表示求余数。
进一步地,所述密文数据以协商的加密算法块长度的整数倍进行解密生成明文数据,具体为:
提取密文数据报文中的密文数据,将提取的密文数据以及上次解密剩余的密文数据按所述协商的加密算法块长度的整数倍取余后,剩余的密文数据保存,等待下一个密文数据报文来之后提取该报文中的密文数据与上次剩余的数据一起按协商的加密算法块长度的整数倍方式进行解密。
进一步地,每组密文数据最后一次解密的数据长度大于或等于摘要数据与填充数据的总长度并且是协商的加密算法块长度的整数倍。
本发明同时提供一种基于流处理的SSL异步处理装置,应用于SSL加速设备上,该装置包括:
数据接收单元,用于接收主机发送的数据报文,该数据报文为明文数据报文或密文数据报文;
数据加密单元,用于在当前报文为明文数据报文时提取其中明文数据进行加密生成加密数据块;其中该加密数据块的长度为协商的加密算法块长度的整数倍,该加密数据块中的密文数据是由该报文的明文数据、摘要分析数据以及填充数据三个部分进行加密生成的;将生成的加密数据块放在报文中发送出去;
数据解密单元,用于在当前报文为密文数据报文时提取该报文加密数据块中的密文数据进行解密生成明文数据;其中解密时以协商的加密算法块长度的整数倍对该密文数据进行解密生成明文数据;将生成的明文数据放在报文中发送出去。
进一步地,所述协商的加密算法块长度为加密算法中设定的固定块字节长度。
进一步地,所述对明文数据报文提取明文数据进行加密生成加密数据块,具体为:
提取明文数据报文中的明文数据并且对该明文数据进行摘要分析,将明文数据和摘要分析数据的总长度按协商的加密算法块长度的整数倍填充后进行数据加密。
进一步地,所述按协商的加密算法块长度的整数倍填充后进行数据加密具体为:
将明文数据和摘要分析数据的总长度与协商的加密算法块长度的差值进行填充,填充的数据长度为N-(M%N),填充的数据值为[N-(M%N)]-1,N表示协商的加密算法块长度,M表示提取的明文数据长度和摘要分析数据总长度,%表示求余数。
进一步地,所述密文数据以协商的加密算法块长度的整数倍进行解密生成明文数据,具体为:
提取密文数据报文中的密文数据,将提取的密文数据以及上次解密剩余的密文数据按所述协商的加密算法块长度的整数倍取余后,剩余的密文数据保存,等待下一个密文数据报文来之后提取该报文中的密文数据与上次剩余的数据一起按协商的加密算法块长度的整数倍方式进行解密。
进一步地,每组密文数据最后一次解密的数据长度大于或等于摘要数据与填充数据的总长度并且是协商的加密算法块长度的整数倍。
由此可见,本发明提供的一种基于流处理的SSL异步代理方法和装置,通过SSL加速设备的加密或解密流处理方式提高了设备的使用效率,SSL加速设备在异步代理模式下,使报文的接收和数据的加密或解密异步运行,每接收到一个数据报文,就立即送到加密或解密流程进行处理,解决了现有技术中需等待所有数据都接收完了才开始加密或解密的处理方式,对应用程序的响应时间缩短了。进而从整体上提高了SSL加速设备CPU的效率。
具体实施方式
为了使本技术领域的人员更好的理解本发明实施例的方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
首先对SSL的工作流程进行简单说明,参考图1,假设一次通信过程中的两个主机分别为客户端和服务器。SSL加速设备接收来自客户端或服务器的数据报文,SSL加速设备根据与客户端或服务器设定的协议方式来对数据报文进行处理。如果双方协议设定是密文方式(即https协议),则SSL加速设备需要对接收到的数据报文进行加密处理后再发送出去,如果双方协议设定是明文方式(即http协议),则SSL加速设备需要对接收到的数据报文,进行解密后再发送出去。即根据设定的协议决定报文的发送方式。
首次通信时,双方通过握手协议协商密钥加密算法,数据加密算法和摘要算法。本实施例,预设SSL会话协商,识别会话使用的加密算法是AES(AES是块加密算法),摘要算法为MD5。AES算法是高级加密标准算法的简称,其英文名称为Advanced EncryptionStandard。AES算法利用加密块链模式(CBC)将其用于对文件的加密/解密(密钥长度可选)。
摘要算法的作用是对一段信息数据产生信息摘要,以防止被篡改,常用的摘要算法有MD,SHA1两种,字节通常是固定的,MD5摘要算法分析产生16个字节的信息摘要,SHA1摘要算法分析产生20个字节的信息摘要。
下面通过实施例详细描述具体实现流程:
a)SSL加速设备接收主机发送的数据报文,该数据报文为明文数据报文或密文数据报文;
b)若当前报文为明文数据报文,则提取其中明文数据进行加密生成加密数据块;其中该加密数据块的长度为协商的加密算法块长度的整数倍,该加密数据块中的密文数据是由该报文的明文数据、摘要分析数据以及填充数据三个部分进行加密生成的;将生成的加密数据块放在报文中发送出去;
c)若当前报文为密文数据报文则提取该报文加密数据块中的密文数据进行解密生成明文数据;其中解密时以协商的加密算法块长度的整数倍对该密文数据进行解密生成明文数据;将生成的明文数据放在报文中发送出去。
假设SSL加速设备接收客户端发送100个字节数据的明文数据报文,SSL加速设备根据服务器协议设定要以密文方式发送,则SSL加速设备需要对明文数据进行加密后再发送给服务器。
假如客户端的100个字节的明文数据分三次发送,第一次发送40个字节,SSL加速设备把明文数据报文送给加密流程进行处理,提取明文数据报文中的明文数据并且对该明文数据进行摘要分析,将明文数据和摘要分析数据的总长度按协商的加密算法块长度的整数倍填充后进行数据加密。
AES加密数据块分组长度是128比特(也即块大小是16字节),本实施例协商的加密算法块长度为加密算法中设定的固定字块节长度,即协商的加密算法块长度是16字节。
如本实施例中第一次从明文数据报文提取到的是40个字节的明文数据,则加密处理流程首先要对这40个字节进行摘要分析,假设协商的摘要算法是MD5,则根据MD5摘要算法分析产生16个字节的信息摘要。对40个字节的明文数据进行摘要分析后得到16个字节的信息摘要进行信息填充到40个字节明文数据后面,目标是使其位长达到协商的加密算法块长度的整数倍,即16个字节的整数倍,经过摘要分析之后位长将被扩展至40+16个字节,不是协商的加密算法块长度16的整数倍数,所以要对本组数据再填充8个字节后再进行加密,加密后就是64个字节长度的密文是预设长度16个字节的整数倍。将生成的加密数据块放在报文中发送出去。
第二次也是从明文数据报文提取到40个字节的明文数据之后再送入加密流程处理。第二次和第一次处理方式一样,加密后也是64个字节长度的密文数据放到报文中发送给服务器,第三次是20个字节的明文数据,按照上述规则则本信息的位长将被扩展至20+16个字节,不是协商的加密算法块长度的整数倍,则需填充12个字节才满足协商的加密算法块长度16的整数倍,加密后是48个字节长度的密文放到报文中发送给服务器。SSL加速设备每次接收到数据报文后就把其中的明文数据送给加密流程进行处理,然后继续接收数据,收到之后再送入加密流程处理。块加密情况下,如果加密之前数据长度不满足块的倍数,则进行填充,填充后即是块的倍数,则加密后的数据是块的倍数。
进行填充的规则为,将明文数据和摘要分析数据的总长度与协商的加密算法块长度的差值进行填充,填充的数据长度为N-(M%N),填充的数据值为[N-(M%N)]-1,N表示协商的加密算法块长度,M表示提取的明文数据长度和摘要分析数据总长度,%表示求余数。填充的长度的范围是1到块的长度,如果是AES算法,就是1个字节到16个字节范围。
对数据进行填充的原因是为满足解密处理过程中对信息长度的要求,保证发送出去的数据符合RFC标准。
假设SSL加速设备接收到客户端160个字节的密文数据报文,SSL加速设备根据服务器协议设定要以明文方式发送,则SSL加速设备需要对密文数据进行解密后再发送给服务器。SSL加速设备和服务器之间协商的加密算法是AES(AES是块加密算法,块大小是16字节),客户端160个字节的密文报文分三次发送,第一次发送60个字节,第二次发送60字节,第三次发送40个字节,SSL加速设备每次接收到密文数据后就送给解密流程进行处理,然后继续接收数据,收到之后再送入解密流程处理。
解密时同样要考虑按块大小的倍数进行解密(AES算法,块大小是16个字节),整个数据块大小肯定是块大小的整数倍。
一个加密数据块应该是:
数据部分+摘要+填充=160
|--------------------------|----------|--------|
块解密情况下,由于每次接收的数据长度可能不是块的倍数,
提取密文数据报文中的密文数据,将提取的密文数据以及上次解密剩余的密文数据按所述协商的加密算法块长度的整数倍取余后,剩余的密文数据保存,等待下一个密文数据报文来之后提取该报文中的密文数据与上次剩余的数据一起按协商的加密算法块长度的整数倍方式进行解密。
如第一次要解密60个字节的密文数据,因为60不是协商的加密算法块长度16的整数倍,所以将提取的密文数据60个字节,按所述协商的加密算法块长度16的整数倍取余,所以只解密48个字节,保存剩余的12个字节等到下次去解密。把解密好的48个字节的明文数据放在报文中发给服务器。第二次要解密60个字节的密文数据,再加上次剩余的12个字节,就是72个字节,同上所述解密方式因为72不是16的倍数,所以只解密64个字节的密文数据,保存剩下的8个字节等到下次去解密,把解密好的64个字节的明文数据放在报文中发给服务器。第三次要解密40个字节的密文数据,再加上次剩余的8个字节,就是48个字节,满足16的倍数,全部密文数据解密完成,把解密好的48个字节的明文数据放在报文中发给服务器。
由于数据块的最后是一个摘要,所以要满足最后一次解密的长度最少是摘要的长度(MD5摘要是16个字节,SHA1是20个字节)+填充的长度,否则解密会出错。也就是说进行解密处理时要进行判断每组密文数据最后一次解密的数据长度大于或等于摘要数据与填充数据的总长度并且是协商的加密算法块长度的整数倍。
因为解密时会先接收到一个头部报文,能知道发送的密文数据报文总共有多少字节。根据发送的密文数据报文总字节数能准确的判断出最后一次解密还剩多少字节以便进行合理的解密以满足每组密文数据最后一次解密的数据长度大于或等于摘要数据与填充数据的总长度并且是协商的加密算法块长度的整数倍。
以上所述的是当SSL加速设备与客户端和服务器协议选定不一致的情况需要对数据报文进行加密或解密处理,还有另外2种情况,发送方与接收方协议都是需要明文方式的情况,即发送的数据报文协议是需要以明文方式发送,接收的报文也以明发方式接收,此时则不用考虑对数据进行加密或解密处理。SSL加速设备发送数据就可以了。
但当SSL加速设备与客户端和服务器选定协议都以密文方式时,即接收报文协议以密发方式接收,发送的数据报文协议以密文方式发送。则此时SSL加速设备会按上所述的加密和解密处理方式,先对接收的密文数据进行解密后再将解密后的明文数据进行加密发送出去。
相应地本实施例中当SSL加速设备从服务器接收数据报文的处理流程与SSL加速设备从客户端接收数据报文的处理流程一样。就是将接收的明文数据加密成密文数据或将密文数据解密成明文数据发送出去。
与现有技术相比,本发明通过SSL加速设备在异步代理模式下,使报文的接收和数据的加密或解密异步运行,如每接收到一个需加密的数据报文,相应地就送到加密流程进行处理,并且当每次接收到的数据报文不满足协商的加密算法块长度时可以对数据进行填充的方式,使数据长度满足协商的加密算法块长度进行加密,解决了现有技术中需要等待下次数据报文到达时再解密的问题,同样如每接收到一个需解密的数据报文时,相应地就送到解密流程进行处理,解决了现有技术中需要等待把所有需解密的数据都接收完了才开始解密的处理方式,本发明中通过SSL加速设备异步代理的方式,对应用程序的时间缩短了,进而从整体上提高了SSL加速设备CPU的效率。
相应地,本发明实施例还提供了一种基于流处理的SSL异步代理的装置,如图3,是该装置的一种结构示意图。
该检测装置应用于SSL加速设备上,作为该装置的运行载体,所述SSL加速设备的硬件环境通常至少都包括CPU、内存以及其他硬件。所述装置在逻辑层面包括有数据接收单元、数据加密单元以及数据解密单元,该装置是一个虚拟的逻辑装置,其本质上是CPU将非易失性存储其中的计算机程序指令读取到内存中执行相应形成的。该装置包括:
数据接收单元,用于接收主机发送的数据报文,该数据报文为明文数据报文或密文数据报文;
数据加密单元,用于在当前报文为明文数据报文时提取其中明文数据进行加密生成加密数据块;其中该加密数据块的长度为协商的加密算法块长度的整数倍,该加密数据块中的密文数据是由该报文的明文数据、摘要分析数据以及填充数据三个部分进行加密生成的;将生成的加密数据块放在报文中发送出去;
具体为,提取明文数据报文中的明文数据,并且对该明文数据进行摘要分析,将明文数据和摘要分析数据的总长度按协商的加密算法块长度的整数倍填充后进行数据加密。AES加密数据块分组长度是128比特,协商的加密算法块长度为加密算法中设定的固定块字节长度,即协商的加密算法块长度是16字节。
将明文数据和摘要分析数据的总长度与协商的加密算法块长度的差值进行填充,填充的数据长度为N-(M%N),填充的数据值为[N-(M%N)]-1,N表示协商的加密算法块长度,M表示提取的明文数据长度和摘要分析数据总长度,%表示求余数。
块加密情况下,如果加密之前数据长度不满足块的倍数,则进行填充,填充后即是块的倍数,则加密后的数据是块的倍数。把生成的加密数据块放到报文中发送出去。
数据解密单元,用于在当前报文为密文数据报文时提取该报文加密数据块中的密文数据进行解密生成明文数据;其中解密时以协商的加密算法块长度的整数倍对该密文数据进行解密生成明文数据;将生成的明文数据放在报文中发送出去。
具体为,提取密文数据报文中的密文数据,将提取的密文数据以及上次解密剩余的密文数据按所述协商的加密算法块长度的整数倍取余后,剩余的密文数据保存,等待下一个密文数据报文来之后提取该报文中的密文数据与上次剩余的数据一起按协商的加密算法块长度的整数倍方式进行解密。
每组密文数据最后一次解密的数据长度大于或等于摘要数据与填充数据的总长度并且是协商的加密算法长度的整数倍。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。