CN102411683A - 一种适用于嵌入式系统的基于高速缓存的aes加速器 - Google Patents

一种适用于嵌入式系统的基于高速缓存的aes加速器 Download PDF

Info

Publication number
CN102411683A
CN102411683A CN201110232411XA CN201110232411A CN102411683A CN 102411683 A CN102411683 A CN 102411683A CN 201110232411X A CN201110232411X A CN 201110232411XA CN 201110232411 A CN201110232411 A CN 201110232411A CN 102411683 A CN102411683 A CN 102411683A
Authority
CN
China
Prior art keywords
cache
xxxxxxxx
aes
register
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201110232411XA
Other languages
English (en)
Other versions
CN102411683B (zh
Inventor
韩军
李辉楷
贺中柱
王帅
曾晓洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fudan University
Original Assignee
Fudan University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fudan University filed Critical Fudan University
Priority to CN201110232411.XA priority Critical patent/CN102411683B/zh
Publication of CN102411683A publication Critical patent/CN102411683A/zh
Application granted granted Critical
Publication of CN102411683B publication Critical patent/CN102411683B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明属于集成电路设计技术领域,具体为一种适用于嵌入式系统的AES加速器。嵌入式系统由中央处理器、指令高速缓存、数据高速缓存、缓存控制器、总线接口部件、总线、外围存储器以及AES加速器组成;AES加速器输入密钥长度为128位,该AES加速器是基于对高速缓存并行查找的方式实现的,通过这种方式,不仅有效地减小了芯片的面积,而且加快了加解密运算的速度,在将查找表的数据以及最原始的输入导入cache的情况下,一次AES加/解密运算的时间约为50周期,吞吐率达到384Mbps。本发明能够较好地应用于手持设备中的嵌入式系统。

Description

一种适用于嵌入式系统的基于高速缓存的AES加速器
技术领域
本发明属于集成电路设计技术领域,具体涉及到一种适用于嵌入式系统的AES加速器。
背景技术
随着信息技术的飞速发展,计算机技术的突飞猛进使得越来越多的敏感信息将通过公开的媒介进行传播。为了保护敏感信息,各种密码算法被广泛地应用到网络和无线通信领域中。虽然目前有些密码算法通过增加额外的查找表来实现高速运算,但是所需的芯片面积较大,为了解决这个问题,本设计在通用处理器的基础上添加一些特殊指令与专用单元,并且使用cache(高速缓存)的部分资源来实现并行查找表的功能,从而有效地提高了密码算法的运算速度。
分组密码一直是密码学中一种重要的加密技术,在很多的密码系统中都处于核心地位,也可以作为消息认证技术、数据完整性机制以及数字签名中的核心部件。于2001年被美国国家标准和技术协会NIST定为美国政府新的加密标准的AES(Advanced Encryption Standard)算法是一种常见的分组密码算法,其应用场合见于诸多安全领域。AES是以块为单位对数据进行操作,它所允许的数据块和密钥的长度可以是128,192或256位。在AES标准算法中采用的数据块长度为128位,密钥长度可为128,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条指令都是原系统指令集中所保留而未使用的指令,它们的指令编码分别为:
FETCHLOCK        011001xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
LD_CACHELINE:    011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx   
CONFIG:           011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx  
SW_AES:           011011xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
CACHE_AES0:      011100xx_xxxxxxxx_xxxxxxxx_xx001000   
CACHE_AES1:      011100xx_xxxxxxxx_xxxxxxxx_xx001001   
CACHE_AES2:      011100xx_xxxxxxxx_xxxxxxxx_xx001010   
CACHE_AES3:      011100xx_xxxxxxxx_xxxxxxxx_xx001011   
本发明的AES加速器使用12个32位寄存器以及上述特殊指令的译码逻辑,其中第0寄存器组(由第0寄存器、第1寄存器、第2寄存器、第3寄存器组成)和第1寄存器组(由第4寄存器、第5寄存器、第6寄存器、第7寄存器组成)用于交替存储当前需要进行轮变换的数据,第2寄存器组(由第8寄存器、第9寄存器、第10寄存器、第11寄存器组成)用于存储128bit的轮密钥,根据特殊指令产生控制信号,来控制数据在AES加密运算单元内的运算。 
本发明中的AES加密运算单元(6)所采用的数据块长度是实际应用中最常见的128位,其加密轮数为10。其AES算法是一种迭代的算法,每一次迭代可以称为一轮(Round)。 它的加密流程如附图3所示,其主要运算包括行变换(ShiftRow)、字节替换(SubByte)、列混合(MixColumn)和密钥加(AddRoundKey)运算等。第0轮只进行一次密钥加运算,第1至9轮需要顺次经过这四种变换运算,而最后一轮不需要进行列混合变换。AES解密流程则是加密过程的完全逆过程,即第0轮只进行一次密钥加运算,第1至第9轮都要依次进行这四种运算的逆运算,最后一轮没有逆列混合运算,如附图4所示。附图5给出了传统的基于查找表的AES轮函数的实现,查找表操作完成了行变换、字节替换和列混合的运算。对AES,128-bit的轮输入被分成4个字,分别表示为W3i,W2i,W1i,W0i,这4个字的16个字节被标上b0到b15。每个字节用来索引四个具有256*32(比特)查找表中的一个,四个查找表分别用Ta、Tb、Tc、Td来表示。从四个查找表中得到的数据再与轮密钥中的数据进行异或可以得到一个新的字,依次执行四次类似的操作后,可以得到下一轮的输入。
本发明是对传统的基于查找表的创新,采用cache(高速缓存)的部分资源充当并行查找表。集成在通用处理器上的专用AES加速器的执行步骤如下:
首先执行特殊指令FETCHLOCK,将查找表的数据以及初始的轮函数的输入,从外围存储器预取并锁存到高速数据缓存中。接着执行指令LD_CACHELINE,将高速数据缓存中的初始的轮函数的输入和轮密钥分别写到寄存器组0与寄存器组2。然后执行指令CACHE_AES0、CACHE_AES1、CACHE_AES2和CACHE_AES3,这四条指令交替使用寄存器组0和寄存器组1中的内容生成访问查找表原始的索引T0[7:0]、T1[7:0]、T2[7:0]和T3[7:0]。再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[11:0]、Tb[11:0]、Tc[11:0]和Td[11:0]。然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和寄存器组2中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入。在进行最后一轮的运算时,需要对Config寄存器进行配置,用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的128-bit的输出。最后,执行指令SW_AES将AES运算的结果写回内存。
本发明的优点是充分利用了嵌入式系统中高速缓存的资源来充当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的索引,14为第一多路器,15为第二多路器,16为第三多路器,17为第四多路器,18为查找表Ta,19为查找表Tb,20为查找表Tc,21为查找表Td,22为第一比较器,23为第二比较器,24为第三比较器,25为第四比较器,26为第一与门,27为第二与门,28为第三与门,29为第四与门,30为或门,31为第五多路器,32为4个字选多路器,33为异或门,34为替换算法模块。
具体实施方式
本发明中基于cache的AES专用加密单元如附图2所示,下面将以4路组相连,行大小为16字节,容量为16KB高速数据缓存为例,进一步描述本发明。
本发明具有2种工作模式:AES加密和AES解密。指令共有8种:FETCHLOCK,LD_CACHELINE,CONFIG,CACHE_AES0,CACHE_AES1,CACHE_AES2,CACHE_AES3和SW_AES。其中:
当需要执行AES加密运算时,FETCHLOCK指令将加密用的查找表数据和加密用的所有轮密钥,从外围存储器(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行的有效状态位经过第一与门(26),第二与门(27),第三与门(28)和第四与门(29),得到各路命中的结果并经过一个或门(30)判断是否命中。从4路中取出的数据经过第五多路器(31)将命中的数据提供给中央处理器。执行LD_CACHELINE指令将128-bit的轮函数输入写入到寄存器组0,以及第1轮加密密钥从高速数据缓存中写入到寄存器组2中。
使用CONFIG指令对配置寄存器Config进行编程用于指示将进行加密运算。接着执行指令CACHE_AES0,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)从128-bit的行中选出相应的32-bit的数据,接着将获得的四个32-bit的数据与轮密钥中的字经过一个异或门(33),生成下一轮输入的一个字。这四条指令执行完成后,得到第2轮加密运算所需的输入数据。
随后进行第2轮的加密运算,LD_CACHELINE指令将第2轮加密密钥从高速缓存中导入到寄存器组2中,同理,执行指令CACHE_AES0,CACHE_AES1,CACHE_AES2和CACHE_AES3并生成第3轮加密的输入。第3-9轮的加密运算与第二轮的操作类似,第9轮加密产生了第10轮加密的输入数据。
接着执行第10轮加密运算,首先执行CONFIG指令,编程配置寄存器Config用于指示要进行最后一轮加密运算。最后一轮的加密运算与前9轮的不同之处是查找表不一样,因此需要控制生成访问另外4张表的索引信号,接着将第10轮的轮密钥导入到寄存器组2中,执行指令CACHE_AES0,CACHE_AES1,CACHE_AES2和CACHE_AES3并生成最终的密文。最后,执行SW_AES指令将加密得到的密文从寄存器组0中写回到内存中。
当需要进行AES解密运算时,FETCHLOCK指令将解密用的查找表数据和解密用的所有轮密钥,从外围存储器(21)中预取到高速数据缓存(22)中,并将查找表所在行的锁存位置成有效,以避免导入cache的查找表的数据被替换掉。
当进行第1轮的AES解密时,LD_CACHELINE指令将128-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指令编程配置寄存器Config用于指示要进行最后一轮解密运算,最后一轮的解密运算与前9轮的不同之处使用的查找表不一样,因此需要控制生成访问另外4张表的索引信号,接着将第10轮解密的轮密钥导入到特殊寄存器组2中,执行指令CACHE_AES0,CACHE_AES1,CACHE_AES2和CACHE_AES3并生成最终的明文。最后,执行SW_AES指令将解密得到的明文从寄存器组0中写回到内存中。
本发明所设计的适用于嵌入式系统的AES加速器,输入密钥长度为128位,以较小的硬件代价实现了较高的加解密吞吐率。如采用中芯国际(SMIC)0.13μm标准CMOS工艺进行逻辑综合,最高时钟频率可达到150 MHz,核心电路等效门为6.5K。在将查找表数据和原始的输入导入cache的情况下,一次AES运算的时间约为50个周期,吞吐率达到384Mbps。
附录  AES加解密的程序:
aes_enc:
     li    $8, 0    
     CONFIG $8     //复位配置信息
     lui    $16, 0x9000   //设置轮密钥的基地址 
     ori    $16,$16,0x6500
     LD_CACHELINE 0x00,0xb0($16)//将128-bit的输入导入到寄存器组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 $7    //执行第4次查表,将结果写入7号特殊寄存器
     LD_CACHELINE 0x02,0x20($16)    //将加密的第2轮密钥导入到寄存器组2
     CACHE_AES0 $0    //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1    //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2    //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3    //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x30($16)    //将加密的第3轮密钥导入到寄存器组2    
     CACHE_AES0 $4    //执行第1次查表,将结果写入4号特殊寄存器 
     CACHE_AES1 $5    //执行第2次查表,将结果写入5号特殊寄存器 
     CACHE_AES2 $6    //执行第3次查表,将结果写入6号特殊寄存器 
     CACHE_AES3 $7    //执行第4次查表,将结果写入7号特殊寄存器 
     LD_CACHELINE 0x02,0x40($16)    //将加密的第4轮密钥导入到寄存器组2  
     CACHE_AES0 $0     //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1     //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2     //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3     //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x50($16)    //将加密的第5轮密钥导入到寄存器组2    
     CACHE_AES0 $4      //执行第1次查表,将结果写入4号特殊寄存器
     CACHE_AES1 $5      //执行第2次查表,将结果写入5号特殊寄存器
     CACHE_AES2 $6      //执行第3次查表,将结果写入6号特殊寄存器
     CACHE_AES3 $7      //执行第4次查表,将结果写入7号特殊寄存器
     LD_CACHELINE 0x02,0x60($16)    //将加密的第6轮密钥导入到寄存器组2   
     CACHE_AES0 $0      //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1      //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2      //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3      //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x70($16)   //将加密的第7轮密钥导入到寄存器组2  
     CACHE_AES0 $4     //执行第1次查表,将结果写入4号特殊寄存器
     CACHE_AES1 $5     //执行第2次查表,将结果写入5号特殊寄存器
     CACHE_AES2 $6     //执行第3次查表,将结果写入6号特殊寄存器
     CACHE_AES3 $7     //执行第4次查表,将结果写入7号特殊寄存器
     LD_CACHELINE 0x02,0x80($16)     //将加密的第8轮密钥导入到寄存器组2 
     CACHE_AES0 $0     //执行第1次查表,将结果写入0号特殊寄存器 
     CACHE_AES1 $1     //执行第2次查表,将结果写入1号特殊寄存器 
     CACHE_AES2 $2     //执行第3次查表,将结果写入2号特殊寄存器 
     CACHE_AES3 $3     //执行第4次查表,将结果写入3号特殊寄存器 
     LD_CACHELINE 0x02,0x90($16)    //将加密的第9轮密钥导入到寄存器组2 
     CACHE_AES0 $4    //执行第1次查表,将结果写入4号特殊寄存器
     CACHE_AES1 $5    //执行第2次查表,将结果写入5号特殊寄存器
     CACHE_AES2 $6    //执行第3次查表,将结果写入6号特殊寄存器
     CACHE_AES3 $7    //执行第4次查表,将结果写入7号特殊寄存器
     ori    $8, $8,0x2    
     CONFIG $8          //指示要进行第10轮加密运算
     LD_CACHELINE 0x02,0xa0($16)     //将加密的第10轮密钥导入到寄存器组2 
     CACHE_AES0 $0    //执行第1次查表,将结果写入0号特殊寄存器 
     CACHE_AES1 $1    //执行第2次查表,将结果写入1号特殊寄存器 
     CACHE_AES2 $2    //执行第3次查表,将结果写入2号特殊寄存器 
     CACHE_AES3 $3    //执行第4次查表,将结果写入3号特殊寄存器 
     SW_AES $0,0xb0($16) //将运算结果写回内存
     SW_AES $1,0xb4($16)
     SW_AES $2,0xb8($16)
     SW_AES $3,0xbc($16)
     jr $ra
     nop
     .end aes_enc
    aes_dec:
      li    $8, 1          
      CONFIG $8           //进行配置,指示将进行解密运算
     lui    $16, 0x9000   //设置轮密钥的基地址
     ori    $16,$16,0x6500
     LD_CACHELINE 0x00,0xb0($16)//装载 128-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 $7        //执行第4次查表,将结果写入7号特殊寄存器 
     LD_CACHELINE 0x02,0x20($16)  //装载解密的第2轮密钥到寄存器组2  
     CACHE_AES0 $0        //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1        //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2        //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3        //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x30($16)     //装载解密的第3轮密钥到寄存器组2   
     CACHE_AES0 $4        //执行第1次查表,将结果写入4号特殊寄存器 
     CACHE_AES1 $5        //执行第2次查表,将结果写入5号特殊寄存器 
     CACHE_AES2 $6        //执行第3次查表,将结果写入6号特殊寄存器 
     CACHE_AES3 $7        //执行第4次查表,将结果写入7号特殊寄存器 
     LD_CACHELINE 0x02,0x40($16)     //装载解密的第4轮密钥到寄存器组2     
     CACHE_AES0 $0        //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1        //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2        //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3        //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x50($16)     //装载解密的第5轮密钥到寄存器组2 
     CACHE_AES0 $4        //执行第1次查表,将结果写入4号特殊寄存器 
     CACHE_AES1 $5        //执行第2次查表,将结果写入5号特殊寄存器 
     CACHE_AES2 $6        //执行第3次查表,将结果写入6号特殊寄存器 
     CACHE_AES3 $7        //执行第4次查表,将结果写入7号特殊寄存器 
     LD_CACHELINE 0x02,0x60($16)     //装载解密的第6轮密钥到寄存器组2
     CACHE_AES0 $0        //执行第1次查表,将结果写入0号特殊寄存器
     CACHE_AES1 $1        //执行第2次查表,将结果写入1号特殊寄存器
     CACHE_AES2 $2        //执行第3次查表,将结果写入2号特殊寄存器
     CACHE_AES3 $3        //执行第4次查表,将结果写入3号特殊寄存器
     LD_CACHELINE 0x02,0x70($16)      //装载解密的第7轮密钥到寄存器组2
     CACHE_AES0 $4        //执行第1次查表,将结果写入4号特殊寄存器
     CACHE_AES1 $5        //执行第2次查表,将结果写入5号特殊寄存器
     CACHE_AES2 $6        //执行第3次查表,将结果写入6号特殊寄存器
     CACHE_AES3 $7        //执行第4次查表,将结果写入7号特殊寄存器
     LD_CACHELINE 0x02,0x80($16)    //装载解密的第8轮密钥到寄存器组2
     CACHE_AES0 $0        //执行第1次查表,将结果写入0号特殊寄存器 
     CACHE_AES1 $1        //执行第2次查表,将结果写入1号特殊寄存器 
     CACHE_AES2 $2        //执行第3次查表,将结果写入2号特殊寄存器 
     CACHE_AES3 $3        //执行第4次查表,将结果写入3号特殊寄存器 
     LD_CACHELINE 0x02,0x90($16)       //装载解密的第9轮密钥到寄存器组2  
     CACHE_AES0 $4        //执行第1次查表,将结果写入4号特殊寄存器
     CACHE_AES1 $5        //执行第2次查表,将结果写入5号特殊寄存器
     CACHE_AES2 $6        //执行第3次查表,将结果写入6号特殊寄存器
     CACHE_AES3 $7        //执行第4次查表,将结果写入7号特殊寄存器
     ori    $8,$8, 0x3    
     CONFIG $8            //配置信息指示进行第10轮解密运算
     LD_CACHELINE 0x02,0xa0($16)      //装载解密的第9轮密钥到寄存器组2
     CACHE_AES0 $0        //执行第1次查表,将结果写入0号特殊寄存器  
     CACHE_AES1 $1        //执行第2次查表,将结果写入1号特殊寄存器  
     CACHE_AES2 $2        //执行第3次查表,将结果写入2号特殊寄存器  
     CACHE_AES3 $3        //执行第4次查表,将结果写入3号特殊寄存器  
     SW_AES $0,0xb0($16)     //将解密的结果写回内存
     SW_AES $1,0xb4($16)
     SW_AES $2,0xb8($16)
     SW_AES $3,0xbc($16)
     jr $ra
     nop
.end aes_dec

Claims (8)

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_AES1,CACHE_AES2,CACHE_AES3和SW_AES,它们的指令编码分别为:
FETCHLOCK        011001xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
LD_CACHELINE:    011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx   
CONFIG:           011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx  
SW_AES:           011011xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
CACHE_AES0:      011100xx_xxxxxxxx_xxxxxxxx_xx001000   
CACHE_AES1:      011100xx_xxxxxxxx_xxxxxxxx_xx001001   
CACHE_AES2:      011100xx_xxxxxxxx_xxxxxxxx_xx001010   
CACHE_AES3:      011100xx_xxxxxxxx_xxxxxxxx_xx001011   。
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)所采用的数据块长度是128位,其加密轮数为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]、T1[7:0]、T2[7:0]和T3[7:0];再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[11:0]、Tb[11:0]、Tc[11:0]和Td[11:0];然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和第2寄存器组中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入;在进行最后一轮的运算时,对Config寄存器进行配置,用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的128-bit的输出;
最后,执行指令SW_AES将AES运算的结果写回内存。
6.一种适用于嵌入式系统的AES加速器,其特征在于使用12个32位寄存器以及系统8条专用特殊指令的译码逻辑,其中,由第0寄存器、第1寄存器、第2寄存器、第3寄存器组成的第0寄存器组和由第4寄存器、第5寄存器、第6寄存器、第7寄存器组成的第1寄存器组用于交替存储当前需要进行轮变换的数据,由第8寄存器、第9寄存器、第10寄存器、第11寄存器组成的第2寄存器组用于存储128bit的轮密钥,根据特殊指令产生控制信号,来控制数据在AES加密运算单元内的运算; 
其中,所述的8条专用特殊指令分别是FETCHLOCK,LD_CACHELINE,CONFIG,CACHE_AES0,CACHE_AES1,CACHE_AES2,CACHE_AES3和SW_AES,它们的指令编码分别为:
FETCHLOCK        011001xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
LD_CACHELINE:    011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx   
CONFIG:           011010xx_xxxxxxxx_xxxxxxxx_xxxxxxxx  
SW_AES:           011011xx_xxxxxxxx_xxxxxxxx_xxxxxxxx
CACHE_AES0:      011100xx_xxxxxxxx_xxxxxxxx_xx001000   
CACHE_AES1:      011100xx_xxxxxxxx_xxxxxxxx_xx001001   
CACHE_AES2:      011100xx_xxxxxxxx_xxxxxxxx_xx001010   
CACHE_AES3:      011100xx_xxxxxxxx_xxxxxxxx_xx001011   。
7.根据权利要求6所述的AES加速器,其特征在于所采用的数据块长度是128位,其加密轮数为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]、T1[7:0]、T2[7:0]和T3[7:0];再对原始的索引进行变换,得到访问高速数据缓存所需的索引Ta[11:0]、Tb[11:0]、Tc[11:0]和Td[11:0];然后从4路组相连的数据高速缓存中,并行的取出4个32-bit的数据和第2寄存器组中存储的轮密钥中的字进行异或,经过4次这样的操作后,得到下一轮运算的输入;在进行最后一轮的运算时,对Config寄存器进行配置,用于控制产生访问最后一轮所需查找表的索引,接下来产生最终的128-bit的输出;
最后,执行指令SW_AES将AES运算的结果写回内存。
CN201110232411.XA 2011-08-15 2011-08-15 一种适用于嵌入式系统的基于高速缓存的aes加速器 Expired - Fee Related CN102411683B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110232411.XA CN102411683B (zh) 2011-08-15 2011-08-15 一种适用于嵌入式系统的基于高速缓存的aes加速器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110232411.XA CN102411683B (zh) 2011-08-15 2011-08-15 一种适用于嵌入式系统的基于高速缓存的aes加速器

