具体实施方式
下面参考附图说明本发明的优选实施例。
图2示出了本发明一个实施方案的VPN芯片的大体框图。本发明的VPN芯片包括包处理模块(也可称为内核运算模块)以及接口模块。包处理模块可以从接口模块接收控制信息(控制指令),获取要处理的数据包(例如,IP包),根据对控制指令的解码从接口获取处理所依据的SA,并根据SA的指示,对包进行IPsec协议(例如AH和/或ESP,也包括MPPE)处理以及相关的加密解密处理。包处理模块可以包括一个或多个用于对包进行处理的包处理引擎模块(以下可简称为包引擎模块)。
接口模块可以包括多种接口,例如与主机的接口,与外部存储器的接口和或与内存的接口、与网络设备(例如路由器)的接口。还可以包括与主板的接口。
本发明的VPN芯片还可以进一步包括公钥模块,其通过接口获取数据以及控制信息,进行大数(大规格数)算术运算和模幂乘运算。公钥模块可以与硬件指令一起为主机应用程序提供完整的公钥服务(如IKE)。
本发明的VPN芯片还可以进一步包括***配置模块,用于提供对安全处理器的操作控制。对于某些实施方式,***配置模块可能是必须的,但是对于其他的实施例,其仅是优选存在的。
在一些实施例中,***配置模块可以包括锁相环(PLL)模块、时钟分频模块、随机数模块、复位模块、中断模块等。***配置模块可以通过PCI接口与主机连接,并可以与处理器内部的其他模块相连,以向安全处理器各模块相应提供操作控制(包括中断、时钟、数据等)。但是,***配置模块的结构并不限于此。例如,随机数模块也可以设置在包处理模块中,也可以设置为独立的模块。***配置模块也可以不包含复位模块。甚至本发明的处理器可以不包括PLL模块和/或时钟分频模块,例如可以利用外部输入的时钟。
图3示出了本发明一个更具体的实施例的VPN芯片的体系结构。如图所示,VPN芯片包括包处理模块、数据通路、公钥模块、***配置模块,还包括PCI接口、EMI接口和SPI-3接口。其中VPN芯片通过PCI/PCI-X接口与主机连接,通过EMI接口连接外部存储设备,而通过SPI-3接口连接网络设备(例如路由器)。所述包处理模块包括宏指令模块和多个包引擎模块。这里,示出了根据DMA标准的数据通路,用于包处理模块和公钥模块以及与相关接口的连接,这仅是示例性的,本领域技术人员将理解,也可以采用其他的适当数据通路。
本发明所采用的PCI接口可以是PCI、PCI-X或PCI-E接口或兼容接口,其遵循主机的PCI、PCI-X、或PCI-E规范,并可以在主模式和目标模式下工作。在主模式下,PCI接口连接DMA数据通路;而在目标模式下,其连接***配置模块和/或存储器。
本发明所采用的EMI接口可以连接DMA数据通路和外部存储器(诸如,SRAM、SSRAM、SDRAM等)。而本发明的内存接口(例如,DDR系列的接口)可以连接DMA数据通路和内存(例如主机的内存)。
本发明所采用的SPI接口模块遵循SPI系列规范,其可以连接包处理模块和路由器。在本发明的VPN芯片的一些实施方案中,可以采用例如SPI-3或SPI-4标准的接口。
本发明的VPN芯片所采用的数据通路可以是DMA数据通路。DMA是高性能、多通道的直接存储器存取,主要执行外部接口与内部模块数据的高速双向传输操作。DMA数据通路仅是示例,也可以采用其他的高速数据通路。
在一个具体实现方案中,本发明的DMA控制器有19个数据传输通道,由DMA仲裁控制通道的使用顺序。本领域技术人员将理解,可以根据需要使用更多或更少的数据传输通道。
其中,DMA0通道用于主机发起(PCI)的DMA主设备方式传输,但其不受DMA控制,由主机直接控制。另外18个DMAn通道被用于支持内部包处理的DMA传输,其传输方式由DMA控制。DMA控制器与I/O接口一起用于芯片数据的输入输出。包处理模块可以通过DMA数据通路接收来自PCI-X或EMI或内存的指令或数据。关于数据通路的具体说明将在下文中进行。
图4示出了本发明一个实施方案的VPN芯片的产品应用体系结构。本发明的VPN安全芯片可以通过外部存储器接口(EMI)或内存接口(例如,DDR)与安全关联库(SA)交互,通过串行外设接口(SPI-3)与路由器(或其他包输入/输出设备)通信,通过外设部件互连(PCI)接口与主机通信。而主机可以关联有安全策略库。主机和路由器可以连通到网络。
图5示出了根据本发明的VPN芯片的包处理模块的示意性框图。本发明的包处理模块包括宏指令模块、仲裁模块、配置寄存器、以及若干包引擎模块。所述包引擎模块包括:宏指令和SA译码模块、INFIFO、协议模块(包括AH协议、ESP协议、MPPE协议等)、OUTFIFO、以及算法模块(包括加密算法:AES/DES/3DES、ARC4、国家加密算法;摘要算法:MD5/SHA1、国家摘要算法等)。
在本发明的一个实施例中,包处理引擎是可重组的。例如多个算法可以包括相同的基本重组元素。然而,可重组设计不限于密码算法模块,不仅是包处理引擎是可重组的,***配置也可以是可重组的,例如,中断优先级可重组、存储器同异步方式可重组、总线规范以及大小尾端数据结构表现方式可重组、数据通路可重组等等。用于可重组逻辑的配置文件可以存储在芯片的存储器中,也可以通过其他方式提供,例如通过指令提供。因此,可以说本发明的VPN芯片至少是部分可重组的。
包处理模块包括8个包引擎模块,从而可以同时并行处理8个包。但这仅是示意性的,可以包括更多或更少个包处理引擎。同样的,所述算法也仅是示例性的,本领域技术人员将理解,可以包括任何期望的算法。所述包处理模块可以与DMA通路和SPI-3接口连接。同样的,在本发明中DMA通路包括通道1-18和通道0,这仅是示例性的,可以根据需要设置更多或更少的通道,也可以选择任一个特定的通道来执行通道0的功能和作用。
图6示出了根据本发明的VPN芯片的公钥模块的示意框图。公钥模块可以包括模幂乘模块和大数模块(将在下文中具体说明)。在目标模式下,公钥模块可以与PCI接口连接。公钥模块还可以连接DMA数据通道0和RAM。
下面更详细说明本发明VPN芯片的接口以及接口宏指令控制器结构。
根据本发明的一个实施方案,本发明VPN安全芯片的接口模块可以包括:PCI接口(支持33和66MHz)/PCI-X接口(支持100和133MHz)/PCI-E;EMI接口,其可以支持支持SDRAM、异步SRAM和双端口SSRAM设备连接扩展存储器接口,也支持SDRAM、异步SRAM和双端口SSRAM的任何组合;以及SPI接口(如,SPI3,SPI4)。
本发明VPN安全芯片PCI接口、PCI-X接口支持32位和64位总线;EMI数据总线宽度在32位至64位之间选择,且支持字节写;通过EMI接口最大内存容量为256M字节;SPI-3接口可以只支持32位数据规格。
本领域技术人员将理解,对所采用的接口、接口采用的频率、数据规格、位宽、存储容量等没有具体的限制,可以根据需要选择。如前所述的,本发明也可以采用PCI-E接口或者SPI-4接口等等。
本发明中的PCI/PCI-X/PCI-E、SPI3/4、EMI等接口均是依据相应标准设计,包括交易模式、配置寄存器语义、交易规则、数据映射以及控制等。
图7示出了根据本发明一个实施方案的接口宏指令控制器结构。在本发明的一个实施例中,所有宏指令配置寄存器和队列均在PCI配置寄存器空间和内存空间统一编址。宏指令根据静态宏指令寄存器的设置,决定来自PCI、SPI3或EMI;安全策略SA根据动态宏指令寄存器的设置,决定来自PCI或EMI或公钥算法(PKA)模块的RAM;宏指令队列的选择也是根据静态宏指令寄存器的设置,来自PCI时队列有例如32组表项,来自SPI3时队列有例如5组表项。
所有芯片的内部数据资源的配置均由PCI寄存器空间和内存空间统一配置。即:芯片的内部数据资源是PCI总线的映射。接口的控制通过宏指令配置信息进行,而宏指令配置信息均由主机建立、更新。
宏指令对接口模块的配置和控制包括:PCI接口模块配置,其进行宏指令配置文件的访问(装载和读取宏指令信息),进行数据输入输出管理;SPI3接口模块配置:进行包处理宏指令和包数据的输入输出管理与控制;EMI接口模块配置:进行包处理宏指令和安全策略SA的输入输出管理与控制;三个外部接口与内部总线进行数据或指令传输,交换。
在本发明的一个实施方案中,SPI3接口独立与包处理模块建立数据和指令关系;PCI接口与SPI3接口可以分别处理包处理宏指令和数据包处理关系;EMI接口与PCI接口可以分别处理包处理宏指令和SA关系或包处理宏指令和数据包处理与SA关系;如果PCI直接与EMI发生操作关系,仅能通过芯片内部的缓存实现,此时,数据传输长度依据EMI指令配置的长度(或与PCI呼叫传输的长度之比,取较小值)。
本发明的处理器可以支持如下PCI规范能力:废弃操作、自动回复、目标设备和主设备模式传输、奇偶校验、存储器读、存储器写、配置空间读和配置空间写能力。
在一个实施方案中,本发明的VPN芯片提供1个64位最高100MHz的PCI-X(兼容PCI)的总线接口。在本发明的一个实施方式中,在PCI-X总线上可以连接有其他主设备有NP处理器或其他处理器,而本发明的VPN芯片仅作为在PCI-X总线上1个128K字节的单块连续存储空间的目标设备。在该目标设备中的编址,又被分配给芯片内部模块。本发明的VPN芯片的PCI-X目标设备存储地址可以通过17个位的地址存取。PCI-X地址的其余位被芯片解码,以确定PCI-X总线设备的寻址(呼叫)是否与芯片PCI-X存储器基址寄存器的值匹配,从而确定VPN芯片是否为此次PCI-X的目标设备。需要注意的是,在该实施方案中,PCI-X地址的其余位可以并不写入VPN芯片的寄存器。
在本发明中,对于指令配置寄存器访问,可以直接存储到寄存器。对于数据传输,通常情况,目标模式传递配置寄存器数据,主模式是由芯片发起,因此芯片已知源和目的。对于输入,主机有配置数据和数据传输,两者在芯片响应时,要仲裁,加入输入数据缓冲区是需的(只加入一组缓冲)。对于输出,芯片内部所有数据都有缓冲,因此,在本发明的一个实施例中,PCI数据缓冲区仅仅设计一组输入缓冲。
在一个实施例中,在主模式下,PCI接口连接至DMA数据通路;而在目标模式下,其连接至***配置模块和/或存储器。
下面说明在本发明的实施例中所使用的数据通路。在本发明的一个实现方案中,提供了数据总线控制器(例如,64位),该控制器可有效用于在主机数据接口PCI、包处理模块、内部内存和/或外部存储器EMI之间的数据传输。在本发明的一个实现方案中,该数据总线控制器被实现为DMA控制器。
该DMA控制器主要是负责外部接口与芯片内部之间的数据(包括指令)传输;作为数据传输通道,能够接收要传输数据的信息,如ID、地址、长度、模式等;控制DMA的19个通道的使用顺序;根据体系要求对所传输的数据进行大小尾端转换控制。
在本发明的该实现方案中,DMA是根据VPN体系中外部接口与内部模块间数据传输的需要而设计的数据通路。而外部接口与芯片内部数据的数据表现形式,存储形式以及传输形式可能不同,需要有大小尾端转换控制。
由于存在多个通道,需进行DMA仲裁控制。19个通道可以同时发申请,仲裁轮询控制19个通道的使用,在接收到申请后,仲裁要轮询控制发出允许信号。与外部接口有数据传输关系的每个内部模块都有自己的通路,可同时发申请,由仲裁控制通路的占用顺序。另一方面,数据大小尾端转换控制需要在PCI、EMI对内部及内部对PCI、EMI的传输接口处完成。
在本发明中,DMA数据传输控制类包括:主机发起-主机主控的指令配置操作控制;主机发起-芯片主控的指令配置操作控制;芯片发起-芯片主控的指令配置操作控制。所述输出传输控制涉及PCI总线、EMI总线、包处理总线和内部总线。
图8示出了本发明一个实施例的数据传输路径的示意性示出。图中示出了三个外部接口:PCI,SPI3,EMI;4条总线:包数据总线1,EMI总线2,PCI总线3,内部总线4。主机通过PCI有主模式传输(包处理总线,EMI总线,内部总线)和目标模式传输(EMI总线和内部总线),且优先响应目标模式。芯片通过PCI有主控方式的DMA传输(包括主机发起或芯片发起)以及芯片目标模式的非DMA方式传输(PCI到EMI,PCI到内部)。
直接存储器存取(DMA)控制器是使用状态机逻辑实现控制的内部总线通路开关的自动选择。当一个宏指令译码执行时,控制信号驱动DMA的数据同时操作。
DMA控制器以PCI总线为主控(发起,主控),可以控制选择内部宏指令寄存器、包处理模块(输入输出数据缓存)、公钥存储器的数据通路,完成数据交换。DMA控制器以PCI总线为发起(芯片主控),可以控制选择宏指令队列输入输出,分段合包宏指令输入,SA信息输入,密文数据输出等数据交换。
芯片中的DMA控制器有19个控制通道,允许任意时刻有19个DMA交易能够等待执行。当主模式和目标模式同时申请使用DMA控制器时,目标模式传输优先处理。由于PCI和EMI传输是独立的,且两个申请的源目地址均不同时,能够同时进行两个DMA传输。主机只能直接控制DMA通道0。其它的通道由芯片的内部状态机根据指令控制自动发起控制并完成数据交换。
下表具体示出了一种数据传输路径分配。
数据通道 |
主要用于: |
0 |
主要用于主机发起芯片控制模式的数据传输。 |
1 |
由芯片发起的DMA主模式传输。输入宏指令队列和输出宏指令队列管理器“包处理宏指令” |
2 |
由芯片发起的DMA主模式传输。输入分段和输出合包“包处理的分段合包宏指令” |
3 |
包处理模块实施的数据选择。第1个包模块通路:SA1“第1个包引擎的SA与状态信息” |
4 |
包处理模块实施的数据选择。第1个包模块通路:第1个包引擎的输入数据和输出数据 |
5 |
包处理模块实施的数据选择。第2个包模块通路:SA2“第2个包引擎的SA与状态信息” |
6 |
包处理模块实施的数据选择。第2个包模块通路:第2个包引擎的输入数据和输出数据 |
7~16 |
......... |
17 |
包处理模块实施的数据选择。第8个模块通路:SA8“第8个包引擎的SA与状态信息” |
18 |
包处理模块实施的数据选择。第8个模块通路:第8个包引擎的输入数据和输出数据 |
这种分配仅是示例性的,本领域技术人员将理解,可以根据需要任意进行设置。
根据本发明,数据传输的发起方可以是主机或芯片;数据传输的设备可以是主设备或目标设备;数据传输的方式可以是DMA方式或非DMA(如,源目寻址)方式;数据传输的对象可以是PCI、EMI、内部(寄存器、存储器、队列)。
下面具体说明数据传输:
在DMA方式下,通过仲裁器控制完成数据传输,仅当主机发起,并作为主设备;
实施源目寻址时,DMA轮询操作控制暂停,主机操作优先。
主机发起,主设备,源目寻址:优先DMA,由PCI接口呼叫,芯片即时响应;
主机发起,目标设备,DMA0:由主机配置宏指令和启动控制,芯片依据配置的宏指令信息(源目地址,长度)完成操作;
芯片发起,主设备,DMAn:由芯片呼叫PCI,主机响应后,完成宏指令配置操作。
其应用组合包括:
主机发起,主设备,源目寻址(非DMA);芯片为目标设备,完成指令寄存器配置或公共RAM数据传输或PCI-EMI数据交换或主机读取状态寄存器;
主机发起,目标设备,DMA0;芯片为主设备,完成主机配置的DMA指令的寻址数据操作;
芯片发起,主设备,DMAn;主机为目标设备,完成主机配置的宏指令操作;
主机发起,主设备,源目寻址(非DMA);芯片为目标设备,完成指令寄存器配置或公共RAM数据传输或PCI-EMI数据交换或主机读取状态寄存器;
主机发起,目标设备,DMA0;芯片为主设备,完成主机配置的DMA指令的寻址数据操作;
芯片发起,主设备,DMAn;主机为目标设备,完成主机配置的宏指令操作。
下面说明根据本发明一个实现方案的DMA数据交换。
在本发明的该实现方案中存在三个数据传输模式:主机发起,由芯片作为主设备完成PCI与内部和EMI与内部的数据传输;使用专用通道0;主机发起,并由主机作为主设备完成PCI与EMI、PCI与内部和EMI与内部的数据传输,不占用通道;芯片发起,由芯片作为主设备完成PCI与内部和EMI与内部的数据传输,使用数据通道1-18。其中大小尾端数据规格的控制是数据传输关键。
在该实现方案中,存在三个设备:主机PCI、外部存储器EMI和芯片。每个设备的数据表现形式,存储形式以及传输形式不同。因此建立数据传输的大小尾端控制也需由三种传输模式的6段宏指令配置。
在本发明的一个简化的实现方案中,不支持SPI3接口的数据与PCI或EMI的传输,仅支持SPI3与芯片的数据传输,其中在芯片内部数据均为小尾端,SPI3规范均为大尾端,因此SPI3与芯片的数据传输被固定转换,不需要配置大小尾端指令。
图9示出了根据本发明一个实施例的DMA控制与状态寄存器。DMA0通道的宏指令配置信息为:主机发起,芯片作为主模式的操作。所述寄存器包括:DMA 主大小尾端控制寄存器(P_DMA_APP_MST_ENDIAN),用于静态配置信息,确定大小尾端控制;DMA目的地址寄存器(P_DMA_APP_DST_ADDR),用于数据传输目的地址;DMA源地址寄存器(P_DMA_APP_SRC_ADDR),用于数据传输源地址;DRM状态寄存器(P_DMA_APP_STATUS),用于操作状态、芯片填写、主机访问;以及DMA指令寄存器(P_DMA_APP_COMMAND),用于主机发起的控制信息。
图10示出了PCI DMA控制与状态寄存器。DMAn通道的宏指令配置信息为:芯片发起,作为主模式的操作。所述寄存器包括:PCIDMA状态与配置(P_PA_DMA_STAT_CFG),用于主机设定的数据传输规格要求以及操作状态的反馈;PCI DMA目标读取长度(P_PA_TARGET_READ_COUNT),用于对主机而言的最大目标传输长度约束;PCI DMA目标页(P_PA_TARGET_PAGE),用于指定EMI外部存储器的页地址;PCI DMA目标模式散列加密大小尾端(P_PA_DMA_STAT_CFG),用于数据传输中的大小尾端数据交换信息。
图11示出了EMI DMA控制器寄存器。DMAn通道的宏指令配置信息:主机或芯片发起,芯片作为主模式的操作。所述寄存器包括EMI DMA状态与配置(P_ED_DMA_STAT_CFG),其用于配置存储器类型、状态、映射。
用户DMA传输为主机发起、芯片作为主设备实施的数据传输。主机发起是指通过DMA指令寄存器“启动请求”的操作。源地址和目的地址要依据DMA指令寄存器总线标识的指示确定对象。指令寄存器是操作控制的主体,状态寄存器是主机访问操作前后的信息。
PCI DMA状态与配置(P PA DMA STAT CFG)寄存器主要完成PCI传输长度的最大配置值设定。它是检验值。PCI DMA目标页(P PA TARGET PAGE)对应的存储器类型和寻址转换。PCI DMA目标读取长度(P PA TARGET READ COUNT)寄存器主要实现PCI对EMI的访问,用于配置传输长度的配置值设定。EMI DMA状态与配置(P_ED_DMA_STAT_CFG)寄存器主要完成EMI传输长度的最大配置值设定。它即是检验值又是运行值。PCI DMA目标&独立散列/加密大小尾端(P PA TGT HASHENC ENDIAN)寄存器主要配置数据传输中的大小尾端设置。
在本发明的一个实现方案中,DMA0通道,由主机发起,芯片作为目标设备完成指令配置或数据传输;DMA指令寄存器的使能控制发出DMA0通道的申请。DMA1~18通道均由芯片发起,由芯片作为主设备完成数据传输。主机只能直接控制DMA通道0。其它的通道由芯片根据指令配置控制,自动发起控制并完成数据交换。
图12中示出了根据本发明一个实施方式的DMA数据通路的示例性配置。
下面说明根据本发明实施例的SPI3接口。SPI-3接口是一种流接口,由两个单独的单向32位宽总线组成。SPI-3接口允许连接到SPI-3链接层设备的主机。SPI-3接口命名是站在主机(链接层设备)角度命名的,TX对于SPI-3设备是指输入总线,而RX是指输出总线。如图13所示,本发明的SPI接口连接链路层设备和内部总线,其包括SPI3接口逻辑和SPI3接口控制模块。SPI3接口控制模块进一步包括TX/RX控制状态机、TX/RX FIFO管理、输出端口/数据选通、端口地址译码、FIFO空间有效边界设置、输入端口/数据选通
发送端口TX操作分为几种类型:单PHY模式;多PHY字节层模式;多PHY包层静态模式;多PHY包层动态模式。所选定的SPI-3模式对包处理吞吐量会产生影响。一般来说,如果较少出现大于2K字节的包,那么“单PHY”模式是最有效的,因为该模式不需要在数所总线上指示PHY端口地址。如果大于2K字节包出现比较多,则“多PHY字节层”模式是最佳选择,因为“单PHY”模式会屏蔽掉其他7套可用的资源,直到大包完全处理完毕。如果不知道大包出现的频率,推荐使用“多PHY”模式。
在“多PHY包层”静态模式中,可通过使用由8个端口组成的一个固定组进行静态运行,因而将8个内置FIFO和8个包引擎进行匹配,即只能支持256个端口中的8个固定地址。在“多PHY包层”动态模式,芯片可通过动态分配最多可达256端口的一组端口,进行运行。“多PHY包层”静态模式传输效率最接近“字节层”模式,大约是每256字节多开销20字节。多PHY包层动态模式的效率取决于链路层设备对每个端口的调度能力。
下表示出了TX特征的各操作模式的特点。
模式 |
优点 |
缺点 |
单PHY |
·SPI-3总线的最高效率使用带宽·可预测信息包流(一次一个包,按顺序)。· |
·只有1个FIFO有效。当处理大包时,将阻止对其他7个包引擎的数据流。·无法区分在SPI-3总线上IP包的使用端口。 |
多PHY,字节层 |
·能够保持8个独立的包流处于运行状态,保持8个包引擎始终处于工作状态。 |
·包流不规则,无法预测。·仅局限于8个端口——不可以使用8个以上的端口 |
多PHY,包层,静态 |
同多PHY字节层模式 |
与“字节层”相同,除了:·吞吐量还取决于连接设备登记发送端口的能力如何。·小包可能妨碍性能。 |
多PHY,包层,动态 |
·256(255)个SPI-3端口的充分使用。允许将端口号用做ID标签。 |
与“静态”相同 |
接收端口RX接口可以在两种不同的模式下运行:单PHY模式和多PHY模式。两者区别仅在于输出时数据总线上每次传输数据是否需要先报告端口地址。单PHY模式传输每次都须在数据前均需要报告端口地址;多PHY模式入此次数据传输与上次数据传输端口相同时,不需报告端口地址,只有与上次数据传输的端口不同时才报告端口地址。
RX端口和TX端口的区别是在TX端口上芯片需要通过管脚信号向链路层报告链路层申请的端口是否可以接收数据。TX端口在不同操作模式下,报告状态的方式及用来报告状态的管脚信号不同。
注意:以下所述FIFO的可用状态由指令寄存器中用户设定的高限阈值和低限阈值来确定。当FIFO的可用空间高于高限阈值,表明该FIFO可用;当数据接收至FIFO的可用空间低于低限阈值时,声明该FIFO不可用。
当包的目标地址被一个SPI-3端口的宏指令被接收时,包处理模块管理器建立输出流数据线程。
此宏指令可以来自PCI主机也可以来自SPI-3输入流。为请求一个新线程,包处理模块管理器向SPI-3接口内核发出请求信号,同时发出被请求的端口号及给该端口分配的包处理模块编号。在SPI-3接口输出FIFO有空间时,此请求被响应。
包处理模块将通过一个专门的状态信号向SPI-3接口发送数据准备好的信号。该信号当包处理模块输出缓冲区存储量超过预设的最小连发规模时,或是包处理模块完成了包的处理时即有效。随后,当输出缓冲区存储量低于其预设的最低限制时,数据准备好信号无效。
当SPI-3接口检测到相关包处理模块发送数据准备好信号的端口时,开始向链路层设备进行新的数据传输。数据传输开始是选择数据所属的端口,随后是传输数据本身,直到包处理模块发出包结束信号为止,或是直到预定的字节数已经发送到了链路设备时为止。
而在后一种情况下,只有当包处理模块中其至少有预设的字节数需要发送,才会置数据准备好信号有效。SPI-3接口不会读取超过此数量的数据字节。因此,在每一次传输之后,RX FIFO中不会保留下未发的数据。这样,SPI-3接口只需要提供一个RX FIFO就够了,没有因为RX FIFO满了而导致的等待时间。
SPI3_TX/RX配置初始化指令位指定是否对于每个单独包都启用新传输(用RSX):
当位为‘0’时,如果本包还象前一个包一样传输到同一个端口则不开始新传输,提高链接的包效率,节省一个端***换周期。
当为‘1’时,每个新包的传输不论端口是否改变都将启动一个新的传输。
注意:该位不影响切换端口。
这表明包状态和长度的输出宏指令被包处理模块附在输出数据流的后面。该宏指令被SPI-3接口当作普通数据处理。
当SPI-3接口接收到RENB信号无效时,需中断数据流。所有的输出都被保持,直到RENB再次有效。
所有的信号都在RFCLK上升沿更新和采集。RDAT总线、RPRTY、RMOD、RSOP、REOP及RERR信号在RVAL为高且前一周期RENB为低的时钟周期内有效。数据传输中,RVAL一直声明有效,直到输出FIFO空或者是包结束。在RVAL为低且上一周期RENB为低的时钟周期内RSX信号有效。
如果在此数据包传输时出现错误,在REOP有效时,同时声明RERR。由于其他端口的FIFO有足够的数据来启动数据传输,则再一次声明RSX,指明新的端口地址。
图14示出了根据本发明的SPI3配置寄存器。本发明的SPI3配置寄存器包括:
TX配置寄存器P_SPI3_TXCONFIG,其用于输入配置,包括输入队列的指针约束、总线使能、固定线程配置或轮寻线程配置等;
TX/RX配置RX寄存器P_SPI3_TXRXCONFIG,其用于传输配置,包括输入输出的数据规模、奇偶效验、数据包序列等控制配置;
线程0-线程7状态与配置寄存器P_SPI3_THROSTATUS,其主要反映包处理的操作状态,如:FIFO益出,包处理未结束等。同时,对于操作状态可由主机设定是否中断。
如图14所示,线程配置寄存器可以有多组。
下面说明本发明VPN芯片中所采用的EMI接口。
有两种通过EMI接口访问外部存储器的方法:使用目标PCI传输访问;和通过建立DMA控制器访问。PCI目标方式传输对于小数据量传输有效,而DMA传输对于大量数据传输有效。
对于芯片中的数据总线宽度并没有特别的限制,例如芯片中的数据总线宽度可在32到64位(字节可写)之间选择。当设置为32位外部数据总线宽度时,230字节或1G字节的数据总量被分为228个4-字节(对于1个4字节输出可选择字节)。当设置为64位外部数据总线宽度时,不使用外部地址最低位(位2),使用4个额外字节选择输出管脚选择64位输出总线上的高32位的字节。
本发明的VPN芯片可以支持外部存储器的类型包括:SRAM,SSRAM,SDRAM。上述各种存储器可以每次只用一种,也可以同时采用多种存储器的组合。
在本发明的VPN芯片的一个实施方案中,主机使用PCI-X接口作为芯片的宏指令控制端口,并且使用包处理输入宏指令用于包处理控制信息的传输。通过SPI-3接口接收的包也可以有一个预先附加到包数据里的输入流——包处理输入宏指令。包处理模块执行主模式DMA读取操作,从PCI-X或EMI存储器的输入宏指令队列中提取包处理输入宏指令。包处理输入宏指令有效地将包处理信息传输到芯片的包处理模块,使得包处理模块能够自主地对包处理指令进行排队和处理,减少包处理模块的等待数据的可能,并最大程度地提高吞吐量。
本发明的包处理模块可同时支持来自PCI-X或SPI-3这两个接口的包处理输入输出宏指令。位于主机存储器的输入宏指令队列缓冲区主要用于从PCI连接的主机与本发明的VPN芯片之间传输多个(例如6个)32位长度的包处理输入宏指令。位于芯片内的宏指令取指控制器模块完成DMA的主模式读取,以从输入宏指令队列缓冲区中提取包处理输入宏指令,保存在芯片内缓存区中(例如,可以具有32个表项)。控制权位可以转换,这样主机和本发明的VPN芯片之间的包命令传输和执行可以异步。宏指令根据包处理仲裁模块的分配输入到包引擎译码控制器,依据包处理宏指令的译码解释,DMA完成数据输入输出,SA输入或输出,进入包处理模块完成包数据处理。在包引擎完成数据处理后,更新宏指令,由DMA输出到外部缓存。
下面说明本发明VPN芯片中包处理体系结构。图15示出了本发明VPN芯片中的一种包处理体系结构。如图所示,本发明的包处理宏指令输入包括:SPI3输入(单宏指令);根据来自主机的到输入宏指令控制器的读宏指令中断从DMA读取或从输入宏指令队列基址输入宏指令。从输入宏指令控制器的输出连接到32表项的片内包处理宏指令队列。此处32表项是宏指令输入FIFO。之后,进行命令仲裁。命令仲裁可用轮询的方式完成。本发明的包处理宏指令输出包括:通过来自包处理模块的宏指令处理完成中断而输出;通过将输出宏指令队列基址输入到输出宏指令控制器进行DMA写操作而输出;以及由命令仲裁输出宏指令(SPI3输出)。
当包处理输入宏指令和输出宏指令被启动时(即,包处理模块DMA配置寄存器(P_HD_DMA_CONFIG)的特定位被置位),需确定包处理模块如何获知外部输入宏指令队列缓冲区上有新的宏指令。有两种方式:轮询或中断。
在选择轮询配置下:包处理模块一直检测包处理输入宏指令,直到其检测到有效的宏指令(所有权(将在下面说明)定义为包处理模块)。在包处理输入宏指令轮询寄存器中可以设置查询的频率,即总线带宽的开销。对查询频率和查询重试是分别控制。读取的宏指令无效时(第一条无效或第二条的低64位)会产生查询重试。
在中断配置下:主机在输入宏指令队列缓冲区上积攒一个或多个包处理输入宏指令,然后向包处理模块发起一个中断以告知其提取宏指令并开始处理。这种模式能降低***总线的开销,并且由于主机确定宏指令被处理的时间,因此主机可以控制***数据流量。
输入宏指令队列缓冲区主要用于从PCI连接的主机与芯片之间传输6个32位(192)长度的包处理输入宏指令。芯片内的宏指令取指控制器模块完成DMA0的主模式读取,以从输入宏指令队列缓冲区中提取包处理输入宏指令。
下面说明宏指令所有权位处理。主机与芯片间异步处理的一个要素就是双方之间包处理输入宏指令和包处理输出宏指令的传递。为了使宏指令交换同步,在本发明的一个实施方案中,使用两对控制权位。一对是第一个32位中的宏指令,另一对则是最后1个32位中的宏指令。宏指令的读取方应校验两对所有权是否匹配,实现一方写操作,而另一方读取宏指令的正常状态。也就是说,需采取存储器访问限制的控制设置,以防止出现操作冲突。控制权位通过配置(主机和芯片赋值)可以转换,这样主机和芯片之间的包命令传输和执行可以异步。
每对控制权位可以提供3种状态:
‘00’=空闲或无效宏指令
‘01’=所有权转到VPN芯片
‘10’=VPN芯片完成,所有权传回至主机
‘11’=保留
在初始化时,主机将把整个输入宏指令队列存储区复位至零。
图16示出了根据本发明的包处理输入宏指令的输入。来自EMI和PCI的输入经多路复用器输入到包处理输入宏指令控制/状态字寄存器(P_HD_CONTROL_STATUS)、包处理模块源地址寄存器(P_HD_INPUT)、包处理模块目的地址寄存器(P_HD_OUTPUT_ADDRESS)、包处理模块SA地址寄存器(P_HD_SA_ADDRESS)、用户ID寄存器(P_HD_ID)、包处理模块长度寄存器寄存器(P_HD_LENGTH);而经SPI3的输入被输入到包处理输入宏指令控制/状态字、包处理模块目的地址、包处理模块SA地址以及包处理模块长度寄存器。
VPN芯片有两种使用的包处理宏指令格式:
通过PCI-X或EMI接口传输,并且是唯一被输入宏指令队列支持的格式,其中输入宏指令队列格式包括:包数据源指示、包目的指示和SA记录指示,控制和状态信息。
通过SPI-3接口传输的输入流包处理输入宏指令格式与输入宏指令队列格式相似,只是没有包源域和用户ID。因为SPI-3输入流包处理输入宏指令总是附在包数据之前同时传入,数据源一定被确定为来自SPI-3接口。这种输入流包处理输入宏指令格式仅用于SPI-3接口。
包处理宏指令控制包处理模块的实时操作,包处理宏指令被写入到输入宏指令队列(FIFO),指令寄存器设置其驱动包处理模块的状态机。包处理输入宏指令格式也用于包处理输出宏指令。本发明中的包处理输入宏指令可以指示控制/状态、源地址、目的地址、SA地址、用户ID、旁路偏移长度、包长等等。
包处理输入宏指令控制/状态字与SA结构内的被指定的数据一起,提供基本的指令译码信息给包处理模块。此命令提供给包处理模块用于处理包的各种指示。一旦所要求的操作被完成,不论是成功或不成功,此控制/状态字都会在包处理输出宏指令中提供结果状态。主机可以检查这些状态以决定下一步操作。
包处理输入宏指令控制/状态字寄存器可以包括:
所有权位:′10′,表示芯片主控,芯片通过轮询机制查看主机是否有宏指令需要处理,如果有就处理,没有宏指令需要处理就等待一段时间发起并查询是否被主机主控;所有权位:′01′,表示主机主控,主机通过轮询机制查看芯片的处理空间能否输入宏指令,如果能输入就,不能输入宏指令就等待一段时间发起并查询是否被芯片主控。
散列操作最后包位:′1′表示该数据是HASH操作最后一段是进行HASH填充的使能。
相关包或顺序包:如果宏指令来源是PCI则是相关包,宏指令来自SPI_3则是顺序包。相关包位的设定在需在所有的、除最后宏指令之外的宏指令中进行设置。相关包的包位设置为′0′表示是独立宏指令;′1′表示是多个相关宏指令。
填充控制/状态:在包处理输出宏指令中,填充状态域由本发明的VPN芯片写入,表示被***(输出)和检测(输入)到多少填充字节。输入包的填充检测功能只在IPSec或PKCS#7填充模式下使能。此填充字节数包括附加的如在IPSec ESP填充中的‘填充长度’和‘下个包头域’。
包处理输入宏指令控制/状态字寄存器可以包括若干错误/状态指示位。
本发明中的包处理模块源地址寄存器指示用于包处理模块的开始地址。此模块在输出到PCI或EMI时没有特殊要求,当输出为SPI_3时位[7:0]设为SPI_3的输出端口。
本发明中的包处理模块目的地址寄存器指定写入结果操作的目的地址(开始地址)。包处理模块SA地址寄存器用于指定SA记录开始地址。用户ID寄存器用于指定包的用户ID。包处理模块长度寄存器长度域表示用于操作所有通过VPN处理器的包数据总长(以字节为单位),在完成一个操作后,长度域将指定返回数据的结果长度。
下面说明本发明中的宏指令更新。包处理输出宏指令将会更新大多数包处理输入宏指令域(条目)。下表显示了被更新的各域操作:
在从输入宏指令队列读取一组有效包处理输入宏指令后,即按上表写回每个输入宏指令队列条目。注意多个输入宏指令队列条目可以在一次传输连发操作中被更新。
最后,‘控制’域的所有权位被更新,以显示VPN芯片已成功地读取这些条目,使得主机可以重新填入输入宏指令。这种设置还确保了VPN芯片不会从结束处返回开始重新处理已经被处理过的宏指令。
在输入宏指令队列处理后(或出现错误),输出宏指令将等待DMA输出至输出宏指令队列。如果输入宏指令队列和输出宏指令队列顶部相互重叠,本发明的VPN芯片将会探测到这种状态,并自动禁止输入宏指令队列条目的单独更新(因为包处理输出宏指令将改写所有权位,因此不需要单独更新输入宏指令队列条目)。
需注意,由于在本发明的VPN芯片中存在多个包处理引擎模块,包处理输出宏指令很可能以一种不同于读取包处理输入宏指令的顺序写出。对于重叠的输入宏指令队列和输出宏指令队列,这意味着包处理输入宏指令并不一定被相同包的包处理输出宏指令改写。
下面说明本发明的包处理输出宏指令。包处理模块完成一个包处理时,在输出宏指令队列内写入一个包处理输出宏指令。输出宏指令队列可以认为是输入宏指令队列的一个映射。用户指定输出宏指令队列位于哪个总线和哪个基址。这种灵活性可以使结果由芯片控制有效地被存入到主机(也就是说使用目标DMA写入方式)而无需要求主机完成主模式读取操作。
通常,如果主机不在内部输入宏指令队列缓冲区中写入包处理输入宏指令,那么输入宏指令队列和输出宏指令队列应在相互的顶部被覆盖,指令相同。这样可以减少宏指令的存储空间,并降低存储总线开销。如果输入宏指令队列和输出宏指令队列各自在独立的外部存储位置上,那么还需要另外更新输入宏指令队列所有权位,以防止包处理模块重复处理旧的宏指令。
通过SPI-3接口输出的数据包,在包数据后附上了包处理输出宏指令。另外,P_HD_DMA_CONFIG寄存器可以设有专门的位来控制是否“SPI-3的包处理输入宏指令”的处理结果也写入到输出宏指令队列。这会通知主机“PCI/EMI到SPI-3”处理已经完成,被分配的包存储空间可以被重新分配。
下面具体说明本发明的包处理体系结构。芯片中的包处理模块可以包括若干个(例如8个)相同的高性能的包处理引擎模块。宏指令输入保存在芯片内缓存区中,由指令译码仲裁器控制宏指令输入队列和输出队列。依据包处理宏指令的译码解释,DMA完成数据输入输出,SA输入或输出,进入包处理引擎模块完成包数据处理。
图17示出了本发明的包处理体系结构的示意框图。图中上半部分为所有包处理引擎模块共享逻辑的控制。图中下半部分显示的是这些包处理引擎模块中的一个结构,该结构的处理是依据宏指令的控制,将数据缓存,并分配下一个包数据;之后进行包头处理,依据SA指示完成算法处理,包尾处理和转存与输出数据缓冲区中,由DMA状态机完成整个包处理的操作。当主机的宏指令输入到队列中后,控制权转移到芯片,译码器识别数据源和目的后,控制DMA操作,并将SA策略的指针地址的数据传递交由DMA完成,通过包处理状态机控制完成包数据处理操作。
包处理模块可同时支持来自PCI-X或SPI-3这两个接口的包处理输入输出宏指令。通过总线控制器转换DMA处理,8个以上的并行和独立的包处理引擎模块可分别或同时接受PCI-X或SPI-3的数据。每个模块都可以使用对称加密和散列算法的部件模块。在处理包时,每个包处理引擎模块都能同时运行:芯片自动通过实施DMA状态机控制信息传输和通过主总线转换、加载到或是从主机/设备/内存上获取数据。DMA处理包括数据流控制,以保证处理资源与数据流的匹配。调用AH处理模块及ESP处理模块实现IPsec的拆包处理。在命令仲裁后,进行SA处理和命令处理。
下面首先说明包处理引擎模块的处理模块,如图17下部所示。处理模块可以包括密码单元和散列单元,用于执行相关的密码算法。密码单元可以进行DES、3DES、AES、ARC4加密和解密,同时散列单元可以进行SHA-1和MD5散列和HMAC算法。这些算法仅是作为示例,如前所述的,处理模块所能实现算法不限于此。围绕密码单元和散列单元的是协议包头/包尾处理模块,它们负责在数据包内***必要的域。例如:在一输出包内可以***:ESP包头(SPI&序列号)、ESP包尾(填充,下个包头&ICV)、AH包头(下个包头,SPI,序列号&ICV)、对AH操作更新IP包头域(下个包头、长度、检验和)、AH操作的可变位处理、IV***。对于一个输入包,处理器处理如下几项操作:确认序列号(IPSec ESP & AH)、确认ICV、确认填充值、剥去包头和包尾、剥去IV、剥去填充。
每个包处理模块提供输入和输出FIFO缓冲区(例如,2K字节大小)。该FIFO的数据传输是完全自动进行的。算法模块数据总是使用包处理模块的DMA控制器传输输入/输出缓冲区数据。
本发明的处理模块支持DES,3DES,AES(Rijndael)和ARC4等算法,并且支持DES及AES的两种操作模式:ECB和CBC。加密/解密操作可以是高度并行的和流水线的。在协议模式下,使用Ipsec协议标准的3DES-CBC模式。
算法模块可以对输入数据自动填充(pad)字节。例如,当输入数据不是8字节(64位DES模块)或16字节(128位AES模块)倍数时,算法模块将自动加上填充字节。对于如何进行填充,有多种选择,可以由SA表项指令0域填充控制位规定。
下面说明包处理模块的宏指令取指控制模块。芯片内的宏指令取指控制模块完成DMA的主模式读取,以从输入宏指令队列缓冲区中提取包处理输入宏指令。控制权位可以转换,这样主机和芯片之间的包命令传输和执行可以异步。位于主机存储器的输入宏指令队列缓冲区主要用于从PCI连接的主机与芯片之间传输包处理输入宏指令。在一个实施例中,从PCI连接的主机与芯片之间传输6个32位长度的包处理输入宏指令。
将包处理命令输入到包处理模块可以通过PCI-X或EMI接口实现。包处理输入宏指令在被传输到内部指令队列前,被送到片内的输入宏指令队列缓冲区(例如,包括32个表项)缓存。或者,4个32位长的包处理输入宏指令也可以来自SPI-3接口。在这种情况下,这些宏指令加在数据包前给出,因此不必通过宏指令取指控制模块处理。这些包处理输入宏指令在被传输到内部指令队列前,填装到一个片内的5个表项的包处理输入宏指令缓冲区缓存。来自SPI-3接口的宏指令节约了2个指令:一个是数据包的源指示,一个是用户ID(这是主机对数椐包来源的标识)。通过SPI-3接口时,数据源一定是该接口。
下面说明包处理模块的处理控制器(加密DMA控制器)。处理控制器用于控制包引擎模块的操作,其可以实现以下功能:
1.接收来自内部缓冲区缓存的包处理输入宏指令作为输入。
2.当收到一个有效的宏指令,处理控制器开始DMA传输,读取安全关联(SA)记录。SA记录通过1个连发访问读到内部总线,其中一些数据被送到处理模块内的安全关联寄存器,其它的如指令域数据送到处理控制器内的安全关联寄存器。
3.处理控制器解码SA内的指令并决定是否在提取输入包数据前还要执行其他的DMA传输,比如复制旁路数据并加载IV或对SA指定的状态记录做内部摘要。
4.处理控制器检测处理模块的状态输出并产生控制输入。对处理模块产生的1周期状态机控制信号包括:1)加密操作开始,2)安全关联SA数据输入结束,3)包数据输入开始,4)包数据输出开始,5)包数据输入结束,6)包数据输出结束。
处理模块控制总线在安全关联SA结束信号有效之前需稳定,该信号用于锁存操作类型和数据长度。
锁存到处理模块内的控制数据决定对数据进行何种操作。除了加密算法,此选项还包括是否***/拆除IPSec包头;是否AH操作应报告有效载荷或IP包头;是否应启动可变位处理等。
处理控制器监视处理模块内的可用的输入空间。一旦安全关联SA传输完成,可用空间超过预设的输入阈值,处理控制器开始进行DMA传输以复制尽可能多的输入包到处理模块。如上所述,包数据输入优先,以确保处理模块一直有数据处理。
如果没有足够的输入包数据空间或者如果输入传输完成了,处理控制器会测试输出数据长度是否超过了预设的输出阈值。如果超过了,会发起DMA传输输出包数据。这个步骤会一直持续到收到处理模块的操作完成状态信号,且所有输出包数据都已经写入到目的地址。
需注意:如果SA指定合包输入或分段输出,处理控制器将向分散合包处理模块发送信号(而不是向DMA控制器发信号),获得下一分段的宏指令并传输指定的字节数到处理模块。
在包输出完成后,处理控制器还要处理特殊的传输,如:更新已经写入到输出数据的认证数据(ICV)。按照IPSec协议,在更新输入ESP和AH包的SA序列号和抗重放窗口位图之前,处理控制器先检测认证是否失败。
在包处理结束时,处理控制器会建立一个DMA传输完成写出结果包处理输入宏指令。在此时,处理控制器是空闲的并准备接收下一个宏指令输入。
图18示出了本发明中安全关联(SA)的记录格式关联:安全关联(SA)指令字0(P_HE_COMMAND0_OFFSET)和安全关联(SA)指令字1(P_HE_COMMAND1_OFFSET)。
SA管理可以通过定制的主机软件完成。芯片SA管理完全依据主机的指令控制,这样SA可以在芯片内部公钥存储器或PCI-X总线或存储器中存储,通过指令索引实现SA加载。芯片可通过PCI-X或EMI总线读取访问主机或外部存储器的SA记录。每个SA记录的大小为128字节,对可以支持SA数量芯片没有限制。
当公钥操作不在芯片上进行时,芯片允许使用公钥算法模块中的RAM用于片上SA保存。在一个实施例中,该RAM可以最多保存每个128字节的64个SA记录。
在一个实施例中,使用以下步骤在片上公钥RAM上存储SA记录:
1.将SA写入到公钥RAM区,该区不用于公钥IKE输入或输出参数。
2.在包处理输入宏指令上指定公钥RAM地址为SA地址。宏指令上的SA总线ID设为内部总线‘10’上。
3.将包处理输入宏指令放置在输入宏指令队列上,并进行正常处理。
SA指令字0可以指示:操作码、是入还是出、操作组、填充方式、加解密算法选择、散列算法选择、包头处理、源总线ID、目的总线ID、IV来源、是否保存IV、保存HASH状态、是否输入合包、是否输出分段等等。
而SA指令字1可以指示是否复制包头到输出、是否复制有效载荷到输出、是否复制填充到输出、IPV4/V6、IP包头可变位处理、ECB/CBC选择、扩展头可变位处理、解密密钥、散列/加密偏移、密钥长度、ARC4状态、保存ARC4状态等。
对于SA指令字,还可以有些位被保留,以供将来或其他使用。
安全关联(SA)记录与包处理输入宏指令一起提供包处理模块所有执行操作的所有必要信息。SA记录包含用于有效生命周期内的静态设置和包处理模块动态更新的所有信息。所有需由主机确定和修正的控制信息都包含在包处理输入宏指令中。对于SA记录中的内容,芯片仅处理协议的基本操作信息,保留的位域供主机设置使用。SA中可以记录:指令字0和指令字1,用于DES、3DES和AES的密钥、内部摘要、SPI、序列号、抗重放窗口位图;校验和、保存的IV、保存的摘要字节数、保存的内部摘要等。
根据本发明一个方面,为了保证加密/解密的最佳性能,本发明的VPN芯片支持硬件填充功能。这些功能包括:在加密前生成并添加填充字节至数据包明文的末端;在将包解密后校验正确的填充字节;在将包解密后删除填充字节。
在一个实施例中,本发明的VPN芯片硬件可以支持四种填充模式:IPsec填充模式、PKCS#7填充模式、常数填充模式以及零填充模式,如下所示:
IPsec填充模式:添加0至255填充字节,继之以填充计数‘n’(0至255),然后是“下一包头”字节。填充字节数值是1至n。“下一包头”字节限定在填充控制寄存器中。总共可添加2至257字节。
PKCS#7填充模式:添加1至128字节:填充字节数值=填充计数的十六进制值,如果需要3个填充字节,那其应是:‘03,03,03’。
常数填充模式:将用户指定字符的0至255字节添加至明文数据,以确保总字节数是64位的倍数。包处理输入宏指令的第一个32位(P_HD_CONTROL_STATUS寄存器)给出了填充常数(从0x00至0xff的任何值)。
零填充模式:将0x00的0至255字节添加至明文数据,以确保总字节数为64位的倍数。
需注意,就ESP、零加密算法而言,本发明的VPN芯片仍将按标准添加填充为64位或128位的倍数(AES算法要求)。
如果主机***希望实现一种硬件不支持的填充类型,那么应选择模式3(零填充)。主机只要对需加密数据的末端主动***填充字符而确保输入包处于64位或128位的倍数即可,在这种情况下,硬件不会增加任何填充字节。
在某些填充模式中,本发明VPN芯片可以进行填充校验。例如,在IPSec和PKCS#7填充模式中,本发明的VPN芯片能够验证与期望值不同的解密填充(在ESP中,下一包头字节值未经验证)。对于IPSec填充来说,本发明的VPN芯片检查填充计数域的值是否符合填充字节数,且填充字节是以0x01开始的增量计数。对PKCS#7填充来说,假定包的最后字节数值为‘N’,那么在包的末端至少有‘N’个相同字节的复制字节,本发明的VPN芯片对此进行校验。
当包处理结束时,包处理输出宏指令(P_HD_CONTROL_STATUS寄存器)的第一个32位中的状态字节将显示填充校验状态。如果选择了填充模式2或3,则不会出现填充错误报告。
可选的,本发明的VPN芯片可去除使用IPSec或PKCS#7填充的输入包操作中的解密填充字节,节省I/O总线的数据传输时间。这是由每个包的SA记录分别决定。
根据本发明一个方面,芯片可灵活处理DES/3DES/AES初始向量(IV)。就输出包数据而言,IV可以以以下三种模式中的任一种来读取:能自动***(随机值);可从数据输入缓冲器的开始处读取;可从SA的状态记录中读取(输入宏指令队列和输出宏指令队列已激活)。第一种模式是最有效的,因为这种模式不需要任何额外的I/O,而且主机处理器不需要提供IV。当使用模式3时,应该使状态记录中的IV随发送的各包进行变化。可在处理包结束时(通过本发明的VPN芯片将IV写回至状态记录)做到这一点。
对于输入包数据而言,IV可以以下两个模式中的任一模式读取:可从数据输入缓冲器的开始处读取;可从SA的状态记录中读取(输入宏指令队列和输出宏指令队列已激活)。在大多数协议中,如IPSec协议,IV明确被传递至包的前部,因此应采用模式1。
图19示出了本发明包处理模块的配置寄存器模块。如图所示,本发明包处理模块的配置寄存器模块包括多个全局寄存器,包括:包处理模块DMA配置寄存器(P_HD_DMA_CONFIG);总线ID配置寄存器(P_HD_BUS_ID_CONFIG);输入宏指令队列的源基址寄存器(P_HD_PDR_SRC_BASE_ADDR);输入宏指令队列的大小及偏移寄存器(P_HD_PDR_SRC_SIZE_OFFSET);输出宏指令队列目的基址寄存器(P_HD_PDR_DST_BASE);输出宏指令队列的大小和偏移寄存器(P_HD_PDR_DST_SIZE_OFFSET);输入宏指令队列的轮询寄存器(P_HD_PDR_RING_POLL);输入宏指令队列外部状态寄存器(P_HD_PDR_SRC_SIZE_OFFSET);包处理模块I/O阈值寄存器(P_HD_MIN_INPUT_OUTPUT_SIZE)。
具体说明如下。
下面说明处理模块DMA配置寄存器是驱动芯片在线最后写入的一个寄存器,用于选择控制包处理路径的静态设置。这些设置在初始化时被典型设置,并不再改变。该寄存器指示是否复位所有的处理模块,是否复位输入宏指令队列计数器/指示器,是否复位分段/合包缓存,是否使能监控复位,输入宏指令源队列总线ID、输入宏指令目的队列总线ID、输入宏指令和输出宏指令启动、集中分段缓存队列总线ID、是否应用大小尾端交换到输入宏指令(仅PCI/PCIX)、是否应用大小尾端交换到SA、是否应用大小尾端交换到包数据、是否应用大小尾端交换到分段/合包宏指令、MPPE最大密钥更新次数、是否为串行模式、是否启动写入SPI3包处理输出宏指令。
注意:如果输入宏指令和输出宏指令启动位被设为‘1’(输入宏指令队列和输出宏指令队列使能),芯片将立即开始输入宏指令队列的状态机管理。
具体说明如下:
对于复位所有的包处理模块位,需注意:在初始化后,复位控制寄存器(P_KM_RESET_CONTROL)应被用于执行本发明的VPN芯片每个模块的异步复位,包括包处理模块
对于复位输入宏指令队列计数器/指示器位,需注意:如果输入宏指令队列没有使能,(此寄存器位8设为‘0’),那么此位会以复位状态留下。另外此复位需与宏指令状态机的‘所有权人’相协调,确保指示器在复位后的同步。
对于复位分段/合包缓存位,需注意:此复位需与分段缓冲区的‘所有权人’相协调,确保指示器在复位后的同步。
对于使能监控复位位,需注意:此致命错误的原因会是在AES操作中的无效填充或是用于AH操作的无效IP包头
对于输入宏指令和输出宏指令启动位,需注意:如果包处理输入宏指令和/或包处理输出宏指令将被执行,那么此位应被启动(设为“1”)。复位值=‘0’。由于SPI-3宏指令包括在输入数据流的开始中,因此SPI-3不使用包处理输入宏指令管理器。
对于应用大小尾端交换到输入宏指令位,需注意:如果启动设为‘1’,大小尾端交换将由P_PA_TGT_HASHENC_ENDIAN寄存器最低位指定。另外,如果在P_PA_TGT_HASHENC_ENDIAN寄存器内没有大小尾端交换指定,那此位设置无效。如果设置为‘0’,那么包处理输入宏指令将被提取时不带任何大小尾端交换
对于MPPE最大密钥更新次数位,需注意:MPPE(微软点对点加密)是一种用于PPTP生成加密连接的加密协议。当把MPPE与分段/合包合成时,需在包数据前附一个32位数,并且将旁路偏移量设置为4用于去除所附的32位数。
下面说明总线ID配置寄存器。此寄存器的目的是建立芯片的运行环境,此环境是用于选择和使用可用的总线:如PCI,EMI,内部总线以及SPI-3。为宏指令译码控制和数据输入输出传输控制产生控制源。注意:在复位以后的缺省状态下芯片处于等待,不允许任何输入/输出传输,仅当运行环境建立后,才开始执行控制。
此寄存器可以指示是否启动高可靠模式、HAE脚状态、输入宏指令队列总线ID、SPI3总线ID配置、是否启动红色/黑色传输包处理输入宏指令、包处理输入宏指令固定总线处理、SPI3红色/黑色传输启动、固定SPI3总线处理、高可靠模式测试控制。
在该寄存器中定义了包如何流过本发明的VPN芯片芯片,SA源自何处,以及是否执行分段/合包处理,是否总线ID固定或者通过使用SA记录里的总线ID域确定,来自输入宏指令队列的包源、目的和SA总线ID是否固定,SPI-3输入包的目的和SA总线ID是否固定。
通过对输入宏指令队列源和SPI-3接口输入包的总线ID固定分配,可以使得分配一个接口只用于明文数据、密文数据或两个都用。也可能定义一个固定源总线ID、固定目的总线ID和固定SA总线ID。对于SPI-3接口也是同样,不过,此时源ID不被定义,因为当使用SPI-3用于包处理输入宏指令时,源总线ID总是SPI-3接口。
固定分配包处理输入宏指令源和SPI-3接口的使用适用于要求明文/密文数据物理分离的应用。例如:来自包处理输入宏指令队列的输入包,对应的位能被设置为明文输入;对来自SPI-3的输入包,对应的位能被设置用于密文输入。这将指定PCI-X接口为明文包处理输入宏指令,指定SPI-3接口为密文包处理输入宏指令。对于来源于包处理输入宏指令队列的输入包,源总线ID(位[9:8])将被设置到PCI,目的总线ID将被设置到SPI-3。对于来源于SPI-3的输入包,目的总线ID将被设置到PCI-X,源缺省值为SPI-3。SA总线ID位可任意设置,但出于性能和安全的考虑推荐设置为EMI,SA访问在芯片的外部存储器。
下面说明本发明的输入宏指令队列的源基址寄存器。该寄存器值仅在P_HD_DMA_CONFIG寄存器的位(输入宏指令和输出宏指令启动位)被设置为‘1’,启动包处理输入宏指令和包处理输出宏指令管理器时产生作用。适用于来自PCI-X和EMI的宏指令。输入宏指令队列的源基址寄存器允许主机指定PCI-X存储空间的输入宏指令队列的源基址设置。
下面说明本发明的输入宏指令队列的大小及偏移寄存器。该寄存器值仅在P_HD_DMA_CONFIG寄存器的位(输入宏指令和输出宏指令启动位)被设置为‘1’,启动包处理输入宏指令和包处理输出宏指令管理器时产生作用。适用于PCI-X和EMI。输入宏指令队列的大小及偏移寄存器可以指示输入宏指令队列大小(表项数)、输入宏指令队列偏移。
下面说明本发明的输入宏指令队列目的基址寄存器。该寄存器值仅在P_HD_DMA_CONFIG寄存器的位(输入宏指令和输出宏指令启动位)被设置为‘1’,启动包处理输入宏指令和包处理输出宏指令管理器时产生作用。适用于PCI-X和EMI。输入宏指令队列目的基址寄存器指令指示输出宏指令队列基址。
下面说明本发明的输出宏指令队列的大小和偏移寄存器。该寄存器值仅在P_HD_DMA_CONFIG寄存器的位(输入宏指令和输出宏指令启动位)被设置为‘1’,启动包处理输入宏指令和包处理输出宏指令管理器时产生作用。适用于PCI-X和EMI。输出宏指令队列的大小和偏移寄存器指令用于指示输出宏指令队列大小和输出宏指令队列偏移。
下面将说明本发明的输入宏指令队列的预约登记寄存器。该寄存器值仅在P_HD_DMA_CONFIG寄存器的位(输入宏指令和输出宏指令启动位)被设置为‘1’,启动包处理输入宏指令和包处理输出宏指令管理器时产生作用。适用于PCI-X和EMI。该寄存器指令指示队列预约查询因子(设置值用于分频并得到查询时间频率)、队列重试因子(设置值用于分频并得到重试时间频率)、是否连续取指。
根据本发明的一个实施方案,包处理模块的输入宏指令队列轮询寄存器允许设置两个用于宏指令取指控制器的轮询参数:第一个参数是VPN芯片从外部输入宏指令队列读取宏指令进入到内部输入宏指令队列缓存的基本查询频率;以及第二个参数是重试时间间隔,指定VPN芯片读取无效宏指令条目(所有权位不是分配给本发明的VPN芯片芯片)后,再次重试之间需要等待的时间。此重试时间间隔应设置为比轮询等待时间间隔短的周期,否则下一个查询将先于重试。这两个参数都主要用于限制宏指令查询过程所消耗的带宽。
需注意:读取宏指令中断可能先于查询等待时间进行,这会导致间隔时间没到就执行宏指令读取。这种情况下,查询等待时间会重新复位到开始点。另外,需注意:如果宏指令被直接写入到芯片内部输入宏指令队列缓存,那么此寄存器被忽略。此模式被配置为输入宏指令和输出宏指令启动位。
下面说明本发明的输入宏指令队列外部状态寄存器。输入宏指令队列外部状态寄存器指令用于指示包处理输入宏指令-输入宏指令队列读取计数器、包处理输入宏指令-输出宏指令队列写入计数器。
下面说明本发明的包处理模块I/O临界值寄存器。包处理模块输入/输出缓冲区阈值寄存器,用于指定包处理模块应开始向包处理缓冲区RAM传输包数据或输出包数据的“最大限度”和“最小限度“的长度设置,用于控制来自包处理模块的包数据输入和输出的DMA连发数据存取大小。该寄存器指示包处理模块输入临界值、Pkt输入完成、包处理模块输出临界值等。
需注意:P_DMA_APP_指令寄存器传输长度设置将可以限制通过PCI-X接口传输的数据长度。复位值0x008是非常短的包数据连发存取,但它仍是有用的,因为很难提供一种可满足所有尺寸包的设置。输入和输出阈值表示高于该值输入缓冲区将停止要求输入数据,同时输出缓冲区开始要求输出数据的的长度(32位为单位)。对于输入缓冲区,最好设置阈值高一些,以平衡用户希望在包处理模块源接口上的最大连发存取尺寸要求。长连发存取将长时间占用总线,但传输效率会更高。对于输出缓冲区,理想的阈值设置是对于满足小于2K字节的输出缓冲大小的包,可以通过一次连发操作完成输出。期望在包处理模块处理数据的最后部分时就开始从缓冲区中传输数据包(即边处理边输出),这样将使得处理和写出的完成是差不多在同时完成的。这需依据将要传输的包的长度而定。
下面具体说明根据本发明示例性实施例对包的处理。
图20示出了根据本发明的基本加密包格式。根据本发明的一个实施方式,主机需按照以下方式准备输入数据:
如果设置了安全关联(SA)指令字P_HE_COMMAND0_OFFSET“从输入装载IV”,则:a)主机需将IV放在在旁路偏置的后面,有效载荷的前面;b)对于基本加密运算,本发明的VPN芯片自动对IV偏置使用标准设置值。即,如果使用DES/3DES,芯片自动以64位IV定位有效载荷位置;如为使用AES,则依据128位IV。
本发明的VPN芯片在包处理上执行以下操作:
1.从源复制“旁路偏置”数据到目的地址。
2.如果设置了“从输入装载IV”,则从输入流中获取IV,并用于加密。否则,使用来自于根据P_HE_COMMAND0_OFFSET[25:24]定义的其他源获取IV。
3.根据安全关联(SA)指令字P_HE_COMMAND0_OFFSET[7:6]附加填充。
4.使用指定的算法对包进行加密,并将结果写出到目的地址。
5.在包处理输出宏指令队列中更新数据包长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成”。
需注意,即使对“零加密算法”运算,仍然需要填充到64位的倍数(对于ARC4,不需要添加填充)。还需注意,IV应传输给收方,如果设置了安全关联(SA)指令字P_HE_COMMAND0_OFFSET[28],则可从“状态”记录中获取IV。另外,还需注意,对于基本加密操作,使能“复制包头到输出”不会将IV从源地址复制到目的地址。
图21示出了根据本发明的基本解密包格式。根据本发明的一个实施例,对应的,主机需按照以下方式准备行输入数据:
如果设置了安全关联(SA)指令字P_HE_COMMAND0_OFFSET“从输入装载IV”,则:
a)主机需将IV放在旁路偏置之后,有效载荷的前面。
b)对于基本解密运算,VPN芯片自动对IV偏置使用标准设置值。即,如果使用DES/3DES,芯片自动以64位IV定位有效载荷位置;如为使用AES,则依据128位IV。
根据本发明的一个实施例,本发明的VPN芯片在包上执行以下操作:
1.从源复制“旁路偏置”数据到目的地址。
2.如果设置了“从输入装载IV”,则从输入流中获取IV,并用于解密。否则,使用来自于根据安全关联(SA)指令字P_HE_COMMAND0_OFFSET[25:24]定义的其他源。
3.使用指定的算法对包进行解密,并将结果写出到目的地址。
4.如果没有设置“复制输入填充到输出”,且如果填充类型不是“零”或常数填充,则检查并丢弃来自加密有效载荷的填充。
5.在输出宏指令中更新数据包长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成”。
需注意:对零加密算法数据需要做填充,对ARC4密文不需要;设置“复制包头到输出”不会将IV从源复制到目的地址。
图22示出了基本HASH包格式。
根据本发明的一个实施方案,主机需通过SA记录中的安全关联(SA)指令字P_HECommand0_OFFSET使能“保存HASH状态”控制,则VPN芯片将在运算结束后将hash摘要填入SA状态纪录中。输出的有效载荷中不包括HASH摘要。
本发明的VPN芯片在包上执行以下运算:
1.从源复制”旁路偏置”数据到目的地址。
2.使用指定的算法对有效载荷进行HASH或HMAC运算。
3.若设定了“保存HASH状态”,将字节数和HASH摘要写到该SA的状态记录。
4.如果设定了“复制有效载荷到输出”,则将有效载荷写到目的地址。
5.在输出宏指令中更新数据长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。
需注意,本发明的VPN芯片可按照标准要求自动执行MD5或SHA-1填充。
图23示出了基本HASH-加密包格式。根据本发明的一个实施方案,主机需通过SA记录中的安全关联(SA)指令字P_HECommand0_OFFSET使能“保存HASH状态”控制,则VPN芯片将在运算结束后将hash摘要填入SA状态纪录中。输出的有效载荷中不包括HASH摘要。
主机需按以下方式进行输入数据的准备:如果设定了“从输入装载IV”:主机需将IV(如果使用的话)放在有效载荷的前面:如DES/3DES,则64位:或者,如AES,则128位。
主机需将安全关联(SA)指令字P_HECommand1_OFFSET中的“HASH/加密偏置”设置为对应IV的长度(如果使用的话):如DES/3DES,则2个32位:或者,如AES,则4个32位(注意,HASH/加密偏置中需要进行HASH而不加密的部分还可以包含更多的数据,而不仅是IV)。
需注意,本发明的VPN可按照标准要求自动执行MD5或SHA-1填充。即使对“零加密算法”运算,仍然需要填充到64位的倍数。
图24示出了根据本发明一个实施例的基本HASH-解密包格式。
对于Hash解密,根据本发明一个实施方式的VPN芯片在包上执行以下运算:
1.从源复制”旁路偏置”数据到目的地址。
2.如果设置了“从输入装载IV”,则从输入数据装载IV。
3.解密并重新认证数据包(如DES/3DES,则HASH/加密偏置可为64位;如AES,则128位;或者如果附加其他数据,可为更长。)
4.如没有设定“复制包头到输出”,丢弃整个HASH/加密偏置,包括IV。注意:如果该偏置超过IV的长度(除IV外还包括其他数据),则IV被认为是偏置数据中最靠近有效载荷的数据:如DES/3DES,则64位;或者,如AES,则128位。
5.如果没有设定“复制输入填充到输出”,则丢弃填充值(仅对IPSec/PKCS填充模式丢弃,对零或常数填充则不丢弃)。
6.如果设定了“保存HASH状态”,则将HASH摘要写到该SA的状态记录。
7.写有效载荷到目的地址。注意:在一次包含加密或解密的运算中,本发明的VPN芯片均将复制有效载荷到输出,不管“复制有效载荷到输出”的设置如何。
8.在输出宏指令中更新数据长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。注意:VPN芯片即始对零加密数据也查验填充值。
图25示出了根据本发明一个实施例的ESP输出隧道模式包格式。根据本发明一个实施方式,在内部包头前还可附上ESP头和IV(可选),在图中没有显示出来。在隧道模式中,理论上ESP是在添加外部IP包头前进行的。但主机可以选择预构造外部IP包头,并使用旁路功能而使得在VPN芯片不被处理。
主机须按以下方式准备输入数据:
1.如果没有使能“包头处理”(HEADER_PROCESSING):
a)主机需包含ESP包头(SPI、序列号),在旁路数据(如果有的话)之后,在任何其他数据之前。
b)如果设定了“从输入装载IV”:主机需将IV放在有效数据的前面。
主机可能会选择在VPN芯片进行处理之前或之后加外部隧道IP包头。如果隧道包头在加密处理之后加,那么旁路偏置应该被设置为0。VPN芯片不会处理包含在旁路偏置中的外部IP包头。如果在外部IP包头中在ESP头之前存在IPv4选项或IPv6扩展包头,那么也应该被包括进旁路偏置数据中。即使对一个“零加密算法”运算,仍将添加填充(ESP有要求,目的是为了为“下一包头”域留出空间)。对于“零加密算法”,填充至64位的倍数。
图26示出了根据本发明一个实施例的ESP输入隧道模式包格式。在一个实施例中,本发明的VPN芯片在包上执行以下操作:
1.从源复制”旁路偏置”数据(如果出现的话)到目的地址。
2.如果使能“包头处理”(HEADER_PROCESSING),解析ESP包头,并对照SA中的预期SPI、预期序列号和抗重放窗口位图对SPI和序列号进行验证(如果出现旁路偏置,后面紧跟着的就是ESP包头)。
3.从输入数据装载IV。IV紧随ESP包头之后。
4.解密并认证数据包。
5.如果没有设定“复制包头到输出”,则丢弃ESP头和IV。
6.验证“密文填充”并提取下一包头。
7.如果没有设定“复制输入填充到输出”,则丢弃“填充”(对于ESP运算,填充部分包含了ESP包尾(填充+填充长度+下一包头))。
8.如果认证算法不是零算法,则对照包含在数据包中的ICV和计算的ICV进行验证。
9.如果认证算法不是零算法,则丢弃包中所包含的ICV。
10.如果使能“包头处理”(HEADER_PROCESSING),ICV验证正确,且SPI和序列号有效,则在SA记录中更新“序列号”和“抗重放窗口位图”域。
11.在输出宏指令中更新数据包长度、“下一包头”、检测的填充长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成”。
在本发明的一些实施例中,主机将剥离外部隧道IP包头,然后再将其送给VPN芯片进行解密。但是,也可以通过使用旁路偏置数据,使其直接通过VPN芯片。
在本发明的一些实施例中,不管“复制包头到输出”、“复制有效载荷到输出”或“复制填充”域是如何被设置的,均不会将ICV返回给主机。
图27示出了根据本发明一个实施例的ESP输出传输模式包格式。本发明的VPN芯片在ESP传输模式中的运算与隧道模式完全相同。主机可以选择使用旁路功能来传输内部IP包头,但在此情况下,本发明的VPN芯片将不更新IP包头来反应变更的数据包长度、下一包头或校验和。主机需完成这些操作。
主机可选择将内部IP包头传输给本发明的VPN芯片或不传输。上述例子描述的是将内部包头传输给VPN芯片并通过芯片进行简单复制的范例。如果内部包头被安排在算法处理之后加,则旁路偏置应被设置为0。
如果有附在ESP包头之前的IPv4选项或IPv6扩展包头,则应将它们包含在旁路偏置数据之内。
图28示出了根据本发明一个实施例的ESP输入传输模式包格式。当设置了“复制包头到输出”时,在输出中可包含ESP包头和IV。此外,当设置了“复制填充”时,在该输出中可包含ESP包尾(填充+填充长度+下一包头)。VPN芯片在ESP传输模式中的运算与隧道模式完全相同。主机可以选择使用旁路功能来传输内部IP包头,但在此情况下,VPN芯片将不更新IP包头来反应变更的数据包长度、下一包头或校验和。主机须执行这些操作。
一般情况下,主机将剥离外部隧道IP包头,然后再将其送给VPN芯片进行解密。但是,也可以通过使用旁路偏置数据,使其直接通过VPN芯片。
图29用于说明根据本发明实施例的AH包头定位及可变位处理(IPV6)。图30用于说明根据本发明实施例的AH包头定位及可变位处理(IPV4)。
图31示出了根据本发明实施例的AH输出包格式。在输入中,在IP内部包头之前和之后都可出现选项和扩展包头,在图中未示出。当没有设定包头处理时,AH头包括在输入中。无论隧道模式和传输模式都一样。
主机需按照以下要求准备输入数据:
如果没有使能“包头处理”(HEADER_PROCESSING):
主机需紧随IP外部包头之后包含AH包头(下一包头、包头长度、SPI、序列号、加上留给ICV的若干字节的“空档”)。在IPv6情况下,在AH包头之后可放置与IP外部包头相关的目的扩展包头。IP外部包头需正确设置自己的“下一包头”、“长度”和“校验和(IPv4)”域,以反应AH包头的状况。由于HMAC操作包含包头,这些域在经过VPN芯片的操作之后不会更新。
VPN芯片在包上执行以下运算:
1.从源复制旁路偏置数据(如果有的话)到目的地址。
2.如使能“包头处理”:***AH包头到包中,包括下一包头、包头长度,加上来自SA的SPI和序列号。注意,“下一包头”域是来自主机提供的包处理输入宏指令。在外部IP包头中更新下一包头、长度和校验和(IPv4)。在SA记录中更新“序列号”。
3.在AH包头中在ICV位置填零。
4.根据IPsec标准,对数据包进行HMAC运算。如果设置了“可变位处理”(MUTABLE_BIT_HANDLING),则此操作将所有可变位置零处理。
5.将截取的96位ICV写入到AH包头中。
6.如果没有设定“复制包头到输出”,则丢弃IP外部包头。
7.如果没有设定“复制有效载荷到输出”,则丢弃IP内部包头和有效载荷。
8.在输出宏指令中更新新的长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。
由于外部IP包头和内部IP包头都需要进行认证,因此通常情况下旁路偏置将被设置为0。当其他***控制数据附在到包上时,可以使用旁路偏置功能。如果“复制包头到输出”和“复制有效载荷到输出”都没有被设置,那么仅仅返回ICV,且结果长度=12(96位)。当“复制包头到输出”或“复制有效载荷到输出”使能时,均返回AH头+ICV。
图32示出了根据本发明实施例的AH输入包格式。在输入中,在IP内部包头之前和之后都可出现选项和扩展包头,在图中没有示出。
VPN芯片在包上执行以下操作:
A.从源复制任何”旁路偏置”数据(如果有的话)到目的地址。
B.查找AH包头的位置(IPv4:VPN芯片通过读取外部包头长度来计算与AH包头之间的偏移。IPv6:VPN芯片通过外部IP包头和扩展包头来定位AH包头)。
C.如果使能“包头处理”(HEADER_PROCESSING),则解析AH包头,并对照SA中的SPI、预列号和抗重放窗口位图对SPI和序列号进行验证。
D.将来自数据包的ICV保存到一个临时缓存,将包中的ICV置零。对包进行HMAC运算,并对照保存在临时缓冲中的ICV验证结果。
E.如果没有使能“复制包头到输出”,则从数据包中剥离IP外部包头(还要剥离可能出现的AH包头和扩展包头)。
F.如果没有使能“复制有效载荷到输出”,则剥离IP内部包头和数据包的有效载荷部分[注意:如果既没有设定“复制包头到输出”也没有设定“复制有效载荷到输出”,则结果长度可能为零]。
G.如果SPI、序列号和ICV都验证正确,则更新SA记录中的“序列号”和“抗重放窗口位图”域。
H.在输出宏指令中更新结果长度、“下一包头”、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。
由于外部IP包头和内部IP包头都需要进行认证,通常情况下旁路偏置将被设置为0。当其他***控制数据附在到包上时,可以使用旁路偏置功能。对于AH输入来说,VPN芯片不会更新外部IP包头中的任何域(例如下一包头、长度以及校验和域)。主机需在VPN芯片完成后对这些域进行更新。注意,当设定了“复制包头到输出”后,将返回AH头+ICV。当选择了零加密算法后,VPN芯片不验证填充。
图33示出了根据本发明实施例的ESP和AH输出隧道模式包格式。捆绑运算通过使用多个指向同一个数据包的连续包处理输入宏指令来实现。“相关包”位需在所有的、除最后宏指令之外的宏指令中进行设置。
运算1:第一个宏指令指定执行ESP隧道模式:
1.第一个宏指令指定一个旁路偏置,等同于外部隧道包头和所有选项/扩展的大小。
2.如果没有使能“包头处理”,则主机需要在需要旁路的数据中包含进AH包头。AH包头的“下一包头”域需被设置为ESP。
运算2:第一个宏指令指定执行AH隧道模式:
1.由于AH需认证整个数据包,第二个宏指令的旁路偏置指定为0。
2.在该运算阶段,VPN芯片需更新IP外部包头的数据长度、下一包头和校验和等数据。
外部隧道IP包头需被包含在数据包内提交给VPN芯片,因为在AH认证中需包括外部隧道IP包头。
图34示出了根据本发明实施例的ESP和AH输入隧道模式包格式。捆绑运算通过使用多个指向同一个数据包的连续包处理输入宏指令来实现。“相关包”位需在所有的、除最后宏指令之外的宏指令中进行设置。
运算1:第一个宏指令指定,执行输入AH隧道模式:
a)第一个宏指令指定旁路偏置为0,因为AH需认证整个数据包。
b)如果没有使能“复制包头到输出”,则丢弃IP外部包头和AH包头。
运算2:第二个宏指令指定执行输入ESP隧道模式:
a)如果设定了“复制包头到输出”,第2个宏指令需指定一个旁路偏置,等同于外部隧道包头的大小,包括所有选项/扩展,以及AH包头。
外部隧道IP包头需被包含在数据包内提交给VPN芯片,因为在AH认证中需包括外部隧道IP包头。当选择了零加密算法后,VPN芯片将不验证填充。
图35示出了根据本发明实施例的SPI-3常规输出包格式。主机需按照以下方式进行输入数据的准备:
·每一个输入到SPI-3TX接口上的数据包需在其前有一个包处理输入宏指令。
·包数据的字节长度需完全等同于宏指令中所规定长度。
·SPI-3包的总长度需完全等同于包数据长度加包处理输入宏指令的字节数。
包数据格式可以包括一个旁路数据域、一个IV和依协议而定的包头。每一个输出到SPI-3RX接口上的数据包都有一个包处理输出宏指令尾随其后(例如16字节)。目的地址域为SPI-3端口号,数据包通过此端口进行传输。包数据的字节长度等同于宏指令中所规定的长度。包数据可能有一个零长度,在这种情况下,SPI-3包只有一个宏指令。包处理输出宏指令在SPI-3传输的数据包中可以以64位计数定位。在此情况下,若包数据不是64位的倍数,则在包数据和宏指令之间需要***1-7个字节的填充。这些填充字节的值不做规定。包数据格式包数据格式可以包括一个旁路数据域、一个IV和依协议而定的包头。该格式不适用于带“复制有效载荷”的AH输出包。
图36示出了根据本发明实施例的SPI-3带复制有效载荷的AH输出包格式。在AH输出包情况下,只有在整个包被HASH之后才能够知道ICV。因此,在此情况下,SPI-3RX将在有效载荷之前输出一个无效ICV,并在有效载荷之后及输出宏指令之前输出正确的ICV。
根据本发明一个方面,包数据是一个AH包,AH包的ICV(例如12字节)初始化为“零”。它包括一个IP包头,随后为扩展包头(可选),再随后为一个带无效ICV零的AH包头,再随后为其他包头(可选),最后为一个AH有效载荷数据。包数据的总字节长度在宏指令的长度域中规定。正确的ICV值在SPI-3RX传输的数据包中以64位计数定位。因此,若在此之前的包数据不是64位的倍数,则在包数据和ICV之间需要***1-7个字节的填充。这些填充字节的值不做规定。包处理输出宏指令可以同样也以64位计数定位,因此始终与ICV保持4字节填充的间隔。这些填充字节的值不做规定。接受AH包的主机需对整个包进行缓冲处理,并在正确位置***正确的ICV,然后才能将该包转发出去。
图37示出了根据本发明实施例的MPPE输出。在图中,如果没有使能“包头处理”,则需在输入数据包中放置MPPE包头。
主机需按照以下方式准备输入数据:
如果没有使能“包头处理”,主机需在输入数据包中包括MPPE包头。该包头长度为4个字节,开始字节为0x00和0xfd(压缩数据包的PPP协议包头)。第3个和第4个字节包含12位一致性计数(第3个字节是高字节)和4位标识(分别标识A~D)。D标识位需被设定,A标识位是重开始位,在以下情况下需设定:
a)不带状态的MPPE。
b)在带状态MPPE的情况下,第1个数据包或者在复位请求后需设置。在此情况下,数据包处理输入宏指令中控制状态域的位[3]需被设置。
c)对于带状态MPPE,如果一致性计数的最低字节是0Xff。
VPN芯片在包上执行以下操作:
A.从源复制“旁路偏置”数据(如果出现的话)到目的地址。
B.如果使能“包头处理”:SA中的一致性计数加1。在数据包中***4字节长MPPE包头,包括:PPP协议包头0x00、0xFD、12位一致性计数(储存在SA中)以及A到D的4位标志位。
C.根据MPPE模式和包处理输入宏指令的控制状态域中位[3],更新RC4密钥和状态,如下:
a)对于不带状态的MPPE,执行密钥更新算法,并从新的会话密钥初始化RC4状态。
b)对于带状态的MPPE,如果一致性计数的低字节为0xFF,执行密钥更新算法并从新的会话密钥初始化RC4状态。
c)对于带状态的MPPE,如果设定了包处理输入宏指令的控制状态域中的位[3],则从新的会话密钥重新初始化RC4状态。
d)对于其他情况下的带状态MPPE,不改变RC4状态。
D.使用在前面操作中获得的RC4状态,用RC4算法加密有效载荷数据。
E.在输出宏指令中更新结果长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。
图38示出了根据本发明实施例的MPPE输入。在图中,如果使能了“复制包头到输出”,则在输出包中会出现MPPE包头。
主机需按照以下方式准备输入数据:
主机需对MPPE已加密数据包提供4字节的MPPE包头,包括PPP协议域0x00、0xFD和一致性计数和4位标志位(来自于输入的数据流)
VPN芯片在包上执行以下操作:
A.从源复制”旁路偏置”数据(如果出现的话)到目的地址。
B.检查MPPE包头中的一致性计数,应该为SA中的一致性计数再加上1。复制MPPE包头到SA中的相关域。如果一致性计数不匹配预期值,则执行以下操作:
a)对于不带状态模式,如果实际值和预期值之间的差额小于一定的限度,则接受数据包的丢失,并执行密钥更新算法,执行的次数根据该差额而定。
b)对于不带状态模式,如果该差额大于所规定的限额,则中止数据包处理。
c)对于带状态模式,如果设定了包头中的重开始位,任何一致性计数都可以接受,即使SA中MPPE包头域中的“D”位为0。芯片将执行密钥更新算法,执行的次数根据所遗漏的“标志”包(一致性计数的低字节为0xff)的数量而定。
d)对于带状态模式,如果SA中MPPE包头域中的“D”位为0,则该数据包视为错误。不再对该数据包进行进一步处理。
e)对于带状态模式,如果一致性计数不匹配预期值,且没有设定重开始位,则视为错误。芯片将清除SA中所存储MPPE包头域中的“D”位,以表明遇到一个一致性计数错误。主机需向发送方发出一个同步请求。
C.根据MPPE模式和所接收的MPPE包头内容的不同,按照以下方式初始化RC4状态。
a)对于不带状态MPPE,执行密钥更新算法,并从新的会话密钥中初始化RC4状态。
b)对于带状态MPPE,如果一致性计数的低字节为0xFF,执行密钥更新算法,并从新的会话密钥中初始化RC4状态。
c)对于带状态MPPE,如果在MPPE包头中设定了重开始位,从当前的会话密钥重新初始化RC4状态
d)对于在所有其他带状态MPPE的情况,不更改RC4状态。
D.用前面操作中所获得的RC4状态,解密RC4的有效载荷数据。
E.如果没有设定“复制包头到输出”,丢弃MPPE包头。
F.在输出宏指令中更新结果长度、“状态”和“VPN芯片完成”。在包处理输入宏指令(如果和输出宏指令队列分开的话)中更新“VPN芯片完成。
通常情况下旁路偏置被设置为0。如果使用发段/集中处理,需增加4个字节的无效旁路数据,并关闭包头处理。当其他***控制数据附在到包上时,可以使用旁路偏置功能。“包头处理”位无效。芯片均检测MPPE包头。
根据本发明另一方面,SA记录可以包括前述的指令字0、指令字1、会话密钥、初始密钥、保存ARC4i&j指针、statesalt字节、MPPE一致数计数+包头以及ARC状态记录等等。
以上结合具体实施例说明了本发明的包处理模块。本领域技术人员将理解,上面所列出的数值,例如位宽、字节数等等仅是为了说明的方便,本领域技术人员可以根据其需要而任意设置适当的数值。
下面说明根据本发明的VPN芯片中对分组、散列和公钥算法模块的配置和译码控制器设计。对分组、散列和公钥算法模块的宏指令配置和译码设计,主要包括:初始化、复位、激活、功能使能控制、数据操作控制。
复位宏指令是一个典型的针对IP设计的配置文件。控制信息全部来自宏指令信息。由该宏指令指示芯片的一个或多个模块的复位态。***复位后,所有模块保持在工作状态(初始态)。
在应用***环境确立之后,主机依据实际需求已经完全掌握芯片的处理功能,可以有选择地停止不需要的模块操作(可以节省功耗)。例如:做D-H时,分组算法不执行;PCI控制操作时,SPI3不执行;模幂运算时,包处理不执行;分组算法在处理时也仅仅是用一种算法。因此,本发明的复位宏指令(其可以是静态宏指令)仅控制每个模块的复位操作,可以将各模块保持在复位状态,并通过指令灵活配置模块状态。一般情况下,主机仅在初始化时配置一次。图39进一步示出了根据本发明一个实施例的复位宏指令语用。如图所示,在该实施例中,复位宏指令可以控制图中所示的多个模块的复位。
下面说明本发明的算法模块激活宏指令。图40示出了根据本发明实施例的算法IP的模块示意框图。首先说明分组算法密文控制指令。该分组算法密文控制指令可以控制分组算法模块(例如RJNDAEL算法AES、3DES、AR4等)的激活。该算法模块的运行操作使能与激活共同作用。这是一种选择控制。
图41示意性地示出了分组算法模块激活宏指令语用。复位宏指令配置与控制的语用(逻辑设计)和算法模块激活的宏指令在逻辑意义上是完全相同。根据本发明一个方面,与操作使能共同驱动算法模块运行。
图42示出了根据本发明另一方面的算法模块激活宏指令语用。如图42所示,来自算法模块激活宏指令的一位控制,用于激活散列算法MD 5和SHA1。在同一时刻,只有一个模块运行。
所述复位指令和算法模块激活指令可以由***配置模块的复位模块发布。
下面说明本发明的公钥算法模块。本发明的公钥算法模块可以实现:大规格数据加减运算、大规格数据乘除运算、大规格数据模运算、数据左右移位操作、大规格数据比较运算、大规格数据模幂乘运算。公钥算法模块起到公钥算法内核和模幂运算器的控制作用。公钥算法内核执行常规大数运算,模幂运算器则提供高速模幂乘运算。
图43示出了根据本发明实施例的公钥算法模块结构。如图所示,本发明的公钥算法模块可以从PCI-X/PCI接收/发送控制数据,从EMI接收/发送数据。公钥算法模块包括公钥算法内核、公钥算法模块控制器、模幂运算器等。公钥算法模块可通过PCI总线输入指令和数据。例如,可以通过三个独立的指令寄存器组(大数值运算寄存器,定长模幂运算寄存器,变长模幂运算寄存器),从PCI总线输入。变长模幂运算和定长模幂运算指令用于执行模幂乘运算,如Diffie-Hellman和RSA(中国剩余定理[CRT])计算。大数值运算指令用于执行一般大数运算(加、乘等)。上述的指令寄存器组仅是示例,也可以包括更多或更少的指令寄存器组,其也可以不是独立的甚至是相同的。
公钥算法模块处理各指令占用资源具有优先权(他们是实施控制的宏指令,只要有操作启动,就开始计算,并占用存储资源(例如,8K和1K字节))。注意,这三个寄存器组可以是独立的,主机可同时发出执行指令。用于公钥计算的数据储存在公钥模块RAM中(例如,以8K字节形式),可通过PCI总线读取。除了输入数据和结果数据外,RAM内还有计算过程中公钥算法模块生成的中间参数。根据本发明一个方面,主机负责配置公钥算法模块进行有效运算,提供正确的操作数据并给结果数据分配空间。
公钥算法内核RAM是一个双端口的体系结构,其中一个端口与主机接口相连(经PCI或EMI)。主机可在任何时间读/写这个RAM。本发明的VPN芯片设计允许公钥模块RAM用于芯片内SA记录储存。而模幂运算器也可以包括模幂运算器RAM,其是模幂运算器的专用资源,可通过PCI总线读取,主要用于测试。
图44示出了根据本发明实施例的大数值运算模块(公钥算法内核)结构。大数值运算是指对大数的基本运算。在本发明的一个实施例中,VPN芯片的公钥算法内核可以包括乘法器、累加器、除法器、移位器,以及内核调度模块,如图44所示。芯片可以自行控制数据在公共存储器中的操作。
下表示出了本发明的大数值运算模块可以执行的运算。
函数 |
数学运算 |
A_addr |
B_add |
C_addr |
D_addr |
乘 |
AxB |
被乘数 |
乘数 |
结果 |
无 |
加 |
A+B |
加数 |
加数 |
结果 |
无 |
减 |
A-B |
加数 |
加数 |
结果 |
无 |
右移 |
A>>移位值 |
输入 |
无 |
结果 |
无 |
左移 |
A<<移位值 |
输入 |
无 |
结果 |
无 |
除 |
A/B |
被除数 |
除数 |
余数 |
商 |
模 |
AmodB |
被除数 |
模数 |
余数 |
无 |
比较 |
A=BA<BA>B |
输入A |
输入B |
无 |
无 |
转移 |
A->C |
输入 |
无 |
结果 |
无 |
另外,软件可使用以下公钥处理模块中断位:通道0上完成的模幂运算器操作,通道0上完成的模幂运算器操作,队列操作直到公钥算法内核完成。
大数值运算模块的输入数据应符合相应的要求,避免主机设定非法数据规格操作。所述非法操作包括数学上未定义的操作(如零除)和超出公钥算法内核数据规格的操作。根据本发明的一个实施方式,主处理器需按照设计给出的控制与操作数据,公钥算法模块不检查非法操作。
本领域技术人员将理解,可以采用例如16位、32为、64位、128位等等的位宽,可以采用其他的更高和更低的位宽。相应的,对数据长度等的要求也会相应改变。也可以采用更多或更少的限制,只要能够实现本发明中的功能即可。
下面说明根据本发明实施例的模幂(乘)运算模块。根据本发明,模幂运算器支持模幂计算,在本发明的一个实施例中,其执行的操作包括基本模幂乘运算操作和/或使用中国剩余定理的RSA-CRT操作。
图45示出了根据本发明一个实施例的模幂运算器,其包括四套独立资源,每套资源实现一定位数(例如,512位)模幂乘运算。各资源实现的规格可以重组,以实现更大规格的数据操作。可经变长模幂运算指令和定长模幂运算指令(寄存器组)启动运算。
在本发明的一个实施方式中,变长模幂运算寄存器控制模幂运算器第0套资源的入口,定长模幂运算寄存器控制模幂运算器第2套资源的入口。模幂运算器第0套资源可与其他三套资源组合,以支持例如1024位、1536和2048位运算。模幂运算器第2套资源只能模幂运算器第3套资源组合,因此最大运算量是1024位。然而,这仅是示例性的,也可以进行其他的入口设置和组合。
在本发明的一个实现方案中,芯片可以不支持主机对模幂运算器第1套资源和模幂运算器第3套资源的支持控制。所示的资源数量及位宽仅是示例性的,可以根据需要使用更多或更少的资源,采用更大或更小的位宽。
下表示出模幂运算模块资源分配。
模幂运算器操作 |
操作(规格) |
第0套资源 |
第1套资源 |
第2套资源 |
第3套资源 |
变长模幂运算 |
512位DH |
X |
|
|
|
变长模幂运算 |
1024位DH |
X |
X |
|
|
变长模幂运算 |
1536位DH* |
X |
X |
X* |
|
变长模幂运算 |
2048位DH* |
X |
X |
X* |
X* |
变长模幂运算 |
1024位RSA(CRT) |
X |
X |
|
|
变长模幂运算 |
2048位RSA(CRT)* |
X |
X |
X* |
X* |
定长模幂运算 |
512位DH |
|
|
X |
|
定长模幂运算 |
1024位DH |
|
|
X |
X |
定长模幂运算 |
1024位RSA(CRT) |
|
|
X |
X |
其中,根据本发明的一个实施方案,变长模幂运算和定长模幂运算控制可以是独立的,因此可同时进行多个模幂计算。此外,还可同时进行RSA-CRT部分幂运算操作以提高并行度,减少计算时间。因此,在要求两个1024位RSA-CRT并行计算的情况下(一个变长模幂运算操作,一个定长模幂运算操作),VPN芯片实际上将同时进行4个模幂乘运算。由于变长模幂运算和定长模幂运算资源共用,因此对可同时进行的运算有一定的限制。例如,变长模幂运算上的2048位模幂乘运算需禁止其他任何并行计算,所有计算资源均被变长模幂运算操作占用。图表阐述了各资源可执行的操作以及可同时进行的操作。
下表示出了根据本发明一个实施方案的模幂运算模块规格设计。
需要说明的是,如果模数大于512位,且模数的位[1](第2个最低位)=‘0’,那么指明的模数长度需至少比实际模数长度大两位。例如:如果指明的模数长度是1024位,那么实际的模数长度不能大于1022位。如果实际模数长度是1023或1024位,那么需使用模幂运算器三套资源(1536位)。因此,如果模数的位[1]为‘1’,适用上面的资源分配表。如果位[1]为‘0’,适用上面的规格设计表。
在基本模幂乘运算中,需有底数、模数和指数等数据。在RSA-CRT计算中,需要给出模数P和Q(长度为一半)、指数D1和D2(长度为一半),输入数据M和数据Q。模幂运算器的分段结构要求输入值长度(指数除外)是512位的倍数。主机需将数据用零填充至512位的倍数,并且给出数据的实际有效位数。下表中数据表明了基本模幂乘运算和RSA-CRT模幂乘运算的输入数据要求。
操作 |
指数* |
模数 |
基数 |
512位基本模幂乘运算 |
无 |
512位 |
512位 |
1024位基本模幂乘运算 |
无 |
1024位 |
1024位 |
1536位基本模幂乘运算 |
无 |
1536位 |
1536位 |
2048位基本模幂乘运算 |
无 |
2048位 |
2048位 |
操作 |
D1* |
D2* |
P |
Q |
A |
输入 |
1024位RSA-CRT |
无 |
无 |
512位 |
512位 |
512位 |
1024位 |
2048位RSA-CRT |
无 |
无 |
1024位 |
1024位 |
1024位 |
2048位 |
模数[0]=1模数值必须是奇数
尽管在本发明的一些实现方案中,将所有的模幂乘运算分为512,1024,1536或2048位计算,实际上本发明可以支持32位倍数的基本模幂乘运算和64位倍数的RSA-CRT计算。输入中进行零填充的目的在于存储分配和初始化。操作数据应该遵循表中的要求。
根据本发明,主机负责将一块连续存储区分配给模幂运算模块结果数据。主机需保证分配的空间足以容纳结果数据。此外,模幂运算器还将分配给结果的空间用做中间参数存储区,所需大小取决于数据长度,特别是模数长度。分配的空间与模数数据的规格相关,而不是与实际有效位长度相关。在计算结束时,实际有效位将位于分配空间的低端。与公钥算法内核操作不同的是,本发明的VPN芯片在模幂乘运算中不提供结果最高有效非零字的位置。
在本发明的一种实施例中,提供的变长模幂运算可以支持模数长度为512,1024,1536,2048位的基本模幂乘运算,并可以支持模长度为1024和2048位的RSA-CRT模幂乘运算。根据本发明一个实施例,模数长度可以用零填充至512位倍数后的长度。
在本发明的一种实施例中,提供的定长模幂运算可以支持模数长度为512和1024位的基本模幂乘运算,以及模数长度为1024位的RSA-CRT模幂乘运算。
下面说明本发明中的随机数模块。本发明VPN芯片中的随机数模块(随机数发生器)(RNG)为不同应用提供了真随机数的高质量来源。在本发明的实施例中,采用真正的熵源——物理白噪声,并利用FIP 140-1标准的数学信息处理机制,从而确保随机输入能够满足密码随机性的要求。并且,在本发明VPN芯片的一个实现方案中,对随机数模块的技术要求:满足5种局部效验测试,支持BBS和LSFR算法,加入物理噪声源,输出反馈,访问许可机制。
图46示出了根据本发明一个实施例的随机数模块结构。如图所示,在随机数发生器模块上电复位后,即利用已经设计确定的初始种子参数S0进行计算。同时物理噪声源不断进行噪声值采集,当达到噪声值设计规格时,取物理噪声值规格的低位(值应大于S0/2,小于S0)装入计数器。计数器根据装入的值进行计数运算。当计数器衰减至结束时,表明需控制更新BBS初值进行新一轮循环运算,同时再装入当前物理噪声值重新计数。当随机数发生器种子参数更换时,取当前物理噪声序列值寄存器和随机数序列值寄存器,进行随机策略计算,获得新的种子参数Si。每次BBS算法模块输出的随机值要与物理噪声序列值进行随机策略计算(异或),得到随机数发生器随机值输出序列。使用计数器(CNT_CTRL)控制逻辑操作和功能实现。(注意是不是要描述图)
在本发明的一个实现方案中,每隔一定时间对BBS发生器的初值进行更新,访问随机数发生器随机值序列需要许可控制。另外,可以使用LFSR算法代替BBS算法。
在本发明的一个实现方案中,随机数模块将真随机数以32位提供给应用,并且在每次被访问后,自动重新生成新的随机数。
图47示出了根据本发明实施例的随机数模块指令配置。如图47所示,随机数模块指令配置包括:
随机数输出寄存器RNG输出寄存器P_RN_OUTPUT,其用于提供对32位随机数的读访问。其输入来自BBS/LFSR算法模块,输出至PCI总线或与物理噪声源进行异或操作,产生新的随机数种子值。当寄存器发出随机数已经准备好被读取信号时,RNG输出寄存器将自动启动RNG寄存器产生新的随机数。其复位初始值为0。
RNG状态寄存器P_RN_STATUS,其用于随机数访问许可(准备/占线),本寄存器采用报警计数器对BBS运算次数进行计数,在进行了32次后,表明输出寄存器队列已装满,将读允许标识置为读允许状态。此后等待用户取走随机数,用户取走随机数后发数据更新标识,则读写控制逻辑将读允许标识置为无效,重新对模乘运算次数进行统计,待队列装满发读允许标识。RNG状态寄存器(位(0)为‘0’时)向主机发出可以读取随机数的信号,并向中断寄存器发出中断,直到随机数被读取,同时通知RNG输出寄存器可以开始准备下一个随机数;RNG状态寄存器(位(0)为‘1’时)将禁止外部读取,表示正在产生新的随机数;其为32位,复位初始值为0x00000001。
RNG控制寄存器P_RN_CONTROL,主要用于控制RNG寄存器内部的各项工作,检验RNG操作;
RNG配置寄存器P_RN_CONFIG,其用于配置RNG进行使用,可以指示环形振荡器的环形延时以及报警复位计数等。本寄存器(位[2:0],初值为4)选择LFSR#1中移位寄存器的延时;本寄存器(位[5:3],初值为3)选择LFSR#2中移位寄存器的延时;本寄存器(位[11:6],初值为32)为报警复位计数器置初值,即控制了BBS/LFSR运算次数;BBS/LFSR运算一次,计数器值减一,当计数器值为零时,说明输出寄存器队列已满,发出OV信号,通知读取控制逻辑,随机数已经产生,可以发出读允许信号通知主机。
图48示出了本发明的RNG宏指令语用。***复位后,模块开始工作。首先利用内部初始参数S0进入BBS或LFSR计算,计算时由RNG配置寄存器控制;运算完成后,将结果发送到输出寄存器并由RNG配置寄存器的读写控制模块(读写控制模块对BBS模块模乘循环次数进行计数,每次模乘结束计数器加一。在计满32组以后,产生读允许标志,通知用户可读取随机数。此后若无数据更新请求,读允许标志一直有效。每次用户读走一组发数据更新请求标志,则读写控制模块重新产生读允许信号。)发出OV信号通知主机可以读取随机数,同时将结果与物理噪声源进行异或操作,产生新的随机数种子值SI;物理噪声不断输入队列寄存器(每个时钟周期产生一位)得到最近的物理噪声,取物理噪声源进入衰减计数器进行减一计数,减一计数结束产生更换初值使能,以此选择对随机数种子值的更新。
RNG算法分为BBS和LSFR两种。BBS(模乘):两数相乘,将结果除以一个固定的整数求余数。LSFR(线性反馈移位寄存器):将输入的数据首先与输入的静态编码做与操作,然后将产生的数据做缩位异或操作,最后将产生的一位数据放入逻右移一位的输入数据的最高位。
随机数模块指令配置还包括:
RNGA寄存器P_RN_A_REG,用于测试和诊断提供对熵A寄存器的读访问;
RNGB寄存器P_RN_B_REG,用于测试和诊断提供对熵A寄存器的读访问;
RNG X寄存器[31:0]P_RN_X_0,用于提供对X寄存器(BBS/LFSR运算结果的最低32位)的读访问;
RNG X寄存器[31:0]P_RN_X_1,用于提供对X寄存器(BBS/LFSR运算结果的中间32位)的读访问;
RNG X寄存器[31:0]P_RN_X_2,用于提供对X寄存器(BBS/LFSR运算结果的最高17位)的读访问;
RNG LFSR1寄存器[31:0]P_RN_LFSR1_0,用于提供对LFSR#1的读访问,提供用于检测的0和1的个数的读访问;
RNG LFSR1寄存器[47:32]P_RN_LFSR1_1,用于提供对LFSR#1的指定的最高有效位的读访问,提供用于检测的0和1的个数的读访问;
RNG LFSR2寄存器[31:0]P_RN_LFSR2_0和RNG LFSR2寄存器[47:32]P_RN_LFSR2_1与上面的类似,针对LFSR#2的读访问;
RNG计数器P_RN_寄存器[31:0]COUNTER,用于提供对物理噪声源产生的随机数位数的读访问;以及
RNG报警计数器寄存器P_RN_ALARM_COUNT,用于提供主机不满意(随机性不好)的随机数的数量的读访问。
上述寄存器是为了随机数性能测试使用,主要提供局部效验,为测试和诊断提供对寄存器的读访问。
下面说明根据本发明实施例的时钟和中断设计。如先前所述的,在本发明的一个实施例中,本发明VPN芯片的***配置模块包括PLL模块、时钟分频模块和中断模块。
图49示出了根据本发明实施例的PLL控制以及PLL控制寄存器宏指令语用。如图所示,PLL宏指令控制寄存器输出两组信号,分别连接PLL***和PLL模模块。其中软复位根据PLL模块的技术要求,延时并建立计数器控制PLL***和PLL模运算的复位。模幂信号宽度寄存器也控制一个延时计数器,使模幂运算结果保持到***时钟可以采集大信号宽度。
PLL***和PLL模运算分别通过下面公式产生主时钟和模运算时钟:
公式:FOUT=FIN*{4(M+2)/[(P+2)*S]}(FIN为PLL***和PLL模运算的时钟)
其中,P、M、S是PLL控制寄存器产生的三种控制信号,分别控制PLL***和PLL模运算。
PLL控制寄存器指令包括两组PLL配置信息(***和模幂运算)。此寄存器的32位指令控制两个PLL产生以下两个时钟:***时钟,用于VPN内部大部份电路,输出到EMI时钟管脚;以及模幂运算器时钟:用于高速模幂运算器。输入的32位数据通过PLL控制寄存器分成两组PLL配置信息:***(PC、SC、MC)和模幂运算(PE、SE、ME),控制PLL***和PLL模运算产生***时钟和模运算时钟;
对该寄存器的语义具体说明如下。
软件***复位:在改变***时钟PLL设置后,需将该位设为1保持150微秒以上,以使***时钟PLL再次锁存稳定。复位值=‘0’
停止模幂运算器时钟:降低模幂运算器时钟PLL功率,停止模幂运算器时钟。
软件***复位:在改变***时钟PLL设置后,需将该位设为1保持150微秒以上,以使PLL***和PLL模运算再次复位。复位值=‘0’
下面说明本发明中模幂运算器信号宽度寄存器指令。该指令的低四位输入一个减一计数器,运算完毕输出并保持结束信号OV,让***时钟在有效周期内可以检测到,并取走模幂运算结果,最后释放OV。
在本发明的一个实施方案中,至少将模幂运算器信号放大为***时钟的2倍,从而保证模幂运算器信号在***时钟域内被检测到。
下面说明根据本发明实施例的中断设计。在本发明的一个实现方案中,利用静态宏指令作为针对IP的控制条件配置,例如,中断控制配置。
根据本发明,外部设备(主机)与芯片发生逻辑控制时,信号特征可作为中断源可选项,中断恢复的控制权和状态是可选项。另外,还支持保存中断源,屏蔽中断源,清除中断源等常规设计。
在一个实施例中,在本发明的VPN芯片上有如下的中断管脚:中断输入(INTI)和中断输出(INTA_n)。中断输入是读取宏指令信号,可启动包处理模块状态机。该中断可经连接至INTI管脚的外部信号启动。INTI管脚可以是负沿触发的。主机中断控制器允许对INTA_n中断输出信号(可能连接至主机***的中断输入)在1和14源之间进行设置。P_IC_HOST_MASK_CONTROL寄存器提供中断源的屏蔽选择。
中断分为硬件中断和内部中断。硬件中断是主机产生的强制性中断,由强制PCI主机中断寄存器控制,优先级高于内部中断。内部中断是由芯片内部各个模块发出中断请求(中断源)产生的中断,各个中断源间无优先级的高低。
图50示出了根据本发明实施例的中断宏指令寄存器的配置。该寄存器配置包括:
驱动PCI主机中断寄存器P_IC_GEN_HOST_INTERRUPT:强制主机中断(优先级最高);
驱动宏指令读取寄存器P_IC-FORCE_DESC_READ:主机发起宏指令队列信息的指令;
主机宏指令完成计数寄存器P_IC-DESC_DONE_COUNT:指示包处理宏指令执行数量;
主机未屏蔽状态寄存器P_IC-HOST_UNMASKED_STATUS:中断源的非屏蔽中断状态,供主机读取;
主机清除中断寄存器P_IC-HOST_CLEAR_INTERRUPT:主机复位中断,可将未屏蔽状态寄存器和屏蔽控制寄存器复位;
主机屏蔽控制寄存器P_IC-HOST_MASK_CONTROL:控制对中断源的屏蔽;
主机中断配置寄存器P_IC-HOST_INT_CONFIG:中断信号配置;
主机屏蔽状态寄存器P_IC-HOST_MASKED_STATUS:屏蔽后的中断源,供主机读取。
主机未屏蔽状态寄存器P_IC-HOST_UNMASKED_STATUS和主机屏蔽状态寄存器P_IC-HOST_MASKED_STATUS这对寄存器可使主机读取任何中断源在应用屏蔽之前或之后的状态。所有的内部中断源是脉冲或沿触发产生,被锁存在未屏蔽或屏蔽状态寄存器中。使用P_IC_HOST_CLEAR_INTERRUPT寄存器清除中断可将屏蔽与无屏蔽寄存器锁存的状态复位。
在本发明的一个实施例中,对中断的主体结构(主机未屏蔽状态寄存器、主机清除中断寄存器、主机屏蔽控制寄存器和主机屏蔽状态寄存器的来源、处理和输出)用按位设计来加以实现,即通过对一个中断源的实现和对此模块的调用,来实现整个中断的主体结构。
下表列出了根据本发明一个实施例的中断源。
名称 |
锁存器位 |
说明 |
驱动主机中断 |
0 |
写入(无效数据)至P_IC_GEN_HOST_INTERRUPT寄存器将强制PCI主机进行 |
INTI负沿锁存值 |
1 |
木中断INTI管脚的负沿脉冲上锁存的IRQ值 |
用户DMA完成 |
2 |
用户DMA传输完成时产生 |
用户DMA错误 |
3 |
在用户DMA传输中如果出现错误状态即会产生 |
新随机数准备好 |
4 |
表示新的随机数准备好,可被读取 |
公钥处理模块-模幂运算器操作完成,变长模幂 |
5 |
在公钥处理模块变长模幂运算操作已经结束 |
运算操作公钥处理模块-模幂运算器 操作完成,定长模幂 |
6 |
公钥处理模块定长模幂运算操作已经结束。 |
运算操作公钥处理模块-大数值运算操作完成 |
7 |
公钥处理模块大数值运算已经结束。 |
保留 |
8至14 |
对应位必须以‘0’写入。 |
输出宏指令完成 |
15 |
1个包处理输出宏指令已写入至输出宏指令队列。 |
输出宏指令计数完成 |
16 |
选择的包处理输出宏指令数量已被写入到输出宏指令队列。 |
包处理模块DMA错误 |
17 |
在包处理模块DMA传输中出现错误。 |
SPI-3宏指令完成 |
18 |
数据包及附后的包处理输出宏指令已写入至SPI-3(RX)接口。 |
SPI-3错误 |
19 |
在SPI-3输入(TX)操作中出现错误。 |
输入宏指令队列空 |
20 |
输入宏指令队列目前空。 |
保留 |
21至31 |
对应位必须以‘0’写入。 |
图51示出了根据本发明实施例的中断控制器。中断源的状态除了查询中断状态寄存器外,还可以查询模块宏指令配置状态寄存器。例如:SPI-3错误,在SPI3线程状态配置寄存器中,已经将错误中断屏蔽或不屏蔽,合成后输出到中断模块,因此在一个中断发生后,主机除了查询中断状态寄存器外,还应该查询SPI3线程状态寄存器。
下面说明根据本发明一个实施例的中断流程。在中断源产生后,进入主机未屏蔽中断状态寄存器,同时主机清除中断寄存器产生清除中断信号进入琐存器;如果不屏蔽中断,中断源状态可直接输出,供主机读取;如果屏蔽中断,从主机未屏蔽中断状态寄存器出来的中断源和主机屏蔽控制寄存器产生的控制信号经过与门进入主机屏蔽中断状态寄存器(可供主机读取),最后将屏蔽后的中断源信号经过或门然后输出。
下面说明本发明中强制PCI主机中断寄存器指令。本寄存器产生一个强制主机中断的中断源,优先级高于其它的中断源,输入到主机未屏蔽中断状态寄存器。本寄存器只能执行写操作,但任何写操作将导致主机中断。
下面说明本发明中强制宏指令读取寄存器及其指令。本寄存器仅适用于P_HD_PDR_SRC_SIZE_OFFSET寄存器位[15:0]为非0情况时。PCI主机可将任何值写入P IC FORCE DESC READ寄存器以启动宏指令读取。本寄存器产生的信号和中断输入信号INTI执行或操作,将产生的信号输入宏指令读取计数器(例如,***提供一个16位计数器记录读取宏指令事件中断的次数),最后将此计数器的值输出到包处理模块,通知包处理可以读取下一个宏指令。本寄存器只能执行写操作,但任何写操作将导致主机中断。
下面说明本发明中主机宏指令完成计数寄存器及其指令。主机将宏指令队列中等待处理的宏指令个数输入到本寄存器,本寄存器将宏指令个数输入到事件计数器,包处理模块完成一次宏指令处理,就给事件计数器发出一个信号,计数器减一,当计数器中值为零时,计数器输出信号发起中断;如:P_IC_DESC_DONE_COUNT寄存器设定为0x0004。如果三个包很快处理完,那么在输出宏指令队列上会首先填充三个包处理输出宏指令。然而,计数器仍在等待第四个包被处理,不会形成中断。一直要等到第4个包也处理完后,才会产生中断。在此之前,主机不会取走已处理完的3个包。主机可以通过查询结果而不是仅依靠等待中断的方式来获得包处理的结果。
下面说明本发明中主机未屏蔽状态寄存器及其指令。使用本寄存器,主机将查看即将开始的中断的所有可能来源。所有这些来源无论是否进行了屏蔽,都将锁定在本寄存器内并需使用P_IC_HOST_CLEAR_INTERRUPT寄存器清零,以获取随后事件。‘1’表示出现了关联中断。复位缺省值为0x00000000。使用本寄存器,无论中断源是否进行了屏蔽,都将锁定在本寄存器内供主机查看即将开始的中断的所有可能来源,由于所有的中断位都被本寄存器锁定,需使用P_IC_HOST_CLEAR_INTERRUPT寄存器清零以获取随后事件。
下面说明本发明中主机屏蔽状态寄存器及其指令。该寄存器使得主机可查看中断的选择性来源,这些中断均指向可与PCI中断相连的INTA_n引脚。由于具备了未屏蔽状态寄存器,所有的中断位都被锁定,需使用P_IC_HOST_CLEAR_INTERRUPT寄存器清零以获取随后事件。‘1’表示出现了关联中断。本只读寄存器在屏蔽中断后为主机提供可视性的中断状态,这些中断执行或操作,从INTA_n引脚输出,与PCI中断相连。
下面说明本发明中主机清除中断寄存器及其指令。该寄存器与P_IC_HOST_MASKED_STATUS寄存器(写与读)在同一地址上,这便于读取写入相同位后探测即将开始的中断,以将锁定的中断状态清零。本寄存器使用与P_IC_HOST_MASKED_STATUS寄存器相同的位图。中断源进入未屏蔽中断状态寄存器后,如需中断,需使用本寄存器清零才能获取随后中断事件,中断处理完成后,可以使用本寄存器将中断状态寄存器中锁定的中断状态清零。
下面说明本发明中主机屏蔽控制寄存器及其指令。本寄存器使用与P_IC_HOST_MASKED_STATUS寄存器相同的位图。所有保留位的位置的对应掩码需写为‘0’。本读/写寄存器用于配置主机中断控制器的中断屏蔽。本寄存器产生的主机屏蔽控制信号和未屏蔽中断执行与操作,可实现激活中断源和禁止中断源。
下面说明本发明中主机中断配置寄存器及其指令。本寄存器可将屏蔽中断状态寄存器和未屏蔽中断状态寄存器清零,也可指示主机中断输出类型,将中断输出信号INTA_n转换为电平信号或脉冲信号输出。
配置脉冲类型的主机中断输出将导致外部中断信号被激活后在两个***时钟周期内进行低脉冲。当设定为电平类型时,中断信号将被设定为低,直到被主机清零为止。(即其将遵循P_IC_HOST_MASKED_STATUS寄存器中的相关设置)。
那么P_IC_HOST_MASKED_STATUS寄存器中显示出的所有中断将在INTA_n引脚上出现中断输出脉冲时从P_IC_HOST_UNMASKED_STATUS寄存器中自动清除。基本上,这迫使所有的脉冲中断自动清零,使它们可立即重新激活以产生另一次中断。如果设定为‘0’,那么主机需在这些相同来源产生另一次中断前锁定中断来源。中断配置指令的低两位产生两个一位信号,位[0]选择主机中断控制器的输出引脚INTA_n的类型-脉冲或电平;位[1]控制主机清除中断寄存器的输出,以此来选择是将主机屏蔽中断状态寄存器清零,还是将主机未屏蔽中断状态寄存器清零。
以上参照附图详细说明了根据本发明实施例的包处理模块、***配置模块、各接口、数据通路、公钥算法模块等结构、操作、指令配置等。
下面结合附图来说明本发明VPN芯片的工作流程。
图52示出了本发明VPN芯片的总体工作流程。如图52所示,首先进行PCI上电初始化,这是PCI配置空间配置过程。然后进行芯片静态配置和初始化过程。之后,启动芯片,建立主机宏指令队列。随后是取指令和宏指令处理过程。该过程可以发送包到包处理模块,进行包引擎处理。输出处理的结果和输出宏指令。之后,可以返回到取指令和宏指令处理过程或结束。初始化过程可以直接发送SPI-3包到包引擎处理过程。下面将详细说明各子流程。
图53示出了PCI配置空间配置子流程。首先,主机读取内存空间长度,然后主机写分配基址。在此之后,主机读写其他PCI配置空间。之后,流程进入到静态配置和初始化子流程。
图54示出了本发明VPN芯片的芯片初始化子流程。芯片初始化过程首先进行复位,密文控制,设备信息初始化等,然后将EMI、SPI-3接口初始化,之后将DMA初始化,随后将中断和随机数模块初始化,接着将包处理全局变量和公钥初始化。目标模式写配置空间详见配置寄存器列表。初始化完成后,流程进入芯片启动子流程。
图55示出了本发明VPN芯片的芯片启动子流程。主机建立SA库,并建立指令队列或写入指令,之后,设置取指令方式。在芯片启动之后,流程进入到宏指令处理子流程。对于主机所执行的上述过程,安全处理器并不关注。
图56示出了本发明VPN芯片的宏指令处理过程。在芯片启动完成后,处理器取宏指令(轮询或中断),此时申请DMA通道(例如,DMA1)。接着,效验宏指令。如果宏指令无效,则抛弃无效指令,流程返回取宏指令步骤。若指令有效,则(1)可以回填宏指令,或(2)进行仲裁、分配包引擎,此时比对SA地址。然后,包被分配给不同的包引擎处理。
图57示出了本发明VPN芯片的宏指令启动和输入子流程。如图17所示,在中断强制宏指令读取或轮询时间到,或者重试时间到时,宏指令启动,申请DMA通道(DMA1)。在申请DMA通道之后,判断第一条宏指令是否有效。如果有效,则将有效指令存入FIFO,需要时,由仲裁模块对FIFO的存入进行仲裁。之后调用下一条指令,如果是该下一条指令是无效指令,则回填指令,流程回到申请DMA通道步骤。如果第一条宏指令无效,则回到宏指令启动步骤(例如,在等待重试时间到时)。在申请DMA通道后,可以更新宏指令所有权位。
图58示出了本发明VPN芯片的FIFO中宏指令仲裁分配过程。如图58所示,在宏指令输入后,执行宏指令分配。分配可以是顺序分配或者是非顺序分配。在顺序分配的情况下,首先判断包引擎的空闲状态,对空闲的包引擎顺序分配,交由包引擎进行处理。而在非顺序分配的情况下,首先与忙包引擎比较SA地址是否相同,若是,则等待该包引擎空闲后再分配,之后交由包引擎处理;若否,则对空闲包引擎顺序分派,交由包引擎处理。
图59示出了本发明VPN芯片的包引擎编码(加密)工作流程。在宏指令处理后,指令被交由包引擎处理。包引擎首先对宏指令进行译码。之后,根据指令取SA并对SA进行译码,在此过程中申请DMA-包SA通道。然后,取数据(申请DMA-包数据通道),执行处理过程,包括加解密、HASH、MPPE协议操作、IPsec协议(例如AH、ESP)操作等。在处理之后,输出数据(申请DMA-包数据通道)。如果需要,可以返回到取数据步骤,以取得后续期望的数据。否则,结束,给出结束信号,并写输出宏指令队列,最后输出宏指令。
图60示出了本发明VPN芯片中包引擎译码子流程。如图60所示,在收到宏指令后,进行宏指令译码。之后,申请DMA通道(例如,可以规定DMA3通道或除主模式通道外的任何通道),读取SA,并进行SA译码。之后,申请DMA4通道以读取包数据。此时,如果数据量小于输入FIFO的域值,则返回继续申请DMA4通道以读取包数据。否则,包引擎对数据进行处理。
图61示出了本发明VPN芯片中包引擎数据处理子流程。如图61所示,包引擎处理数据分为输出包数据处理和输入包数据处理。这两种处理又可分别包括协议操作和基本操作。协议操作可以包括ESP输出/输入包处理、AH输出/输入包处理、MPPE处理。输出包数据处理的基本操作可以包括加密处理、散列处理以及加密-散列处理,而输入包数据处理的基本操作可以包括解密以及解密-散列处理。在上述的协议操作和/或基本操作之后,可以输出数据和/或更新SA域。
图62示出了本发明VPN芯片中输出宏指令处理子流程。在包引擎的处理完成之后,对包引擎的处理完成进行登记,并生成输出宏指令。
图63示出了本发明VPN芯片中SPI-3包处理流程。如图63所示,在芯片初始化之后,接收SPI-3传输请求,并相应分派包引擎。之后,将宏指令写入包引擎,在此之后,将SPI3数据写入包引擎,进而执行处理过程。处理完成后,输出数据。在需要时,可以返回到SPI3数据写入步骤,以继续写入数据。否则,在输出数据后,结束,并写输出宏指令队列,生成输出宏指令。
以上参考附图大致描述了本发明VPN芯片的操作流程。
本发明的VPN安全芯片可以实现以下算法:DES、3DES、AES、ARC4、MD5、SHA1、H-MAC、中国HASH和中国加密算法。除此以外,还可以包括PES、FEAL、Geffe、IDEA、Gifford、Geffe、中国AES等算法,以及所希望的任何算法。
本发明的VPN安全芯片的大数模块可以包括以下基本运算功能:加、减、乘、除、模、左移、右移、比较、转移、增量、减量、进位加、借位减、模加逆、模加、模乘。
本发明的VPN安全芯片的模幂乘模块可以支持512位、1024位、2048位的模数、底数和指数;其中1024位和2048位规格支持完整的中国剩余定理操作。
本发明VPN安全芯片大数模块可以支持多种数据规格,如:32位、64位、128位、256位、512位、1024位、2048位。本发明VPN安全芯片模幂乘模块可以支持多种位宽(如,512位、1024位、2048位)的模数、底数和指数,其中1024位和2048位规格支持完整的中国剩余定理操作。当然,使用其他位宽的数据规格也在本发明的范围内。
在本发明的一个实施例中,本发明的VPN芯片还可以包括可信模块(TPCM/TPCM)模块,其可以与主板连接(例如通过LPC接口),从而在可信计算中可以作为信任根。
另外,本发明的VPN芯片并不限于上面所具体描述的实施例。例如,尽管在上述的实施例中采用的宏指令体系,然而,本领域技术人员将理解,根据本发明的教导,采用其他指令体系来实现本发明也是显而易见的。另外,包处理模块是可重组的,可以支持多种算法,包括国家密码算法以及国际公开算法等等。根据不同的配置文件(可以是静态的(例如存储在存储器中)或动态的(例如指令)),包处理模块可以实现除IPsec协议和MPPE协议以外其他的安全协议如DSL协议、SSL/TSL协议以及用户自定义的安全协议的处理等等。
另外,基于本发明的安全处理器,实现多种安全协议的嵌套也是显而易见的。例如,只需在执行了一种安全协议的处理之后再进行另一安全协议的处理即可。这仅是示例性的,基于本发明实现协议嵌套的方式并不限于此,可以是多种多样的。
下面说明根据本发明另一实施例的实现方案。在该实现方案中,本发明的处理器还支持DSL安全协议。
DSL安全协议
DSL安全协议11.20a各版本由证书、授权机关(授权中心、管理中心、网管中心)、协议信息、安全设备(用户卡)、加密数据信息组成。
DSL安全协议包括了建立通信链路、用户申请登记授权、授权中心用户密钥证书信息授权、管理中心用户安全熵密钥信息授权、网管中心用户卡辅助密钥信息授权、授权中心用户密钥证书管理、管理中心和网管中心密钥信息管理、用户私钥存储、身份认证、数据认证、密钥协商、密钥生成、密钥交换、密码体制选择、明密文加脱密处理、算法扩展、算法选择、证书、密钥更新及管理、以及用户和***安全熵重组设计等功能。其中安全熵可作为一种安全策略。
DSL安全协议(11.20a版本)是建立在多个授权机关(由授权中心和/或管理中心和/或网管中心)分别或共同实施安全设备证书登记授权入网的体系下,实现安全通信。登记授权时:由授权中心向每个安全设备授权用户密钥证书信息或将授权用户密钥证书信息存储于用户卡中;由管理中心向每个安全设备授权用户安全熵密钥证书信息或将授权用户安全熵密钥证书信息存储于用户卡中;由网管中心向每个安全设备使用的用户卡授权辅助密钥证书信息。
具有授权用户密钥证书信息或和授权用户安全熵密钥证书信息或和授权辅助密钥证书信息的安全设备或用户卡的用户,才能使用安全设备或和用户卡进行网内用户间的加密通信。
DSL安全协议11.20a主要功能包括:
1.建立通信链路:用户与授权机关建立通信链路、用户之间建立通信链路、安全设备与用户卡证之间建立通信链路、安全芯片与安全设备终端之间通信链路。
2.用户申请登记授权:用户首次申请登记授权、更改申请登记授权。
3.用户密钥生成:用户申请登记授权时的密钥生成;保护授权信息时的密钥生成;加密通信一次一密要求时的密钥生成。
4.用户密钥保护:使用孙子定理计算模型对用户主密钥***保护。
5.用户密钥计算:使用孙子定理计算模型恢复用户密钥
6.用户密钥存储:对用户主密钥***保护信息分储。
7.授权中心授权:首次授权、更改授权、更新授权。
8.公钥证书和授权证书管理:授权中心对用户公钥证书管理、用户使用用户密钥对授权中心和用户的密钥证书管理。
9.身份认证:双方身份认证信息计算、用户安全熵重组设计计算、***安全熵重组设计计算、身份认证、提取秘密信息。
10.密钥协商:密钥协商信息计算、公共密钥计算。
11.密钥交换。
12.授权信息存储。
13.加脱密操作:数据加脱密传输由数据摘要算法认证控制。
14.更新密钥和更换算法:更新加脱密密钥控制、扩展算法、算法选择。
15.安全策略设计。
16.***管理操作(如,采用宏指令体系的芯片操作***(MCOS)):实现初始化控制、指令操作控制、协议控制和安全监测、数据接口控制、算法扩展、和其它协议连接控制。
在本发明的一个实施方案中,MCOS***可以实现安全策略设计、控制DSL安全协议实现、管理数据接口、实施密钥、数据传输认证;控制密钥生成、兼容安全级别和明话、密话操作以及监测主动攻击(截转、重拨、监听)。
在DSL安全协议中,可以主要包括四大流程:
1.芯片初始化流程:每次芯片上电后首先要对芯片初始化,初始化操作分为逻辑初始化和程序初始化操作。
2.申请授权流程:授权端和用户进行交互,由授权端向用户端授权证书。
3.更新授权流程:用户申请授权后,会有时效认证,当用户证书过期需要更新授权或者在用户需要的情况下更新授权。
4.保密通信流程:主叫或被叫建立安全通信链路,进入保密通信流程,使得双方能够进行保密通信。
DSL安全协议还支持多种建立通信链路的方式:
1.用户首次或更改申请登记时,建立的语音通讯链路;
2.授权中心更新授权用户密钥信息时,建立的语音通讯链路;
3.用户网络申请登记或授权中心网络更新授权用户密钥信息个人数据安全***(PDSS)方式时,建立的网络通讯链路。
建立授权通讯链路后,具有首次登记、更改登记和更新授权的授权方式。更改登记和更新授权的授权方式需进行双方的身份认证、密钥协商、密钥计算、加密传输。
更具体的主要流程如下表所示:
初始化操作
申请登记与授权操作
更新授权操作
建立授权通讯链路
建立加密通讯链路
密钥更新操作
算法更新操作
安全协议指令***
DSL安全协议指令***包括:初始化指令、内部输入输出指令、外部输入输出指令和控制操作指令。初始化指令是安全芯片对安全设备(或***)的安全策略设计、对安全卡进行安全控制的管理指令;内部输入输出指令是安全芯片与安全设备建立链路的控制指令;外部输入输出指令是安全芯片的MCOS***执行安全协议的控制指令;控制操作指令是安全芯片的MCOS***执行安全协议时,监控***工作状态的控制指令。
初始化指令
初始化指令以密码形式存储,用于初始化时,建立控制信息表和建立通信链路后,传递设备初始化信息指令。初始化指令包括:安全级别指令、使用方式指令、兼容性能指令和密钥扩展指令。安全级别指令指示安全级别。使用方式指令指示安全设备以及用户卡的使用方式,如独立使用、配合使用、共同使用等。兼容性能指令可以指示不同密级之间的兼容性。而密钥算法扩展指令可以指示密钥卡扩展、安全卡扩展、协议扩展等。
初始化指令形态包括:初始化安全信息指令和初始化兼容信息指令。初始化指令的使用目的是为了通信双方在***初始化时,建立安全信息表。主要用于加密通信双方确定安全设备的安全密级、兼容信息、使用方式、密钥与算法扩展信息。
内部输入指令
内部输入指令是安全设备与安全芯片建立链路关系的控制指令。内部输入指令包括:
启动指令:安全设备建立通信链路后,根据链路建立特征,发出启动安全芯片的控制指令,其可以包括用于例如管理中心更新授权、用户首次授权或更改授权的指令;
结束指令:安全设备监控通信链路状态,断路后,发出结束安全芯片操作的控制指令;
用户数据信息输入指令:通过安全设备,输入用户信息(例如,口令信息,算法信息、摘要信息、密钥信息等);
管理信息输入指令:通过安全设备,输入用户或***重组信息(例如,口令信息、用户安全熵、***安全熵、密钥信息等)。
内部输出指令
内部输出指令是安全芯片与安全设备建立输出信息关系的控制指令。内部输出指令包括:传输指令,是安全芯片通知安全设备转发数据信息的指令,安全设备根据该指令的要求,转发安全芯片的数据信息;操作指令,是安全芯片根据安全协议的操作控制,产生提示使用者信息的,并在安全设备显示信息的控制指令。所述操作指令适于指示传输信息、通信方式、安全级别、使用方式、兼容性能、密钥扩展、注入授权状态、错误信息中的一种或多种。所述传输信息包括下列中的一种或多种:证书信息、身份信息、协商信息、授权信息、口令信息、密钥信息、算法信息、摘要信息、用户安全熵、***安全熵、***卡、可拔出卡。
内部输入输出指令形态反映安全芯片和安全设备之间通信操作的功能和指令数据规范。
外部(协议)用户输入输出指令
外部用户输入输出指令用于申请证书登记、建立与管理中心和用户之间通信链路的操作控制。指令反映操作功能和作为操作信息的起始标记。其中:
用户握手指令是在协议执行的过程中,链路双方开始执行功能操作或结束操作时,双方认证执行正确性的交互信息指令;
证书登记指令是用户执行证书登记授权时,发出用户证书信息前的操作起始标记控制;
数据传输指令是执行传输加密信息功能时,发出加密信息前的操作起始标记控制;
身份认证指令是执行身份认证功能时,传输身份认证信息和身份认证安全熵信息前的操作起始标记控制;
密钥协商指令是执行公共密钥计算或密钥交换功能时,发出密钥计算信息前的操作起始标记控制;
数据认证指令是执行传输数据与数据摘要信息认证功能时,发出数据摘要信息前的操作起始标记控制;
安全熵指令是安全设备执行初始化操作时,链路双方为身份认证而需一致确定共同的熵的操作。执行时作为发出安全熵信息前的操作起始标记控制。
外部(协议)管理中心输入输出指令
管理中心输入输出指令用于授权用户证书登记、建立与管用户之间通信链路的操作控制。指令反映操作功能和作为操作信息的起始标记,其中:
管理中心握手指令是在协议执行的过程中,链路双方开始执行功能操作或结束操作时,双方认证执行正确性的交互信息指令;
授权指令是执行用户证书登记授权功能时,发出授权用户证书信息前的操作起始标记控制;
数据传输指令是执行传输加密信息功能时,发出加密信息前的操作起始标记控制;
身份认证指令是执行身份认证功能时,传输身份认证信息和身份认证安全熵信息前的操作起始标记控制;
密钥协商指令是执行公共密钥计算或密钥交换功能时,发出密钥计算信息前的操作起始标记控制;
数据认证指令是执行传输数据与数据摘要信息认证功能时,发出数据摘要信息前的操作起始标记控制;
安全熵指令是安全设备执行初始化操作时,链路双方为身份认证而需一致确定共同的熵的操作,执行时作为发出安全熵信息前的操作起始标记控制。
***操作控制指令
***操作控制指令分为两个部分:协议操作控制的指令和***操作控制的指令。其中,协议操作控制的指令用于实现协议执行过程中的错误处理和结束处理功能;而***操作控制的指令用于实现MCOS***辅助协议的执行操作功能,对协议指令的状态进行处理,包括:程序调度、数据处理、接口初始化、功能管理等。
协议控制指令形态是安全协议指令体系的重要组成部分。反映协议控制中所有指令分类、指令功能、指令语义、数据规格和语义。协议控制指令形态涉及:通信类指令形态,其用于申请登记或更改登记和首次授权、更改授权、更新授权,通信双方握手信息;功能指令形态,其用于数据传输指令、身份认证指令、密钥协商指令和数据认证指令,并确定执行中使用的算法体制、密钥和摘要算法处理数据的长度;以及安全熵指令形态,其用于安全熵有关指令。
操作控制指令形态包括两个组成部分:协议操作控制和***操作控制。
安全设备内部数据格式
安全设备内部数据格式是安全设备与安全芯片建立通信关系的数据操作。安全设备控制是指安全芯片与安全设备建立通信关系的相互指令操作和数据操作。
启动
安全设备建立通信链路后,识别用户发起呼叫或管理中心发起呼叫。并根据安全设备记录信息识别:授权机关电话号码或标识;用户加密通信电话号码或标识;产生启动指令,通过安全设备与安全芯片接口传输启动指令。
输入指令
当用户使用安全设备需要手工输入用户信息时,安全设备产生用户信息输入指令,通过安全设备与安全芯片接口传输用户信息输入指令;当用户使用安全设备需要手工输入管理信息时,安全设备产生管理信息输入指令,通过安全设备与安全芯片接口传输管理信息输入指令。
传输指令
安全芯片执行安全协议时,通过向安全设备发出传输指令建立通信关系;安全设备根据传输指令的数据传输长度要求,计算数据传输结束。安全芯片与安全设备的通信关系,必须以指令操作为控制数据传输的标记。当传输指令发出后,安全设备开始计数,直至数据传输结束,新的指令开始。
操作指令
安全芯片根据安全设备输入指令的处理,产生操作指令回复安全设备,通过安全设备与安全芯片的接口传输操作指令。安全芯片对安全设备的协议指令均通过操作指令建立握手认证关系。
结束指令
安全设备监控通信链路,识别连接通信链路状况,若断链,产生结束指令,通过安全设备与安全芯片接口传输结束指令。
管理***内部数据格式
管理***内部数据格式是管理***与安全芯片建立通信关系的数据操作。
启动
管理***建立通信链路后,识别用户发起呼叫或管理中心发起呼叫。并根据用户安全设备记录信息识别:用户电话号码或标识;授权或未授权信息;管理***功能操作需求和授权或未授权信息;产生启动指令,通过管理***与安全芯片接口传输启动指令。
管理***控制
管理***控制是指管理***与安全芯片建立的通信关系。管理***为使用安全芯片发出的相互指令操作和数据操作。数据操作的接口,是以***调用方式或其他方式建立的。
输入指令
当管理***分配用户密钥信息时,建立用户信息数据表(流),管理***产生用户信息输入指令,通过管理***与安全芯片接口传输用户信息输入指令和用户信息数据表;
当管理***分配用户管理信息时,建立用户管理信息数据表(流),管理***产生用户信息输入指令,通过管理***与安全芯片接口传输管理信息输入指令和用户管理信息数据表;
传输指令
安全芯片执行安全协议时,通过向管理***发出传输指令建立通信关系;管理***根据安全芯片传输指令的数据传输长度要求,计算数据传输结束。安全芯片与管理***的通信关系,必须以指令操作为控制数据传输的标记。当传输指令发出后,管理***开始计数,直至数据传输结束,新的指令开始。
操作指令
安全芯片根据管理***输入指令的处理,产生操作指令回复管理***,通过管理***与安全芯片的接口传输操作指令。安全芯片对管理***的输入指令均通过操作指令建立握手认证关系。
结束指令
管理***监控通信链路,识别连接通信链路状况,若断链,产生结束指令,通过管理***与安全芯片接口传输结束指令。
建立用户之间通信链路
安全设备与安全设备之间数据格式是用户之间建立通信链路,实现用户i安全芯片与用户j安全芯片建立通信关系的数据操作。
初始化控制
安全设备***初始化后,建立了设备的正常工作状态,包括:接口初始化、初始信息计算等。在建立了通信链路,完成安全设备内部控制操作后:双方发出用户握手指令,建立通信关系;双方发出初始化指令,该指令反映安全设备的工作状态,双方根据初始化指令信息,完成安全设备***初始化操作工作建立安全信息表,建立统一的安全级别、兼容性能、使用方式、密钥与算法等安全信息;双方发出用户握手指令,认证双方***安全协议的数据通信开始。
协议控制
双方发出协议指令信息之前,均需通过安全设备的传输指令认证;双方发出身份认证信息指令和身份认证信息;双方发出用户握手指令,认证双方。
建立用户之间通信链路还涉及操作控制和结束控制。
以上概略性地说明了本发明的实施方案中所采用的DSL安全协议的主要功能、流程、指令体系、指令形态以及格式。然而,这里列出的流程、指令等仅是示例性,本领域技术人员将理解,可以对其进行多种变更而仍实现协议的各功能。对于其他的安全协议,可以类似构建相应的程序、指令等来实现其功能。下面具体说明根据本发明另一实施例的VPN芯片的结构示例。
与上述实施例的结构不同的是,在本发明的***配置模块还可以包括存储模块(例如FLASH),且本发明还具有协议译码器,如图64所示。该实施例的***配置模块可以实现信息原始注入、***初始化、自检等功能。运算内核(包处理模块)能够根据安全协议进行操作,实现安全协议的一些基本功能。协议译码器能够控制包处理模块,例如对协议指令进行译码,根据译码结果控制运算内核(包处理模块)的基本功能的组合,来实现具体安全协议。例如,通过状态机描述控制来实现用户初始化操作、首次授权、更改/更新授权、用户通信等功能操作。所述协议指令是用于建立链路的指令。
根据本发明一个实现方案,***配置模块可以实现的功能还包括:接口初始化、白裸片测试、注入、自检、控制信息表建立(IDI寄存器)、软件初始化程序调度、错误逻辑控制等。下面参考更具体地说明本发明的***配置模块的各功能。
接口初始化:***上电后,发出接口初始化信号,执行接口的初始化。
白裸片测试:接口初始化完毕后,发出白裸片测试使能信号启动白裸片测试流程,完成FLASH初始化、白裸片测试、授权测试、修改标识寄存器值等。
注入:实现对FLASH信息区和数据区数据的注入。
自检:硬件无自检流程,存储的校验和仅公共更改注入时检查使用,可由软件初始化流程实现用户自定义的自检功能(例如,上述实施例中的初始化流程);
控制信息表建立:此功能在白裸片测试完成(注入完整,且已授权)之后发出状态寄存器使能信号来驱动控制信息表建立;
软件初始化程序调度:本实现方案中处理器***初始化功能可分为两部分,一部分由硬件逻辑完成,包括上述的白裸片测试、控制信息表建立等,一部分由宏指令程序完成,实现用户自定义的初始化功能,如:证书授权标识测试;附属设备在线验证、自检、初始化数据计算(包括用户私钥计算、用户密钥证书存储、用户密钥计算、用户密钥保护、用户密钥存储、身份认证信息计算等)。
在本发明的一个实现方案中,硬件无自检流程,存储的校验和仅供更改注入时检查使用。可由软件初始化流程实现用户定义的自检功能。另外,本发明的***配置模块还可以实现安全监控。
注入指令可以来自于接口或数据通路。注入逻辑的驱动来源于协议译码器的译码结果指示。译码结果可以指示以下信息:注入机关、首次注入还是更改注入、信息区数据或数据区数据、信息长度、数据区注入时为首块或后续块等。更改注入时,需首先检查口令和校验码。接收注入数据时需进行校验。
协议译码器将依据协议指令的译码结果,接收指令携带的数据查询程序地址表,装载宏指令地址寄存器,调用指令功能所要求的宏指令程序,交由包处理模块的宏指令模块译码并执行,等待宏指令程序执行结束或执行异常(宏指令的返回协议译码器操作的指令)。根据DSL协议,协议译码器可以执行:指令状态测试,包括输入输出状态、指令注入测试;指令译码,如宏指令调度、错误处理、宏指令IO操作等;以及通信状态测试,如密级、授权体制测试。
***配置模块的存储模块用于存储处理器操作所需的各种数据、程序、配置文件等。在本发明的一个实现方案中,存储模块可以分为两个独立部分:FLASH存储器和公共存储器。FLASH是用于***配置模块的数据资源,而公共存储器是所有部件共享的数据资源。本领域技术人员将理解,可以根据实际应用的需要而实现不同架构的存储模块,例如可以为一整体,例如也可以采用其他的易失性或非易失性存储器。
在本发明的一个实现方案中,FLASH作为信息和数据的存储区域,包括信息区和主存储区(数据区)分别用于存储设备信息(例如原始信息、证书、密钥)和一般数据。原始信息可以包括:静态数据,由注入机关实现的原始注入数据(设备信息、算法、协议程序、公钥信息);动态数据,由授权机关授权首次、更改或更新注入的数据(密钥证书、申请私钥证书、鉴权私钥证书、设备信息、公钥信息等);以及生成数据,由安全设备随机生成的或随机获得的数据(设备密钥、随机密钥、分储密钥、算法、数据等)。
用户设备信息区与授权设备信息区一致,可以包括如下内容密钥随机数(由设备自生成),白裸片注入标记以及授权标志字、验证时钟、安全监控记录、多个(如第一至第三)机关注入信息等等。其中在不同机关的注入信息中可以指示算法程序地址、(用户)协议程序地址以及DSL协议程序地址以及相关的口令、校验码等。
数据区可以包括以下几个部分:
公钥参数部分,用于存储与公钥相关的参数;
设备密钥部分,其中设备(用户)密钥由程序控制生成,签名密钥和申请密钥的存储格式一致,参数位置和规格由***程序确定;
用户设备保留部分(或授权设备鉴权证书位置),用于存储授权设备鉴权证书,其中授权设备鉴权证书参数排列由程序确定,授权标识由程序填写,鉴权证书主要用于在为用户授权时进行身份认证;
鉴权密钥部分,用于存储鉴权密钥(其时授权证书的一种),在设备状态为授权设备时动态装载,参数位置和规格在原始注入时确定;
算法程序部分,用于存储算法程序,算法程序空间由逻辑保护;在安全策略设计时,根据策略编码,建立算法属性;
DSL协议程序部分,用于存储DSL协议程序,其可以包括初始化程序、用户输入指令、管理输入指令、申请授权接口指令、更新授权接口指令、更新通信接口指令、加密通信接口指令、接口注入指令,以及若干由接口指令启动的程序;
用户协议程序部分,用于存储用户协议程序,可以类似于DSL协议程序部分;以及
一个或多个(如第一至第三授权机关)授权用户公钥证书部分,用于存储多个授权机关授权用户公钥证书。
上述的存储模块可以不在***配置模块中,只要其受到本发明的***配置模块的控制或以其他方式得到逻辑保护即可。另外,存储模块并不限于FLASH,也可以使用其他的存储器。还可以利用上述实施例中现有的存储器。另一方面,本发明协议译码器也可以设置在***配置模块中,或者以另外方式设置。
在本发明的一个实施方案中,保存于FLASH中的数据都是加密存储的,每次注入、读出数据前将信息区中的随机数密钥取出,对要写入或读出的数据进行加解密。另外,密钥内部随机产生,因此,不能通过存储扫描方式获取算法信息。芯片应用者的指令界面不提供对FLASH的读写操作,对算法信息的升级需要通过原算法的认可方可实施,因此攻击者无法篡改注入的算法信息。
如在上面所述的,包引擎模块是可重组的。其可以包括若干配置IP和可重组IP,可以利用适当的配置文件来对其进行配置,从而实现例如DSL中所期望的算法和处理逻辑。所述包引擎模块还可以包括:大数运算和模幂运算模块,用于提供基本的大数运算以及模幂乘和/或RSA-CRT操作;和随机数模块,用于提供随机数。
当然,随机数也可以由包引擎模块外的随机数模块提供,所述大数运算和模幂运算模块也可以利用公钥算法模块中的公钥运算和模幂乘运算器。例如,可以利用公钥算法模块和包处理模块协同来实现协议。
从而,通过***管理、协议译码器和协议指令以及DSL或其他协议程序(宏指令,其可以集成在处理器中)的配合,结合适当的配置文件,可以利用本发明的包处理模块(以及公钥算法模块)实现DSL协议以及其他安全协议的功能。
同时,该实施例的处理器依然可以通过包处理模块(例如,根据配置文件进行重组)支持IPsec协议族和MPPE协议的处理。从而可以将经过DSL协议处理的数据(例如,利用私钥加密了的数据)作为IPsec协议待处理的包,进行IPsec协议的处理,从而极大地提高了通信的安全性。
另外,由于在本实施例中,也可以存储其他安全协议程序(例如,用户自定义协议程序),来实现其他的协议。因而,基于该实施例实现多个安全协议的嵌套是显而易见的,从而能够进一步增强安全性。
以上结合附图描述了本发明的具体实施例。在上述的实施例中,本发明的VPN芯片基于宏指令(例如,变长宏指令)体系,但是本领域技术人员将理解,本发明的VPN芯片也可以类似架构在其他指令体系的基础上。
在上述实施例的模块、部件、装置以及它们的命名、结构、配置等等仅是一种示例,而不是限制权利要求的范围。本领域技术人员可以根据实际应用的需要使用上述模块、部件、装置中的一种或多种,以及使用一个或多个上述模块、部件或装置。例如,可以根据应用的需要增加或删除算法,这也在本领域技术人员的认知范围之内。
本发明的VPN芯片可以应用于安全路由器、IPsec网关、SSL网格、可信防火墙、可信网闸、签名加密服务器、网站防护***、监控***、证书管理服务器、安全终端/服务器等。