首页> 中国专利> 采用混合RIJNDAEL S-BOX的有效高级加密标准数据路径

采用混合RIJNDAEL S-BOX的有效高级加密标准数据路径

摘要

通过提供分开的解密数据路径,提高了在通用处理器中执行AES解密操作的速度。通过在逆字节代换变换中将乘法和逆运算组合,减少了aes解密路径的关键路径延迟。通过将逆混合列变换的适合常数合并到映射函数,进一步减少了aes解密数据路径中的关键路径延迟。

著录项

  • 公开/公告号CN101350714A

    专利类型发明专利

  • 公开/公告日2009-01-21

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN200810109256.0

  • 申请日2008-03-28

  • 分类号H04L9/06;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人曾祥夌

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 21:23:40

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-10

    未缴年费专利权终止 IPC(主分类):H04L9/06 授权公告日:20150603 终止日期:20160328 申请日:20080328

    专利权的终止

  • 2015-06-03

    授权

    授权

  • 2009-03-11

    实质审查的生效

    实质审查的生效

  • 2009-01-21

    公开

    公开

说明书

技术领域

本公开涉及一种密码算法,具体来说涉及一种高级加密标准(AES)算法。

背景技术

密码学是一种依赖于算法和密钥来保护信息的工具。该算法是一种复杂的数学算法,密钥是位串。存在两种基本类型的密码系统:秘密密钥系统以及公开密钥系统。秘密密钥系统也被称为对称系统,其具有由两个或两个以上使用方共享的单个密钥(“秘密密钥”)。单个密钥用于将信息加密和解密。

由美国国家标准和技术协会(NIST)作为联邦信息处理标准(FIPS)197公布的高级加密标准(AES)是一种秘密密钥系统。AES是一种能够将信息加密和解码的对称块密码。

加密(cipher)利用秘密密钥(加密密钥)执行一连串的变换,从而将称为“明文”的可理解的数据变换为称为“密文”的不可理解形式。加密中的变换包括(1)使用异或(XOR)运算将循环(round)密钥(从加密密钥导出的值)与状态(二维的字节阵列)相加;(2)使用非线性的字节代换表(S-Box)处理该状态;(3)按不同的偏移量将该状态的后三行循环移位;以及(4)获取状态的所有列,并(彼此独立地)混合它们的数据以生成新的列。

解密(逆加密)利用加密密钥执行一连串的变换,从而将“密文”块变换为具有相同大小的“明文”块。逆加密中的变换是加密中的变换的逆运算。

Rijindael算法在AES标准中规定,用于处理128位的数据块,使用具有长度为128、192以及256位的加密密钥。这些不同的密钥长度一般称为AES-128、AES-192以及AES-256。

AES算法通过10、12或14个连续的循环将明文变换为密文或者将密文变换为明文,循环次数具体取决于密钥的长度。

发明内容

本发明涉及一种装置,包括:

存储器,用于存储对第一操作数与第二操作数的所有可能值执行的乘法运算的预先计算的结果;以及

具有多个输入和单个输出的复用器,所述多个输入的每一个输入从所述存储器接收所述预先计算的结果之一,具有所述第二操作数的可能值之一的选择符为所述单个输出选择所述预先计算的结果之一。

所述选择符是所述第二操作数的逆(inverse),并且所述预先计算的结果之一将乘法运算和逆运算(inverse operation)组合。

本发明涉及一种方法,包括:

在存储器中存储对第一操作数与第二操作数的所有可能值执行的乘法运算的预先计算的结果;以及

基于至复用器的具有所述第二操作数的可能值之一的选择符,选择在所述复用器的输出处提供的所述预先计算的结果之一。

本发明涉及一种系统,包括:

动态随机存取存储器,用于存储数据和指令;以及

耦合到所述存储器的处理器,用于执行所述指令,所述处理器包括:

存储器,用于存储对第一操作数与第二操作数的所有可能值执行的乘法运算的结果;以及