Publications (2)

Publication Number Publication Date
CN102411683A true CN102411683A (zh) 2012-04-11
CN102411683B CN102411683B (zh) 2014-04-02

Family

ID=45913754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110232411.XA Expired - Fee Related CN102411683B (zh) 2011-08-15 2011-08-15 一种适用于嵌入式系统的基于高速缓存的aes加速器

Country Status (1)

Country Link
CN (1) CN102411683B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722118A (zh) * 2012-05-30 2012-10-10 中国科学院长春光学精密机械与物理研究所 数字化单杆控制系统
JP2017044757A (ja) * 2015-08-24 2017-03-02 富士電機株式会社 情報処理装置及び情報処理方法
CN106886495A (zh) * 2015-12-15 2017-06-23 北京兆易创新科技股份有限公司 一种嵌入式系统及其控制方法
CN107612684A (zh) * 2017-10-20 2018-01-19 中博龙辉(北京)信息技术股份有限公司 基于国产化处理器平台专有指令集的数据对称加密方法
CN109426738A (zh) * 2017-08-23 2019-03-05 中芯国际集成电路制造(上海)有限公司 一种硬件加密器及加密方法、电子装置
CN109918928A (zh) * 2019-03-05 2019-06-21 中国人民解放军32082部队 一种高速缓存访问碰撞的密码计时分析方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070162964A1 (en) * 2006-01-12 2007-07-12 Wang Liang-Yun Embedded system insuring security and integrity, and method of increasing security thereof
US20090214026A1 (en) * 2008-02-27 2009-08-27 Shay Gueron Method and apparatus for optimizing advanced encryption standard (aes) encryption and decryption in parallel modes of operation
CN101702709A (zh) * 2009-11-05 2010-05-05 复旦大学 一种适用于mips处理器的aes加密单元
CN101782956A (zh) * 2010-02-09 2010-07-21 杭州晟元芯片技术有限公司 一种基于aes实时加密的数据保护方法及装置
CN102081513A (zh) * 2011-01-24 2011-06-01 山东大学 Aes加密算法中列混淆过程指令优化方法及其指令集处理器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070162964A1 (en) * 2006-01-12 2007-07-12 Wang Liang-Yun Embedded system insuring security and integrity, and method of increasing security thereof
US20090214026A1 (en) * 2008-02-27 2009-08-27 Shay Gueron Method and apparatus for optimizing advanced encryption standard (aes) encryption and decryption in parallel modes of operation
CN101702709A (zh) * 2009-11-05 2010-05-05 复旦大学 一种适用于mips处理器的aes加密单元
CN101782956A (zh) * 2010-02-09 2010-07-21 杭州晟元芯片技术有限公司 一种基于aes实时加密的数据保护方法及装置
CN102081513A (zh) * 2011-01-24 2011-06-01 山东大学 Aes加密算法中列混淆过程指令优化方法及其指令集处理器

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102722118A (zh) * 2012-05-30 2012-10-10 中国科学院长春光学精密机械与物理研究所 数字化单杆控制系统
JP2017044757A (ja) * 2015-08-24 2017-03-02 富士電機株式会社 情報処理装置及び情報処理方法
CN106886495A (zh) * 2015-12-15 2017-06-23 北京兆易创新科技股份有限公司 一种嵌入式系统及其控制方法
CN106886495B (zh) * 2015-12-15 2019-10-18 北京兆易创新科技股份有限公司 一种嵌入式系统及其控制方法
CN109426738A (zh) * 2017-08-23 2019-03-05 中芯国际集成电路制造(上海)有限公司 一种硬件加密器及加密方法、电子装置
CN109426738B (zh) * 2017-08-23 2021-11-12 中芯国际集成电路制造(上海)有限公司 一种硬件加密器及加密方法、电子装置
CN107612684A (zh) * 2017-10-20 2018-01-19 中博龙辉(北京)信息技术股份有限公司 基于国产化处理器平台专有指令集的数据对称加密方法
CN109918928A (zh) * 2019-03-05 2019-06-21 中国人民解放军32082部队 一种高速缓存访问碰撞的密码计时分析方法

