第14章安全引擎(SecurityEngine)本章对MPC8349E集成安全引擎(SEC2.4)的功能进行了描述。分为如下主题:14.1节,“概述”14.2节,“体系结构概述”14.3节,“内存空间的配置“14.4节,“描述符概述”14.5节,“执行单元“14.6节,“加密通道”14.7节,“控制器“14.8节,“总线接口”14.9节,“省电模式“14.1概述SEC2.4的设计目的是将计算密集型的安全功能从MPC8349E的处理器核心中转移出去,这些功能包括:密钥的生成和交换、认证、批量加密等。它经过优化,可以处理与IPsec、IKE、SSL/TLS、iSCSI、SRTP和802.11i相关的算法。SEC2.4(应用于MPC8349E)源自基于PowerQUICC家族中其他成员的集成安全核心,这些成员包括应用于MPC8272/MPC8248的SEC1.0版本。该安全引擎的执行单元和主要特性如下:PKEU——公共密钥执行单元,支持:RSA和Diffie-Hellman算法可编程字段最大为2048位椭圆曲线加密算法(Ellipticcurvecryptography)F2m和F(p)模式可编程字段最大为511位DEU——数据加密标准执行单元DES,3DES算法在3DES算法中使用双密钥(K1,K2,K1)或者三密钥(K1,K2,K3)在DES和3DES中使用ECB和CBC模式AESU——高级加密标准单元实现Rijndael对称密钥加密算法ECB,CBC,CCM和计数器模式128位,192位,256位密钥长度AFEU——ARC四执行单元实现了一个流加密,兼容RC4算法40位到128位可编程密钥MDEU——报文摘要执行单元SHA模式,报文摘要为160位、224位、或256位MD5模式,报文摘要可为128位HMAC,可以使用上面两种算法RNG——随机数发生器XOR奇偶生成加速器,应用于RAID应用主/从逻辑,拥有DMA能力32位地址/64位数据高达200MHz的操作主接口允许多个流水式请求DMA数据块可为任意字节边界四个通道,每个通道都支持命令队列(描述符指针)通过集成控制器动态分配加密执行单元在每个执行单元的输入和输出路径上都有256位的先进先出(FIFO)缓冲区,并对大长度数据进行流量控制分散/聚集(Scatter/Gather)能力聚集能力使SEC2.4在读取输入数据时能将存储器中的多个段连接起来相似的,分散能力使SEC2.4在写输出数据时能可以将数据写到多个段中14.2体系结构概述SEC2.4(以后简称SEC)可以在内部总线上充当主设备的角色。这使得SEC能减轻与仅从(模式?)(slave-only)核相关的数据转移的瓶颈问题。主处理器通过它的设备驱动访问SEC,在这个过程中使用系统存储器存储数据。SEC驻留在处理器的外部存贮器映射中,因此,当有应用需要加密功能时,它仅需要为SEC创建描述符,描述符定义要执行的加密方法和数据的地址。SEC的总线主控能力使得主处理器使用几个短小的寄存器写操作建立加密通道,而让SEC在系统存储器上进行读和写操作,完成所请求的任务。图14-1显示了SEC通过内部总线与其他单元的通信图14-1连接到MPC8349E内部总线的SEC图14-2显示了SEC内部体系结构的结构图。总线和SEC的内部寄存器通过总线接口模块进行64位的数据传输。图14-2SEC功能模块当主机在SEC的四个通道中的任何一个的取FIFO队列中写入一个描述符指针时,就开始一个操作。从这一点开始,通道将控制操作的顺序。通道使用描述符指针来读取描述符,读取之后,对描述符的第一个字进行解码,以决定要选择执行的操作和执行该操作的加密执行单元。通道请求控制器分配所需要的加密执行单元。接下来,通道请求控制器取出密钥和数据,它们的位置在描述符的剩余部分确定。控制器为了满足通道的请求,按照可编程优先级方案向主接口发出请求。数据通过执行单元的寄存器和输入FIFO送入相应的执行单元。这些单元从各自的输入FIFO中读取数据,把处理过的数据写入输出FIFO中。通道向控制器发出请求,控制器通过主/从接口将输出FIFO和寄存器中的数据写回到系统存储器。对于大多数分组来说,全部有效载荷太长,无法匹配执行单元的输入和输出FIFO,因此,SEC采用了一种流量控制方案对数据进行读写。通道指示控制器读取必要数量的输入以填充输入FIFO,直到全部的有效负载都被取出。同样,当执行单元的输出FIFO累积了足够长的空间时,通道指示控制器将几块输出写入执行单元的输出FIFO.14.2.1数据分组描述符作为一个加密加速部件,SEC控制器被设计成可以容易使用,并且能和已有的系统及软件进行集成。所有的加密功能都可以通过描述符进行访问。描述符指定了要执行的加密功能,并包含了一些指针,这些指针指向所有必要的输入数据和输出数据所要写入的位置。一些描述符类型可以执行多个功能,为特定协议提供了方便。表14-1显示的是一个数据分组的描述符。表14-1数据分组描述符字段名值/类型说明DPD_DES_CTX_CRYPTTBD代表使用上下文进行加密的DES的首部LEN_CTXINPTR_CTXIN长度指针要写的字节数要写入DES引擎的上下文IV的指针LEN_KEYPTR_KEY长度指针密钥的字节数分组加密(blockcipher)密钥的指针LEN_DATAINPTR_DATAIN长度指针需要加密的数据的字节数要进行加密的数据的指针LEN_DATAOUTPTR_DATAOUT长度指针加密后的数据的字节数要写入加密输出的位置的指针LEN_CTXOUTPTR_CTXOUT长度指针输出上下文IV的长度要写入改变了的上下文的位置的指针NulllengthNullpointer长度指针对固定长度的描述符过滤器为0对固定长度的描述符过滤器为空NulllengthNullpointer长度(Length)指针(Pointer)对固定长度的描述符过滤器为0对固定长度的描述符过滤器为空每个描述符都包括8个长字,每个为64位。其组成如下:一个长字的首部——首部描述所需要的服务和一些编码信息。这些信息指示要使用哪些EU和设置哪些模式。它还指示当描述符操作完成时,是否需要通知主机。七个长字,它们包含用来定位输入或输出数据的指针和长度。每个指针可以直接指向数据,也可以指向一个链接表,该链接表将数据段连接在一起。更多信息请参见14.4节“描述符概述”。14.2.2执行单元(ExecutionUnit)执行单元是一个一般术语,指的是一个加密处理协议的要求执行数学排列(?)的功能部件。执行单元与IPSec、IKE、SSL/TLS、iSCSI、SRTP以及802.11i处理兼容,它们可以协作执行高级的加密任务。SEC的执行单元如下:PKEU—用于计算非对称密钥操作,包括模指数(和其他的模算法函数)或ECC指针算法DEU—用于执行使用DES和3DES的分组加密,对称密钥加密AFEU—用于执行兼容RC的流密码对称密钥加密AESU—用于执行高级加密标准算法和XOR加速MDEU—用于执行使用MD-5、SHA-1或SHA-256的安全散列算法RNG—用于随机数生成14.5节“执行单元”中对每一个执行单元进行了详细描述。14.2.2.1公共密钥执行单元(PKEU)PKEU可以执行很多高级数学函数,支持RSA和ECC公开密钥加密算法。ECC在F2m(基于多项式的)和F(p)模式中支持。该EU支持所有级别的功能,以帮助主微处理器执行其所需要的加密任务。例如,在最高级,加速器执行模指数支持RSA算法,执行点乘支持ECC算法。在较低级别,PKEU可以执行一些简单的操作,例如模乘。更多信息参见14.5.1节“公开密钥执行单元(PKEU)”。14.2.2.1.1椭圆曲线运算PKEU有其自己的数据和控制单元,包括一个通用寄存器组,该寄存器组位于可编程大小的算术单元里。字段或模数的大小可以设定160位到512位之间的任意值,增量值为8,可编程。即每个变量i支持的实际字段的大小为8i-7至8i。其结果是由硬件支持一个范围很大的密码安全机制。大的字段或模数产生很高的安全性,但是性能较低;执行时间是由字段或模数的大小决定的。例如,如果字段长度为160位,则其提供的安全性与1024位的RSA大致相当。字段长度为208位,则其安全性与2048位的RSA相当。PKEU包含了为椭圆曲线处理实现原子函数的特定程序——点算术运算和有限字段算术运算。点运算(乘、加、加倍)包含一个或多个有限字段运算,即加、乘、求反和平方。点加和加倍运算每个都使用了这四种操作。类似的,点乘运算使用了所有的EC点乘和有限字段运算。所有这些功能在模运算和基于多项式的有限字段中都支持。14.2.2.1.2模指数(ModularExponentiation)运算PKEU还可以执行常规整数模算法。该运算是RSA公开密钥算法的整数部分,但它还可在ECC数字签名的生成和Diffie-Hellman密钥交换中发挥作用。SEC的PKEU支持的模算法函数如下:R2modNA′EmodN(A×B)R–1modN(A×B)R–2modN(A+B)modN(A–B)modN其中,有如下参数定义:A’=ARmodN,N为模向量,A和B为输入向量,E为指数向量,R为2s。N向量向上舍入为最接近的32的倍数,该数的位长即为s。PKEU可以为最大长度为2048位的操作数执行模运算。模必须大或等于97位(13个字节)。不将其视为一个限制,因为对于长度比该数值小的数据,没有有效的加密应用存在。而且对于较小长度的数据,使用硬件加速不是很恰当。PKEU使用Montgomery模乘算法执行核心功能。加减功能用来支持已知的中国余数定理,以更好的执行RSA算法。14.2.2.2数据加密标准执行单元(DEUDataEncryptionStandadExecutionUnit)DES执行单元(DEU)依照数据加密标准算法(ANSIx3.92)执行批量数据的加密和解密。DEU也可以计算3DES,3DES是DES算法的扩展,在该算法中,每一个64位的输入块都被处理三次。SEC支持双密钥(K1=K3)或三密钥3DES。DEU的执行使用一个共享的56位密钥和一个初始化向量(IV),对64位的数据块进行序列置换。SEC支持两种操作模式:电子编码簿(electroniccodebookECB)和加密时钟链接(cipherclockchainingCBC)。更多信息参见14.5.2节“数据加密标准执行单元(DEU)”。14.2.2.3ARC四执行单元(AFEUARCFourExecutionUnit)AFEU对一种批量加密算法进行加速,该算法与RSA安全公司的RC4流加密兼容。该算法是面向字节的,也就是说,一个字节的明文通过一个密钥被加密为一个字节的密文。该密钥的长度是可变的,且AFEU支持的密钥长度为8位到128位,这就提供了一个范围比较大的安全强度。ARC4是一个对称算法,即通信双方共享同一个密钥。更多信息请参见14.5.3节“ARC四执行单元(A7FEU)”。14.2.2.4高级加密标准执行单元(AESUAdvancedEncryptionStandadExecutionUnit)AESU对符合高级加密标准(Rijndael)算法的批量数据加密/解密进行加速。AESU在128位的分组上执行,密钥的长度可以选择为:128、192或256位。AESU是一个对称密钥算法,发送方和接收方使用相同的密钥进行加密和解密。在加密之前将会话密钥(sessionkey)和IV提供给AESU模块。处理器将数据处理为128位的输入提供给该模块。AESU可以运行在ECB、CBC、CTR和CCM模式。AESU也被用来执行异或(XOR)操作,异或操作被用来产生用于RAID存储应用的奇偶数据。当在该种模式下进行处理时,不使用会话密钥,而且AESU可以对最多3个数据流同时进行XOR操作