具有多个输入和单个输出的复用器,所述多个输入的每一个输入从所述存储器接收所述结果之一,具有所述第二操作数的可能值之一的选择符为所述单个输出选择所述结果之一。

附图说明

随着以下详细的描述过程并参照附图,要求权利的主题的实施例的特征变得更清楚,在附图中相同的数字表示相同的部分,其中:

图1是一种系统的框图,该系统包括用于在通用处理器中执行AES加密或解密循环操作的aes数据路径;

图2是图1所示的处理器的实施例的框图;

图3是图1所示的处理器的局部的框图,该处理器包括图2所示用于执行AES解密的执行单元的实施例;

图4是图3所示的AES数据路径的实施例的框图,该AES数据路径包括解密数据路径;以及

图5是示出在128位数据路径中执行一个字节(8位)GF(28)逆运算的实施例框图;

图6示出图5所示的任何一种组合型逆乘法运算的实施例;

图7是示出图5所示的逆映射中用于计算常量多项式乘法的乘法器的框图;

图8示出当输入具有不对称的到达时间时用于通用乘法的乘法器的实施例。

尽管下文具体实施方式是参考要求权利的主题的示例实施例进行的,但是各种替换、修改和变型对于本领域技术人员是显而易见的。因此,应广义地看待要求权利的主题,并仅由所附权利要求中提出的所定义。

具体实施方式

高级加密标准(AES)算法是一种计算密集的算法,其一般在软件中或在专用处理器中执行。因此,加密一般仅用于加密存储在计算机中的信息的子集,例如,被分类为“顶级机密”的信息。但是,存在对计算机中存储的更多信息加密的需求。例如,如果所有存储在移动计算机中的信息都被加密,则当移动计算机被盗时,该信息将受到保护。

通常,用于加密和解密的一连串的变换被组合到单个数据路径。由于在各阶段中要判定被执行中的操作是加密还是解密以选择合适的变换,从而产生了附加的延迟。由于在关键路径上增加了延迟,这便降低了执行加密/解密操作的速度。

通过将路径分离,可以单独地优化每个路径以减少延迟。逆加密变换包括用非线性字节代换表(S-Box)处理状态的逆S-box变换以及取所有列的状态并(彼此独立地)混合其数据来产生新列的逆混合列变换。这两种变换都需要乘法运算以及多个XOR运算,这给关键路径,特别是解密路径增加了延迟。

根据本发明的一个实施例,通过将逆s-box和逆混合列操作组合可以减少解密数据路径中经由逆混合列以及逆S-box的关键延迟路径。

鉴于逆S-box和多项式乘法运算均是XOR逻辑的组合,在本发明的一个实施例中,将逆混合列运算的多项式乘法运算嵌入到了逆s-box中。

图1是系统100的框图,该系统包括用于在通用处理器中执行AES加密或解密循环操作的aes数据路径103。系统100包括处理器101,存储器控制中心(MCH)102以及输入/输出(I/O)控制中心(ICH)104。MCH 102包括用于控制处理器101和存储器108之间的通信的存储器控制器106。处理器101和MCH 102经由系统总线116通信。处理器101可以是多种处理器中的任意一个(如单核Pentium处理器、单核Intel Celeron处理器、XScale处理器或者多核处理器(如Pentium D、处理器或Duo处理器))或任何其他型号的处理器。处理器101中的aes数据路径103可以对存储在存储器108和/或存储设备112上的数据进行aes加密和解密循环操作。

存储器108可以是动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步动态随机存取存储器(SDRAM)、双数据率(DDR2)RAM或者Rambus动态随机存取存储器(RDRAM),以及其他任何类型的存储器。

ICH 104可以使用高速芯片到芯片的互连114(如直接媒体接口(DMI))耦合到MCH 102。DMI支持经由两个单向路径的2吉比特/秒的并行传输速率。