Also Published As

Publication number Publication date
CN102411683B (zh) 2014-04-02

Similar Documents

Publication Publication Date Title
US10469249B2 (en) SM4 acceleration processors, methods, systems, and instructions
CN101520966B (zh) 并行运算模式中优化高级加密标准加解密的方法和装置
US9336160B2 (en) Low latency block cipher
EP2889760B1 (en) SMS4 acceleration processors, methods, systems, and instructions
Gueron Intel’s new AES instructions for enhanced performance and security
CN102411683B (zh) 一种适用于嵌入式系统的基于高速缓存的aes加速器
CN107133018B (zh) 执行groestl散列的指令
TW200845689A (en) Flexible architecture and instruction for advanced encryption standard (AES)
CN101702709B (zh) 一种适用于mips处理器的aes加密单元
EP3803672B1 (en) Memory-efficient hardware cryptographic engine
Xie et al. Securing emerging nonvolatile main memory with fast and energy-efficient AES in-memory implementation
CN103336920B (zh) 用于无线传感网络soc芯片的安全系统
US11516013B2 (en) Accelerator for encrypting or decrypting confidential data with additional authentication data
CN105721139B (zh) 一种适用于有限io资源的fpga的aes加解密方法及电路
US20120321079A1 (en) System and method for generating round keys
Ege et al. Memory encryption for smart cards
Bilenko et al. Implementation Kalyna Algorithm in Microcontroller
TW202403576A (zh) 密碼裝置及其密碼方法
CN116755780A (zh) 面向密码领域的处理器系统与设计方法
CN113672946A (zh) 数据加解密组件、相关装置和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140402

Termination date: 20160815