一种适用于嵌入式系统的基于高速缓存的aes加速器的制作方法

文档序号:6430760阅读:163来源:国知局
专利名称:一种适用于嵌入式系统的基于高速缓存的aes加速器的制作方法
技术领域
本发明属于集成电路设计技术领域,具体涉及到一种适用于嵌入式系统的AES加
速器ο
背景技术
随着信息技术的飞速发展,计算机技术的突飞猛进使得越来越多的敏感信息将通过公开的媒介进行传播。为了保护敏感信息,各种密码算法被广泛地应用到网络和无线通信领域中。虽然目前有些密码算法通过增加额外的查找表来实现高速运算,但是所需的芯片面积较大,为了解决这个问题,本设计在通用处理器的基础上添加一些特殊指令与专用单元,并且使用cache (高速缓存)的部分资源来实现并行查找表的功能,从而有效地提高了密码算法的运算速度。分组密码一直是密码学中一种重要的加密技术,在很多的密码系统中都处于核心地位,也可以作为消息认证技术、数据完整性机制以及数字签名中的核心部件。于2001年被美国国家标准和技术协会NIST定为美国政府新的加密标准的AES(AdvanCed Encryption Mandard)算法是一种常见的分组密码算法,其应用场合见于诸多安全领域。AES是以块为单位对数据进行操作,它所允许的数据块和密钥的长度可以是128,192或256位。在AES 标准算法中采用的数据块长度为1 位,密钥长度可为1 ,192或256位。