ICH 104可包括用于控制与耦合到ICH 104的至少一个存储设备112的通信的存储I/O控制器110。存储设备可以是,例如磁盘驱动器、数字视频盘(DVD)驱动器、压缩光盘(CD)驱动器、独立磁盘冗余阵列(RAID)、磁带驱动器或其它存储设备。ICH 104可经使用串行存储协议(例如串行连接小型计算机系统接口(SAS)或者串行高级技术连接(SATA))的存储协议互连118与存储设备112通信。

图2是图1所示的处理器101的实施例的框图。处理器101包括提取和解码单元206,用于将从一级(L1)指令高速缓存202接收到的处理器指令解码。执行指令要用到的数据可以被存储于寄存器文件208中。在一个实施例中,寄存器文件208包括多个128位寄存器,以供aes指令用来存储aes指令所用的数据。

在一个实施例中,寄存器文件是一组类似于Intel Pentium MMX处理器中提供的128位寄存器的128位寄存器,Intel Pentium MMX处理器具有流(单指令多数据(SIMD))扩展(SSE)指令集。在SIMD处理器中,以可一次性加载的128位块来处理数据。128位寄存器允许在一次操作中将指令应用到128位块(16字节)。

提取和解码单元206从L1指令高速缓存202提取宏指令,将宏指令解码并将其拆分成称为微操作(μops)的简单操作。执行单元210调度并执行这些微操作。在所示实施例中,执行单元210中的aes数据路径103包括用于aes指令的微操作。引退单元212将执行的指令的结果写入到寄存器或者存储器中。

图3是图1所示的处理器101的局部的框图,该处理器101包括图2中所示的用于执行AES加密和解密的执行单元210的实施例。

AES具有128位的固定块大小,以及128、192或256位的密钥大小,并且对称为“状态”的4×4(16字节(128位固定块大小))字节阵列操作。AES算法经过10、12或14个连续循环将128位的明文块变换成128位的密文块(加密),或者将128位的密文块变换成128位的明文块,循环的次数具体取决于密钥大小(128、192或256位)。

下表1示出使用128位密钥对128位块输入执行AES加密的128位结果的示例。

128位输入:001 12233445566778899aabbccddeeff(十六进制)

128位密钥:000 102030405060708090a0b0c0d0e0f(十六进制)

128位结果:69c4e0d86a7b0430d8cdb78070b4c55a(十六进制)

表1

在一个实施例中,用于在aes数据路径103中执行AES加密或解密的AES指令(宏指令)可以通过符号表示方式定义为:

REG[dest]=aes(REG[src],

               key-size={128,192,256},

               #rounds={1,10,12,14},

               op={encrypt/decrypt},

               special_last_round={true/false})

在将aes指令解码时,将在每个aes循环中用来控制流程的多个参数存储在控制寄存器322中。这些参数包括密钥的大小(128位、192位或256位)、循环的次数(1、10、12或14)、操作的类型(加密/解密),以及是否具有特定的最后循环。AES微操作基于n的值相应地执行n次AES循环。对于多个10、12、14的循环值,aes微操作可以对128位、192位或256位的密钥大小执行现行的标准aes。通过允许使循环类型(最后或非最后)成为可编程的,可以使用相同的aes指令和aes微操作来,执行一个20次循环的类似AES的加密(AES型最后循环),或者仅“一次循环”通过。

当选中的操作(op)是加密(加密),AES数据路径103利用秘密密钥(加密密钥)执行一系列的变换,将称为“明文”的可理解数据变换成称为“密文”的不可理解形式,如上表1所示。对于每一个循环(1,10,12或14),利用由即时密钥调度器300提供的循环密钥328,由aes数据路径103执行的加密中的变换包括:(1)利用异或(XOR)运算将循环密钥(从加密密钥导出的值)与状态(二维字节阵列)相加;(2)利用非线性字节代换表(S-Box)处理该状态;(3)按不同的偏移量将该状态的最后三行循环移位;以及(4)获取状态的所有列,并(彼此独立地)混合它们的数据以生成新的列。如果“special_last_round”为“真”,则不对最后循环执行变换(4)。

