专利名称:一种保证程序完整性的嵌入式系统及其实现方法
技术领域:
本发明涉及嵌入式系统安全领域,特别涉及一种基于FPGA(Field-Programmable Gate Array)和TPM(Trusted Platform Module,可信赖平台模块)技术平台上的保证程序 完整性的嵌入式系统及其实现方法。
背景技术:
嵌入式系统应用非常广泛,但是安全问题却没有得到重视。与典型PC机 (Personal Computer)相比,嵌入式系统的安全问题有以下两个主要特点1、嵌入式系统的 硬件结构多样,而PC机的硬件结构相对统一。这使得嵌入式系统的安全性解决方案必须能 适应不同硬件结构的需求;2、嵌入式系统部署环境恶劣,自身防护能力差,可执行代码易于 被篡改,在用户不知情的情况下被控制。根据可信计算的观点,整个可信计算系统需要建立一个包括引导程序、操作系统、 应用程序开始的可信链,其中引导程序是整个可信链的根。因此,如何保证嵌入式系统引导 程序的完整性,从而确保建立可信根是构建可信嵌入式系统的重要技术问题。
发明内容
本发明的目的之一在于克服上述的缺点和不足,提供一种保证程序完整性的嵌入 式系统,特别是保证嵌入式系统最基本可信根的完整性保证,作为嵌入式系统自己安全的 防护。解决常见嵌入式系统中代码易于被篡改的安全性问题,而且具有普遍适用、价格低和 运行开销少等优点。本发明的目的之二在于提供一种保证程序完整性嵌入式系统的实现方法。本发明的目的之一通过下述技术方案实现一种保证程序完整性的嵌入式系统, 包括嵌入式微处理器和存储器,还包括程序完整性检测单元和安全控制单元,其中程序完整性检测单元,用于在嵌入式系统运行前检测存储器的指定区域内容,使 用标准散列函数计算得到该区域内容的散列值,加密散列值并发送到安全控制单元;安全控制单元,用于保存存储器指定区域内容的正确散列值,并与程序完整性检 测单元发送过来的运行时刻散列值进行对比,判断该区域是否被篡改。为更好的实现本发明,所述存储器可以为NOR Flash程序存储器。优选的,所述程序完整性检测单元具体包括存储器控制模块,用于读入存储器中指定地址和数据长度的数据;并行缓冲模块,按照FIFO (First Input First Output,先入先出队列)方式进行 缓存,用于并行数据缓冲和中转;串行缓冲模块,按照FIFO方式进行缓存,用于串行数据的缓冲和中转;并串转换模块,用于实现并行数据到串行数据的转换;串并转换模块,用于实现串行数据到并行数据的转换;散列计算模块,用于对输入的数据流进行散列计算,并生成数据摘要;
加解密模块,用于对数据进行加密和解密;唯一序列号生成模块,生成程序完整性检测单元的唯一序列号;异步串口输入模块,用于输入安全控制单元的数据,实现程序完整性检测单元与 安全控制单元的数据交换;异步串口输出模块,用于输出数据给安全控制单元,实现程序完整性检测单元与 安全控制单元的数据交换;并行数据多路开关,用于从散列计算模块、加解密模块、存储器控制模块和串并转 换模块中选择其中一个模块,将该模块的结果输出至并行缓冲模块中;串行数据多路开关,用于从唯一序列号生成模块、异步串行输入模块、并串转换模 块中选择其中一个模块,并将该模块的结果输出至串行缓冲模块中;存储器访问控制多路开关,用于选择程序完整性检测单元或嵌入式微处理器作为 存储器的访问主体,将程序完整性检测单元或嵌入式微处理器的访问控制信号发送给存储 器;控制时钟,用于向嵌入式微处理器提供外部时钟,实现对嵌入式微处理器的控 制;和控制器,用于控制程序完整性检测单元的其它模块及整个程序完整性检测单元 内的数据流向。优选的,所述散列计算模块为SHA-1、MD5、SHA-256和SHA-512等散列计算模块中 的一种。优选的,所述加解密模块为DES、3DES、AES等对称密钥加解密模块,根据DES标准, 使用64位密钥对数据进行加密和解密。优选的,所述访问控制信号包括地址、读写控制和/或使能。本发明的目的之二通过下述技术方案实现一种保证程序完整性的嵌入式系统的 实现方法(A)配置过程程序完整性检测单元读取本单元的唯一序列号并发送至安全控制 单元;程序完整性检测单元读取存储器指定区域内容,并进行散列运算产生数据摘要,将数 据摘要输出至安全控制单元;安全控制单元接收数据摘要、唯一序列号并保存;(B)运行时刻检测过程程序完整性检测单元关闭嵌入式微处理器的控制时钟; 程序完整性检测单元读取本单元唯一序列号;安全控制单元选取随机数并加密后得到加密结果,将加密结果发送至程序完整性 检测单元;其中加密结果的解密密钥为存储在安全控制单元上的唯一序列号;程序完整性检测单元利用唯一序列号对加密结果进行解密,恢复并存储随机数; 程序完整性检测单元读取存储器指定区域的内容,并通过散列计算产生第二数据摘要;程 序完整性检测单元将第二数据摘要与随机数一起加密后形成第二加密结果,并将第二加密 结果发送至安全控制单元;安全控制单元接收到数据后进行解密,校验解密得到的随机数与之前选取的随机 数是否一致,解密得到的数据摘要与之前在配置模式下写入的数据摘要是否一致,并将对 比结果存放于特定内存位置;程序完整性检测单元为嵌入式微处理器提供时钟,嵌入式微处理器开始正常运行嵌入式系统软件;嵌入式系统软件访问安全控制单元中的对比结果,从而判断系统是否被 修改。为更好的实现本发明,所述步骤(A)配置过程,具体包括Si. 0、程序完整性检测单元中的唯一序列号生成模块读取本单元的唯一序列号, 并依次通过串行数据多路开关、串行缓冲模块传输到异步串口输出模块,由异步串口输出 模块将唯一序列号从程序完整性检测单元输出至安全控制单元,进入步骤Si. 1 ;Si. 1、程序完整性检测单元根据厂商或用户预先指定的地址和长度读取存储器的 内容,将读取的内容进行散列运算,产生数据摘要,并由异步串口输出模块将数据摘要从程 序完整性检测单元输出至安全控制单元,进入步骤Si. 2 ;Si. 2、将数据摘要和唯一序列号写入到安全控制单元的受保护非易失性存储空间 中。所述步骤(B)运行时刻检测过程,具体包括S2.0、系统上电后,程序完整性检测单元关闭嵌入式微处理器的控制时钟,进入步 骤 S2. 1 ;S2. 1、程序完整性检测单元通过唯一序列号生成模块读取唯一序列号并发送到加 解密模块,进入步骤S2. 2 ;S2. 2、程序完整性检测单元请求安全控制单元发送随机数,进入步骤S2. 3 ;S2. 3、安全控制单元选取随机数并加密后得到加密结果,其中加密结果的解密密 钥为事先存储在安全控制单元上的唯一序列号,进入步骤S2. 4 ;S2. 4、安全控制单元将加密结果发送至程序完整性检测单元,进入步骤S2. 5 ;S2. 5、程序完整性检测单元的加解密模块利用步骤S2. 1中的唯一序列号对加密 结果进行解密,恢复并存储随机数,进入步骤S2. 6 ;S2. 6、程序完整性检测单元读取存储器指定区域的内容,并使用散列计算模块生 成第二数据摘要,进入步骤S2. 7 ;S2. 7、程序完整性检测单元将第二数据摘要与步骤S2. 5中的随机数一起组成数 据,进行加密后形成第二加密结果,并将第二加密结果通过异步串口输出模块传送到安全 控制单元,进入步骤S2. 8 ;S2. 8、安全控制单元接收数据后进行解密,首先校验解密得到的随机数部分是否 与之前发出的一致,若一致,则继续校验解密得到的数据摘要部分数据与之前在配置模式 下写入的数据摘要是否一致,并将对比结果存放于特定内存位置,进入步骤S2. 9 ;S2. 9、程序完整性检测单元为嵌入式微处理器提供时钟,并使得嵌入式微处理器 可以通过存储器访问控制多路开关对存储器进行访问,开始正常运行嵌入式系统软件,进 入步骤S2. 10 ;S2. 10、嵌入式系统软件通过相关的接口访问安全控制单元中的对比结果,从而判 断系统是否被修改。优选的,所述保证程序完整性的嵌入式系统的实现方法加解密操作采用DES、 3DES、ASE等对称密钥加解密算法中的一种或多种;所述散列计算采用SHA-I标准、MD5标准、SHA-256标准或SHA-512标准散列运算 中的一种或多种。
本发明的设计原理本设计利用现有的安全防护措施,基于FPGA和TPM的技术 平台,设计一种通用系统,其中TPM主要是要为嵌入式系统提供一系列的安全服务,同时将 FPGA设计成为一种控制机制,用以保证TPM和嵌入式系统通信的协调和安全。可以及时的 检测出对片外程序存储器中关键区域的非法篡改,用以保证嵌入式系统程序完整性。本发明通过下例几种可预见的攻击方式进行安全性分析1、在已知程序存储内容的前提下,事先得到数据摘要的正确值,伪造程序完整性 检测单元。由于每一块程序完整性检测单元具有唯一的序列号(UID),更换完整性检测单元 会导致DES加密的密钥改变,从而向安全控制单元传送的加密值不正确;2、监听程序完整性检测单元与安全控制单元之间的通讯,进行重放攻击。由于安 全控制单元与程序完整性检测单元之间的通讯内容依赖于安全控制单元产生的真随机数, 具有不可预见性,所以即使监听到当次的通讯内容,后续的重放攻击也并不能起到作用。本发明相对于现有技术具有如下的优点及效果第一、提供完整的嵌入式系统程序完整性保证方案由于嵌入式系统往往采用片 外NOR Flash存储程序,非常易于被篡改,从而产生严重的安全性问题。本系统提供的解 决方案是基于现有技术实现的,结构简单,易于实现,同时能有效检测到嵌入式系统中的程 序修改,特别是引导程序的修改,从而可以为安全、可信的嵌入式系统构造一个基础的信任 根,为整个嵌入式系统的安全奠定基础。第二、该方法具有普遍适应性已有的嵌入式系统安全解决方案往往需要特定的 具有安全控制功能的嵌入式CPU,不仅成本较高,而且应用领域受限。本方法针对嵌入式系 统中最常见的嵌入式CPU+NOR Flash程序存储器结构,可以适应多种不同的嵌入式CPU或 者DSP(digital signal processor)、片外程序存储器系统。同时,该方法对嵌入式系统上 层软件透明,可以支持多种不同的嵌入式引导程序和操作系统。第三、合理的功能划分,价格低和运行开销少在不同的应用系统中,嵌入式 CPU+NOR Flash程序存储器结构虽然基本一致,但是在存储器数据宽度、访问时序等方面仍 然有很大差异。因此,本方法采用两片设计方案,其中程序完整性检测单元可以使用FPGA 构建,以适应不同应用系统的需求,而安全控制单元则采用符合国家安全芯片相关规范的 商用芯片,有效提高系统的安全性。
图1是本实施例中一种保证程序完整性的嵌入式系统的结构方框图;图2是本实施例中程序完整性检测单元的结构方框图;图3是本实施例中一种保证程序完整性嵌入式系统的实施方法在配置过程的流 程图;图4是本实施例中一种保证程序完整性嵌入式系统的实施方法在运行时刻检测 过程的流程5是实施例的配置过程中将唯一序列号生成模块中的UID值发送到PC端的数 据流向图;图6是实施例的配置过程中和运行检测过程中获取程序存储空间散列值的数据 流向图7是实施例的配置过程中将散列值发送到安全控制单元的数据流向图;图8是实施例的运行时刻检测过程中从唯一序列号生成模块中加载解密密钥的 数据流向图;图9是实施例的运行时刻检测过程中获取安全控制单元发送过来的随机数的数 据流向图;图10是实施例的运行时刻检测过程中加密散列值的数据流向图;图11是实施例的运行时刻检测过程中向安全控制单元发送加密后的散列值的数 据流向图。
具体实施例方式下面结合实施例及附图,对本发明作进一步地详细说明,但本发明的实施方式不 限于此。一种保证程序完整性的嵌入式系统,如图1所示,包括嵌入式微处理器、NOR Flash 程序存储器、程序完整性检测单元和安全控制单元,其中嵌入式微处理器,为典型的商用嵌入式系统CPU,用于负责通过静态存储器接口 从片外储器中读取指令并执行;所述嵌入式微处理器采用三星44B0X,ARM7内核,主频 66MHZ ;NOR Flash程序存储器用于存储嵌入式系统的程序可执行代码,主要包括嵌入式 系统引导程序、嵌入式操作系统和嵌入式文件系统等内容;所述NORFlash程序存储器型号 为SST39VF1601,TSS0P-48封装,数据宽度8位,读周期90ns ;安全控制单元,用于保存存储器指定区域内容的正确散列值,并与程序完整性检 测单元发送过来的运行时刻散列值进行对比,判断该区域是否被篡改。所述安全控制单元 采用中兴集成电路,Z32U-flash芯片,主频96MHZ,内部包含32位微处理器、非易失性存储 器、DES加解密部件和真随机数产生器,并对外提供异步串口。程序完整性检测单元,用于在嵌入式系统运行前检测存储器的指定区域内容,使 用SHA-I标准散列函数计算得到该区域的散列值,并通过DES加密后将该散列值发送到安 全控制单元;所述程序完整性检测单元采用Xilinx Spartan3A-XC3S200A, VQ100封装,内 部包含唯一序列号生成模块,提供芯片唯一的ID号;如图2所示,所述程序完整性检测单元具体包括存储器控制模块读入存储器中指定地址和数据长度的数据;该模块有两种功 能1)根据控制器的控制信号,加载存储器的读出参数(如读出长度和起始地址);2)按照 参数读取存储器内容;并行缓冲模块按照FIFO方式进行缓存,用于32位并行数据缓冲和中转;串行缓冲模块按照FIFO方式进行缓存,用于1位串行数据的缓冲和中转;并串转换模块用于实现32位并行数据到1位串行数据的转换;串并转换模块用于实现1位串行数据到32位并行数据的转换;散列计算模块所述散列计算模块为SHA-I散列计算模块,根据SHA-I标准对输入 的数据流进行散列计算,并生成160位的数据摘要;加解密模块所述加解密模块为DES加解密模块,根据DES标准,使用64位密钥对数据进行加密和解密;唯一序列号生成模块生成程序完整性检测单元的唯一序列号(即每片程序完整 性检测单元都具有不同的序列号),在Spartan3A系列FPGA中可读出57位的唯一序列号。异步串口输入模块用于输入安全控制单元的数据,实现程序完整性检测单元与 安全控制单元的数据交换;异步串口输出模块用于输出数据给安全控制单元,实现程序完整性检测单元与 安全控制单元的数据交换;并行数据多路开关用于从SHA-I散列计算模块、加解密模块、存储器控制模块和 串并转换模块等并行输出模块中选择其中一个模块,将该模块的结果输出到并行缓冲模块 中;串行数据多路开关用于从唯一序列号生成模块、异步串行输入模块、并串转换模 块等串行输出模块中选择其中一个模块,并将该模块的结果输出到串行缓冲模块中;存储器访问控制多路开关用于选择程序完整性检测单元或嵌入式微处理器作为 存储器的访问主体,将程序完整性检测单元或嵌入式微处理器的访问控制信号发送给存储 器,所述访问控制信号包括地址、读写控制和/或使能;控制时钟用于向嵌入式微处理器提供外部时钟,实现对嵌入式微处理器的控 制;控制器用于控制程序完整性检测单元的其它模块及整个程序完整性检测单元内 的数据流向。程序完整性检测单元中的控制器采用有限自动机的设计方法控制各个功能部件 (存储器控制模块、异步串口输出模块、异步串口输入模块、唯一序列号生成模块、DES加解 密模块、SHA-I散列计算模块、串并转换模块、并串转换模块)的操作,以及并行数据多路开 关、串行数据多路开关的选择方向。程序完整性检测单元中的控制器发送控制信号给各个功能部件,各个功能部件根 据控制信号执行对应的操作。所有各个功能部件都具有相同的外部访问接口 从并行缓冲 或串行缓冲中读取数据,向并行数据多路开关或串行数据多路开关发送结果。各个功能部 件在执行完相应操作后,向控制器发送执行结束信号。在系统运行过程中,各模块将通过数据多路开关和缓冲组成一个链式结构。而控 制器将等待最后一个功能部件的结束信号,以进入到下一阶段的执行过程。上述保证程序完整性嵌入式系统的实现方法,具体包括配置过程和运行时刻检测 过程两个阶段。配置过程用于厂商或用户为系统建立正确可信的数据摘要。这个过程中,程序完 整性检测单元向安全控制单元传送1)程序完整性检测单元的唯一序列号;2)指定存储器 地址区域内容(一般是引导程序)的正确数据摘要值。其操作步骤如图3所示,具体包括Si. 0、程序完整性检测单元中的唯一序列号生成模块读取本单元的唯一序列号 (UID),并依次通过串行数据多路开关、串行缓冲模块传输到异步串口输出模块,由异步串 口输出模块将UID从程序完整性检测单元输出至安全控制单元,进入步骤Si. 1 ;Si. 1、程序完整性检测单元根据用户或厂商预先指定的地址和长度读取存储器的 内容,将读取的内容进行SHA-I散列运算,产生160位的数据摘要(M),并由异步串口输出模块将数据摘要从程序完整性检测单元输出至安全控制单元,进入步骤Si. 2 ;Si. 2、将数据摘要(M)和序列号(UID)写入到安全控制单元的受保护非易失性存 储空间中。运行时刻检测过程用于在运行时刻检测存储在存储器中的程序内容的完整性,其 操作步骤具体包括S2.0、系统上电后,程序完整性检测单元关闭嵌入式微处理器的控制时钟,进入步 骤 S2. 1 ;S2. 1、程序完整性检测单元通过唯一序列号生成模块读取唯一序列号(UID)到 DES加解密模块作为密钥使用,进入步骤S2. 2 ;S2. 2、程序完整性检测单元请求安全控制单元发送32位随机数(R),进入步骤 S2. 3 ;S2. 3、安全控制单元选取随机数(R),并使用DES算法加密后得到加密结果 (RDES),其中加密结果(RDES)的解密密钥为事先存储在安全控制单元上的唯一序列号 (UID),进入步骤S2.4 ;S2. 4、安全控制单元将加密结果(RDES)发送至程序完整性检测单元,进入步骤 S2. 5 ;S2. 5、程序完整性检测单元的DES加解密模块利用步骤S2. 1中唯一序列号(UID) 对加密结果(RDES)进行解密,恢复并存储随机数(R),进入步骤S2.6 ;S2. 6、程序完整性检测单元读取存储器指定区域的内容,并使用SHA-I散列计算 模块产生160位的第二数据摘要(Ml),进入步骤S2. 7 ;S2. 7、程序完整性检测单元将第二数据摘要(Ml)分为5组,每组32位,与此前的 32位随机数(R)组成64位数据,进行DES加密后形成第二加密结果(MlDES),并将第二加 密结果(MlDES)通过异步串口输出模块传送到安全控制单元,进入步骤S2. 8 ;S2. 8、安全控制单元接收到5组数据后进行解密,首先校验解密得到的随机数部 分是否与之前发出的一致,若一致,则继续校验数据摘要部分数据与之前在配置模式下写 入的数据摘要是否一致,并将对比结果(V)存放于特定内存位置,进入步骤S2. 9 ;S2. 9、程序完整性检测单元为嵌入式微处理器提供时钟,并使得嵌入式微处理器 可以通过存储器访问控制多路开关对存储器进行访问,开始正常运行嵌入式系统软件,进 入步骤S2. 10 ;S2. 10、嵌入式系统软件可以通过相关的接口访问安全控制单元中的对比结果 (V),从而判断系统是否被修改。见图5到图11,下面就程序完整性检测单元的执行各操作的数据流进行详细描 述配置过程中将唯一序列号生成模块中的UID值发送到PC端如图5所示,在此过程中,控制器向唯一序列号生成模块发送产生UID命令,并开 启串行缓冲模块,许可异步串口输出模块向外发送数据,同时设置串行数据多路开关选择 唯一序列号生成模块作为输入。在建立上述数据通路后,唯一序列号生成模块产生的64位 UID数据将通过串行数据多路开关、串行缓冲模块传输到异步串口输出模块,由异步串口输 出模块将UID从程序完整性检测单元输出至安全控制单元。
获取程序存储空间的散列值,生成数据摘要如图6所示,在此过程中,控制器向存储器控制器发出扫描命令,同时向SHA-I散 列计算模块发出散列计算命令,设置并行数据多路开关选择存储器控制器作为数据输入, 此外将设置存储器访问控制多路开关将存储器控制器发出的控制信号作为片外存储器的 控制信号。存储器控制器将从预先确定的片外NOR Flash存储器地址开始,读取存储器中预 先确定的长度的内容,并将这些数据组织成32位宽度通过并行数据多路开关和并行缓冲 模块传输到SHA-I散列计算模块中。SHA-I散列计算模块根据SHA-I标准计算输入数据流 的散列值,生成数据摘要并存储在SHA-I散列计算模块中。配置过程和运行时刻检测过程中都使用此过程完成程序存储器特定区域的扫描 和散列值计算。配置过程中将散列值发送到PC端如图7所示,控制器向SHA-I散列计算模块发出发送数据摘要命令,开启并行缓冲 模块、并串转换模块、串行缓冲模块和异步串口输出模块,同时分别设置SHA-I散列计算模 块作为并行数据多路开关的输入,并串转换模块作为串行数据多路开关的输入。在上述命令发出后,SHA-I散列计算模块将发出存储的160位的数据摘要,并通过 并行数据多路开关、并行缓冲模块、并串转换模块、串行数据多路开关、串行缓冲模块等数 据通路到达异步串口输出模块,由异步串口输出模块将数据摘要(M)从程序完整性检测单 元输出至安全控制单元。运行时刻检测过程中从唯一序列号生成模块中加载解密密钥如图8所示,控制器向唯一序列号生成模块发出产生序列号(UID)的命令,向DES 加解密模块发出加载密钥命令,开启串并转换模块、并行缓冲模块、串行缓冲模块,设置唯 一序列号生成模块作为串行数据多路开关的输入,设置串并转换模块作为并行数据多路开 关的输入。唯一序列号生成模块在接收到命令后,将产生64位UID,并依次通过串行数据多 路开关、串行缓冲模块、串并转换模块、并行数据多路开关、并行缓冲模块构成的数据通路 传递到DES加解密模块。DES加解密模块将存储64位UID作为加解密密钥。运行时刻检测过程中获取安全控制单元发送过来的随机数如图9所示,控制器向DES加解密模块发出解密命令,开启异步串口输入模块,同 时设置异步串口输入模块作为串行数据多路开关的输入,设置串并转换模块作为并行数据 多路开关的输入。异步串口输入模块接收到的32位随机数加密后的加密结果(RDES),将加密结果 (RDES)依次通过串行数据多路开关、串行缓冲模块、串并转换模块、并行数据多路开关、并 行缓冲模块等数据通路,传输到DES加解密模块,并由DES加解密模块利用已存储的UID作 为加解密密钥进行解密计算,得到解密结果即随机数(R),并存储。运行时刻检测过程中加密散列值如图10所示,控制器向SHA-I散列计算模块发送输出散列结果的命令,向DES加 解密模块发出加密结果命令,同时设置SHA-I散列计算模块作为并行数据多路开关的输 入。
在接收到命令后,SHA-I散列计算模块将输出160位的第二数据摘要(Ml),并经过 并行数据多路开关、并行缓冲模块传输到DES加解密模块。DES加解密模块将160位的结果 分成5组,分别和32位随机数R组合形成5组64位的明文后进行加密,形成320位的第二 加密结果(MlDES),并存储。运行时刻检测过程中向安全控制单元发送加密后的散列值如图11所示,控制器向DES加解密模块发出发送第二加密结果(MlDES)的命令, 开启异步串口输出模块,设置DES加解密模块作为并行数据多路开关的输入,设置并串转 换模块作为串行数据多路开关的输入。在接收到命令后,DES加解密模块发送解密结果,并依次通过并行数据多路开关、 并行缓冲模块、并串转换模块、串行数据多路开关、串行缓冲模块传输到异步串口输出模 块,由异步串口输出模块将第二加密结果(MlDES)发送至安全控制单元。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受所述实施例的 限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化, 均应为等效的置换方式,都包含在本发明的保护范围之内。
权利要求
一种保证程序完整性的嵌入式系统,包括嵌入式微处理器和存储器,其特征在于,还包括程序完整性检测单元和安全控制单元,其中程序完整性检测单元,用于在嵌入式系统运行前检测存储器的指定区域内容,使用标准散列函数计算得到该区域内容的散列值,加密散列值并发送到安全控制单元;安全控制单元,用于保存存储器指定区域内容的正确散列值,并与程序完整性检测单元发送过来的运行时刻散列值进行对比,判断该区域是否被篡改。
2.根据权利要求1所述一种保证程序完整性的嵌入式系统,其特征在于,所述存储器 可以为NOR Flash程序存储器。
3.根据权利要求1所述一种保证程序完整性的嵌入式系统,其特征在于,所述程序完 整性检测单元具体包括存储器控制模块,用于读入存储器中指定地址和数据长度的数据; 并行缓冲模块,按照FIFO方式进行缓存,用于并行数据缓冲和中转; 串行缓冲模块,按照FIFO方式进行缓存,用于串行数据的缓冲和中转; 并串转换模块,用于实现并行数据到串行数据的转换; 串并转换模块,用于实现串行数据到并行数据的转换; 散列计算模块,用于对输入的数据流进行散列计算,并生成数据摘要; 加解密模块,用于对数据进行加密和解密; 唯一序列号生成模块,生成程序完整性检测单元的唯一序列号; 异步串口输入模块,用于输入安全控制单元的数据,实现程序完整性检测单元与安全 控制单元的数据交换;异步串口输出模块,用于输出数据给安全控制单元,实现程序完整性检测单元与安全 控制单元的数据交换;并行数据多路开关,用于从散列计算模块、加解密模块、存储器控制模块和串并转换模 块中选择其中一个模块,将该模块的结果输出至并行缓冲模块中;串行数据多路开关,用于从唯一序列号生成模块、异步串行输入模块、并串转换模块中 选择其中一个模块,并将该模块的结果输出至串行缓冲模块中;存储器访问控制多路开关,用于选择程序完整性检测单元或嵌入式微处理器作为存储 器的访问主体,将程序完整性检测单元或嵌入式微处理器的访问控制信号发送给存储器; 控制时钟,用于向嵌入式微处理器提供外部时钟,实现对嵌入式微处理器的控制; 和控制器,用于控制程序完整性检测单元的其它模块及整个程序完整性检测单元内的 数据流向。
4.根据权利要求3所述一种保证程序完整性的嵌入式系统,其特征在于,所述散列计 算模块为SHA-I、MD5标准、SHA-256和SHA-512散列计算模块中的一种或多种。
5.根据权利要求3所述一种保证程序完整性的嵌入式系统,其特征在于,所述加解密 模块为DES加解密模块,根据DES标准,使用64位密钥对数据进行加密和解密。
6.根据权利要求3所述一种保证程序完整性的嵌入式系统,其特征在于,所述访问控 制信号包括地址、读写控制和/或使能。
7.根据权利要求1至6中任一项所述保证程序完整性的嵌入式系统的实现方法(A)配置过程程序完整性检测单元读取本单元的唯一序列号并发送至安全控制单元;程序完整性检测单元读取存储器指定区域内容,并进行散列运算产生数据摘要,将数据 摘要输出至安全控制单元;安全控制单元接收数据摘要、唯一序列号并保存;(B)运行时刻检测过程程序完整性检测单元关闭嵌入式微处理器的控制时钟;程序 完整性检测单元读取本单元唯一序列号;安全控制单元选取随机数并加密后得到加密结果,将加密结果发送至程序完整性检测 单元;其中加密结果的解密密钥为存储在安全控制单元上的唯一序列号;程序完整性检测单元利用唯一序列号对加密结果进行解密,恢复并存储随机数;程序 完整性检测单元读取存储器指定区域的内容,并通过散列计算产生第二数据摘要;程序完 整性检测单元将第二数据摘要与随机数一起加密后形成第二加密结果,并将第二加密结果 发送至安全控制单元;安全控制单元接收到数据后进行解密,校验解密得到的随机数与之前选取的随机数是 否一致,解密得到的数据摘要与之前在配置模式下写入的数据摘要是否一致,并将对比结 果存放于特定内存位置;程序完整性检测单元为嵌入式微处理器提供时钟,嵌入式微处理器开始正常运行嵌入 式系统软件;嵌入式系统软件访问安全控制单元中的对比结果,从而判断系统是否被修改。
8.根据权利要求7所述保证程序完整性的嵌入式系统的实现方法,其特征在于,所述 步骤(A)配置过程,具体包括Si. 0、程序完整性检测单元中的唯一序列号生成模块读取本单元的唯一序列号,并依 次通过串行数据多路开关、串行缓冲模块传输到异步串口输出模块,由异步串口输出模块 将唯一序列号从程序完整性检测单元输出至安全控制单元,进入步骤Si. 1 ;Si. 1、程序完整性检测单元根据厂商或用户预先指定的地址和长度读取存储器的内 容,将读取的内容进行散列运算,产生数据摘要,并由异步串口输出模块将数据摘要从程序 完整性检测单元输出至安全控制单元,进入步骤Si. 2 ;·51.2、将数据摘要和唯一序列号写入到安全控制单元的受保护非易失性存储空间中。
9.根据权利要求8所述保证程序完整性的嵌入式系统的实现方法,其特征在于,所述 步骤(B)运行时刻检测过程,具体包括S2.0、系统上电后,程序完整性检测单元关闭嵌入式微处理器的控制时钟,进入步骤 S2. 1 ;·52.1、程序完整性检测单元通过唯一序列号生成模块读取唯一序列号并发送到加解密 模块,进入步骤S2.2 ;S2. 2、程序完整性检测单元请求安全控制单元发送随机数,进入步骤S2. 3 ; S2. 3、安全控制单元选取随机数并加密后得到加密结果,其中加密结果的解密密钥为 事先存储在安全控制单元上的唯一序列号,进入步骤S2. 4 ;S2. 4、安全控制单元将加密结果发送至程序完整性检测单元,进入步骤S2. 5 ; S2. 5、程序完整性检测单元的加解密模块利用步骤S2. 1中的唯一序列号对加密结果 进行解密,恢复并存储随机数,进入步骤S2. 6 ;S2. 6、程序完整性检测单元读取存储器指定区域的内容,并使用散列计算模块生成第 二数据摘要,进入步骤S2. 7;S2. 7、程序完整性检测单元将第二数据摘要与步骤S2. 5中的随机数一起组成数据,进行加密后形成第二加密结果,并将第二加密结果通过异步串口输出模块传送到安全控制单 元,进入步骤S2.8 ;S2. 8、安全控制单元接收数据后进行解密,首先校验解密得到的随机数部分是否与之 前发出的一致,若一致,则继续校验解密得到的数据摘要部分数据与之前在配置模式下写 入的数据摘要是否一致,并将对比结果存放于特定内存位置,进入步骤S2. 9 ;S2. 9、程序完整性检测单元为嵌入式微处理器提供时钟,并使得嵌入式微处理器可以 通过存储器访问控制多路开关对存储器进行访问,开始正常运行嵌入式系统软件,进入步 骤 S2. 10 ;S2. 10、嵌入式系统软件通过相关的接口访问安全控制单元中的对比结果,从而判断系 统是否被修改。
10.根据权利要求9所述保证程序完整性的嵌入式系统的实现方法,其特征在于,所述 保证程序完整性的嵌入式系统的实现方法中的加密和解密采用DES、3DES、AES加密解密算 法中的一种或多种;所述散列计算采用SHA-I标准、MD5标准、SHA-256标准或SHA-512标准散列运算中的 一种或多种。
全文摘要
本发明公开了一种保证程序完整性的嵌入式系统,包括嵌入式微处理器、存储器、程序完整性检测单元和安全控制单元,其中程序完整性检测单元用于在运行前检测存储器的指定区域内容,使用标准散列函数计算得到该区域内容的散列值,加密散列值并发送到安全控制单元;安全控制单元用于保存存储器指定区域内容的正确散列值,并与程序完整性检测单元发送过来的运行时刻散列值进行对比,判断该区域是否被篡改。本发明还公开了一种保证程序完整性的嵌入式系统的实现方法包括配置过程和运行时刻检测过程。本发明解决常见系统中代码易被篡改的安全性问题,具有普遍适用、价格低和运行开销少等优点,特别适用于嵌入式系统最基本可信根的完整性保证。
文档编号G06F21/00GK101882189SQ20101021565
公开日2010年11月10日 申请日期2010年6月30日 优先权日2010年6月30日
发明者何建华, 奚建清, 陈虎, 黄华强 申请人:华南理工大学