用于高级加密标准(aes)的灵活结构和指令的制作方法

文档序号:7936903阅读:435来源:国知局
专利名称:用于高级加密标准(aes)的灵活结构和指令的制作方法
技术领域
本公开涉及密码算法,并且具体而言,涉及高级加密标准(AES)算法。
背景技术
密码是依靠算法和密钥来保护信息的工具。这种算法是复杂的数学算
法,而所述密钥是比特串。密码系统具有两种基本类型私用密钥系统和 公共密钥系统。私用密钥系统又称为对称系统,其具有两方或多方共享的 单个密钥("私用密钥")。该单个密钥既用于加密信息也用于解密信息。
国家标准和技术研究所(NIST)发布的作为联邦信息处理标准(FIPS) 197的高级加密标准(AES)是一种私用密钥系统。AES是能够加密和解密 信息的对称块加密(blockcipher)。
加密技术(加密)使用私用密钥(加密密钥)执行一系列的转换,以 将被称为"明文"的可理解数据转换为被称为"密文"的无法理解的形式。 加密中的转换包括(1)使用异或(XOR)操作将循环(round)密钥(从 加密密钥导出的值)与体(state)(字节的二维阵列)相加;(2)使用非线 性字节替换表(S-盒(S-Box))对体进行处理;(3)使用不同的偏移来循 环移位所述体的最后三行;以及(4)获取所述体的所有列,并且(相互独 立地)混合所述列的数据以产生新的列。
解密(反加密)使用加密密钥来执行一系列的转换,以将"密文"块 转换为同样大小的"明文"块。反加密中的转换是加密中进行的变换的逆 操作。
在AES标准中指定Rijindael算法使用长度为128、 192和256位的加 密密钥来处理128位的数据块。 一般将不同的密钥长度称为AES-128、 AES-192和AES-256。
AES算法在10、 12或14个连续循环中将明文转换为密文或者将密文 转换为明文,其中,循环的次数取决于密钥长度。