寄存器文件304具有多个AES指令可使用的128位寄存器(REG)。指定这些128位寄存器REG[src]的其中一个来存储用于第一次aes循环的源操作数,以及指定另一个128位寄存器REG[dst]来存储该aes指令的结果。在发出aes指令之前,将要由该aes指令加密或解密的128位数据块载入到寄存器文件304中的源寄存器306中。将在多次循环(1,10,12或14)中变换源操作数来提供128位源数据的加密/解密的结果。该源操作数可以是要使用密钥加密的128位明文或要使用密钥解密的128位密文。

当在aes指令已经被提取和解码单元206解码之后,执行单元210执行aes指令涉及执行与aes指令关联的微操作。在使用aes指令的微操作来执行加密或解密操作之前,执行单元210检索存储在寄存器文件304中的源操作数以及原始密钥。在所示的实施例中,源操作数[SRC](128位块状态)被存储在寄存器306中以及128位、192位或256位密钥被存储在寄存器文件304中的寄存器308、310中。在128位密钥的情况中,密钥的整个128位被存储在寄存器文件304中的一个128位寄存器(例如寄存器308)中。对于大于128位的密钥,最高有效位(大于128位)被存储在另一个128位寄存器(例如,寄存器310)中。用于aes指令的密钥大小参数指示了密钥是存储在寄存器文件304的一个寄存器中还是或多于一个以上的寄存器中。存储密钥的寄存器文件304中的一个或多个寄存器不会在执行aes指令期间被修改。在其他实施例中,可以使用寄存器文件304中的其他寄存器来存储密钥以及源操作数。当aes指令的执行完成后,将结果[DST]存储在寄存器文件304中的寄存器312中。

为了减少保存与密钥相关的扩展密钥(即,用于10,12或14次循环的每次循环的循环密钥)所需的存储器,执行单元210包括即时密钥调度器300。并不预先生成扩展密钥并将其存储在表中,而是由该即时密钥调度器300即时地生成加密/解密“循环密钥”328,即,它是下次aes循环所需的。将该加密/解密循环密钥328转发到aes数据路径103以在下次aes循环中使用。该即时调度器300包括256位密钥寄存器324来存储据以生成扩展密钥的原始密钥。根据密钥大小(128、192或256),将该原始密钥从寄存器文件304中的一个或两个寄存器308、310中载入到256位密钥寄存器中。

密钥扩展326将寄存器304中存储的n字节原始密钥扩展成b字节扩展密钥,其中扩展密钥的前n字节是原始密钥。例如,对于128位密钥,128位密钥扩展成176字节扩展密钥,即,11×16字节,其中前16字节是原始128位密钥,因此循环次数为10。192位密钥的24字节扩展成208字节(13×16字节)以提供12个“循环密钥”,一个循环密钥对应于12次循环中的一次,以及256位密钥的32字节扩展成240字节(15×16字节)以提供14个“循环密钥”,一个循环密钥对应于14次循环中的一次。

图4是图3所示aes数据路径103的实施例的框图。该aes数据路径103包括两个独立的数据路径:加密数据路径400和解密数据路径402。加密数据路径(加密)400执行aes加密循环,并包括用于下列阶段的微操作:块状态404、字节代换(SubByte)(S-box)408、移位行(shift row)406、混合列(mix column)410以及加循环密钥(add round key)412。解密数据路径(逆加密)402执行aes解密循环,并包括用于下列阶段的微操作:逆移位行(Inverse ShiftRow)416、逆字节代换(Inverse SubByte)(S-Box)418、逆混合列(Inverse MixColumn)420和加循环密钥422。在另一个实施例中,用于解密数据路径402的循环操作序列可以将逆混合列420和加循环密钥422颠倒,其中按照下列次序执行操作序列:逆移位行416、逆字节代换(S-Box)418、加循环密钥422以及逆混合列420。