发明内容
本发明的目的在于设计一种能加速AES算法的运算,同时能显著地降低硬件成本的适用于嵌入式系统的AES加速器。附图1给出了集成了 AES加速器嵌入式系统的基本框图,该系统由中央处理器 (1)、指令高速缓存(2)、数据高速缓存(7)、缓存控制器(3)、总线接口部件(4)、总线(5)、外围存储器(8)以及AES加密运算单元(6)(即AES加速器)组成。该系统的工作过程如下 中央处理器(1)从指令高速缓存(2)中读取指令,如果指令不在指令高速缓存中,将通过缓存控制器(3)向总线接口部件(4)发出访问外围存储器(8)的请求,并通过总线(5)取回所需的指令,中央处理器(1)在取到指令后继续运行。接着,中央处理器(1)中的译码模块对指令进行译码,如果发现这条指令是AES加速器(6)的特殊指令,则根据该指令执行相应的操作。本发明通过将查找表导入到4路组相连的cache中,并将查找表的数据锁存,这种方式能够有效地减小芯片的面积,从而降低了硬件成本。因此,本发明使用cache中的部分资源来充当并行查找表。本发明可以从cache中并行地查找数据,并且完成相关数据的运算,因此能够实现高速的AES加解密运算,从而在有效地降低硬件成本的基础上实现快速的加解密运算。本发明在中央处理器(1)中引入了 8条特殊指令,它们分别是FETCHLOCK,LD_ CACHELINE, CONFIG, CACHE_AES0, CACHE_AES1, CACHE_AES2, CACHE_AES3 禾口 SW_AES,这 8 条指令都是原系统指令集中所保留而未使用的指令,它们的指令编码分别为
FETCHL0CK LD_CACHELINE CONFIG: Sff AES
01IOOlxx xxxxxxxx xxxxxxxx xxxxxxxx
01IOlOxx xxxxxxxx xxxxxxxx xxxxxxxx
01IOlOxx xxxxxxxx xxxxxxxx xxxxxxxx
01101Ixx xxxxxxxx xxxxxxxx xxxxxxxx
CACHE_AES0 CACHE_AES1 CACHE_AES2 CACHE AES3
01IlOOxx xxxxxxxx xxxxxxxx xxOOlOOO
01IlOOxx xxxxxxxx xxxxxxxx xxOOlOOl
01IlOOxx xxxxxxxx xxxxxxxx χχΟΟΙΟΙΟ
01IlOOxx xxxxxxxx xxxxxxxx xxOOlOl1
本发明的AES加速器使用12个32位寄存器以及上述特殊指令的译码逻辑,其中第0 寄存器组(由第0寄存器、第1寄存器、第2寄存器、第3寄存器组成)和第1寄存器组(由第 4寄存器、第5寄存器、第6寄存器、第7寄存器组成)用于交替存储当前需要进行轮变换的数据,第2寄存器组(由第8寄存器、第9寄存器、第10寄存器、第11寄存器组成)用于存储 128bit的轮密钥,根据特殊指令产生控制信号,来控制数据在AES加密运算单元内的运算。本发明中的AES加密运算单元(6)所采用的数据块长度是实际应用中最常见的1 位,其加密轮数为10。其AES算法是一种迭代的算法,每一次迭代可以称为一轮 (Round)。 它的加密流程如附图3所示,其主要运算包括行变换(ShiftRow)、字节替换 (SubByte)、列混合(MixColumn)和密钥加(AddRoundKey)运算等。第0轮只进行一次密钥加运算,第1至9轮需要顺次经过这四种变换运算,而最后一轮不需要进行列混合变换。AES 解密流程则是加密过程的完全逆过程,即第0轮只进行一次密钥加运算,第1至第9轮都要依次进行这四种运算的逆运算,最后一轮没有逆列混合运算,如附图4所示。附图5给出了传统的基于查找表的AES轮函数的实现,查找表操作完成了行变换、字节替换和列混合的运算。对AES,128-bit的轮输入被分成4个字,分别表示为W3S W21, Wli, WOi,这4个字的 16个字节被标上b0到bl5。每个字节用来索引四个具有256*32 (比特)查找表中的一个, 四个查找表分别用Ta、Tb、Tc、Td来表示。从四个查找表中得到的数据再与轮密钥中的数据进行异或可以得到一个新的字,依次执行四次类似的操作后,可以得到下一轮的输入。本发明是对传统的基于查找表的创新,采用cache (高速缓存)的部分资源充当并行查找表。集成在通用处理器上的专用AES加速器的执行步骤如下
首先执行特殊指令FETCHL0CK,将查找表的数据以及初始的轮函数的输入,从外围存储器预取并锁存到高速数据缓存中。接着执行指令LD_CACHELINE,将高速数据缓存中的初始的轮函数的输入和轮密钥分别写到寄存器组0与寄存器组2。然后执行指令CACHE_ AESO, CACHE_AES1、CACHE_AES2和CACHE_AES3,这四条指令交替使用寄存器组0和寄存器组1中的内容生成访问查找表原始的索引T0[7:0]、T1[7:0]、T2[7:0]和Τ3[7:0]。再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[ll:0]、Tb[ll:0]、Tc[ll:0]和 Td[ll:0]。然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和寄存器组2中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入。在进行最后一轮的运算时,需要对Config寄存器进行配置,用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的U8-bit的输出。最后,执行指令SW_AES将AES运算的结果写回内存。
5
本发明的优点是充分利用了嵌入式系统中高速缓存的资源来充当AES并行运算的查找表,采用这种方式实现AES运算的加速只需较小的硬件代价,另一方面,完成10轮的 AES的加解密运算的时间约为50个时钟周期,具有较高的加解密的吞吐率。本发明能够较好地应用于手持设备中的嵌入式系统。