根据下面进行的详细描述以及参考附图,所要求保护主题的实施例的 特征将变得明显,其中同样的附图标记代表同样的部件,并且其中-
图1是系统的框图,其包括根据本发明的原理用于在通用处理器中执 行AES加密和解密的灵活结构和指令的实施例;
图2是图1中示出的处理器的实施例的框图3是包括图2中示出的用于根据本发明的原理来执行AES加密和解 密的执行单元的实施例的框图4是示出了通过图3中示出的执行单元的aes加密循环指令流的流程
图5是示出了通过图3中示出的执行单元的aes加密最后一个循环指令 流的流程图6是示出了通过图3中示出的执行单元的aes解密循环指令流的流程
图7是示出了通过图3中示出的执行单元的aes解密最后一个循环指令 流的流程图;以及
图8示出了可以用来生成循环密钥并执行加密和解密的具有立即 (immediate)字节的aes循环指令的实施例。
尽管以下详细描述将参考要求保护主题的说明性实施例来进行,但是 本领域的技术人员会清楚其多种替换、更改和变化。因此,应当宽泛地看 待所要求保护的主题,并且应该仅由所附权利要求对所要求保护的主题进 行限定。
具体实施例方式
高级加密标准(AES)算法是典型地在软件或专用处理器中执行的计算 密集算法。因此,典型地,仅将加密操作用于对存储在计算机中的信息的 子集进行加密,例如,所述子集为可以归类为"最高机密"的信息。然而, 需要对存储在计算机中的更多信息进行加密。例如,如果存储在移动计算 机中的所有信息都进行了加密,那么就算该移动计算机被盗,这些信息仍能受到保护。
AES是利用128、 192或256位的密钥长度对128位的比特块进行操作 的块加密。根据密钥长度,将一系列的操作反复执行若干个(10、 12或14 个)循环。
通过使用隐式128位寄存器来存储循环密钥,可以动态地(即,刚好 在每个循环之前)生成用于每个循环的密钥。然而,由于依赖于先前指令 的结果,使用隐式寄存器可能降低x86型基于寄存器的处理器的性能。
存在一些应用受益于动态密钥生成,例如,用于处理可能每个流具有 不同密钥的网络分组的应用。可能存在要求更高性能的使用单个密钥的其 它应用,例如,使用单个密钥来加密/解密磁盘驱动器的内容。因此,出现 了对密钥生成的灵活性的要求。本发明的实施例提供了用于在通用处理器 中执行AES加密和解密的灵活结构和指令。
图1是系统100的框图,其包括根据本发明的原理用于在通用处理器 中执行AES加密和解密的灵活结构和指令的实施例。系统100包括处理器 101、存储器控制器中心(MCH)或(图形存储器控制器中心(GMCH)) 102以及输入/输出(I/O)控制器中心(ICH) 104。 MCH102包括存储器控 制器106,其控制处理器101和存储器108之间的通信。处理器101和MCH 102通过系统总线116进行通信。
处理器101可以是多种处理器中的任意一个,诸如单核Intel⑧奔腾 IV⑧处理器、单核Intel赛扬处理器、Inte媳XScale处理器,或者诸如Intel 奔腾D、 Intel⑧至强⑧处理器或Intel⑧酷睿⑧Duo处理器等多核处理器,或
者任何其它类型的处理器。
存储器108可以是动态随机存取存储器(DRAM)、静态随机存取存储 器(SRAM)、同步动态随机存取存储器(SDRAM)、双数据速率2 (DDR2) RAM或者Rambus动态随机存取存储器(RDRAM)或者任何其它类型的 存储器。
ICH 104可以使用高速芯片到芯片互联114 (例如,直接介质接口 (DMI))来耦合到MCH 102。 DMI支持经由两个单向通道的2千兆比特/
秒的并发传输速率。
ICH 104可以包括存储I/O控制器110,用于控制与耦合到ICH 104的至少一个存储设备112的通信。存储设备可以是诸如磁盘驱动器、数字
视频盘(DVD)驱动器、紧致盘(CD)驱动器、独立冗余磁盘阵列(RAID)、 磁带驱动器或其它存储设备。ICH 104可以使用串行存储协议通过存储协议 互联118与存储设备112进行通信,所述串行存储协议诸如串行连接微 型计算机系统接口 (SAS)或者串行高级技术连接(SATA)。
处理器101包括AES功能模块103,用于执行aes加密和解密操作。 AES功能模块103可以用于对存储在存储器108和/或存储在存储设备112 中的信息进行加密或解密。
图2是图1中示出的处理器101的实施例的框图。处理器101包括提 取和解码单元206,用于对从第一级(Ll)指令高速缓存202处接收的处理 器指令进行解码。可以将用于执行指令的数据存储在寄存器堆208中。在 一个实施例中,寄存器堆208包括多个128位寄存器,aes指令使用这些128 位寄存器来存储由aes指令使用的数据。
在一个实施例中,寄存器堆是一组128位寄存器,这些128位寄存器 类似于在具有流(单指令多数据(SIMD))扩展(SSE)指令集的Intel奔 腾MMX处理器中提供的128位MMX寄存器。在SIMD处理器中,以128 位的块来处理数据,其中一次载入一个128位的块。
提取和解码单元206从Ll指令高速缓存202中提取宏指令、解码所述 宏指令并且将其分解为称为微操作(yops)的简单操作,这些微操作可以 存储在微码只读存储器(ROM) 214中。执行单元210调度和执行这些微 操作。在示出的实施例中,执行单元210中的aes功能模块103包括用于 aes指令集的微操作。退出单元212将所执行指令的结果写入寄存器或存储 器。aes指令使用的循环密钥214可以存储在Ll数据高速缓存204中,并 且可以被载入到执行单元210中以供微操作用于执行aes指令集中的aes指 令。将循环密钥214存储在数据高速缓存204中的处理使循环密钥免于受 到邻近信道的攻击,例如,尝试获取循环密钥以便能访问存储在系统100 中的加密信息。
图3是示出了图2中示出的用于根据本发明的原理来执行AES加密和 解密的执行单元210的实施例的框图。将结合图2来描述图3。
在提取和解码单元206已经将aes指令进行解码之后,执行单元210对aes指令的执行涉及执行可存储在微码ROM 214中的与aes指令相关联 的微操作。
根据本发明的实施例的灵活AES指令集允许程序员针对待处理的数据 量以及存储器带宽和容量来对性能进行折衷。
一些应用可以一直使用同一个密钥。在性能至关重要的应用中,可以 在每次预先计算密钥的密钥调度(即,每个循环的循环密钥)以及将其存 储在存储器中等方面进行折衷。其它应用可能需要将用于存储密钥调度的 存储器数量最小化并且仍然能够实现多块操作的良好性能。对于这种应用, 可以在处理之前对多个块预先计算密钥调度。通过仅存储加密密钥或反加 密密钥以及之后以一些性能为代价导出其它必要的信息,可以进一步使存 储器占用量(footprint)最小化。
在x86类型的处理器中,可用于AES循环密钥操作和AES调度操作的 执行端口的区域和数量限制了 AES指令的性能。在每个块加密都需要密钥 扩展的系统中,可以通过将AES调度操作和AES循环密钥操作置于单独的 执行端口来提高性能。然而,在x86类型的处理器中,可能无法使用单独 的执行端口和用于控制该单独端口的附加区域。
在一个实施例中,提供了aes指令集,其包括单独的aes指令,用于执 行加密循环、解密循环、加密最后一个循环、解密最后一个循环,以及用 于计算加密循环密钥或解密循环密钥。在一个实施例中,aes指令集中存在 六个aes指令。每个aes循环指令具有唯一的操作码(opcode)。下面在表1 中示出了根据一个实施例的用于固定宽度循环密钥(例如,128位)的aes 指令集中的aes循环指令。
AESENCRYPTRound xmmsrcdst xmm
输入 数据(=目标),循环密钥
输出 使用循环密钥通过AES循环进行转换之后的数据
AESENCRYPTLastRound xmmsrcdst xmm
输入 数据(=目标),循环密钥
输出 使用循环密钥通过AES最后一个循环进行转换之后的数据
AESDECRYPTRound xmmsrcdst xmm
输入 数据(=目标),循环密钥
输出 使用循环密钥通过AES循环进行转换之后的数据
AESDECRYPTLastRound xmmsrcdst xmm 输入 数据(=目标),循环密钥
输出 使用循环密钥通过AES最后一个循环进行转换之后的 数据
AESNextRoundKey xmmsrcl, 2 xmm dst (immediate)
输入 密钥的低128位,密钥的高128位,循环数的指示符 输出 从输入导出的下一个循环密钥
AESPreviousRoundKey xmmsrcl, 2 xmm dst (immediate)
输入 密钥的低128位,密钥的高128位,循环数的指示符 输出 从输入导出的上一个循环密钥
表l
所述aes指令集包括四个aes循环指令(加密、解密、加密最后一个循 环和解密最后一个循环)以及两个aes循环密钥指令(下一个循环密钥以及 上一个循环密钥)。所述aes指令集中的aes循环指令包括用于执行加密和 解密循环操作的多个单循环操作,其用于除了最后一个循环的所有循环。 例如,在表1的AES加密循环(AESENCRYPTRound)单循环指令中,输 入数据存储在128位的寄存器(xmmsrcdst)中并且循环密钥存储在另一个 128位的寄存器(xmm)中。该指令对存储在128位的xmmsrcdst寄存器中 的输入数据(源)执行aes循环操作,并且使用该循环操作的执行结果来改 写存储在该128位的xmmsrcdst寄存器中的输入数据。因此,xmmsrcdst先 是存储输入数据,而后存储aes循环操作的结果。
所述aes指令集还包括用于最后一个解密循环的aes解密指令,以及 用于最后一个加密循环的aes加密指令。例如,在表1的AES加密最后一个循环(AESENCRYPTLastRound)单循环指令中,输入数据存储在128 位的寄存器(xmmsrcdst)中并且循环密钥存储在另一个128位的寄存器
(xmm)中。该指令对存储在xmmsrcdst寄存器中的输入数据(源)执行 aes循环操作,并且使用该循环操作的执行结果来改写存储在xmmsrcdst寄 存器中的输入数据。因此,xmmsrcdst先是存储输入数据,而后存储循环操 作的结果。xmm寄存器存储用于循环操作的循环密钥。
在另一个实施例中,诸如 AESENCRYPTRound 和 AESENCRYPTLastRound的循环指令和最后一个循环指令可以从存储器
(m/128)而不是从寄存器堆304中获取输入,例如,aes循环指令可以是 AESENCRYPTRound xmmsrcdst m/128。
所述aes指令集中的其它两个aes指令根据密钥的长度(即,128位、 192位或256位)来生成用于aes循环的循环密钥。 一个aes循环密钥指令 生成用于加密操作的循环密钥,以及另一个aes循环密钥指令生成用于解密 操作的循环密钥。AES下一个循环密钥(AESNextRoundKey)指令和AES 前一个循环密钥(AESPreviousRoundKey)指令中的立即(immediate)字 段指定密钥的长度{128, 192, 256}。
在另一个实施例中,不使用立即字段,而是将不同的密钥长度实现为 各自具有唯一操作码的单独的指令。在该实施例中,多个aes循环密钥指令
包括用于每个循环密钥操作的三个单独的指令,例如, AESNextRoundKey—128 、 AESNextRoundKey—192 和
AESNextRoundKey—256,以及,将会具有用于AESPreviousRoundKey的类 似的包含三个指令的指令集。在该实施例中,指令集中的指令总数是10个, 这与前述实施例中指令总数为6个的情况不同。
寄存器堆304具有多个128位的寄存器,其可以由aes指令集中的aes 指令使用。所述128位的寄存器可以存储源操作数、循环密钥和aes指令的 结果。对于第一循环而言,aes指令接收的源操作数可以是将要进行加密的 128位的明文或者是将要进行解密的128位的密文。用于生成128位、192 位或256位密钥的密钥调度的密钥可以存储在寄存器堆304中的任何一个 128位寄存器308中。循环密钥也可以存储在寄存器堆中的任何128位寄存 器308中。所有指令使用寄存器堆中的寄存器并且也可以如前文所述直接地从存储器获取输入。
下面在表2中示出了使用表1所示的aes指令集的实施例的源码的实 例。在该实例中,在对多个块使用同一个密钥以执行加密的应用中优化了 性能。 一个此类应用是使用单个密钥来加密磁盘的内容,其中,在将数据 存储到磁盘中之前,使用同一个密钥对所有数据进行加密。在该实例中, 执行AES-128加密。
密钥的长度可以是128位、192位或256位。根据密钥的长度,将要执 行的循环次数可以是l、 10、 12或14,其中,每个循环密钥具有固定的长 度(128位)。在循环次数的值为IO、 12、 14的情况下,aes微操作可以针 对128位、192位或256位的密钥长度执行标准aes加密和解密。
当对多个块使用同一个密钥时,可以预先计算用于每个循环的循环密 钥(密钥调度),并且将其存储在存储器(例如,第1级数据高速缓存204) 中,从而在对每个块进行加密/解密操作之前不需要再次计算同一个密钥调 度。
RK[O] = Input Key Fori=1..10
RK [i] = AESNextRoundKey (RK[i-l])
End
STATE = Input Block STATE = STATE xor RK[O]
Fori = l.,9
STATE = AESENCRYPTRound (STATE, RK[i])
End
STATE = AESENCRYPTLastRound (STATE, RK[IO])
表2
具有IO个元素的阵列(RK)用于存储密钥的密钥调度。用于AES-128
14加密的输入密钥存储在RK
中,以及通过从aes指令集中调用 AESNextRoundKey指令来预先计算出9个循环密钥RK[O]-RK[l〗。 AESNextRoimdKey指令根据当前循环密钥来计算下一个循环。预先计算的 用于密钥调度的循环密钥可以存储在第1级数据高速缓存204的循环密钥 214中。
在该实例中,作为密钥调度(扩展密钥)的一部分,在进入环路以执 行aes循环之前,从寄存器堆304直接输入用于该循环的循环密钥,对所述 体和密钥执行异或(XOR)操作。对于循环1到循环9中的每一个循环, 从aes指令集调用AESENCRYPTRound指令以对一个循环执行aes循环操 作。对于最后一个循环(循环10)而言,从aes指令集调用 AESNECYRPTLastRound指令以对最后一个循环执行aes循环操作。
在发出第一个aes指令以开始加密或解密操作之前,将待由aes指令进 行加密或解密的信息载入到寄存器堆304中的源/目的寄存器306中。用于 加密/解密源寄存器306中的信息的密钥存储在寄存器堆304中的一个或多 个其它寄存器308中。在128位密钥的情况下,将整个128位密钥存储在 寄存器堆304中的任意一个其它128位的寄存器中。对于长度超过128位 的密钥而言,将(高于128位的)最高有效位存储在另一个128位寄存器 中。
在表2所示的实例中,根据密钥来预先计算每个循环的循环密钥,并 且在将该循环密钥载入到寄存器堆304的任何一个寄存器308之前,将其 存储在第1级数据高速缓存204中。用于每个循环的密钥还可以存储在寄 存器堆304中的一个或多个寄存器中,或者可以存储在第1级数据高速缓 存204的循环密钥214中。
AES具有128位的固定块长度以及128、 192或256位的密钥长度,并 且AES对4x4的字节阵列(即,16个字节(128位的固定块长度))进行操 作,将该4x4字节阵列称为"体"。AES算法在IO、 12或14个连续循环中 将128位的明文块转换为128位的密文块(加密)或者将128位的密文块 转换为128位的明文块(解密),其中,循环的次数取决于密钥长度(128、 192或256位)。
在执行每个循环加密操作或解密操作之前,执行单元210接收存储在寄存器堆304中的体和密钥。使用存储在只读存储器(ROM) 214的密钥 调度器302中的aes指令的微操作来执行每个加密/解密循环操作。在示出 的实施例中,体(128位的块体)存储在寄存器306中,并且密钥存储在寄 存器堆304的一个或多个其它寄存器308中。在完成aes指令的执行之后, 所得到的体存储在寄存器堆304的寄存器306中。所述体可以是由下一个 aes循环使用的中间循环数据,或者是AES加密或解密操作的最终结果。
在示出的实施例中,密钥调度器302生成在aes循环中使用的循环密钥。 密钥调度器302可以实现为多个微码操作,并且可以包括用于执行操作序 列的微码操作,所述操作序列用于针对FIPS文档197所定义的128位、197 位和256位密钥来生成循环密钥。
在另一个实施例中,密钥调度器可以实现为执行单元210中的硬件状 态机序列。在另一个实施例中,密钥调度器的一些部分可以实现为存储在 微码ROM214中的微码操作,并且密钥调度器的剩余部分可以实现为执行 单元210中的硬件状态机序列。
密钥调度器302将密钥的n个字节扩展为扩展密钥(密钥调度)的b 个字节,其中,扩展密钥的前面n个字节是原来的密钥。例如,对于128 位的密钥而言,将该128位密钥扩展为176字节的扩展密钥,即,11x16字 节(128位),其中,前面的16个字节是原来的128位密钥,因此,循环的 次数为10。将192位密钥的24个字节扩展为208个字节(13x16字节), 以提供12个"循环密钥",每个循环密钥用于12个循环中的一个,以及, 将256位密钥的32个字节扩展为240个字节(15x16字节),以提供14个 "循环密钥",每个循环密钥用于14个循环中的一个。
在解码aes指令中的操作码(opcode)之后,将用于控制用于一个aes 循环的aes指令中的流的多个参数存储在控制逻辑322中。这些参数包括操 作类型(加密或解密)以及该循环是否是最后一个循环。
aes循环逻辑324可以包括用于以下阶段的微操作块体314、 S-box/ 逆S-box316、移位行316和混合逆、混合列或空(称为"混合列")320和 加循环密钥326。
在块体314中,使用逐位XOR将对aes循环逻辑324的128位输入(体) 与密钥(与该循环关联的扩展密钥的128位的部分)相加,以产生128位
16的中间值(体)。
在S-box/逆S-box316中,使用可以存储在查询表中并从査询表检索的 其它字节值来替换该128位中间值的每个字节,其中,又将所述查询表称 为替换盒或"S-Box"。 S-box获取一些数量的输入比特m且将其转换为一 些数量的输出比特n,并且S-box典型地实现为查询表。典型地使用固定的 查询表。通过使用伽罗瓦域(Galois Field) (GF) (28)上的逆函数,该操 作提供了非线性。例如,可以通过使用m位输入的外部两个比特在查询表 中选择行以及通过使用m位输入的内部比特选择列来寻找n位输出。
在移位行318中,S-box/逆S-box316的结果通过比特线性转换,其中, 将从替换字节阶段接收的4x4阵列(128位(16字节)的体)的每一行中 的字节向左侧进行循环移位。对于4x4阵列中的每一行,对每个字节移位 的位数不同。
在混合列320中,来自于移位行320的结果通过比特线性转换,其中, 將4x4阵列(体)中的每一列视作二进制伽罗瓦域(GF) (28)上的多项式, 并且之后使用固定多项式c(x) = 3x3 + x2 + x + 2将其与模x4 + 1相乘。最后 一个aes循环与其它aes循环的不同之处在于其省略了混合列320。
对于该aes循环,混合列阶段320之后的加循环密钥324对来自于扩展 密钥的循环密钥以及移位行318或混合列320的结果执行异或函数。
例如,可以发出下述aes指令以执行aes解密的一个循环
AESDECRYPTRound xmmsrcdst xmm
该实例使用密钥来执行128位的AES加密循环操作,其中,该密钥的 扩展密钥由(RK[l], RK[2],…RK[10])来表示。可以通过在发出AES解密循 环(AESDECRYPTRoimd)指令之前发出AESPreviousRoundKey xmmsrc 1, 2xmmdst (immediate)指令来生成该循环密钥。可以从第1级数据高速缓 存204中直接将循环密钥载入到块体314中,或者可以将循环密钥首先存 储在寄存器堆304的寄存器(xmm)中并且之后将循环密钥从寄存器载入 到块体314中。
当使用不同的密钥来加密/解密每个块时,例如,对于用于加密/解密数 据分组的网络接口控制器(NIC)而言,可以在执行加密/解密之前动态地
17计算每个循环的循环密钥,如下表3中用于AES-128加密的伪码中所示
RK[O] = Input Key STATE = Input Block STATE = STATE xor RK[O]
Fori = 1..9
RK[i] = AESNextRoundKey (RK[i-l])
STATE = AESENCRYPTRound (STATE, RK[i])
End
RK [10] = AESNextRoundKey (RK[9])
STATE = AESENCRYPTLastRound (STATE, RK[IO])
表3
在该实例中,在将循环密钥用于密钥调度(扩展密钥)的10个循环(即, 循环1-9以及循环10 (最后一个循环))中的每一个以执行加密之前,生成 用于该循环的循环密钥。
包括单aes循环指令和单aes循环密钥生成指令的aes指令集允许具有 不同次数的循环和密钥调度的AES的变型,即,FIPS文档197未定义的 AES的变型。因此,aes指令集中的单个循环aes指令提供了在执行aes加 密和解密过程中的灵活性。
由于aes指令集所执行的循环的次数是不固定的,所以如果需要的话, 可以执行任意次数的循环。例如,如果引入了用于散列或MAC攻击或者 AES攻击的新标准,则可以改变循环的次数以支持未来的加密/解密标准。
图4是示出了通过图3中示出的执行单元210的aes加密循环指令流的 流程图。
在方框400处,执行单元210等待aes加密循环指令。如果提取和解码 单元206己经解码了 AES加密循环指令,则处理继续进行到方框402。如 果提取和解码单元206尚未解码AES加密循环指令,则处理保持在方框400 中,等待aes加密循环指令。
在方框402处,在提取和解码单元206进行指令解码期间,表示将进行加密的指示被存储在控制逻辑322中,并且在执行加密循环过程中使用 的循环密钥和128位的块体(源)被从寄存器堆304载入到执行单元210 中。处理继续进行到方框404。
在方框404处,对128位的块体,g卩,来自于方框406或418的结果, 执行替换操作。使用可以存储在查询表中并从査询表检索的其它字节值来 替换该128位的块体的每个字节,其中,又将所述查询表称为替换盒或 "S-Box"。 S-box获取一些数量的输入比特m且将其转换为一些数量的输 出比特n,典型地将S-box实现为查询表。将结果存储为128位的块体。处 理继续进行到方框406。
在方框406处,128位的块体(4x4阵列)通过比特线性转换,其中, 4x4阵列的每一行中的字节向左侧进行循环移位。对于4x4阵列中的每一行, 对每个字节移位的位数不同。处理继续进行到方框408。
在方框408处,128位的块体(4x4阵列)通过比特线性转换,其中, 将4x4阵列(体)中的每一列视作GF (28)上的多项式,并且之后使用固 定多项式c(x) = 3x3 + x2 + x + 2将其与模x4 + 1相乘。处理继续进行到方框 410。
在方框410处,对于该aes循环,对来自于扩展密钥的循环密钥以及移 位行318或混合列320的结果执行异或函数。处理继续进行到方框412。
在方框412处,将该循环(128位的块体)的加密操作的结果存储在寄 存器堆304的源/目的寄存器302中。用于aes加密指令的处理结束。
下面的表4示出了在执行表3所示的伪码之后,使用128位的密钥对 128位的块输入执行AES-128加密的结果的实例。
128位输入00112233445566778899aabbccddeeff 128位密钥000102030405060708090a0b0c0d0e0f 128位结果69c4e0d86a7b0430d8cdb78070b4c55a
表4
图5是示出了通过图3中示出的执行单元210的aes加密最后一个循环 指令流的流程图。
(十六进制) (十六进制) (十六进制)
19在方框500处,执行单元等待aes加密最后一个循环指令。如果提取和 解码单元206已经解码了 AES加密最后一个循环指令,则处理继续进行到 方框502。如果提取和解码单元206尚未解码AES加密最后一个循环指令, 则处理保持在方框500中,等待aes指令。
在方框502处,以结合方框404 (图4)所讨论的S-box查询的类似方 式来执行最后一个循环的S-box査询。处理继续进行到方框504。
在方框504处,与结合方框406 (图4)的其它循环所讨论的类似方式 来执行最后一个循环的移位行操作。处理继续进行到方框506。
在方框506处,对于该aes循环,对来自于扩展密钥的循环密钥以及移 位行318或混合列320的结果执行异或函数。处理继续进行到方框508。
在方框508处,将加密最后一个循环操作的结果存储在寄存器堆304 的源/目的寄存器306中。用于aes指令的处理结束。
图6是示出了通过图3中示出的执行单元210的aes解密循环指令流的 流程图。
在方框600处,执行单元等待aes解密循环指令。如果提取和解码单元 206已经解码了 AES解密循环指令,则处理继续进行到方框602。如果提取 和解码单元206尚未解码AES解密循环指令,则处理保持在方框600中, 等待aes解密循环指令。
在方框602处,在提取和解码单元206进行指令解码期间,表示将进 行解密的指示被存储在控制逻辑322中,并且在执行解密循环过程中使用 的循环密钥和源(128位的块体)被从寄存器堆304载入到执行单元210中。 处理继续进行到方框604。
在方框604处,将要执行的操作是解密。通过执行AES标准定义的逆 S-box査询来对128位的块体执行替换操作。处理继续进行到方框606。
在方框606处,按照FIPS文档197的定义执行逆移位行操作。处理继 续进行到方框608。
在方框608处,按照FIPS文档197的定义执行逆移位行操作。处理继 续进行到方框610。
在方框610处,对于aes循环,对来自于扩展密钥的循环密钥以及移位 行318或混合列320的结果执行异或函数。处理继续进行到方框612。在方框612处,将该循环的解密操作的结果(128位的块体)存储在寄 存器堆304的源/目的寄存器302中。用于aes解密循环指令的处理结束。
图7是示出了通过图3中示出的执行单元210的aes解密最后一个循环 指令流的流程图。
在方框700处,执行单元210等待aes解密最后一个循环指令。如果提 取和解码单元206已经解码了 AES解密最后一个循环指令,则处理继续进 行到方框702。如果提取和解码单元206尚未解码AES解密最后一个循环 指令,则处理保持在方框700中,等待aes解密最后一个循环指令。
在方框702处,通过执行FIPS文档197所定义的逆S-box査询来对128 位的块体执行最后一个循环的替换操作。处理继续进行到方框704。
在方框704处,按照FIPS文档197的定义对最后一个循环执行逆移位 行操作。处理继续进行到方框706。
在方框706处,对于aes循环,对来自于扩展密钥的循环密钥以及移位 行318或混合列320的结果执行异或函数。处理继续进行到方框708。
在方框708处,将解密最后一个循环操作的结果存储在寄存器堆304 的源/目的寄存器306中。用于aes解密最后一个循环指令的处理结束。
在一个实施例中,图4-图7的流程图中的方框可以实现为执行单元210 中的硬件状态机序列。在另一个实施例中,可以将部分方框卖现为可以存 储在只读存储器(ROM) 214中的微程序。将方框实现为硬件状态机序列 的实施例可以提供较高的性能。
图8示出了可以用来生成循环密钥并执行加密和解密的具有立即字节 的aes循环指令的实施例。替代了表l中示出的aes指令集,提供了用于执 行aes指令集的功能的单aes循环指令。将单aes指令所执行的特定功能编 码在立即字节的比特之中(密钥_选择—修改量(key—select—modifier))。立 即字节允许对aes循环指令进行扩展以增加新的特性,取代创建多个各自具 有唯一操作码的新指令的方法。
可以将aes循环指令符号性地定义为
dest := aes_key_round (source2, source 1), key—select—modifier 根据端口号将aes—密钥—循环(aes一keyj"omid)指令发送给特定的执行
21单元210,以执行AES加密或解密操作。在示出的实施例中,端口号4是 指定的用于AES循环指令的执行端口。将执行单元210分为多个并行端口 (超标量)。然而,并非所有端口都是等同的。 一些端口具有特定的资源, 诸如大整数乘法器或者浮点乘法器或除法器。在多个端口处支持更简单 和更常见的指令,诸如加法、减法和异或,以使性能最大化。因此,对于 每个指令或微操作,发出控制逻辑确定用于发出微操作/指令的端口。在该 实施例中,总是将aes指令发往端口号4。然而,在其它实施例中,可以使 用其它端口号。
参考图8,目标字段(dest)存储用于循环N的128位的扩展密钥,源 2(smuxe2)字段存储用于循环N-l的128位的扩展密钥,以及源1 (soucel) 字段存储用于循环N-2的128位的扩展密钥。key—select—modifier是一个8 位的立即值,用于提供当前循环数(N)、操作方向(加密/解密)以及AES 密钥长度。对于AES-128而言,不需要并且可以省略sourcel。执行单元是 AES单元并且不使用标志(整数或浮点数)。
在一个实施例中,立即值的四个最低有效位的位编码指示循环数,例 如,AES-128的循环数1-10、 AES-192的循环数1-12以及AES-256的循环 数2-14。对于AES-128和AES-192而言,由于第一个循环使用未修改的输 入密钥,所以循环数0是无效的。对于AES-256而言,由于将未修改的256 位的输入密钥用于前两个128位的循环,所以循环数0和1是无效的。
立即字节的第4位指示操作方向(加密或解密),例如,在一个实施例 中,0=加密且1=解密,以及在另一个实施例中,1=加密且0=解密。立即字 节的第5位和第6位指示AES密钥长度。在一个实施例中,按照下面的表 5所示来定义AES密钥长度
位[6:5]密钥长度
00128
01192
10256
11保留
表5
22在另一个实施例中,值为11的位[6:5]也是128位密钥长度的指示符。 在该实施例中,位[6:5]的全部值都是有效的并且可以被解析。
本领域的技术人员将理解,本发明的实施例所涉及的方法可以实现在 包括计算机可用介质的计算机程序产品中。例如,此类计算机可用介质可 以包括只读存储器设备,诸如存储有计算机可读程序代码的紧致盘只读 存储器(CD-ROM)盘或常规ROM设备、或者计算机软盘。
虽然己经具体地示出了本发明的实施例并且参考其实施例进行了描 述,本领域的技术人员可以理解,可以在不偏离所附权利要求限定的本发 明实施例范围的情况下对其形式和细节进行各种改变。
权利要求
1、一种装置,包括执行单元,用于执行aes指令的操作序列,所述操作序列执行可编程次数的aes循环,所述操作使得所述执行单元如果aes循环次数大于1将密钥载入到临时密钥寄存器中;以及在执行每个aes循环之前,根据所述密钥来生成用于该aes循环的循环密钥;以及对于每个aes循环,对该aes循环的输入和用于该aes循环的所述循环密钥执行aes循环操作序列,以提供对下一个aes循环的下一个输入或者提供所述aes指令的结果。
2、 如权利要求l所述的装置,其中,如果所述aes循环次数为1 ,则 在执行所述aes循环操作序列之前,所述执行单元载入根据所述密钥而预先计算的用于该aes循环的循环密钥。
3、 如权利要求2所述的装置,其中,所述aes循环操作序列使得所述 执行单元对该aes循环的输入和用于该aes循环的所述循环密钥执行异或(XOR) 操作,以产生中间值;根据存储在查询表中的值对所述中间值中的每个字节执行替换操作;以及通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果。
4、 如权利要求l所述的装置,其中,对于所述aes循环次数-l,所述 aes循环操作序列使得所述执行单元-对该aes循环的所述输入和用于该aes循环的所述循环密钥执行异或 (XOR)操作,以产生中间值;根据存储在査询表中的值对所述中间值中的每个字节执行替换操作; 通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果;以及通过对所述中间值中的列进行混合的比特线性转换来传递所述替换操 作的结果。
5、 如权利要求4所述的装置,其中,对于最后一个aes循环,所述aes循环操作序列使得所述执行单元对该aes循环的输入和用于该aes循环的所述循环密钥执行异或(XOR) 操作,以产生中间值;根据存储在査询表中的值对所述中间值中的每个字节执行替换操作;以及通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果。
6、 如权利要求l所述的装置,其中,所述结果是加密值。
7、 如权利要求l所述的装置,其中,所述结果是解密值。
8、 如权利要求l所述的装置,其中,用于第一个aes循环的所述密钥 和所述输入存储在寄存器堆中。
9、 如权利要求l所述的装置,其中,所述寄存器堆包括多个128位的 寄存器。
10、 一种方法,包括如果用于aes指令的可编程aes循环次数大于1 ,则将密钥载入到临时 密钥寄存器中,并且在执行每个aes循环之前,根据所述密钥来生成用于该 aes循环的循环密钥;以及对于每个aes循环,对该aes循环的输入和用于该aes循环的所述循环密钥执行aes循环操作序列,以提供对下一个aes循环的下一个输入或者提 供所述aes指令的结果。
11、 如权利要求10所述的方法,其中,如果所述aes循环次数为1, 则在执行所述aes循环操作序列之前,载入根据所述密钥而预先计算的用于 该aes循环的循环密钥。
12、 如权利要求11所述的方法,其中,执行所述aes循环操作序列包括对该aes循环的输入和用于该aes循环的所述循环密钥执行异或(XOR) 操作,以产生中间值;根据存储在查询表中的值对所述中间值中的每个字节执行替换操作;以及通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果。
13、 如权利要求IO所述的方法,其中,对于所述循环次数-1,执行所 述aes循环操作序列包括-对该aes循环的所述输入和用于该aes循环的所述循环密钥执行异或 (XOR)操作,以产生中间值;根据存储在查询表中的值对所述中间值中的每个字节执行替换操作; 通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果;以及通过对所述中间值中的列进行混合的比特线性转换来传递所述替换操 作的结果。
14、 如权利要求13所述的方法,其中,对于最后一个aes循环,执行 所述aes循环操作序列包括对该aes循环的输入和用于该aes循环的所述循环密钥执行异或(XOR) 操作,以产生中间值;根据存储在查询表中的值对所述中间值中的每个字节执行替换操作;以及通过对所述中间值中的行进行移位的比特线性转换来传递所述替换操 作的结果。
15、 如权利要求10所述的方法,其中,所述结果是加密值。
16、 如权利要求10所述的方法,其中,所述结果是解密值。
17、 如权利要求10所述的方法,其中,用于第一个aes循环的所述密 钥和所述输入存储在寄存器堆中。
18、 如权利要求10所述的方法,其中,所述寄存器堆包括多个128位 的寄存器。
19、 一种产品,包括具有相关联的信息的机器可访问介质,其中,当 访问所述信息时,使机器执行如果用于aes指令的可编程aes循环次数大于1,则将密钥载入到临时 密钥寄存器中,并且在执行每个aes循环之前,根据所述密钥来生成用于该 aes循环的循环密钥;以及对于每个aes循环,对该aes循环的输入和用于该aes循环的所述循环 密钥执行aes循环操作序列,以提供对下一个aes循环的下一个输入或者提 供所述aes指令的结果。
20、 如权利要求IO所述的产品,其中,如果所述aes循环次数为1, 则在执行所述aes循环操作序列之前,载入根据所述密钥而预先计算的用于 该aes循环的循环密钥。
21、 一种系统,包括动态随机存取存储器,用于存储数据和指令;以及处理器,耦合到所述存储器,用于执行所述指令,所述处理器包括执行单元,用于执行aes指令的操作序列,所述操作序列执行可编 程次数的aes循环,所述操作使得所述执行单元 如果所述aes循环次数大于1:将密钥载入到临时密钥寄存器中;以及 在执行每个aes循环之前,根据所述密钥来生成用于该aes 循环的循环密钥;以及对于每个aes循环,对该aes循环的输入和用于该aes循环的 所述循环密钥执行aes循环操作序列,以提供对下一个aes循环的 下一个输入或者提供所述aes指令的结果。
22、如权利要求22所述的系统,其中,如果所述aes循环次数为1, 则在执行所述aes循环操作序列之前,所述执行单元载入根据所述密钥而预先计算的用于该aes循环的循环密钥。
全文摘要
提供了用于通用处理器的灵活aes指令集。该指令集包括用于执行aes加密或解密的“一次循环”的指令,并且还包括用于执行密钥生成的指令。可以使用立即数来指示循环数和128/192/256位密钥的密钥生成的密钥长度。由于灵活aes指令集不要求跟踪隐式寄存器,所以可以充分利用管道能力。
文档编号H04L9/10GK101622816SQ200880006495
公开日2010年1月6日 申请日期2008年3月25日 优先权日2007年3月28日
发明者M·E·科纳维斯, M·G·狄克逊, M·拉古纳丹, S·格伦, S·陈努帕蒂, V·戈帕尔, W·K·费加利 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1