从体系结构可见性来看,刚好存在一个加密数据路径400和解密数据路径402上共有的状态。当加载了原始状态时,通过各自的复用器432、434,为块状态404和块状态414加载相同的值。通过为aes加密数据路径400和aes解密数据路径402提供分开的块状态404、414,分别寄存加密循环密钥和解密循环密钥。例如,将加密循环密钥436定向到块状态404,以及将解密循环密钥438定向到块状态406。在每次aes加密/解密循环之后,将每个块状态404、414更新为来自各自的加循环密钥阶段412、430的各自的下一个aes循环值。然而,具体根据操作模式是加密还是解密,仅一个块状态值是有效的。

将加密数据路径400的最后加密循环的输出存储在寄存器422中。将解密数据路径402的最后解密循环的输出存储在寄存器424中。复用器426添加在aes加密数据路径400和aes解密数据路径402之后,以选择最后aes循环的输出取自aes加密数据路径400还是取自aes解密数据路径402。复用器426能够基于模式是加密还是解密来将aes加密路径的最后循环的结果或者aes解密路径402的最后循环的结果作为aes指令的结果输出。

由于分开aes加密数据路径400和aes解密数据路径402,无需在各个阶段处用来选择aes操作是加密还是解密的附加逻辑。因此,减少了经由aes数据路径103的关键路径延迟。

此外,aes加密数据路径400和aes解密数据路径402可以单独地进行优化。例如,由于附加的异或(XOR)门,aes解密数据路径402中的逆混合列420比aes加密数据路径中的对应混合列410会引起更多延迟。通过将aes加密数据路径400与aes解密数据路径402分开,可以从aes加密数据路径400的关键路径中移除此附加的延迟。

在将最后一次循环值寄存在相应的寄存器422、424中、以及在混合列变换(加密路径中的混合列410,以及解密数据路径中的逆混合列422)之前,最后一次循环值绕过加密数据路径400和解密数据路径402。添加加循环密钥(最后一次)阶段420以便为加密的最后一次aes循环执行加循环密钥操作。添加加循环密钥(最后一次)阶段430以便为解密的最后一次aes循环执行加循环密钥操作。将附加的加循环密钥(最后一次)阶段420、430与加密数据路径400和解密数据路径402分开。因此,这会减少最后一次aes加密循环和最后一次aes解密循环中的关键路径延迟。

此外,由于没有在最后一次aes解密循环中执行逆混合列420以及没有在最后一次aes加密循环中执行混合列410,非关键的最后一次解密/加密aes循环中隐蔽了由复用器426引起的附加延迟。延迟看上去被隐蔽了,这是因为没有附加的延迟被添加到aes加密路径400,而且经由最后一次加循环密钥428和复用器426增加的延迟小于经过混合列410的延迟。

加密/解密模式选择是加密值有效还是解密值有效,并且通过复用器426输出有效的结果。由于将aes数据路径103划分成分开的aes加密/解密数据路径400、402而获得关键路径延迟的减少,使得处理器时钟频率的相应增加。

如本文论述的,并行地对128位块状态执行加密和解密操作,并且输出操作的有效结果(加密或解密结果)。下面将描述经由aes加密数据路径400和aes解密数据路径402用于对128位块执行加密/解密操作的流程。

当提取和解码单元206将aes指令解码时,将寄存器文件304中存储的要加密的数据块(128位)和原始密钥转发到aes数据路径103中的aes加密路径400和aes解密路径402以便进行处理。复用器432选择至块状态404、414的相应输入是从寄存器文件304中提取的还是先前aes加密循环或aes解密循环所得到的aes循环密钥436。

在块状态404中,使用按位XOR将aes加密循环的128位输入(状态)与循环密钥(与该循环关联的扩展密钥的128位部分)相加,以生成128位中间值(状态)。

在移位行406中,128位中间值(状态)通过位线性变换,在位线性变换中将4×4阵列的每一行(状态)向左循环移位。对于4×4阵列中的每一行,每个字节被移位的位置的数目均不同。

