会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 物理 / 加速 / 低成本密码加速器

低成本密码加速器

阅读:317发布:2021-02-25

IPRDB可以提供低成本密码加速器专利检索,专利查询,专利分析的服务。并且本发明揭示一种加速密码过程的内环路的低成本密码加速器。所述密码加速器对由运行软件密码过程的中央处理单元CPU提供的密码数据执行若干操作以产生组合式硬件与软件密码过程,从而得到比仅软件密码过程或仅硬件密码过程具更低成本的安全通信解决方案。在一实施例中,一种密码加速器包括:接口,其经配置以接收密码数据,所述密码数据指示将对所述密码数据执行的特定密码过程;变换逻辑,其经配置以根据所述密码过程对所述密码数据执行密码操作,所述变换逻辑包含用于针对多个不同密码过程执行密码操作的逻辑;及状态寄存器,其经配置以用于存储所述密码操作的结果。,下面是低成本密码加速器专利的具体信息内容。

1.一种系统,其包括:

中央处理单元CPU;

存储器,其存储指令,所述指令在由所述CPU执行时致使所述CPU执行以下操作,所述操作包括:获得密码数据,所述密码数据指示将对所述密码数据执行的特定密码过程;

根据所述密码过程对所述密码数据执行第一密码操作;

将所述密码数据发送到硬件加速器;及

从所述硬件加速器接收由所述硬件加速器根据所述密码过程使用第二密码操作变换的密码数据,所述第二密码操作不同于所述第一密码操作。

2.根据权利要求1所述的系统,其中所述密码过程来自包括以下各项的密码过程群组:高级加密标准AES、安全散列算法SHA或伽罗瓦计数器模式GCM。

3.根据权利要求1所述的系统,其中所述密码数据包含所述密码操作的地址,且所述地址根据别名寄存器映射而指示所述密码操作。

4.根据权利要求1所述的系统,其中所述CPU中含有状态向量及控制流。

5.根据权利要求1所述的系统,其中所述密码过程为AES,且所述第二密码操作包含使用密钥调度来计算轮密钥。

6.根据权利要求1所述的系统,其中所述密码过程为AES,且所述第二密码操作是以下各项中的一者:SubBytes、Inverse SubBytes、ShiftRows、Inverse ShiftRows、MixColumn或Inverse MixColumn操作。

7.根据权利要求1所述的系统,其中所述密码过程为SHA,且所述第二密码操作是以下各项中的一者:消息扩展环路及压缩函数环路。

8.根据权利要求1所述的系统,其中所述密码过程为GCM,且所述第二密码操作是GF(2128)中的有限域乘法。

9.根据权利要求1所述的系统,其中将所述密码数据发送到硬件加速器进一步包括:在写入循环期间将所述密码数据从CPU寄存器写入到所述硬件加速器中的状态寄存器。

10.根据权利要求9所述的系统,其中所述密码数据在所述写入循环期间在被写入到所述状态寄存器之前在所述硬件加速器中被变换。

11.一种密码加速器,其包括:

接口,其经配置以接收密码数据,所述密码数据指示将对所述密码数据执行的特定密码过程;

变换逻辑,其经配置以根据所述密码过程对所述密码数据执行密码操作,所述变换逻辑包含用于针对多个不同密码过程执行密码操作的逻辑;及状态寄存器,其经配置以用于存储所述密码操作的结果。

12.根据权利要求11所述的密码加速器,其中所述密码过程来自包括以下各项的密码过程群组:高级加密标准AES、安全散列算法SHA或伽罗瓦计数器模式GCM。

13.根据权利要求11所述的密码加速器,其中所述接口包含地址解码器,且所述密码数据包含所述密码操作的地址,所述地址根据用于所述密码加速器的别名寄存器映射而指示所述密码操作。

14.根据权利要求13所述的密码加速器,其进一步包括用于存储经解码地址且用于控制所述密码操作的命令寄存器。

15.根据权利要求11所述的密码加速器,其中所述密码过程为AES,且所述第二密码操作包含使用密钥调度来计算轮密钥。

16.根据权利要求11所述的密码加速器,其中所述密码过程为AES,且所述第二密码操作是以下各项中的一者:SubBytes、Inverse SubBytes、ShiftRows、Inverse ShiftRows、MixColumn或Inverse MixColumn操作。

17.根据权利要求11所述的密码加速器,其中所述密码过程为SHA,且所述第二密码操作是以下各项中的一者:消息扩展环路及压缩函数环路。

18.根据权利要求11所述的密码加速器,其中所述密码过程为GCM,且所述第二密码操作是GF(2128)中的有限域乘法。

19.根据权利要求11所述的密码加速器,其中将所述密码数据发送到硬件加速器进一步包括:在写入循环期间将所述密码数据从CPU寄存器写入到所述硬件加速器中的状态寄存器。

20.根据权利要求19所述的密码加速器,其中所述密码数据在所述写入循环期间在被写入到所述状态寄存器之前在所述硬件加速器中被变换。

说明书全文

低成本密码加速器

技术领域

[0001] 本发明一般来说涉及供在安全通信中使用的微控制器。

背景技术

[0002] 微控制器越来越多地被用于需要安全通信的系统中,所述系统通常依赖于高级加密标准(AES)来进行加密且依赖于安全散列算法2(SHA2)来进行消息完整性检查。近期,扩展到AES的伽罗瓦计数器模式(GCM)也变得越来越受欢迎,以允许一次完成加密及验证。这些密码算法可实施于软件中,但此通常极慢且可需要大代码大小。硬件中也可支持所述算法,然而对于小微控制器单元(MCU),所述算法的成本是昂贵的,所述小MCU可仅接受几千个逻辑门及几千字节的代码来支持密码库。至少出于这些原因,密码特征通常仅可在较高成本的MCU上获得。

发明内容