图1 一种适用于嵌入式系统的基于高速缓存的AES加速器。图2基于高速缓存的AES加密单元。图3 AES加密流程图。图4 AES解密流程图。图5传统的基于并行查找表的AES轮函数。图中标号1为中央处理器,2为指令高速缓存,3为高速缓存控制器,4为总线接口部件,5为总线,6为AES运算单元,7为数据高速缓存,8为外围存储器,9为中央处理器产生的地址信号,10为AES运算单元产生的查找表Ta的索引,11为AES运算单元产生的查找表Tb的索引,12为AES运算单元产生的查找表Tc的索引,13为AES运算单元产生的查找表Td的索弓I,14为第一多路器,15为第二多路器,16为第三多路器,17为第四多路器,18为查找表Ta,19为查找表Tb,20为查找表Tc,21为查找表Td,22为第一比较器,23为第二比较器,24为第三比较器,25为第四比较器,26为第一与门,27为第二与门,28为第三与门,四为第四与门,30为或门,31为第五多路器,32为4个字选多路器,33为异或门,34为替换算法模块。
具体实施例方式本发明中基于cache的AES专用加密单元如附图2所示,下面将以4路组相连,行大小为16字节,容量为16KB高速数据缓存为例,进一步描述本发明。本发明具有2种工作模式AES加密和AES解密。指令共有8种FETCHL0CK,LD_ CACHELINE, CONFIG, CACHE_AES0,CACHE_AES1,CACHE_AES2,CACHE_AES3 禾口 SW_AES。其中
当需要执行AES加密运算时,FETCHL0CK指令将加密用的查找表数据和加密用的所有轮密钥,从外围存储器(8)中预取到高速数据缓存(7)中并将导入的数据锁住,通过将 cache行的状态锁存位置为有效,并用这状态位去控制支持锁存操作的最近最少使用替换模块(34),使得预取的数据在进行AES加密运算过程中不被替换掉。当进行第1轮的AES加密时,中央处理器(1)从指令高速缓存中(2)中去取指令 LD_CACHELINE,如果指令不在指令高速缓存中,则通过缓存控制器(3)向总线接口部件(4) 发出访问外围存储器(8)的请求,中央处理器的流水线将停顿直到取到指令后流水线继续工作。接着中央处理器中的译码模块对LD_CACHELINE指令进行译码,生成访问缓存的地址 (9),缓存地址分别去访问高速数据缓存的4路,并将从4路中取出的标记与缓存地址(9)中标记的部分经过第一比较器(22),第二比较器(23),第三比较器(24)和第四比较器(4)找到该缓存地址对应的数据所在的路。并将其结果分别与cache行的有效状态位经过第一与门( ),第二与门(27),第三与门(28)和第四与门(29),得到各路命中的结果并经过一个或门(30)判断是否命中。从4路中取出的数据经过第五多路器(31)将命中的数据提供给中央处理器。执行LD_CACHELINE指令将U8_bit的轮函数输入写入到寄存器组0,以及第 1轮加密密钥从高速数据缓存中写入到寄存器组2中。使用CONFIG指令对配置寄存器Config进行编程用于指示将进行加密运算。接着执行指令CACHE_AESO, CACHE_AES1, CACHE_AES2和CACHE_AES3,每条指令均生成访问查找表Ta (18),查找表Tb (19),查找表Tc (20)和查找表Td (21)的索引Ta (10),索引Tb (11),索引Tc (12)和索引Td (13),分别经过第一多路器(14),第二多路器(15),第三多路器(16)和第四多路器(17)得到访问高速数据缓存的索引。每条指令分别从cache中的查找表Ta、查找表Tb,查找表Tc和查找表Td中取出数据并经过字选多路器(32)从U8_bit 的行中选出相应的32-bit的数据,接着将获得的四个32-bit的数据与轮密钥中的字经过一个异或门(33 ),生成下一轮输入的一个字。这四条指令执行完成后,得到第2轮加密运算所需的输入数据。随后进行第2轮的加密运算,LD_CACHELINE指令将第2轮加密密钥从高速缓存中导入到寄存器组2中,同理,执行指令CACHE_AES0, CACHE_AES 1, CACHE_AES2和CACHE_AES3 并生成第3轮加密的输入。第3-9轮的加密运算与第二轮的操作类似,第9轮加密产生了第10轮加密的输入数据。接着执行第10轮加密运算,首先执行CONFIG指令,编程配置寄存器Conf ig用于指示要进行最后一轮加密运算。最后一轮的加密运算与前9轮的不同之处是查找表不一样,因此需要控制生成访问另外4张表的索引信号,接着将第10轮的轮密钥导入到寄存器组2中,执行指令CACHE_AES0, CACHE_AES 1, CACHE_AES2和CACHE_AES3并生成最终的密文。 最后,执行SW_AES指令将加密得到的密文从寄存器组0中写回到内存中。当需要进行AES解密运算时,FETCHL0CK指令将解密用的查找表数据和解密用的所有轮密钥,从外围存储器(21)中预取到高速数据缓存(22)中,并将查找表所在行的锁存位置成有效,以避免导入cache的查找表的数据被替换掉。当进行第1轮的AES解密时,LD_CACHELINE指令将U8_bit的原始输入,从cache 中写入到寄存器组0中,并将第1轮解密密钥从cache中导入到特殊寄存器组2中,并使用 CONFIG指令对配置寄存器进行编程用于指示是进行解密运算。接着执行指令CACHE_AES0, CACHE_AES1, CACHE_AES2和CACHE_AES3,得到第2轮解密运算所需的输入数据。随后进行第2轮的解密运算,LD_CACHELINE指令将第2轮解密密钥,从高速缓存中导入到特殊寄存器组2中,同理,执行指令CACHE_AES0,CACHE_AES1, CACHE_AES2和CACHE_ AES3并生成第3轮解密的输入。第3-9轮的解密运算与第2轮的操作类似,第9轮解密产生了第10轮解密的输入数据。接着执行第10轮解密运算,首先执行CONFIG指令编程配置寄存器Conf ig用于指示要进行最后一轮解密运算,最后一轮的解密运算与前9轮的不同之处使用的查找表不一样,因此需要控制生成访问另外4张表的索引信号,接着将第10轮解密的轮密钥导入到特殊寄存器组2中,执行指令CACHE_AES0, CACHE_AES1, CACHE_AES2和CACHE_AES3并生成最终的明文。最后,执行SW_AES指令将解密得到的明文从寄存器组0中写回到内存中。本发明所设计的适用于嵌入式系统的AES加速器,输入密钥长度为1 位,以较小的硬件代价实现了较高的加解密吞吐率。如采用中芯国际(SMIC)O. 13 μ m标准CMOS工艺进行逻辑综合,最高时钟频率可达到150 MHz,核心电路等效门为6. 5K。在将查找表数据和原始的输入导入cache的情况下,一次AES运算的时间约为50个周期,吞吐率达到384MbpSc
附录AES加解密的程序
aes enc
Ii $8, 0 CONFIG $8
复位配置信息
设置轮密钥的基地址
Iui $16, 0x9000 ori $16,$16,0x6500
LD_CACHELINE 0x00, OxbO ($16)// 将 128-bit 的输入导入到寄存器组 0 LD_CACHELINE 0x02, 0x10 ($16) //将加密的第1轮密钥导入到寄存器组2 CACHE_AES0 $4 //执行第1次查表,将结果写入4号特殊寄存器 CACHE_AES1 $5 //执行第2次查表,将结果写入5号特殊寄存器
CACHE_AES2 $6 , CACHE_AES3 $7 , LD_CACHELINE 0x02; CACHE_AES0 $0 , CACHE_AES1 $1 , CACHE_AES2 $2 , CACHE_AES3 $3 , LD_CACHELINE 0x02; CACHE_AES0 $4 , CACHE_AES1 $5 , CACHE_AES2 $6 , CACHE_AES3 $7 , LD_CACHELINE 0x02; CACHE_AES0 $0 CACHE_AES1 $1 CACHE_AES2 $2 CACHE_AES3 $3 LD_CACHELINE 0x02; CACHE_AES0 $4 CACHE_AES1 $5 CACHE_AES2 $6 CACHE_AES3 $7 LD_CACHELINE 0x02; CACHE_AES0 $0 CACHE_AES1 $1 CACHE_AES2 $2 CACHE_AES3 $3 LD CACHELINE 0x02,
执行第3次查表,将结果写入6号特殊寄存器 执行第4次查表,将结果写入7号特殊寄存器 0x20 ($16) Il将加密的第2轮密钥导入到寄存器组2 执行第ι次查表,将结果写入ο号特殊寄存器 执行第2次查表,将结果写入ι号特殊寄存器 执行第3次查表,将结果写入2号特殊寄存器 执行第4次查表,将结果写入3号特殊寄存器 0x30 ($16) Il将加密的第3轮密钥导入到寄存器组2 执行第1次查表,将结果写入4号特殊寄存器 执行第2次查表,将结果写入5号特殊寄存器 执行第3次查表,将结果写入6号特殊寄存器 执行第4次查表,将结果写入7号特殊寄存器 0x40 ($16) Il将加密的第4轮密钥导入到寄存器组2 //执行第1次查表,将结果写入0号特殊寄存器 //执行第2次查表,将结果写入1号特殊寄存器 //执行第3次查表,将结果写入2号特殊寄存器 //执行第4次查表,将结果写入3号特殊寄存器 0x50 ($16) Il将加密的第5轮密钥导入到寄存器组2 //执行第1次查表,将结果写入4号特殊寄存器 //执行第2次查表,将结果写入5号特殊寄存器 //执行第3次查表,将结果写入6号特殊寄存器 //执行第4次查表,将结果写入7号特殊寄存器 0x60 ($16) Il将加密的第6轮密钥导入到寄存器组2 //执行第1次查表,将结果写入0号特殊寄存器 //执行第2次查表,将结果写入1号特殊寄存器 //执行第3次查表,将结果写入2号特殊寄存器 //执行第4次查表,将结果写入3号特殊寄存器 0x70 ($16) Il将加密的第7轮密钥导入到寄存器组2CACHE_AES0 $4 CACHE_AES1 $5 CACHE_AES2 $6 CACHE_AES3 $7 LD_CACHELINE 0x02 CACHE_AES0 $0 CACHE_AES1 $1 CACHE_AES2 $2 CACHE_AES3 $3 LD_CACHELINE 0x02 CACHE_AES0 $4 CACHE_AES1 $5 CACHE_AES2 $6 CACHE_AES3 $7 ori $8,$8,0x2 CONFIG $8 LD_CACHELINE 0x02 CACHE_AES0 $0 // CACHE_AES1 $1 // CACHE_AES2 $2 // CACHE_AES3 $3 // Sff_AES $0,OxbO ($16) // Sff_AES $1, 0xb4($16) Sff_AES $2, 0xb8($16) Sff_AES $3,Oxbc ($16) jr $ra nop
.end aes_enc aes_dec: Ii $8, 1 CONFIG $8/
Iui $16, 0x9000 / ori $16,$16,0x6500
Il执行第1次查表,将结果写入4号特殊寄存器 //执行第2次查表,将结果写入5号特殊寄存器 //执行第3次查表,将结果写入6号特殊寄存器 //执行第4次查表,将结果写入7号特殊寄存器 0x80 ($16) Il将加密的第8轮密钥导入到寄存器组2 //执行第1次查表,将结果写入0号特殊寄存器 //执行第2次查表,将结果写入1号特殊寄存器 //执行第3次查表,将结果写入2号特殊寄存器 //执行第4次查表,将结果写入3号特殊寄存器 0x90 ($16) Il将加密的第9轮密钥导入到寄存器组2 /执行第1次查表,将结果写入4号特殊寄存器 /执行第2次查表,将结果写入5号特殊寄存器 /执行第3次查表,将结果写入6号特殊寄存器 /执行第4次查表,将结果写入7号特殊寄存器
//指示要进行第10轮加密运算
OxaO ($16) //将加密的第10轮密钥导入到寄存器组2 /执行第1次查表,将结果写入0号特殊寄存器 /执行第2次查表,将结果写入1号特殊寄存器 /执行第3次查表,将结果写入2号特殊寄存器 /执行第4次查表,将结果写入3号特殊寄存器 '将运算结果写回内存
进行配置,指示将进行解密运算设置轮密钥的基地址
LD_CACHELINE 0x00, OxbO ($16)//装载U8_bit密文和第0轮密钥异或后的结
果到寄存器组0
LD_CACHELINE 0x02, 0x10 ($16) //装载解密的第1轮密钥到寄存器组2 CACHE_AES0 $4//执行第1次查表,将结果写入4号特殊寄存器
CACHE_AES1 $5//执行第2次查表,将结果写入5号特殊寄存器
CACHE_AES2 $6//执行第3次查表,将结果写入6号特殊寄存器CACHE_AES3 $7Il执行第LD_CACHELINE 0x02,0x20 ($16) /CACHE_AES0 $0Il执行第CACHE_AES1 $1Il执行第CACHE_AES2 $2Il执行第CACHE_AES3 $3Il执行第LD_CACHELINE 0x02,0x30 ($16)CACHE_AES0 $4Il执行第CACHE_AES1 $5Il执行第CACHE_AES2 $6Il执行第CACHE_AES3 $7Il执行第LD_CACHELINE 0x02,0x40 ($16)CACHE_AES0 $0Il执行第CACHE_AES1 $1Il执行第CACHE_AES2 $2Il执行第CACHE_AES3 $3Il执行第LD_CACHELINE 0x02,0x50 ($16)CACHE_AES0 $4Il执行第CACHE_AES1 $5Il执行第CACHE_AES2 $6Il执行第CACHE_AES3 $7Il执行第LD_CACHELINE 0x02,0x60 ($16)CACHE_AES0 $0Il执行第CACHE_AES1 $1Il执行第CACHE_AES2 $2Il执行第CACHE_AES3 $3Il执行第LD_CACHELINE 0x02,0x70 ($16)CACHE_AES0 $4Il执行第CACHE_AES1 $5Il执行第CACHE_AES2 $6Il执行第CACHE_AES3 $7Il执行第LD_CACHELINE 0x02,0x80 ($16)CACHE_AES0 $0Il执行第CACHE_AES1 $1Il执行第CACHE_AES2 $2Il执行第CACHE_AES3 $3Il执行第LD_CACHELINE 0x02,0x90 ($16)CACHE_AES0 $4Il执行第CACHE_AES1 $5//执行第
4次查表,将结果写入7号特殊寄存器 /装载解密的第2轮密钥到寄存器组2 1次查表,将结果写入0号特殊寄存器 2次查表,将结果写入1号特殊寄存器 3次查表,将结果写入2号特殊寄存器 4次查表,将结果写入3号特殊寄存器
//装载解密的第3轮密钥到寄存器组2 1次查表,将结果写入4号特殊寄存器 2次查表,将结果写入5号特殊寄存器 3次查表,将结果写入6号特殊寄存器 4次查表,将结果7号特殊寄存器
//装载解密的第4轮密钥到寄存器组2 1次查表,将结果写入0号特殊寄存器 2次查表,将结果写入1号特殊寄存器 3次查表,将结果写入2号特殊寄存器 4次查表,将结果写入3号特殊寄存器
//装载解密的第5轮密钥到寄存器组2 1次查表,将结果写入4号特殊寄存器 2次查表,将结果写入5号特殊寄存器 3次查表,将结果写入6号特殊寄存器 4次查表,将结果写入7号特殊寄存器
//装载解密的第6轮密钥到寄存器组2 1次查表,将结果写入0号特殊寄存器 2次查表,将结果写入1号特殊寄存器 3次查表,将结果写入2号特殊寄存器 4次查表,将结果写入3号特殊寄存器
//装载解密的第7轮密钥到寄存器组2 1次查表,将结果写入4号特殊寄存器 2次查表,将结果写入5号特殊寄存器 3次查表,将结果写入6号特殊寄存器 4次查表,将结果写入7号特殊寄存器 //装载解密的第8轮密钥到寄存器组2 1次查表,将结果写入0号特殊寄存器 2次查表,将结果写入1号特殊寄存器 3次查表,将结果写入2号特殊寄存器 4次查表,将结果写入3号特殊寄存器
//装载解密的第9轮密钥到寄存器组2 1次查表,将结果写入4号特殊寄存器 2次查表,将结果写入5号特殊寄存器CACHE_AES2 $6 CACHE_AES3 $7 ori $8,$8,0x3 CONFIG $8 LD_CACHELINE 0x02,OxaO ($16)
CACHE_AES0 $0 CACHE_AES1 $1 CACHE_AES2 $2 CACHE_AES3 $3 Sff_AES $0,OxbO ($16)
Sff_AES $1, Sff_AES $2, Sff_AES $3, jr $ra nop end aes dec
0xb4($16) 0xb8($16) Oxbc ($16)
执行第3次查表,将结果写入6号特殊寄存器执行第4次查表,将结果写入7号特殊寄存器
配置信息指示进行第10轮解密运算
//装载解密的第9轮密钥到寄存器组2 执行第1次查表,将结果写入0号特殊寄存器执行第2次查表,将结果写入1号特殊寄存器执行第3次查表,将结果写入2号特殊寄存器执行第4次查表,将结果写入3号特殊寄存器 //将解密的结果写回内存
权利要求
1.一种集成了基于高速缓存的AES加速器的嵌入式系统,其特征在于由中央处理器 (1)、指令高速缓存(2)、数据高速缓存(7)、缓存控制器(3)、总线接口部件(4)、总线(5)、外围存储器(8)以及AES加速器(6)组成;该系统的工作流程如下中央处理器(1)从指令高速缓存(2)中读取指令,如果指令不在指令高速缓存中,将通过缓存控制器(3)向总线接口部件(4)发出访问外围存储器(8)的请求,并通过总线(5)取回所需的指令,中央处理器(1) 在取到指令后继续运行;接着,中央处理器(1)中的译码模块对指令进行译码,如果发现这条指令是AES加速器(6)的特殊指令,则根据该指令执行相应的操作。
2.根据权利要求1所述的嵌入式系统,其特征在于引入了8条专用特殊指令,它们分别是 FETCHLOCK,LD_CACHELINE, CONFIG, CACHE_AES0, CACHE_AES 1, CACHE_AES2, CACHE_AES3 和SW_AES,它们的指令编码分别为FETCHLOCK011001xx_xxxxxxxx_xxxxxxxx_xxxxxxxx011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx 011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx 01101lxx_xxxxxxxx_xxxxxxxx_xxxxxxxx Oil100xx_xxxxxxxx_xxxxxxxx_xx001000 Oil100xx_xxxxxxxx_xxxxxxxx_xx001001 011100xx_xxxxxxxx_xxxxxxxx_xx001010 —011100xx_xxxxxxxx_xxxxxxxx_xx001011 0
3.根据权利要求2所述的嵌入式系统,其特征在于所述AES加速器(6)使用12个32位寄存器以及所述专用特殊指令的译码逻辑,其中,由第0寄存器、第1寄存器、第2寄存器、 第3寄存器组成的第0寄存器组和由第4寄存器、第5寄存器、第6寄存器、第7寄存器组成的第1寄存器组用于交替存储当前需要进行轮变换的数据,由第8寄存器、第9寄存器、 第10寄存器、第11寄存器组成的第2寄存器组用于存储128bit的轮密钥,根据特殊指令产生控制信号,来控制数据在AES加密运算单元内的运算。
4.根据权利要求3所述的嵌入式系统,其特征在于所述的AES加速器(6)所采用的数据块长度是1 位,其加密轮数为10 ;AES加密运算是一种迭代的算法,每一次迭代称为一轮;其加密运算流程包括行变换、字节替换、列混合和密钥加运算;第0轮只进行一次密钥加运算,第1至9轮需要顺次经过这四种变换运算,而最后一轮不需要进行列混合变换;AES 解密运算流程是加密运算过程的完全逆过程,即第0轮只进行一次密钥加运算,第1至第9 轮都要依次进行这四种运算的逆运算,最后一轮没有逆列混合运算。
5.根据权利要求4所述的嵌入式系统,其特征在于所述AES加速器的执行步骤如下首先执行特殊指令FETCHLOCK,将查找表的数据以及初始的轮函数的输入,从外围存储器预取并锁存到高速数据缓存中;接着执行指令LD_CACHELINE,将高速数据缓存中的初始的轮函数的输入和轮密钥分别写到第0寄存器组与第2寄存器组;然后执行指令 CACHE_AES0、CACHE_AES1、CACHE_AES2 和 CACHE_AES3,这四条指令交替使用第0寄存器组和第1寄存器组中的内容生成访问查找表原始的索引T0[7:0]、 Τ1[7:0]、Τ2[7:0]和Τ3[7:0];再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[ll:0]、Tb[ll:0]、TC[ll:0]和Td[ll:0];然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和第2寄存器组中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入;在进行最后一轮的运算时,对Config寄存器进行配置, 用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的U8-bit的输出;最后,执行指令SW_AES将AES运算的结果写回内存。
6.一种适用于嵌入式系统的AES加速器,其特征在于使用12个32位寄存器以及系统 8条专用特殊指令的译码逻辑,其中,由第O寄存器、第1寄存器、第2寄存器、第3寄存器组成的第O寄存器组和由第4寄存器、第5寄存器、第6寄存器、第7寄存器组成的第1寄存器组用于交替存储当前需要进行轮变换的数据,由第8寄存器、第9寄存器、第10寄存器、 第11寄存器组成的第2寄存器组用于存储128bit的轮密钥,根据特殊指令产生控制信号, 来控制数据在AES加密运算单元内的运算;其中,所述的8条专用特殊指令分别是FETCHLOCK,LD_CACHELINE, CONFIG, CACHE_ AESO,CACHE_AES1, CACHE_AES2, CACHE_AES3 和 SW_AES,它们的指令编码分别为 FETCHLOCK011001xx_xxxxxxxx_xxxxxxxx_xxxxxxxx011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx 011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx 011011xx_xxxxxxxx_xxxxxxxx_xxxxxxxx 011100xx_xxxxxxxx_xxxxxxxx_xx001000 011100xx_xxxxxxxx_xxxxxxxx_xx001001 Oil100xx_xxxxxxxx_xxxxxxxx_xx001010 _Oil100xx_xxxxxxxx_xxxxxxxx_xx001011 。
7.根据权利要求6所述的AES加速器,其特征在于所采用的数据块长度是1 位,其加密轮数为10 ;AES加密运算是一种迭代的算法,每一次迭代称为一轮;其加密运算流程包括行变换、字节替换、列混合和密钥加运算;第0轮只进行一次密钥加运算,第1至9轮需要顺次经过这四种变换运算,而最后一轮不需要进行列混合变换;AES解密运算流程是加密运算过程的完全逆过程,即第0轮只进行一次密钥加运算,第1至第9轮都要依次进行这四种运算的逆运算,最后一轮没有逆列混合运算。
8.根据权利要求7所述的AES加速器,其特征在于执行步骤如下首先执行特殊指令FETCHLOCK,将查找表的数据以及初始的轮函数的输入,从外围存储器预取并锁存到高速数据缓存中;接着执行指令LD_CACHELINE,将高速数据缓存中的初始的轮函数的输入和轮密钥分别写到第0寄存器组与第2寄存器组;然后执行指令 CACHE_AES0、CACHE_AES1、CACHE_AES2 和 CACHE_AES3,这四条指令交替使用第0寄存器组和第1寄存器组中的内容生成访问查找表原始的索引T0[7:0]、 Τ1[7:0]、Τ2[7:0]和Τ3[7:0];再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[ll:0]、Tb[ll:0]、TC[ll:0]和Td[ll:0];然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和第2寄存器组中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入;在进行最后一轮的运算时,对Config寄存器进行配置, 用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的U8-bit的输出;最后,执行指令SW_AES将AES运算的结果写回内存。LD_CACHELINE: CONFIG: Sff_AES: CACHE_AES0: CACHE_AES1 CACHE_AES2 CACHE AES全文摘要
本发明属于集成电路设计技术领域,具体为一种适用于嵌入式系统的AES加速器。嵌入式系统由中央处理器、指令高速缓存、数据高速缓存、缓存控制器、总线接口部件、总线、外围存储器以及AES加速器组成;AES加速器输入密钥长度为128位,该AES加速器是基于对高速缓存并行查找的方式实现的,通过这种方式,不仅有效地减小了芯片的面积,而且加快了加解密运算的速度,在将查找表的数据以及最原始的输入导入cache的情况下,一次AES加/解密运算的时间约为50周期,吞吐率达到384Mbps。本发明能够较好地应用于手持设备中的嵌入式系统。
文档编号G06F12/08GK102411683SQ20111023241
公开日2012年4月11日 申请日期2011年8月15日 优先权日2011年8月15日
发明者曾晓洋, 李辉楷, 王帅, 贺中柱, 韩军 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1