在S-box(字节代换)408中,将移位行的结果的每个字节代换为可存储在也称为“代换盒”或“S-Box”的查询表中并从中检索的另一个字节值。。S-box取出某个数量的输入位,m,并将它们变换成某个数量的输出位,n,S-box通常作为查询表来实现。。在一个实施例中,可以使用固定的查询表。此操作通过使用伽罗华域(GF)(28)上的逆函数来提供非线性。例如,可以通过使用m位输入的外部两个位来选择查询表中的一行,并使用m位输入的内部位选择列来查找n位输出。

在混合列410中,来自S-Box 408的结果通过位线性变换,其中将4×4阵列(状态)的每一列视为二进制伽罗华域(GF)(28)上的一个多项式,然后乘以固定多项式c(x)=3x3+x2+x+2并对x4+1取模。

混合列410之后的加循环密钥412对从即时调度器300接收的下一个aes循环密钥328与aes循环结果执行异或函数。

最后aes加密循环不同于其他aes解密循环之处在于,它省略了混合列阶段410。

在块状态414中,利用按位XOR将aes解密循环的128位输入(状态)与循环密钥(与此循环关联的扩展密钥的128位部分)相加,以生成128位的中间值(状态)。

在逆移位行418中,执行对移位行406的逆运算。

在逆S-box(字节代换)416中,执行对S-box408的逆运算。

在逆混合列420中,对4×4阵列中的四列(c)的每一列的每一字节(s0-S3)执行下面的逆混合列变换:

s`0,c=({0E}·s0,c)({0B}·s1,c)({0D}·s2,c)({09}·s3,c)

s`1,c=({09}·s0,c)({0E}·s1,c)({0B}·s2,c)({0D}·s3,c)

s`2,c=({0D}·s0,c)({09}·s1,c)({0E}·s2,c)({0B}·s3,c)

s`3,c=({0B}·s0,c)({0D}·s1,c)({09}·s2,c)({0E}·s3,c)

上面示出的变换是针对一列(c)的。该列具有标记为s0,s1,s2,s3的四字节。E,B,D和9是常数(contanst)多项式值,其乘以每一字节来计算输出字节(s’0-s’1)。通过将列中的所有字节乘以这些常数值中不同的一个常数值并对每个乘法运算的结果执行异或(XOR)运算来计算每一个输出字节s’0,s’1,s’2,s3。因此,每个输出字节需要四次乘法运算和三次XOR运算。除了每列每个输出字节的三次XOR运算之外,该常数多项式乘法需要大量XOR运算。因此,逆混合列对解密数据路径402增加非常大的关键路径延迟。

逆混合列阶段420之后的加循环密钥422对来自即时调度器300的加密/解密循环密钥328以及先前aes解密循环操作的结果执行异或函数。

最后aes解密循环不同于其他aes解密循环之处在于,它省略了逆混合列阶段420。

根据本发明的一个实施例,可以通过将逆s-box和逆混合列运算组合来减少经由解密数据路径402中的逆混合列420和逆S-box418的关键延迟路径。

因为逆S-box和多项式乘法运算都是XOR逻辑的组合,所以在本发明的一个实施例中,将多项式乘法运算嵌入到逆组合s-box和混合列430中。代替查询表,逆组合S-box和混合列430使用函数复合域(functional composite-field)来执行逆S-box运算。

逆字节代换变换通过组合两个变换来构成:

1.仿射变换

2.GF(28)中的逆运算

域GF(28)是域GF(24)的扩展。因此,GF(28)中的每个元素a可以表示为GF(24)中的ahx+a1形式的多项式。因此,GF(28)中的逆运算可以通过下面GF(24)中的多项式逆运算来实现:

(ahx+a1)-1=(ahd)x+(aha1)d方程式1

d=((ah2{0E})(aha1)a12)-1方程式2

图5是图示用于在128位数据路径中为子集(8位)执行GF(28)中的逆运算的实施例的框图。“元素a”520是8位的,并表示GF(28)中的多项式。

