APP下载

轻量级安全内存:RISC-V嵌入式微处理器安全增强*

2021-09-24牛世权

计算机工程与科学 2021年8期
关键词:加解密计数器引擎

牛世权

(国防科技大学计算机学院,湖南 长沙 410073)

1 引言

近年来,针对嵌入式设备中硬件的新型攻击不断出现,严重威胁嵌入式设备的安全。特别是2018年曝出的Spectre[1]和Melt-down[2]针对微处理器硬件的攻击,使人们意识到信息安全不仅仅只是软件层面的安全,硬件层面的安全也同样重要。

一方面,微处理器设计者们的目标总是越来越高的性能,缺乏对安全性的考量。这一现状在硬件安全问题频发的今天需要改变。特别是嵌入式微处理器,由于其应用领域通常较专一,对安全性与功耗、面积等方面的开销要求更高。如何在提升嵌入式微处理器安全性的同时保证合理的性能与开销,成为嵌入式微处理器安全设计的一个难点。另一方面,随着非易失性存储器被配备到了嵌入式设备中,就需要考虑如何保护配备非易失性存储器的嵌入式设备。非易失性存储器的特点是设备掉电后数据不会消失,存储在非易失性存储器中的敏感数据容易被获取[3]。因此,有必要针对配备非易失性存储器的嵌入式设备设计一种轻量级、低开销的安全内存加密引擎来保证其安全。此外,观察到以往对安全内存的研究大都针对通用微处理器[4,5],且集中于性能的提高[6 - 8],本文则针对嵌入式微处理器的特点,综合平衡安全性、面积开销和访存延时等因素来设计安全内存加密引擎。

本文的主要贡献:首先是针对嵌入式微处理器设计了一种轻量级、低开销的安全内存加密引擎;其次,将该安全内存加密引擎集成到了RISC-V嵌入式微处理器中;最后,对该安全内存加密引擎进行了评估。

2 研究背景与动机

2.1 RISC-V嵌入式微处理器平台

RISC-V是加州大学伯克利分校设计并发布的一种开源指令集架构。RlSC-V开源指令架构的特点在于简洁、模块化和可扩展,通过将这种模块化的指令集进行组合或者扩展,几乎可以构建适用于任何一个领域的微处理器。基于RlSC-V开源指令架构的特点,选择基于RISC-V开源指令集架构实现的开源微处理器Ariane[9]作为本文的安全内存设计平台。Ariane是瑞士苏黎世联邦理工大学设计开发的一款RISC-V开源微处理器核。它拥有完整的6级流水线且是单发射顺序执行的,主要实现了64位的I、M、A、C指令[10]以及M、S、U 3个特权级别的扩展[11]。此外,它还支持进行FPGA验证,方便本文在FPGA上进行评估。

2.2 内存加密确保嵌入式微处理器安全

2.2.1 安全模型

在本文的设计中,将嵌入式系统划分为2个部分。一个部分是安全区域,包括嵌入式微处理器核、高速缓存、安全内存加密引擎等这些片内模块。它们都被认为是可信的和受保护的,因为嵌入式微处理器芯片内部的状态很难通过物理手段来进行篡改或破坏。另一个部分是不安全区域,包括片外内存和各种外围设备。与传统片外内存相比使用了非易失性存储器的片外内存,在设备掉电后数据不消失,物理攻击者能够轻易地对其中的敏感数据进行访问或者对其中的敏感数据进行修改[3]。

2.2.2 加密方式比较

安全内存加密的一种直接方式就是利用只有全局密钥Key的块密码算法AES(Advanced Encryption Standard)直接对数据进行加密[12],如图1所示。在这种加密方式中,由于所有的数据都使用相同的密钥进行加密,相同的明文产生相同的密文,攻击者只需对比加密后的数据就能知道哪些数据内容相同。这就使得该种加密方式容易受到字典攻击和重放攻击[13]。

Figure 1 Encryption method using only Key图1 只使用全局密钥的加密方式

为了增强加密方式的安全性,可以同时利用全局密钥和地址来对数据进行加密,这样就可以保证不同地址中的数据加密后不相同。但是,只要观察该地址的连续写回,攻击者依然能够发起字典攻击。如图2所示,为了进一步增强加密方式的安全性,本文在利用全局密钥和地址的同时,加入计数器来对数据进行加密,每一次将数据写回内存时计数器执行加一操作。这样即便是同一地址的连续写回操作,数据加密后也不相同。该加密方式相比于利用全局密钥和地址的加密方式安全性更强。

Figure 2 Encryption method using Key, Addr and Ctr图2 Key+Addr+Ctr的加密方式

2.2.3 计数器模式的加密

