文献标识码:A
文章编号: 0258-7998(2014)07-0017-04
随着嵌入式系统应用的日益广泛,其安全性保障也日益迫切,尤其是存储器中的数据和指令需要严格的安全保障。目前,对片外存储器的安全防护有Execute-Only Memory(XOM)[1]、PE-ICE/TEC-tree[2]、AES-TAC[3]等技术,其原理都是通过加密存储[4]的方式对数据实施安全防护。
由于特定型号的处理器所使用的初始化代码有相对固定的格式,经编译所得的指令序列也相对固定,因此攻击者探知处理器型号后,就等于获得了部分指令序列。攻击者对指令序列的攻击由唯密文攻击转变为已知明文攻击,芯片的安全性将受到严峻的挑战。
针对上述问题,本文在嵌入式系统存储器加密技术的基础上,提出了地址加扰安全防护措施。在CPU访问的逻辑地址与存储器物理地址之间增加一层复杂的映射关系,从而隐藏了系统代码的规律性,极大地增强了嵌入式系统的安全性。
1 嵌入式系统地址总线攻击分析
芯片和片外存储器的接口引脚是嵌入式系统中最为薄弱的环节之一,攻击者可以从这些引脚上采集数据用于分析,从中获得有效信息。此外,片上总线[5]用于将所有IP链接起来,跨度较大,且布局十分规整,容易成为攻击者施加探针的攻击点。SoC芯片易受到攻击威胁的点如图1所示,标记①为存储器引脚攻击点,标记②为片上总线探针攻击点。
可通过嵌入比特置换模块混乱地址映射关系,从而加强防护能力。通过对存储器引脚上传输的地址实施加扰,使存储器内部的逻辑地址和物理地址不一致,让攻击者无法从存储器入手攻击关键信息。通过在地址总线两端增加置换模块,使地址总线不直接传输地址明文,防止攻击者通过差分攻击的手段获得总线和引脚上两个地址之间的映射关系,阻止攻击者构建明密文对应关系。
2 地址加扰安全防护方案
2.1 总线地址加扰需求
存储器的每个地址都对应一个存储单元,地址与存储单元之间必须符合一一映射的关系,加扰后的地址也必须符合这个映射规则。总线的解码依据地址信息,Flash存储器的读写也依赖于地址信息,因此地址的加扰必须控制在一定空间内,即加扰深度必须和总线配置相一致。数据和地址在总线中的传输必须满足总线的传输协议,因此地址的加扰不能带来额外的时钟延时,即加扰必须能保证实时性。
因此,对地址数据进行加扰必须满足以下3点要求:(1)地址加扰后仍满足一一映射;(2)加扰深度可控;(3)加解扰无延时。
2.2 总线地址加扰方案
总线地址加扰方案如图2所示。为了对地址加以保护,使地址信号不直接出现在信道中,即使攻击者攻入信道,也无法获得所有地址信息,必须在信道两端增加地址重映射模块。N1、N2是置换网络,实现了片上主从设备与信道之间的地址重映射,也即地址的加扰和解扰。其控制模块是受处理器控制的独立硬件电路,负责所有置换网络的参数配置及功能控制。加解扰运算如式(1)所示:
其中E为加扰运算,D为解扰运算,a为加扰前的地址,h为加扰后的地址。加扰和解扰使用相同的硬件模块,但是配置的参数不同,k1为加扰参数,k2为解扰参数。
置换网络N1、N2可用Benes[6]二进制可重排非阻塞网络实现。令N表示重排数据位宽,m表示网络级数,r表示开关单元数,则有N=2m。用2×2的基本开关单元构成一个N输入到N输出的互联网络,则能够实现N!种输入与输出之间的置换,记为B(m)(m=logN)。通过递归构造Benes网络,可以通过一级N/2个开关单元,继以两个同类型的子网络B(m-1),最后再附加一级N/2个开关的单元组成,附加级内部开关单元数r=N/2=2m-1,如式(2)所示。所以共有2logN-1级,每级有N/2个开关单元,总共有NlogN-N/2个开关单元,需NlogN-N/2 bit配置参数。
其中,m=logN。
Benes置换网络能够实现N!种全置换,保证了任意置换深度的实现。非阻塞网络保证了置换满足一一映射关系。且该置换网络为纯组合电路,不增加干路延时。
2.3 存储器地址加扰分析
地址加扰方案的最终防护目标是系统存储器中的敏感数据。系统存储器主要包含系统内存和非易失存储器,根据使用需求对存储设备进行分区,各分区的特性如表1所示。
系统内存通常使用RAM。RAM的最小读写单位为字节或字,主设备对RAM执行n拍触发读写时,总线会持续给出n个连续的地址。加入地址加扰机制后,总线持续给出的n个地址将不再是连续的,但是RAM接到这些地址后仍然能正常寻址。所以地址加扰不会对RAM的使用造成影响。
非易失存储器通常使用Flash。Flash的基本结构是页(Page)、扇区(Sector)、块(Block)和宏。页的大小一般为256 B,也是连续寻址的最大空间。扇区由16个页构成,一般是擦除操作的最小单位空间。增加地址加扰模块后,即使将加扰的深度控制在页内,处理器也无法实现触发寻址,因为Flash只能按照实际物理地址连续读写。除非在系统将Flash中的整块数据(指令)搬移至内存中时可以使用连续读写,或者为Flash的读写访问设置缓存,否则增加地址加扰后的Flash只支持单拍读写功能。
3 地址加扰设计与实现
3.1 参数发生器设计
为了提高总线地址加扰的安全性,总线地址加扰系统配置了参数发生器及参数动态更新控制电路。参数发生器负责生成置换网络动态配置所需的参数,使系统可以根据需求动态更换置换网络的配置参数,从而达到更好的安全防护效果。本文以32 bit位宽地址总线为例,则N=2m=32,共有144个开关单元,每次配置需144 bit配置参数。
参数发生器包含3个线性反馈移位寄存器(LFSR)。每个线性反馈多项式都是本原多项式,分别为:LFSR-42(42,7,4,3,0)、LFSR-48(48,9,7,4,0)、LFSR-54(54,8,6,3,0),线性反馈移位寄存器的周期分别是242、248、254。LFSR-42、LFSR-48和LFSR-54的反馈多项式f1(x)、f2(x)和f3(x)如式(3)所示:
参数发生器的控制部分使用钟控模型,下面介绍3个LFSR的钟控方式。LFSR-42将当前时刻第21级寄存器的比特作为X1,LFSR-48将当前时刻第24级寄存器的比特作为X2,LFSR-54将当前时刻第27级寄存器的比特作为X3,X1、X2、X3这3个比特用于控制3个LFSR动作与否。控制的方式采取择多原则,具体实现如式(4)所示:
通过钟控的运行,3个LFSR中将不断充满随机数,其最终周期为2144。因此只需要从寄存器中将随机序列提取出来,按照参数配置规则填充到置换网络中,就能满足置换网络的配置需求。
通过2.2节的分析可知,置换网络对数据的置换实际是利用多组选通开关改变数据中每一比特的排列次序,使之最终成为与配置信息相关联的重排列。若还原获得原始地址,可以把重排后的地址逆向重排,使之返回初始状态。输入为32 bit位宽的Benes置换网络由9列、16行组成,每一列分别对应配置信息R0~R8,每列配置信息Rn包含16 bit,加解扰的配置参数k1和k2相互倒置,如式(5)所示。
3.2 置换网络应用
为了实现地址信息的加解扰与系统信息的混乱,同时保证加扰参数的动态更换与系统程序的安全保密,地址加扰系统应包含多种不同功能的置换网络,分别实现加扰控制、存储器加解扰、非存储器加解扰等功能。
针对嵌入式系统特点,本文设计了4种置换网络,分别是连接处理器的置换网络N0、连接普通主设备的置换网络N1、连接非存储器从设备的置换网络N2和连接存储器的置换网络N3。这4种置换网络在系统中的分布如图3所示。
N0网络在实现加扰功能的基础上还实现了控制信息的解析。N1和N2网络分别实现了地址总线的加扰和解扰,保证地址数据在总线中的混乱性和在系统设备中的可用性。N3网络是专门针对存储器的置换网络,其目的是确保存储器中数据地址混乱。
主设备(包括处理器)发出的地址a经过N0、N1的置换后,加扰为新的地址h′,并输入地址总线;总线将该地址信息传送到网络N2,将地址还原为a,从而实现了地址在总线中的安全传输。如果目标设备是存储器,则需要进入置换网络N3,将地址重新加扰成h″,进而实现了存储器的混乱存储。
图4为配置加扰功能后系统的访问控制流程图。系统的读写访问控制操作由CPU处理器发起,置换网络判断是否是网络的控制指令。如果是控制指令,则根据指令对加扰系统进行控制;否则先对地址加扰,输出时解扰还原。目标从设备如果是存储器,则地址还要再次被加扰,进而访问存储器;否则直接送入从设备。
3.3 系统初始化流程
为了使系统指令始终保持混乱的存储顺序,保证攻击者无法获得系统指令的加密序列,必须对系统程序进行预处理。指令的预处理与初始化过程中的置换寻址相结合,进而保障系统程序的安全性。
系统存储器包含系统内存和非易失存储器两部分。非易失存储器不仅存储了系统启动代码[7](BootLoader)、系统程序(SoftWare)和用户关键数据(UserData),还存储了存储器专用置换网络的配置参数(KeyData)。系统程序装载流程如图5所示。
系统程序装载的操作步骤为:将高级语言编译成汇编语言;将汇编语言编译成处理器指令流;将指令流序列重拍成混乱序列;将混乱序列装载到系统非易失存储器中;系统启动,上电初始化。
为了实现对系统程序的安全防护,使攻击者无法从系统程序中获得有效信息,必须修改系统初始化流程,对进入存储器的地址进行加扰,使系统程序以混乱形式保存在非易失存储器及系统内存中。
如图6所示,修改后系统初始化的操作步骤为:系统上电,从非易失存储器零地址开始执行;将SoftWare中的系统指令搬移至RAM零地址;将UserData中的用户参数搬移至RAM;从KeyData中获取置换参数,并注入置换网络;复位系统,地址重映射,并从RAM的零地址执行代码。
4 实验结果
为了综合评估该方案的资源消耗,本文使用Verilog硬件描述语言和C语言设计并实现了整体方案,利用综合工具在0.18 nm工艺下对各硬件模块进行了综合,资源消耗如表2所示。地址加扰安全防护系统的资源消耗总和取决于地址加扰的防护对象数量,防护的目标越多,需要的置换网络也越多。设N1和N2数量的总和为m,N3的个数为n。
测试环境的构建基于某嵌入式SoC芯片原型系统,芯片原型内共有15个主从设备和2个存储器,m取值14,n取值2。地址加扰对芯片的资源消耗如表3所示,其中逻辑资源不包含存储器等存储资源,地址加扰模块对整个芯片的资源仅占芯片总资源的1.09%。
从综合分析测试结果可知,地址加扰能有效保护地址信息,其参数的复杂度为2144,且地址只以加扰状态出现在攻击薄弱点;地址加扰的资源消耗非常少,地址加扰效率极高,操作控制简单,且在干路中不造成延时,保证了数据传输的实时性。
为了提高嵌入式系统安全防护能力,本文结合地址总线的传输特性,提出了基于Benes置换网络的地址加扰方案。测试验证结果证明,本文所提出的地址加扰方案能有效提高嵌入式系统的安全防护能力。目前地址总线的加扰应用还不够广泛,地址总线加扰还可能面临其他潜在威胁,需要在应用过程中收集更多的数据来完善总线地址加扰的理论。
参考文献
[1] LIE D,THEKKATH C,HOROWITZ M.Implementing an untrusted operating system on trusted hardware[C].In:SOSP′03:Proceedings of the Nineteenth ACM Symposium on Operating Systems Principles,2003:178-192.
[2] ELBAZ R,CHAMPAGNE D,LEE R B,et al.Tec-tree: A low cost and parallelizable tree for efficient defense against memory replay attacks[C].In:CHES′07: Workshop on Cryptographic Hardware and Embedded Systems,2007:289-302.
[3] VASLIN R.Hardware core for off-chip memory security management in embedded system[D].Leuven:Katholieke Universiteit Leuven,2008.
[4] DURAHIM A O,SAVAS E,SUNAR B,et al.Transparent code authentication at the processor level[J].Comput DigitalTech。,IET,2009,3(4):354-372.
[5] 陈驰,冯登国.信息安全产品安全保证量化评估研究[J].电子学报,2007,35(10):1886-1891.
[6] Zhong Jiling.Upper bound analysis and routing in optical benes networks[D].Atlanla,GA,Georgia State University,2005.
[7] 赵鹏,王大伟,李思昆.面向SoC任务分配的应用程序存储需求量分析方法[J].电子学报,2010,38(3):541-545.