中文 英语
18lickc新利
的意见

在特定应用程序处理器上实现AES密码

如何利用软件实现的灵活性获得专用加密引擎的性能。

受欢迎程度

在之前的博客中,“使用密码学的嵌入式安全,我们研究了如何使用密码学来保护嵌入式系统中的资产,并确保机密性、完整性和真实性,或简称为“CIA”。在本博客中,我们将探索高级加密标准(AES)以及如何在Cadence Tensilica Xtensa应用程序特定处理器上实现AES引擎。

什么是AES加密?

数据加密标准(DES)密码自20世纪70年代以来被广泛使用。然而,随着技术的进步,恢复56位DES密钥所需的时间已大大缩短。解决这个问题的一个解决方案是实现三重DES,这是三个DES密码的串行应用,每个DES密码都有自己的单独密钥。这为112位密钥提供了有效的安全性,但代价是带宽增加了两倍。

1997年,NIST(美国商务部,国家标准与技术研究所)举行了一次公开竞赛,设计AES密码,这是老化的DES密码的继承者。这项努力涉及美国政府、私营部门和来自世界各地的学术界的合作。2000年10月,Rijndael分组密码因其简单性、安全性和灵活性被选为AES。Rjindael密码通过可变的块长度和宽的密钥长度具有高度的安全性和灵活性。但是,AES将密钥的长度限制为128位、192位或256位,以加密128位的块。Rijndael密码是一种很容易在硬件和软件上实现的密码。然而,仅使用软件实现这一点会消耗大量的周期,这在许多性能关键型应用程序中可能是不可行的。在Xtensa处理器上实现AES密码可以提供与专用密码引擎相当的性能,同时提供与软件实现相同的灵活性和易用性设计。

AES是如何工作的?

AES密码是在一个块一个块的基础上完成的。每个块是128位(16字节),存储为4×4字节数组,称为状态数组。


图1:状态数组。

注意数据存储到状态数组中的顺序。明文的字节存储在左上方框中,在左列中向下移动,然后继续到下一列,直到右下方框被填充。字节放置很重要,因为AES密码转换操作的是状态数组的行或列。

AES使用128位或256位密钥将明文加密为密文。必须使用相同的密钥将密文解密回明文。

Xtensa处理器上的AES加密

Xtensa处理器是可配置的,允许您创建具有针对应用程序优化的特性集的处理器。此外,Xtensa处理器也是可扩展的,允许您通过Tensilica Instruction Extension (TIE)语言定义特定于应用程序的指令来扩展处理器。TIE被编译成Xtensa处理器中的硬件,它的软件工具被自动扩展以支持新的指令。让我们考虑利用Xtensa处理器的可配置性和可扩展性为AES设计一个特定于应用程序的处理器。AES引擎的框图如图2所示。


图2:Xtensa处理器扩展了AES密码功能。

图2显示了为AES功能配置和扩展的Xtensa处理器框图。大多数块表示Xtensa处理器的特性,这些特性是每个Xtensa处理器的一部分——像指令获取、执行管道和基本ISA ALU这样的基本特性。Xtensa处理器的许多特性都是可配置的,例如紧密耦合的RAM或ROM元素的数量、I-或D-Cache的存在以及它们的属性(如总大小、缓存线大小和结合性)。

在配置选项中,数据加载/存储单元可以配置比标准32位(默认)宽度更宽的数据宽度。在AES所需的自定义操作的情况下,128位加载/存储单元允许使用单个内存操作将加密文本块和密钥加载或存储到本地RAM/DCache中。

基本Xtensa处理器有一个32位宽的寄存器文件。假设AES在128位状态数组上执行转换,如果处理器有一个专门用于AES转换的128位寄存器文件将是理想的。128位寄存器文件将允许指令同时操作状态数组的所有128位,而不是一次32位。与宽数据总线相结合,宽寄存器文件还将允许状态数组通过一次内存访问(而不是通过四个32位访问)在内存之间传输。TIE语言用于创建128位AES注册文件,用于处理128位的数量。AES特有的操作,用于对存储在AES寄存器文件中的128位数据类型进行各种转换,包括宽加载和存储。

TIE语言用于描述处理器扩展,这些扩展由TIE编译器(TC)直接编译成硬件描述,并集成到Xtensa核心的RTL中。处理器的指令获取和解码功能被扩展到包括在TIE中定义的新操作,以及操作数数据路径和寄存器文件端口。此外,Xtensa软件工具被自动扩展,以支持TIE设计源代码中定义的新操作和c类型。

加密密钥最初被加载到本地数据RAM中。加密在明文块加载到本地数据内存后开始。Xtensa处理器然后使用一个TIE加载指令将128位明文加载到AES寄存器文件中。加密轮将对AES寄存器文件进行操作,直到加密完成。最后,使用一条TIE存储指令将128位密文从AES寄存器文件写入本地数据存储器。

AES解密

解密过程与前面提到的AES加密过程非常相似。同样的技术可以应用于开发一组新的指令来支持解密,并实现与加密相当的吞吐量。

结论

下表提供了单独在软件中实现AES加密/解密与在Xtensa处理器上使用带TIE的自定义扩展实现的周期计数估计。从表中可以看出,加密和解密性能得到了极大的提高。总的门数增加了47K个门。


表1:Tensilica处理器上AES密码的周期计数估计。†加密/解密/密钥扩展的周期计数包括所有子例程开销,包括调用/返回

AES密码通过加密软件映像和静止数据,提供了一种强大的方法来保护容易受到攻击的资产。虽然AES算法可以单独在软件中实现,但所需的周期数使其不那么具有吸引力。在Xtensa处理器上运行AES算法可以显著提高性能,同时提供与软件实现相同的灵活性和易用性设计。

详情请参阅应用注释有关在Xtensa处理器上实现AES加密的详细信息。



留下回复


(注:此名称将公开显示)

Baidu