安全内存加密在使嵌入式微处理器获得更高安全性的同时,也会影响嵌入式微处理器的访存性能。其原因在于,在加入了安全内存加密引擎后,每一次访存都需要对数据进行加解密操作。如果这些加解密操作是串行执行的,那势必会带来很大的延时开销。

为了降低加解密操作所带来的延时开销,本文选用计数器模式的加密方式[14]。在计数器模式的加密方式中,一种被称为一次性填充OTP(One Time Pad)的技术能够减少嵌入式微处理器在访存过程中的延时开销[15]。如图3所示,一次性填充技术将访存过程和计算一次性填充的过程并行化。通过在访存的同时计算一次性填充,之后再将一次性填充与访存时的明文或密文进行异或操作来进行加解密,能够大大降低加解密操作所带来的访存延时。

Figure 3 Process of reducing latency in counter mode encryption图3 计数器模式加密减少访存延时的过程

利用计数器模式对内存数据进行加解密的具体过程则如图4所示。当要将数据写回内存时,首先利用密钥、地址和计数器来生成一次性填充,然后再将该一次性填充与要写回内存的明文进行异或操作,以实现加密。当要从内存中读取数据时,同样也需要计算一次性填充,然后再将一次性填充与从内存中取到的密文进行异或操作,以实现解密。总之,计数器模式的加密在兼顾安全性的同时能降低加解密操作所带来的访存延时。

Figure 4 Counter mode encryption图4 计数器模式加密

3 安全内存加密引擎架构

安全内存加密引擎SME(Secure Memory Encryption Engine)的总体架构如图5所示。从图5中可以看出,安全内存加密引擎由3个主要的模块组成,分别是PUF(Physically Unclonable Function)[16]模块、计数器缓存模块和AES加密模块。其中,PUF模块为整个安全内存加密引擎提供全局密钥。计数器缓存模块则用来缓存计数器值。在片上缓存计数器值可加快安全内存加密引擎的加解密速度,减小访存延时开销。AES加密模块则利用PUF模块产生的全局密钥、访存地址以及计数器缓存模块提供的计数器值来生成一次性填充。生成的一次性填充再与明文或密文进行异或操作,从而完成加解密工作。

Figure 5 Secure memory encryption engine architecture图5 安全内存加密引擎架构

当高速缓存中的数据被写回内存时,安全内存加密引擎首先从计数器缓存单元中查找相应的计数器值。如果查找到相应的计数器值,则直接取出该计数器值。然后对该计数器值执行加一操作,并用这个新的计数器值来对即将要写回的数据进行加密,同时更新计数器缓存模块中的计数器值。当加密完成后就将加密后的数据和新的计数器值写回内存。当高速缓存向内存发出读数据请求时,安全内存加密引擎首先从计数器缓存中查找相应的计数器值,找到相应的计数器值则直接用该计数器值对数据进行解密。解密后再送入高速缓存中。

3.1 PUF模块

PUF全称为物理不可克隆函数,可以从硬件复杂的物理特性中动态地生成密钥,而不需要使用片上存储器来保存密钥。与传统的密钥生成和存储方式相比,基于 PUF 生成的密钥具有不用保存、防篡改和防克隆等优点,能够为本文的嵌入式微处理器提供安全性强、开销低的全局密钥[17]。

本文使用FPGA类型的Anderson PUF[18]来生成128位密钥。Anderson PUF利用FPGA切片(Slice)中可配置为移位寄存器的查找表单元LUT(Look Up Table)和进位逻辑中的级联二选一开关搭建出互相竞争的2路延时通路,并使用Slice内部的一个触发器进行输出值的判断,从而实现1位逻辑0或逻辑1的响应输出。PUF模块中,生成1位PUF响应需要4个Slice,生成128位的PUF响应需要512个Slice。

Table 1 AES encryption standard表1 AES不同加密标准

Table 2 Area overhead after synthesis表2 综合后面积开销

3.2 AES模块

AES[19]全称为高级加密标准,它由美国国家标准技术研究所于2001年发布,目前已成为对称密钥加密中最流行的算法之一。AES算法是一种对称分组密码算法,通过多轮置换迭代操作得到密文。在AES标准规范中,分组长度只能是128 bit,而密钥的长度可以使用128 bit、192 bit或256 bit。密钥的长度不同,推荐加密轮数也不同。表1列出了不同的AES加密标准。

AES加密过程是在一个4×4的字节矩阵上进行的,其初值就是一个明文块。各轮AES加密循环(除最后一轮外)均包含4个步骤:字节替换(SubBytes)、行移位(ShiftRows)、列混合(MixColumns)和轮密钥加(AddRoundKey)。其中,字节替换(SubBytes),是通过非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。行移位(ShiftRows),是将矩阵中的每个横列进行循环式移位。列混合(MixColumns),是为了充分混合矩阵中各个列的操作,这个步骤使用线性转换来混合每列的4个字节。轮密钥加(AddRound- Key),则是将矩阵中的每一个字节都与该次轮密钥做异或运算。