在映射502中对GF(28)520中的字节a执行映射运算,以将GF(28)中的元素a表示为GF(24)中的ahx+a1形式的多项式。字节代换ah是字节a的高阶4位,而字节代换a1是字节a的低阶4位。GF(28)中的逆字节代换a,即,(a)-1在GF(24)中由上面的方程式1中的(ahx+a1)-1表示,且首先需要计算d,如上面的方程式2中所示。

乘法器504、506和XOR函数514执行上面的方程式1的计算。将字节代换ah和a1输入到乘法器504和506。乘法器504计算方程式2中的而乘法器506计算方程式2中的乘法器504和乘法器506的结果在XOR函数514中被XOR,这提供以下方程式3的结果:

d,=((ah2{0E})(aha1)a12)方程式3

因为关键延迟路径经由乘法器504、506和XOR函数514。为了减少关键延迟路径中的延迟,并不是在XOR函数514之后执行方程式2所需的逆运算,而是在组合逆乘法运算508、510之后执行逆运算。

在计算了d’之后,存在两个可由组合的逆乘法运算508、510使用d’来并行地计算的乘法运算。组合的逆乘法508利用从XOR函数516接收的(ah□a1)的结果来执行组合的逆乘法510执行

如前面论述的,关键延迟路径是经由乘法器504、506和XOR函数514的对d’的计算。因为可以将GF(24)中的系数的逆运算嵌入在查询表中,所以可以将d’的逆运算嵌入在组合的逆乘法508,510的查询表中。这从关键延迟路径中免去为提供方程式2所需的d而进行d’的逆运算。

在组合的逆乘法508、510中已经执行乘法和逆运算之后,逆映射运算512将GF(24)中的元素转换回域GF(28)。为了进一步减少aes解密数据路径中的关键路径延迟,逆映射运算512也可以包含GF(28)中的4个多项式乘法,将它们嵌入在逆映射运算中。GF(28)中的4个多项式乘法提供将组合的逆乘法的结果乘以4个常数多项式值的每一个(即,逆混合列变换所需的E,B,D和9)的结果。

除了执行从4到8位域的变换外,逆映射运算512也执行逆仿射变换,用于如FIPS 197指定的解密。用于逆映射运算512中的解密的逆仿射变换的组合进一步减少经由aes解密路径402的延迟。

图6示出了图5中所示的组合的逆乘法运算508、510中的任一个的实施例。当由乘法器506、504计算d’时,将组合的乘法运算508、510的输入、即ah□a1或ah输入到查询表(存储器)602,来为将第一操作数(ah或a1)与第二操作数(d)的所有可能值相乘选择一组预先计算的乘法结果。在图6所示的实施例中,组合的逆乘法510提供将4位值ah乘以4位值d的结果。

例如,在d具有4位的实施例中,存在16种可能值(0000b-1111b)。因此,将ah(第一操作数)与d’(第二操作数)的16个可能值的每一个值相乘的16个可能结果存储在查询表602中。如图6所示,将ah与d相乘的所有可能结果存储在查询表602中。当接收到请求要输出对输入ah的乘法运算的结果时,将ah乘以d’的每个可能值的逆的结果(d),即,查询表602中存储的ah*(0^(-1))-ah*(15^(-1))输出到复用器604的输入(标为0-15)。在已经由乘法器504,506和XOR函数513计算d’之后,d’选择复用器604的输入中的其中一个作为d*ah来输出。

由于d’的计算是在关键延迟路径上,d’被用来从复用器604选择乘法运算的结果。在计算d’时,ah被用来选择查询表602的输出。当d’可用时,基于d’的值从复用器604输出ah与d(d’的逆)相乘的组合结果。

例如,如果ah是1001b,则将此值乘以d的每个可能值(即,0000b-1111b),并将其存储在查询表602中。将这些值从查询表602输出,并在复用器604的16个输入处提供。当已计算d’时,它选择复用器中作为ah*d的结果的输入,以从复用器604输出。例如,如果d’是1010b,d是0101b,通过d’选择作为ah*0101b的结果的输入10。由于查询表602将乘法函数和取逆函数组合,所以减少了关键路径延迟。