[0003] 所揭示实施例通过使用软件与硬件的组合而促进密码算法的加速,所述组合提供优于仅软件实施方案的经改进性能且具有最小硬件成本。在一实施例中,中央处理单元(CPU)将n个数据位(例如,32个数据位)移动到硬件加速器以进行处理,且接着在后续循环中读取传回的经处理结果。所述加速器能够对传入数据执行一系列低级别操作及/或变换。所述加速器含有一或多个寄存器,且可使用别名寄存器映射来允许操作的地址指示将要执行的操作。所述别名寄存器映射避免了花费额外循环来将命令寄存器装载于加速器中。在一实施例中,状态向量及控制流受CPU管理,且密码操作在硬件加速器中执行。
[0004] 所揭示实施例允许在不受成本约束限制的情况下多种MCU(例如,多种32位MCU)上支持标准密码算法,借此打开支持密码算法的低成本n位MCU的潜在巨大市场。通过将硬件加速器设计为使密码算法的中央处理单元(CPU)执行加速而非设计用于独立密码操作的专用硬件模块而实现低成本。
[0005] 所揭示实施例假设,CPU在执行时可完全用于密码操作,但在一些实施方案中,支持发生中断。所揭示实施例还假设,一次执行一种密码算法,从而允许适用时共享逻辑及寄存器。
[0006] 在一实施例中,加速器经优化用于与到CPU(例如,见于ARM公司的Cortex-M0+及Grebe处理器中)的单循环总线接口(例如,ARM公司的单循环IOBUS接口)一起使用,但同样适用于协处理器接口(例如,ARM公司的Teal处理器)。所揭示实施例还可与任一MCU中发现的任一常规系统总线一起使用,但循环计数在CPU对加速器寄存器具有单循环存取的情况下是最优的。
[0007] 在一实施例中,一种系统包括:中央处理单元(CPU);存储器,其存储指令,所述指令在由所述CPU执行时致使所述CPU执行以下操作,所述操作包括:获得密码数据,所述密码数据指示将对所述密码数据执行的特定密码过程;根据所述密码过程对所述密码数据执行第一密码操作;将所述密码数据发送到硬件加速器;及从所述硬件加速器接收由所述硬件加速器根据所述密码过程使用第二密码操作变换的密码数据,所述第二密码操作不同于所述第一密码操作。
[0008] 在一实施例中,一种密码加速器包括:接口,其经配置以接收密码数据,所述密码数据指示将对所述密码数据执行的特定密码过程;变换逻辑,其经配置以根据所述密码过程对所述密码数据执行密码操作,所述变换逻辑包含用于针对多个不同密码过程执行密码操作的逻辑;及状态寄存器,其经配置以用于存储所述密码操作的结果。
[0009] 其它实施例针对于方法及非暂时性计算机可读存储媒体。在附图及以下说明中陈述标的物的一或多个实施方案的细节。标的物的其它特征、方面及优点将依据说明、图式及权利要求书而变得显而易见。

附图说明

[0010] 图1是根据一实施例的图解说明AES操作及CRYA加速的数据流的流程图。
[0011] 图2是根据一实施例的寄存器到寄存器(REG到REG)加速器架构的框图。
[0012] 图3是根据一实施例的进入寄存器(REGIN)加速器架构的框图。
[0013] 图4是根据一实施例的密码加速器(CRYA)模块的框图。
[0014] 图5是根据一实施例的图解说明CRYA地址映射的表格。
[0015] 图6是根据一实施例的图解说明CRYA读取地址映射的表格。
[0016] 图7图解说明根据一实施例的AES移位行操作。
[0017] 图8是根据一实施例的CRYA模块的框图。
[0018] 图9是根据一实施例的图解说明经掩蔽S盒使用的框图。
[0019] 图10是根据一实施例的图解说明SHA ch及maj计算的框图。
[0020] 图11是根据一实施例的图解说明SHA加法器使用操作的框图。
[0021] 图12是根据一实施例的图解说明SHA消息扩展操作的框图。
[0022] 图13是根据一实施例的图解说明GFACC操作的框图。
[0023] 图14是根据一实施例的图解说明GFACC伪码的表格。
[0024] 图15图解说明根据一实施例的GCM 16位XOR乘法。
[0025] 图16图解说明根据一实施例的GF(2128)并行乘法。
[0026] 图17图解说明根据一实施例的GFACC半字乘法。
[0027] 图18含有根据一实施例的分别图解说明Z0及Z1计算的X及V输入的表格。
[0028] 图19是根据一实施例的图解说明部分Z计算的V输入的表格。
[0029] 图20是根据一实施例的图解说明模式0(x及v输入)的表格。
[0030] 图21图解说明根据一实施例的GCM数据存储及内移位操作。

具体实施方式