本文的设计选用了AES-128作为加解密模块。AES模块利用PUF模块产生的128 bit的密钥对由数据地址和数据计数器组成的128 bit的种子值进行加密,从而生成一次性填充。该一次性填充再与数据明文或密文进行异或,完成对数据的加解密操作。

3.3 计数器高速缓存

由于数据所对应的计数器值与数据一起存放在内存中,导致每次加解密时都需要先访存来得到计数器值,然后才能对数据进行加解密,这样势必会造成很大的访存延时[5]。为了降低该访存延时,本文在安全内存加密引擎中加入一个计数器高速缓存,将计数器值缓存在计数器高速缓存中,从而减少数据加解密时的访存次数,大大提高加解密速度。

3.4 将安全内存加密引擎集成到RISC-V嵌入式微处理器

结合RISC-V嵌入式微处理器Ariane的特点,将设计的安全内存加密引擎集成到了Ariane的高速缓存和内存控制器之间,如图6所示。从Ariane核发出的有效访存请求都会首先经过安全内存加密引擎。安全内存加密引擎会对访存的数据进行加解密操作,完成加解密操作后再将数据送往内存控制器或者Ariane的高速缓存。Ariane的高速缓存一次性读写128 bit的数据,能够与使用AES模块加密生成的128 bit的一次性填充进行异或操作来进行加解密。生成一次性填充时,使用到了该数据的地址以及该数据的计数器值。

Figure 6 Secure memory encryption engine location图6 安全内存加密引擎位置

4 评估

本文使用SystemVerilog设计的安全内存加密引擎,并使用Vivado 2018.2在Genesys2 FPGA开发板上进行了综合实现,以评估安全内存加密引擎对RISC-V嵌入式微处理器访存性能方面的影响和面积方面的影响。

(1)访存性能方面。安全内存加密引擎在Genesys2 FPGA开发板上的时钟频率和RISC-V内核的一致,RISC-V内核访存一次平均需要110个时钟周期,AES模块加密一次需要21个时钟周期。在PUF模块生成密钥且计数器高速缓存命中的情况下,只需要11个时钟周期就能生成一次性填充。生成的一次性填充再与访存得到的数据进行异或操作就能完成加解密。由于加密生成一次性填充的过程与访存的过程可以并行进行,一次性填充能够提前完成,这种情况下只需等待访存获得数据后再进行异或操作就能完成加解密,其访存延时还是110个时钟周期。而如果采用直接加密的方式来设计安全内存加密引擎,由于其直接使用AES来对访存数据进行加解密,AES模块的加解密延时将会附加到访存延时上,其访存延时将变为111个时钟周期。相比于直接加密,本文设计的计数器模式的安全内存加密引擎对访存性能的影响更小。

(2)面积方面。使用Vivado 2018.2在Genesys2 FPGA开发板上对集成了安全内存加密引擎的RISC-V嵌入式微处理器进行了综合。综合后的面积开销情况如表2所示。从表2中可以看出,在总的LUT单元使用情况方面,安全内存加密引擎只占到了整个RISC-V嵌入式微处理器的13%,其中计数器高速缓存所占用的LUT单元数较多,达到了7%。在FF单元使用情况方面,安全内存加密引擎只占到了整个RISC-V嵌入式微处理器的11%,其中AES加密单元所使用的FF单元数较多,达到了7.8%。可以看出,安全内存加密引擎的面积开销相对于整个RISC-V嵌入式微处理器来说是比较小的,对整个RISC-V嵌入式微处理器的面积影响较小。

5 结束语

本文主要利用PUF和计数器模式的AES加密技术,设计了一种适用于嵌入式微处理器的轻量级、低开销的安全内存加密引擎,不仅将其集成到了RISC-V嵌入式微处理器中,而且还通过Genesys 2 FPGA开发板对其进行了评估。评估结果表明,安全内存加密引擎能够在提升RISC-V嵌入式微处理器安全性的同时,保证其合理的访存性能,以及较小的面积开销。

猜你喜欢

加解密计数器引擎
采用虚拟计数器的电子式膜式燃气表
蓝谷: “涉蓝”新引擎
PDF中隐私数据的保护方法
电子取证中常见数据加解密理论与方法研究
基于FPGA的LFSR异步加解密系统
计数器竞争冒险及其处理的仿真分析
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
网络数据传输的加解密系统研究
任意N进制计数器的设计方法