首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM平台的嵌入式软件保护方案(1)

基于ARM平台的嵌入式软件保护方案(1)

近年来,从软件到软硬件联合攻击给嵌入式系统造成严峻的安全威胁。安全性已成为嵌入式系统设计中必不可少的一部分,同时这又是一个折衷的过程,不能单靠软件来保证,而全硬件的解决方式很昂贵且不具有弹性[1]。很多产品开始从设计之初就从系统架构上考虑了安全性,如ARM公司的Trust Zone技术开辟了一片可信代码区,通过一个S比特来区分系统的安全状态,IBM的PowerPC中使用了多核单元宽带引擎(BE)进行安全引导和物理隔离。
需要注意的是目前使用的很多嵌入式系统都是基于没有特别设计安全机制的硬件平台。本文以原ARM处理器平台为例,通过增加1块安全协处理器,就可以实现低成本、有实效的安全保护,并且能够抵御两类比较宽泛的攻击:一类是在系统的启动过程中的攻击,如果系统启动过程中没有安全保护措施,很可能被非法用户使用非授权的软件。另一类是外部存储器及总线攻击,当程序代码保存在外部非易失存储器上时,可以轻易被黑客拷贝。另外,片外存储器与片上系统 (SoC)之间的总线传输也容易受到攻击。
1 硬件结构
本方案的硬件结构如图1所示。处理器平台采用三星公司的S3C2442,内核为ARM920T,外置1块2 MB的NorFlash用以存放密文数据,ARM通过总线方式对NorFlash进行访问,该硬件结构中最重要的部分是添加了1块安全协处理器:福华公司的嵌入式系统软件保护芯片FS8826。该芯片可通过I2C或SPI总线与SOC连接,这里使用I2C方式。PC机能够对硬件平台中的每个芯片进行编程控制:通过JTAG端口、串口及网口与ARM进行通信,通过专门的烧录器对FS8826的硬件密钥和安全存储区进行写入。

2 软件实现
软件设计从两个主要方面考虑,一是代码加密,二是版权认证。前者主要通过AES(Advanced Encryptiong Standard)加解密算法实现,其算法密钥的管理以及版权认证将依靠FS8826来实现,最终达到安全启动嵌入式操作系统以及保护运行时的版权目的。安全启动方案基于Bootloader+Image的加载机制,也是ARM处理器通用的引导机制。首先采用AES加解密算法在PC机端将编译完成 Image加密,利用FS8826安全存储区存放AES算法密钥,密文存储在片外存储器中,ARM启动时将密文加载入内存。然后在Bootloader启动过程时加入与FS8826的认证操作,认证通过则在该过程中使用AES解密算法解密Image,并用明文将原内存中的密文覆盖,系统正常运行中加入与 FS8826的实时通信监测,确保在授权目标机上运行程序。软件实现流程如图2所示,相应的方案实现框图如图3所示。


2.1 AES算法
AES是美国国家标准和技术研究所(NIST)选定的高级加密标准,是目前对称加密领域内的主流算法。其数据分组固定为128 bit,密钥分组可支持128 bit/192 bit/256 bit。核心过程为数据块矩阵的Nr(10/12/14)次轮操作。每一次轮操作都由S盒代换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)4个函数组成,第Nr次轮操作不包含MixColumns 函数。密钥扩展为每一轮变换提供轮密钥[2]。本方案中加密在PC机端离线完成,没有时间和运行效率的特别要求,但是解密在ARM9处理器中完成,其运行时间将作为系统启动的一部分,所以下面针对解密部分的算法程序结合其实现平台进行优化设计。
直接的解密算法是将加密过程的每一步求逆并倒置次序得到,然而这样并不利于优化。算法的创始人提出了一种等价解密过程,在解密的轮变换中交换逆行移位和逆S盒代换,轮密钥加和逆列混淆的顺序,只需要调整密钥的编排方案即可。在实现中等价解密过程可以将解密轮变换中的前3个步骤综合生成1张4 KB的T表用于查询,即可快速准确地完成解密[2]。具体流程如图4所示。

加解密过程使用电码本模式(ECB)运行,即将消息段逐个分别加解密。实现采用移植性较好的标准C编程。针对ARM处理器的特点,C语言具有以下优化的实现方式[3]:
(1) 数据类型设置:ARM处理器内部是32 bit寄存器,如果变量长度与ARM内部寄存器长度不一致,将会使得变量的存取都需要附加其他指令[3]。AES算法中密钥及数据都是以字节为单位运算,优化时调整为32 bit,仅在输入输出时进行位数变换,可以带来很大的速度改进。
(2) 循环展开:ARM处理器中每一次循环最少有4个周期的循环开销[3]。解密轮变换涉及4个子函数调用,循环执行Nr-1次。在等价解密算法融合了3个子函数形成T表查询,于是可以把轮变换展开,在不增加太多代码量的基础上,每一个数据分组解密减少4(Nr-1)个周期。当密钥位长、密文数据量大时节省的循环开销就比较可观。
(3) 控制变量数:为了高效执行1个函数,应尽量限制函数内部循环所用局部变量的数目,最多不超过12个,确保最重要的和经常用到的变量都被分配在寄存器里[3]。
(4) 宏定义函数实现:有些简单函数可以通过宏定义的方式实现,如域内乘法等。此种方式可以减少函数调用开销。
2.2 FS8826功能实现
FS8826芯片自带24 B硬件密钥,具有不可回读、不可在总线上传输的特点,主要用于芯片内部的认证模块运算(HASH&3DES)和安全数据传输。芯片内部开辟了1块安全存储区(96 B EEPROM),读写都受硬件密钥的保护,且具有CRC校验功能。在本方案中该芯片主要实现两方面功能: SoC版权确认和AES密钥管理。前者通过认证实现,具体流程如图5 所示。总线上发送的数据为硬件密钥与用户设置的认证区数据通过HASH运算得出的数组,并加入了8 B随机数,能够有效地防止重放攻击(reply attack)。该项功能能够提供代码完整性验证[4],在一定程度上抵抗反汇编攻击。后者通过将AES密钥烧入FS8826的安全存储区,由其硬件密钥进行保护实现,认证通过后发送加密的读取命令,算法密钥以密文形式在总线上传递[4]。

2.3 Vxworks启动、运行
以上所述的加解密和认证过程将运行在嵌入式实时操作系统的启动和监测上,实现上以Vxworks为例,该系统为风河系统公司(Wind River System)在业界最早推出的一款嵌入式实时多任务操作系统,开发环境为Tornado。
VxWorks操作系统的映像包括两大类:VxWorks类型和Boorom类型[5]。本文对RAM中运行的VxWorks映像在PC机端进行AES加密。选择执行格式的未压缩Bootrom映像——bootrom_uncmp作为启动映像,并在其调用的初始化文件 (bootConfig.c)中加入与FS8826的安全认证、密钥传输以及解密运算。bootrom_uncmp由仿真器烧入到目标板的 norflash中,上电后,bootrom_uncmp把自身拷贝到RAM_HIGH_ADRS地址上运行引导程序。之后,把VxWorks映像装入到起始地址为RAM_LOW_ ADRS的RAM 中,接着跳转到VxWorks映像装入点运行[5]。如果认证通过,引导程序将从FS8826的安全存储区获取AES算法密钥,进行解密,否则在 RAM_LOW_ADRS处的VxWorks映像将仍然为密文,无法正常启动。如图6所示。
返回列表