[0031] 概述
[0032] CRYA模块加速GCM的AES、SHA-256及GF(2128)乘法的内环路,从而允许这些密码算法的具有最小门计数的高效硬件-软件(HW-SW)实施方案。在以下描述中,这些密码算法将各自简要地呈现,接着为CRYA模块的具体要求,接着为对CRYA模块的总体架构及密钥要求的描述,接着为对具体实施例的详细架构的描述。以下揭示内容假设,CRYA模块经开发以用于具有单循环I/O端口的CPU,例如ARM Cor-tex-M0+或Grebe处理器,这是因为这些处理器最可能是嵌入CRYA模块的系统中的主机CPU。然而,CRYA模块可为映射到任一CPU的总线。
[0033] 密码算法概述-AES
[0034] AES创建大小为128个位的明文块的密文。密钥为128个位、192个位或256个位。用以将128位明文块P加密为128位经加密块C的基本算法步骤如下:
[0035] ●AddRoundKey-XOR of key with state
[0036] ●Loop 1...9(for 128bits.Loop to 11for 192and to 13for 256bit)
[0037] ○ShiftRows-Transposition-shift bytes around
[0038] ○SubBytes-Lookup table or calculation
[0039] ○MixColumn-GF(28)multiplication with a polynomial
[0040] ○AddRoundKey-XOR of key with state
[0041] ●ShiftRows
[0042] ●SubBytes
[0043] ●AddRoundKey
[0044] 在此AES算法中,每一AddRoundKey操作使用唯一128位、192位或256位密钥,所述密钥是从初始密钥导出。
[0045] 将128位密块C解密为128位明文块P以类似方式进行:
[0046] ●AddRoundKey-XOR of key with state
[0047] ●Inverse ShiftRows
[0048] ●Inverse SubBytes
[0049] ●Loop 1...9(for 128bits.Loop to 11for 192and to 13for 256bit)
[0050] ○AddRoundKey-XOR of key with state
[0051] ○Inverse MixColumn-GF(28)multiplication with a polynomial
[0052] ○Inverse ShiftRows-Transposition-shift bytes around
[0053] ○Inverse SubBytes-Lookup table or calculation
[0054] ○AddRoundKey
[0055] 图1是根据一实施例的图解说明AES操作的数据流的流程图。左侧是加密数据流,且右侧是解密数据流。AES加密包含加密轮101及最后加密轮102。AES解密包含解密轮103及最后解密轮104。对于AES加密,CRYA模块将使用硬件加速来进行KeySchedule、SubBytes及MixColumns操作,且使用硬件与软件的组合来进行ShiftRows操作。对于AES解密,CRYA模块将使用硬件加速来进行KeySchedule、InvSubBytes及InvMixColumns操作,且使用硬件与软件的组合来进行InvShiftRows操作。
[0056] 轮密钥可在加密之前预先计算得出或在每一轮中即时产生。在一实施例中,轮密钥可使用Rijndael密钥调度即时产生,所述Rijndael密钥调度由CRYA模块中的硬件加速。Rijndael密钥调度将短密钥扩展为若干单独轮密钥。存在三个AES变体,所述三个AES变体中的每一者具有不同数目个轮。每一变体对于每一轮需要单独的128位轮密钥,另外再多出一个128位轮密钥。Rijndael密钥调度依据初始密钥产生所需轮密钥。
[0057] 密码算法概述-SHA-256
[0058] SHA-256是创建数据块的256位散列的密码散列函数。数据块在512个位的组块中进行处理。对于每一512位组块,存在两个处理输入数据及当前散列的环路:消息扩展(48次迭代)及压缩函数(64次迭代)。在一实施例中,CRYA模块加速消息扩展环路及压缩函数环路,如下文进一步详细描述。
[0059] 密码算法概述-GCM
[0060] GCM是伽罗瓦/计数器模式,即组合CTR(计数器)操作模式与验证散列函数的AES操作模式。大部分GCM可易于实施于软件中,但GCM还包含对于在软件中进行计算缓慢的GF(2128)中的有限域乘法。在一实施例中,CRYA模块用于以低成本实施方案加速此乘法。CRYA128
架构中的乘法器需要2×32位+16位寄存器且使用320次128×128GF(2 )乘法的循环。GF(2128)乘法的算法可在伽罗瓦/计数器操作模式(The Galois/Counter Mode of 
Operation)中找到为算法1。所述算法使用其中最低有效位(LSB)为位127且最高有效位(MSB)为0的位反转表示法。在以下揭示内容中,将使用标准 表示法进行位排序。
[0061] 模块架构-模块要求
[0062] CRYA支持AES及SHA-256。对于AES,CRYA模块适应以下操作模式:ECB、CBC、CFB、OFB、CTR、CCM/CCM*及GCM。CRYA模块加速GCM操作模式的散列函数,而其它操作模式利用软件库而实施。AES加密支持128位、192位及256位密钥长度。除加密之外,CRYA模块还支持经加速AES解密。CRYA模块经配置以使用(举例来说)Grebe CPU的I/O端口与CPU介接。在一实施例中,CRYA模块可重新使用用于支持不同密码算法的寄存器,使得所有所支持密码算法使用相同状态寄存器。在一实施例中,用于每一密码算法的密码加速器同时运行。在一实施例中,CRYA模块包含抵抗侧通道攻击的对策,如下文进一步详细描述。在一实施例中,CRYA模块门计数为约5.5千个门。CRYA模块经配置以实施图5中所展示的表1中概括的所有功能,其中指定了代码大小、循环计数及门计数约束。
[0063] 硬件/软件接口概念
[0064] 加速器的基本原理是将字从CPU寄存器文件写入到加速器中的状态寄存器,等待一个循环,且接着读取从加速器状态寄存器传回到CPU寄存器文件的经变换值。取决于选定用于写入的地址,将对状态寄存器执行一组所定义的加速功能。下文描述数据流的两个不同架构。称为REG到REG的第一架构用于AES及GCM加速。称为REGIN的第二架构用于SHA加速。
[0065] 图2是根据一实施例的寄存器到寄存器(REG到REG)加速器架构200的框图。架构200包含地址解码器201、命令寄存器202、状态寄存器203、变换逻辑204、AND门205及多路复用器206。I/O地址(IOADDR)经解码以将命令提供于命令寄存器202中。存储于命令寄存器
202中的命令提供用于选择到多路复用器206中的两个输入中的一者的选择信号。到多路复用器206中的第一输入是AND门205的输出,且到多路复用器206中的第二输入是变换逻辑
204的输出。AND门205接收IODATA及地址解码器201的输出作为输入。多路复用器206的输出存储于状态寄存器203中。
[0066] 在REG到REG架构200中,输入/输出(I/O)端口时序独立于变换逻辑深度。为进行此,使用命令寄存器202,使得命令在数据写入期间基于I/O端口地址而寄存。此确保变换逻辑204中的任何深度逻辑独立于I/O端口时序,使得仅存在以下时序路径:
[0067] ●REGIN:CPU_IR->I/O Port->address decode->register
[0068] ●REG to REG:register->transformation logic->register
[0069] ●REGOUT:register->I/O Port->CPU_RF
[0070] 图3是根据一实施例的进入寄存器(REGIN)加速器架构300的框图。架构300包含地址解码器301、变换逻辑302a-302c、多路复用器303及状态寄存器304。IOADDR由地址解码器301解码以提供用于选择到多路复用器303中的三个输入中的一者的选择信号。到多路复用器303中的第一输入是变换逻辑302a(T1)的输出,到多路复用器303中的第二输入是变换逻辑302b(T2)的输出,且到多路复用器303中的第三输入是变换逻辑302c(T3)的输出。多路复用器303的输出存储于状态寄存器304中。
[0071] REGIN在具有浅逻辑深度的变换上使用,例如将字写入到状态寄存器304。数据在被寄存于加速器中之前在同一循环中进行变换。接着,读取从加速器状态寄存器304传回的经变换值。CRYA模块经设计以确保时序路径不受限于综合结果质量(QoR)。
[0072] 加速器硬件实施方案
[0073] 图4是根据一实施例的CRYA模块400的框图。CRYA模块400包含SHA加速器401、AES加速器402及GFACC 403。使用CPU寄存器文件作为工作状态会减少CRYA模块中的数据寄存器的数目。AES加速器402需要一个32位寄存器404。SHA加速器401需要一个32位寄存器404。GFACC加速器403(GCM GF(2128)乘法算子)需要两个32位寄存器404、405及一个16位寄存器
406,16位寄存器406设定CRYA模块400的下限。由于CRYA模块400中支持GCM,因此SHA加速器
401还可使用额外的32位寄存器404来减小软件部分中的循环计数。图4中图解说明此寄存器共享,其中寄存器405的state2_r由GFACC加速器403及SHA加速器401的ch/maj使用。
[0074] 在一实施例中,上文所描述的加速器401、402、403集成到一个硬件外围模块中。在使算法循环计数最小化的同时门计数应尽可能小。CRYA模块400含有I/O端口接口(未展示)、地址解码器(未展示)、两个32位寄存器404、405及一个16位寄存器406(用于GCM)。这些寄存器可由SHA及AES加速器401、402重新使用。
[0075] 在一实施例中,CRYA模块400分别使用图5及6中所展示的写入及读取地址映射。图5中的表1展示写入地址映射,所述写入地址映射包含为地址偏移的第一列、指示哪一(哪些)加速器正执行操作的第二列及描述加速器所执行的操作的第三列。图6中的表2展示读取地址映射,所述读取地址映射包含为地址偏移的第一列、指示哪一(哪些)加速器将执行操作的第二列及指示所读取的寄存器的列3。注意,在表1及表2中,地址偏移还指示将要执行的操作(即,别名寄存器映射)。
[0076] 加速器硬件–Cortex-M0+/Grebe系统的集成
[0077] 在一实施例中,CRYA模块可与由美国加利福尼亚州圣荷西市的ARM公司开发的Cortex-M0或Grebe处理器集成在一起。在此实施例中,硬件CRYA模块共享时钟且利用Grebe HCLK及HRESETn端口进行复位。CRYA模块使用Grebe I/O端口而介接。CRYA模块不需要保持为待机模式。CRYA模块不会中断,因为CRYA模块完全由CPU驱动。对于Grebe,当CRYA模块通过外围存取控制器(PAC)配置为安全时,所述CRYA模块无法通过非安全存取进行读取及写入。举例来说,PAC(例如,由爱特梅尔公司(Atmel Inc.)开发的AT03229:SAM D/R/L/C PAC)可用于通过到CRYA模块所使用的寄存器的AMBA高性能总线(AHB)而约束对CRYA模块的写入存取,从而使得不可写入寄存器。
[0078] CRYA模块使用I/O端口信号IONONSEC来识别非安全存取。CRYA模块使用PAC信号apb_secure来确定模块受PAC保护。当存取不安全且模块PAC受保护时,读取数据总线应读取所有0。当存取不安全且模块PAC受保护时,写入操作无效。当存取不安全且模块PAC受保护时,CRYA_pslverr可针对一个时钟循环或多个时钟循环被断言。CRYA模块受启用位时钟门控,使得在不启用CRYA模块时,无逻辑进行双态切换。此可通过仅在设定启用位时才更新所有寄存器(启用寄存器除外)使用自动时钟门插入而进行。CRYA模块还可使用按需时钟。此方法将clk_req信号连接到系统时钟控制器及CRYA模块中的IOTRANS事件,条件是时钟请求的时序路径不受限。
[0079] 加速器软件实施方案-SHA软件
[0080] 在一实施例中,到CRYA SHA软件库的输入可是指向512位数据块的指针、指向将要更新的散列位置的指针或指向暂时存储器缓冲区(例如,256字节的RAM)的指针。CRYA SHA软件库可基于512位数据而更新散列值。在一实施例中,已针对SHA算法对消息进行了适当地预先处理,使得用于SHA的CRYA软件交付可直接在512位组块上工作。在一实施例中,CRYA SHA软件库使用CRYA模块加速实施。在一实施例中,每迭代18次循环的消息调度环路及每迭代21次循环的压缩环路由CRYA模块实施。
[0081] 加速器软件实施方案-AES软件
[0082] 到CRYA AES软件例程的输入应为指向将要加密的128位数据块的指针、128位、192位或256位密钥以及指向输出数据的预期位置的指针。CRYA AES软件例程的输出应为存储于由调用函数指向的位置处的128位经加密数据。CRYA AES软件例程应使用CRYA AES硬件加速来将循环计数减小为尽可能少的循环。在参考实施方案中,AES重复环路的一次迭代采取48次循环。
[0083] 加速器软件实施方案-GCM软件
[0084] 在一实施例中,CRYA模块加速GCM操作模式的GF(2128)乘法。可交付的软件输入可是指向将相乘的128位数据块的两个指针及指向用于存储结果的位置的指针。CRYA软件库可使用CRYA GCM硬件加速来执行此乘法。在一实施例中,针对GF(2128)乘法的循环计数是320次循环,其中具有240字节的代码大小。
[0085] 侧通道攻击保护
[0086] 密码实施方案对于例如时序攻击及功率分析攻击等侧通道攻击是敏感的。为防止泄露时序侧通道上的信息,密码算法在恒定时间运行而不依赖于输入数据/密钥是重要的。在一实施例中,CRYA模块在恒定时间运行。
[0087] 对于AES,不泄露关于明文数据或密钥的信息是重要的。在一实施例中,CRYA模块使用掩蔽法实施对抗功率分析攻击的侧通道保护。在一实施例中,掩蔽法在硬件中实施为XOR运算。举例来说,可使用经掩蔽S盒实施方案。经掩蔽S盒使用针对每一16B块可重新产生的两个随机且独立8位掩码。在调用低级别CRYA软件之前,可使用较高级别软件功能来设置CRYA模块中的随机掩码。
[0088] 对于SHA,不泄露关于正进行散列的消息数据的信息是重要的。在一实施例中,此通过上覆的安全代码函数而进行-SHA的CRYA部分将不受侧通道保护影响。
[0089] 对于GF(2128)乘法,不需要侧通道保护机制。
[0090] 实例性AES架构
[0091] 如参考图1先前所揭示,以下AES操作可由CRYA模块加速:
[0092] ●SubBytes/InvSubBytes
[0093] ●MixColumn/InvMixColumn
[0094] ●KeySchedule
[0095] ●ShiftRows
[0096] AES算法的主要部分由以下序列组成:ShiftRows->SubBytes->MixColumns。CRYA模块架构保持CPU寄存器文件(例如,Grebe寄存器)中的AES数据状态(128位)且使用密码加速器一次变换32位。128位数据块可被视为字节的4×4矩阵,其中每一列是CPU寄存器文件中的32位寄存器。
[0097] 图7图解说明根据一实施例的AES移位行操作。CRYA模块需要来自列中的每一者的数据形成新状态矩阵的第一行,因此需要四个存储操作:
[0098] str r0,[r7,#0x10]
[0099] str r1,[r7,#0x14]
[0100] str r2,[r7,#0x18]
[0101] str r3,[r7,#0x1c]
[0102] nop//Required when using REG to REG transformation
[0103] ldr r4,[r7,#0x10]//New state 0is now in r4
[0104] 在“nop”循环期间,CRYA还执行SubBytes及MixColumns,且接着将经变换数据读取回到Grebe寄存器文件。对于128位数据块,在旋转源寄存器的同时执行四次此指令序列。以下代码展示下一序列,且从中可看出型式:
[0105] str r1,[r7,#0x10]
[0106] str r2,[r7,#0x14]
[0107] str r3,[r7,#0x18]
[0108] str r0,[r7,#0x1c]
[0109] nop//Required when using REG to REG transformation
[0110] ldr r5,[r7,#0x10]//New state 1is now in r5
[0111] 对于每一存储循环,仅保持8个位。此意指,在不丢失任何循环的情况下可使用四次8位S盒。在完整32位数据上并行使用四个8位S盒将实现更简单的实施方案,但一个S盒的面积可超过500个门,因此仅举例说明一个S盒是合意的。此可通过实施控制寄存器以选择S盒的输入而进行。在一实施例中,使用2位计数器。
[0112] 根据AES算法,对于所产生的每个新128位状态,在AddRoundKey操作(其为密钥与状态的简单XOR运算)中可创建及使用新密钥。使用Rijndael密钥调度,创建新密钥需要32位SubBytes (S盒)变换。
[0113] 如果使用四个8位S盒,那么软件将如下所示:
[0114] str r3,[r1,#0x28]//Store word 3of previous key
[0115] nop//Required for REG to REG transformation
[0116] ldr r3,[r1,#0x10]//Load S-box transformed 4-byte word
[0117] 仅使用一个8位S盒给出
[0118] str r3,[r1,#0x28]//Store word 3of previous key
[0119] nop//S-box of 1st byte
[0120] nop//S-box of 2nd byte
[0121] nop//S-box of 3rd byte
[0122] nop//S-box of 4th byte
[0123] ldr r3,[r1,#0x10]//Load S-box transformed 4-byte word
[0124] 幸运的是,后面的指令不具有任何数据相依性,因而可用有用指令填入nop,使得不会丢失任何循环:
[0125] str r7,[r5,#0x28]//Store word 3of previous key
[0126] mov r6,r10//Key2to r2(Filler instruction for S-box of 1st byte)[0127] eors r2,r6//r2=NextState2(Filler instruction for S-box of 2nd byte)[0128] eors r3,r7//r3=Nextstate3(Filler instruction for s-box of 3rd byte)[0129] mov r4,r8//Key 0to r0(Filler instruction for s-box of 4th byte)[0130] ldr r5,[r5,#0x10]//Load the S-box data back
[0131] Rijndael密钥调度还包含字节左旋转及与Rcon的XOR运算,此需要额外8位寄存器。Rcon针对每一新密钥而变换,其中Rcon1是Rcon-1的函数。
[0132] 考虑整个AES算法,存在类似的三种不同操作,但所述操作全部共用SubBytes步骤:
[0133] 1.Main loop ShiftRows->SubBytes->MixCol
[0134] 2.KeySchedule ByteRotate->SubBytes->Rcon
[0135] 3.Final step(After loop)ShiftRows->SubBytes
[0136] 由于通过SubBytes及MixCol的延迟需要使用REG到REG架构,因此在这三种情形中,使用单独“命令”寄存器来选择正确操作。操作选择无法直接取决于I/O端口地址。在一实施例中,使用三个此类寄存器,但可使用两个寄存器。
[0137] 解密期间包含反向执行SubBytes及MixCol操作,此意指将信号传递到硬件块。解密还改变Rcon的方向。此需要具有用以指示AES解密操作将被执行的寄存器。此位可在开始解密时从软件设定且在开始加密时被清空。
[0138] 图8中展示CRYA模块的AES部分800的框图。AES部分800包含地址解码器801、状态寄存器802(state_r)、寄存器803(rcon_r)、命令寄存器/计数器804、寄存器805(inv)、MixCol逻辑806、AND门807、多路复用器808、多路复用器809、多路复用器810及S盒811。
[0139] 在一实施例中,状态寄存器802为32位且用作所有变换的来源及目的地。接着在I/O端口上读取状态寄存器。数据流上的注释展示正执行的变换序列,且以草书字体展示其表示的算法的部分。举例来说,进入状态多路复用器808的一行数据流是SubBytes (ShiftRows)Encrypt Final。此意指,此数据流在加密算法的最后步骤中起作用,在所述环路之后,进行ShiftRows,且接着进行SubBytes。多路复用器809、810分别受命令/计数器寄存器804及反相寄存器805控制。
[0140] 实例性AES侧通道攻击保护
[0141] 图9是根据一实施例的图解说明经掩蔽S盒使用的框图。在一实施例中,S盒900是“经掩蔽”S盒。此实施例能够支持经掩蔽AES实施方案,这使得此实施例对于使用差分功率分析进行的侧通道攻击更具复原力。在一实施例中,CRYA模块使用加法性掩蔽,此意指对值与掩码进行XOR运算。经掩蔽值可用于AES中的所有步骤(其等是线性的)中,且接着使用新XOR传回解除掩蔽的数据。
[0142] 然而,S盒900是非线性变换。在一实施例中,S盒900取得三个输入–将被替代的数据字节、及具字节大小的输入掩码及具字节大小的输出掩码。首先以作为输入给予S盒900的同一掩码掩蔽进入S盒900中的数据,且以作为输出掩码给予S盒900的同一掩码将S盒900的数据输出解除掩蔽。由于MixColumns操作是线性的,因此可在MixColumns操作后进行输出掩蔽。
[0143] 在一实施例中,最优面积及代码大小可通过在S盒900的输入处进行输入掩蔽且在I/O读取路径中进行输出掩蔽而获得:
[0144] CRYA_iordata=state_r^{4{sbox_out_mask}};
[0145] 注意,此读取与CRYA模块的其它部分所使用的state_r读取不同,且地址解码器用于基于I/O地址而选择此读取数据。
[0146] 密钥调度还使用S盒900。此部分将以与数据相同的方式进行掩蔽。举例来说,掩蔽在S盒输入处进行,且解除掩蔽在I/O读取路径中进行。输入及输出掩码“sbox_in_mask[7:0]”及“sbox_out_mask[7:0]”存储于state2_r中,否则,state2_r不用于CRYA的AES部分中。
[0147] 输入及输出掩码的选择应是随机且彼此独立的。对于将要加密的16B数据块,可使用一对新输入及输出掩码。CRYA模块可使用state2_r[7:0]寄存器用于输入掩码及使用state2_r[15:8]寄存器用于输出掩码,但CRYA软件不应实施掩码到CRYA模块中的写入。CRYA软件应假设,state2_r中存在有效随机数对,且在对16B数据块执行CRYA软件之前将数目写入到CRYA state2_r中是较高级别软件例程的责任。
[0148] 实例性SHA架构
[0149] 先前描述了SHA-256算法,且此处重印伪码作为参考。
[0150] Message expansion:
[0151] for i from 16to 63
[0152] s0:=(w[i-15]rightrotate 7)xor(w[i-15]rightrotate 18)xor(w[i-15]rightshift 3)
[0153] s1:=(w[i-2]rightrotate 17)xor(w[i-2]rightrotate 19)xor(w[i-2]rightshift 10)
[0154] w[i]:=w[i-16]+s0+w[i-7]+s1
[0155] Compression function main loop:
[0156] for i from 0to 63
[0157] S1:=(e rightrotate 6)xor(e rightrotate 11)xor(e rightrotate 25)[0158] ch:=(e and f)xor((not e)and g)
[0159] temp1:=h+S1+ch+k[i]+w[i]
[0160] S0:=(a rightrotate 2)xor(a rightrotate 13)xor(a rightrotate 22)[0161] maj:=(a and b)xor(a and c)xor(b and c)
[0162] temp2:=S0+maj
[0163] h:=g
[0164] g:=f
[0165] f:=e
[0166] e:=d+temp1
[0167] d:=c
[0168] c:=b
[0169] b:=a
[0170] a:=temp1+temp2
[0171] 以上SHA算法包含:执行逻辑操作(s0、s1、S0、S1、ch、maj);及将结果与来自经扩展消息的字(w[i])及来自SHA常数表格的字(k[i])加在一起。
[0172] 实例性压缩函数
[0173] 在一实施例中,SHA常数表格为64个字,一个字用于压缩环路的一次迭代。经扩展消息也为64个字。压缩环路的每一迭代使用称为w[i]及k[i]的一消息字及一常数字。SHA工作变量a、b、c、d、e、f、g、h针对压缩环路的每一迭代而更新及循环。在CRYA模块中,软件保持CPU寄存器文件中的工作变量且将所述工作变量写入到CRYA模块中以用于算法决定的变换。CRYA模块包含两个32位状态寄存器state_r及state2_r以及32位加法器。CRYA模块还包含作为硬件查找表的全SHA常数表格K。
[0174] 使用这些资源,软件实施方案需要:
[0175] 1)加载来自RAM的w[i]
[0176] 2)将w[i]写入到CRYA模块
[0177] 3)将用于变换的工作变量写入CRYA模块
[0178] 4)加载来自CRYA模块的经变换数据
[0179] 5)管理寄存器文件中的工作变量
[0180] 以下伪码描述CRYA模块中的数据积累。每一行对应于时钟循环。
[0181] state r=ch
[0182] state_r=ch+k[i]
[0183] state_r=ch+k[i]+w[i]
[0184] state_r=ch+k[i]+w[i]+S1=temp1
[0185] Load state_r to register file,state_r freed
[0186] state2_r=maj
[0187] state_r=S0+maj
[0188] state_r=S0+maj+temp1
[0189] Load state_r to register file,state_r freed
[0190] 图10是根据一实施例的图解说明SHA ch及maj计算的框图。maj及ch计算使用三个操作数。软件经由多路复用器1000的输出首先将算子1存储到寄存器1002(state_r),接着将算子2存储到寄存器1001(state2_r),接着直接使用下一存储,使得:state_r=ch/maj(state_r,state2_r,iowdata)。
[0191] 图11中展示加法器架构1100的实例性实施例。加法器将寄存器1102(state_r)的内容与由耦合到多路复用器1105的命令寄存器1104(sha_cmd_r)选择的另一操作数加在一起。由于通过加法器架构1100的长时序路径,因此操作数及选择两者均独立于总线(IOWDATA/IOADDR),这是重要的。在图中,K是常数查找表、通过寄存器1101中的索引计数器进行索引(k_index_cnt_r)。计数器针对每一压缩函数迭代而递增,使得使用新k[i]值。命令寄存器1104基于用于写入的地址而更新。所述命令寄存器连同进入寄存器1102(state_r)及寄存器1103(state2_r)的写入数据一起更新。
[0192] 实例性消息扩展
[0193] 消息扩展环路与压缩函数使用相同原理-变换及积累所存储值:
[0194] State_r=s0
[0195] State_r=s0+s1
[0196] State_r=s0+s1+w[i-7]
[0197] State_r=s0+s1+w[i-16]
[0198] Load state_r to register file
[0199] 图12图解说明消息扩展变换中所使用的REGIN时序模型。所述模型包含SHA变换1200、多路复用器1202、地址解码器1201、多路复用器1202及状态寄存器1203。图11中所展示的加法器结构用于REGIN变换之后的循环中。
[0200] 实例性GCM架构
[0201] 在一实施例中,CRYA模块加速GCM操作模式的GF(2128)乘法。以下利用位排序表示法重新生成依据伽罗瓦/计数器操作模式(The Galois/Counter Mode of Operation)的乘法算法(算法1),使得LSB为位0且MSB为位127,此与标准 表示法一致。
[0202]
[0203] 考虑A[127:0]与B[127:0]的GF(2128)中的乘法,结果为RES[127:0]。对于减小的门计数,将操作数及结果保持在CPU寄存器文件及RAM中,且依序与一组较小数据一起使用。可将128位操作数A及B视为16位宽的半字集合,使得
[0204] V0=A[15:0],V1=A[31:16],针对n=0…7,Vn=A[16*(n+1)-1:16*n]。
[0205] X0=B[15:0],X1=B[31:16],针对n=0...7,Xn=B[16*(n+1)-1:16*n]。
[0206] 结果是:
[0207] Z0=RES[15:0],Z1=RES[31:15],针对n=0...7,Zn=RES[16*(n+1)-1:16*n]。
[0208] CRYA GCM加速器的核心是算子GFACC(图13),输入v对应于来自如上文所定义的操作数A的两个串连V半字{Vn+1,Vn},及输入x对应于来自操作数B的一个Xn半字。GFACC包含多路复用器1301、状态寄存器1302(state1_r)、状态寄存器1303(state2_r)、GFACC 1304、寄存器1305(mode_r)及寄存器1306(res_r)。
[0209] GFACC算子根据以下伪码更新res_new及v_new输出:
[0210]
[0211]
[0212] 模式输入选择用于算子的操作模式。清空模式对应于“模式0”,设定模式对应于“模式1”。首先将以“模式1”配置描述GFACC算子。接着将以“模式0”配置描述GFACC算子。
[0213] 模式1–计算部分结果Z0-Z6
[0214] 16位结果寄存器(res_r)对应于GF(2128)乘法的最终128位结果Zn的16个位。对于每一时钟循环,GFACC利用res_r值与v的16个经移位版本的XOR运算(图15)而更新res_r寄存器。此本质上是常规乘法,只不过其是以有限域算术进行,因此用XOR替换加法。可将GFACC模式1伪码与原始算法(参考算法1)进行比较。虽然原始算法迭代128次且对整个A操作数进行移位并对A操作数与Z进行XOR运算,但GFACC算子仅迭代16次,因而针对每一单循环操作进行16次移位。
[0215] 图16及17中图解说明GFACC方法与原始算法之间的差异。在图16中,每一16位部分Zn结果是B操作数及A操作数中以An开始的部分的函数。GFACC的V输入始终需要为32个位,因为移位将16个新V位推入到在XOR运算中使用的下部16个位中。此单循环操作需要用不同数据执行八次以完成算法决定的128次迭代。res_r在这些循环之间保持不变,因此res_r可被视为128位经移位乘法,但所述res_r仅产生结果的16个位。为产生结果的最低16个位,x[15:0]应含有操作数B(X7)的最高有效半字。v[31:0]应含有操作数A(V1,V0)的最低32位字。在x写入之后的循环中执行16位乘法(移位-与-xor)。此将用中间结果来更新res_r。
[0216] 接着,需要将新x及v值呈现给GFACC。为产生第二中间结果,需要X6及V2、V1。使用res_r中的中间结果来执行XOR运算。重复此直到X0及V8、V7已被GFACC处理且res_r含有结果(Z0)的最低16个位为止。以相同方式计算Z1,但此次,使V输入循环。图18中的表3及表4展示用于Z0及Z1计算的每一循环的V及X输入。结果Z2-Z6的V输入可见于图19中所展示的表5中,且Z7是特殊情形,稍后将进行描述。由于每一Zn计算使用算子中的8次循环,因此计算Z0-Z6使用算子中的8×7=56次循环。
[0217] 模式0–V扩展及Z7
[0218] 虽然已作为输入操作数A的半字片描述了V7、…、V0,但如从Z计算可见,需要将V扩展到最多V14。此扩展来自算法中的行10:
[0219] 10:V←rightshift(V)⊕R
[0220] 右移位不仅将0推入V中,而且对V的上部位与R进行XOR运算。由于算法迭代128次,因此产生128个新V位(8个半字)。此对应于V8到V14。此外,V7通过“⊕R”操作而更新。此V扩展在清空模式位(即,“模式0”(参考图21及算法2))时通过GFACC算子进行。在8次算子循环中执行模式0。其产生经扩展V7、…、V14及最上部Z位Z7。作为输入,模式0使用V7作为初始数据,V0到V6呈LSB到MSB次序,且X7到X0呈MSB到LSB次序。图11的v_new输出用于将经修改V反馈到算子中。图20中所展示的表6中描述模式0的逐循环数据输入。
[0221] 对于每一算子循环,经扩展V需要由CPU从CRYA读取。经扩展V应存储于RAM中以供在模式1中使用。在8次算子循环中,Z7可被读出且存储于最终结果目的地地址处。实际上,Z7无法连同GFACC算子中的Z0-Z6一起计算,因为Z7是取决于V扩展“⊕R”操作的中间值。
[0222] 时序路径考虑因素
[0223] CRYA GCM架构构建于REG到REG路径时序模型上。此意指,res_r及state_r更新(参考图21中所展示的GFACC框图)应独立于I/O端口信号(IOWDATA、IOADDR)。为允许此,参考实施方案包含两个命令寄存器gcm_cmd_r及gcm_cmd2_r。所述命令寄存器在将新数据写入到state_r或state2_r时被设定,如先前章节中所描述。state_r及res_r寄存器将仅在cmd寄存器被设定且针对一个循环保持为高时被更新。具有两个cmd位的原因是将交替输入到GFACC的数据,如先前所描述。
[0224] 实例性CRYA软件
[0225] CPU(例如,ARM Grebe CPU)具有可使用的寄存器r0到r12(寄存器r13到r15是链路、栈指针及PC)。极重要的额外约束是仅寄存器r0-r7可用于逻辑上及加载/存储指令。寄存器r8-12可仅与MOV及ADD指令一起使用。此意指,寄存器r0-r7需要被用作工作寄存器以及指向RAM/Flash及外围设备的指针寄存器。
[0226] 实例性CRYA软件-AES
[0227] AES状态是4×32个位。在一实施例中,寄存器r0-r3利用输入数据而初始化。在第一ShiftRows(SubBytes(MixCol))操作之后,新状态将处于寄存器r4-r7中。接着,将r0-r3用作工作寄存器来创建下一RoundKey并对寄存器r4-r7进行AddRoundKey操作。接着,对寄存器r4-r7进行ShiftRows(SubBytes(MixCol)),且将新状态传回寄存器r0-r3中。此序列循环多次。
[0228] 以下伪码图解说明此方法。
[0229]
[0230] 对于AES解密,操作的排序是不同的且需要单独软件例程。
[0231] 实例性CRYA软件-SHA
[0232] 对于SHA,r0-r7工作寄存器的Grebe约束仍较具限制性。SHA算法保持8×32位工作状态,且针对压缩环路中的每一轮而旋转寄存器:
[0233] h:=g
[0234] g:=f
[0235] f:=e
[0236] e:=d+temp1
[0237] d:=c
[0238] c:=b
[0239] b:=a
[0240] a:=temp1+temp2
[0241] 为避免此旋转及减少循环,CRYA软件实施方案使用半环路展开法,其中压缩环路被重复6次且交替使用输入数据。在一实施例中,汇编宏被使用且旋转输入变元:
[0242]
[0243] 在六轮之后,寄存器返回其初始位置中,且可使用环路将此过程迭代所需次数。
[0244] 实例性CRYA软件-GCM
[0245] GCM软件由两部分组成-模式0及模式1。模式0仅进行一次,但比模式1的一次迭代需要更多次循环。在执行模式0之后,V14、...、V8以及Z7处于RAM中。接着,针对Z0、...、Z6,在环路中执行模式1。当计算Z0-Z6时,最优性能通过为每一循环供应32位数据而实现。针对IOBUS上的每一次存储,产生经更新中间res_r(一个算子循环)。由于每一操作数(A、B)将是依序位于存储器中的128个数据位,因此实现此的最快方式是在存储操作数A的32个位与存储操作数B的32个位之间进行交替:
[0246] str r4,[r7,#0x40]//Store V1,V0 to state_r
[0247] str r0,[r7,#0x58]//Store X1,X0 to state2_r
[0248] 每一V存储将把32位V数据放置于state_r中,且同时将state_r的上半部拷贝到state2_r的上半部中并将state2_r的上半部移位到下半部中(参考章节2.3中的存储器映射-地址偏移0x50)。以此方式可使寄存器的量最小化同时使性能最优化。
[0249] 图16中图解说明此概念,其中使用state_r[31:0]及state2_r[15:0]的先前值在第三存储操作之后可获得第一结果。下一循环交替输入到GFACC的数据,使得v为{state_r[15:0],state2_r[31:16]}。
[0250] 为产生Z0,输入数据为V7、V6、V5、V4、V3、V2、V1、V0。(参考表格5)。对于Z1,不使用V0,因此输入数据为V8、V7、V6、V5、V4、V3、V2、V1。由于每一Vn均是16位数,因此关于每一奇数Zn都会遇到未对准问题。如果V1、V0存储于存储器位置0x0000处且V3、V2存储于0x0004处,那么存储{V2,V1}需要加载这两个存储器位置并在存储到state_r之前在同一寄存器中将这两个存储器位置对准。为避免此,在CRYA中进行未对准数据的处置部分。不同存储操作是针对不同地址偏移而定义,使得可存储{V1,V0}、接着为{V3,V2},且具有作为{V2,V1}的所得state_r。表1中可看到这些变换。
[0251] 对于经对准数据(Zn,其中n为偶数)的情形,软件代码将如下所示:
[0252] ldr r4,[r6,#0x00]//Load V
[0253] str r4,[r7,#0x50]//Store V1,V0 to state_r
[0254] str r0,[r7,#0x54]//Store X1,X0 to state2_r
[0255] 对于未对准数据(Zn,其中n为奇数),软件代码将如下所示:
[0256] ldm r6!,{r3,r4}
[0257] str r3,[r7,#0x58]//Store V1,V0
[0258] str r4,[r7,#0xSC]//Store V3,V2
[0259] //state_r is now V2,V1
[0260] str r0,[r7,#0x54]//Store X1,X0 to X
[0261] 由于偶数及奇数Zn必须以不同方式进行处置,因此为计算结果部分Z0到Z6,模式1环路将仅迭代3 1/2次。以下伪码展示模式1的环路结构。
[0262]
[0263] 虽然此文档含有许多具体实施方案细节,但这些细节不应解释为对可主张的内容的范围的限制,而是应解释为可为特定实施例特有的特征的说明。在单独实施例的上下文中于本说明书中描述的特定特征还可以组合方式实施于单个实施例中。相反地,在单个实施例的上下文中描述的各种特征还可单独地或以任何适合子组合方式实施于多个实施例中。此外,尽管上文可将特征描述为在特定实施中起作用且甚至最初是如此主张的,但来自所主张组合的一或多个特征在某些情形中可从所述组合去除,且所述所主张组合可针对于子组合或子组合的变化形式。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用