例如,对于四位操作数(选择符d’,操作数d和操作数ah),用于存储预先计算的结果值的区域的增加不大。同样在查询表602中查询预先计算的值的延迟被乘法运算504、506和XOR函数514中计算d’所花的时间所隐蔽。

为了进一步减少解密数据路径中的关键延迟路径,逆映射512可以预先计算与常数多项式E,B,D和9相乘的结果,以用于如下的逆混合列变换:

s`0,c=({0E}·s0,c)({0B}·s1,c)({0D}·s2,c)({09}·s3,c)

s`1,c=({09}·s0,c)({0E}·s1,c)({0B}·s2,c)({0D}·s3,c)

s`2,c=({0D}·s0,c)({09}·s1,c)({0E}·s2,c)({0B}·s3,c)

s`3,c=({0B}·s0,c)({0D}·s1,c)({09}·s2,c)({0E}·s3,c)

图7是图示用于执行图5所示逆映射512中的常数多项式乘法运算的乘法器的框图。在所示实施例中,每个乘法器700、702、704、706存储对字节s0、s1、s2或s3的其中之一的4位字节代换(较低位或较高位)的所有可能值乘以多项式E、9、D或B的其中之一的预先计算的结果。例如,乘法器700存储将多项式E与具有16个可能值0000b-1111b的4位字节代换的所有组合相乘的结果。

每个乘法器700、702、704、706包括一个16:1复用器604,如结合图6论述的。然而,因为一个操作数是常数(E,9,D或B),所以不需要查询表602。而是可以在复用器604的输入处提供可存储在存储器中的已存储的预先计算的结果。

基于字节代换的值来选择所存储的预先计算的结果之一。预先计算常数多项式乘以所有可能的字节代换值的所有可能结果减少了经由用于执行逆混合列变换的逆映射512的延迟。然后利用每个字节代换的预先计算的结果通过XOR逻辑执行XOR运算来计算逆混合列变换的输出(s’0-s’3)。

图8示出当操作数(输入)具有不对称的到达时间时用于通用乘法的乘法器800的一个实施例。参照图8,乘法器800包括查询表802,其存储预先计算多项式B与4位字节代换A的所有组合的结果。

当如结合图5中所论述的,计算字节代换A时,在16:1复用器804的输入处提供B乘以字节代换B的每个可能值的结果。字节代换A选择适合的输入,并且在复用器延迟时间之后输出将字节代换A1乘以B的结果,其中复用器延迟时间短于执行B乘以字节代换A所用的时间。

图8所示的用于计算常数多项式计算的乘法器的实施例可以用来减少存在不对称延迟(即经由一个路径的延迟慢于经由另一条路径的延迟)情况下的关键路径延迟。例如,当可以执行对查询表802的查询,同时在对关键延迟路径计算复用器选择符(selector)(A)时。使用经由最慢路径(A)计算的操作数来选择复用器804的输出,使用经由较快路径(B)计算的操作数来执行表查询。从而,减少了关键路径延迟,因为经由复用器的延迟小于两个操作数均为有效之后执行乘法运算的附加延迟。在一个实施例中,乘法器800可以用来执行图5所示的乘法器504中的乘法运算。

对于本领域技术人员来说,将显见到本发明实施例中包含的方法可以在包括计算机可用媒介的计算机程序产品中实施。例如,这种计算机可用媒介可以由其上存储有计算机可读程序代码的只读存储器装置(例如压缩光盘只读存储器(CD ROM)或传统的ROM装置,或计算机磁盘)组成。

虽然参照实施例已经特别示出并描述本发明的实施例,但是本领域技术人员将认识到,在不背离所附权利要求涵盖的本发明实施例范围的前提下,可以作出各种形式和细节上的变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号