一种存储器数据保护的方法 【技术领域】
本发明涉及嵌入式SOC集成电路设计领域,尤其是一种存储器数据保护的方法。
背景技术
随着嵌入式技术的发展,32位处理器CPU内核的普及,其运算能力越来越高,大量的软件以及核心算法,都需要在CPU中运行。在32位CPU中运行的算法,多为通用的C程序编程,可移植性很高,如果泄露,会造成较严重的后果。在设计SOC芯片时,需要有一套完整的机制来保护软件算法和数据不被误删除,不被泄露,同时需要加密,并且不影响原先的各项功能。这一套对存储器数据保护的技术简称MPU(Memory Protect Unit)技术。
现有的SOC设计,很少能够对存储器数据进行保护,即使有,一般通过应用软件解决,无法从根本上保护。有些专业安全领域,需要进行存储器数据保护,一般会采用片上ROM工艺或内嵌FLASH等,将存储器片内化。这种方法相比片外的存储器有一定的效果,安全性能有明显的提高,但还是可以用程序将片内的数据拷贝出来。
【发明内容】
针对上述SOC芯片中存储器数据保护不全的问题,本发明提出一种存储器数据保护的方法,应用该方法的SOC芯片硬件电路上有逻辑电路能够防止片内存储器数据被读出,在进行Flash写、擦除等操作时,有相应的电路进行保护。同时,上位机PC通过外部通信接口输入权限校验码来控制存储器保护单元,达到对内嵌FLASH的数据保护。权限校验码的设置可以防止片内数据在异常情况被误删误擦,达到真正的安全芯片等级。
本发明提供一套完整的存储器数据保护方法,解决其技术问题采用的技术方案为:在处理器CPU与存储器之间,构建一套严密的数据保护机制,达到存储器数据绝对安全。该方法包括如下步骤:
1、将存储器分为六个区域,设置为序列号存放区、配置参数区、只执行算法区、程序区、保护数据区和开放数据区,除了开放数据区,每个区域都设有不同的权限校验码,只有权限校验码匹配正确后才能进行写入操作,其中;
序列号存放区:存放芯片唯一序列号,只能写入一次;
配置参数区:存放每个区域的配置参数,写入时需要输入权限校验码;
只执行算法区:非特定情况下只能执行程序和写入数据,写入时需要输入权限校验码;
程序区:用于读、写和执行程序,写入时需要输入权限校验码;
保护数据区:用于读写数据,写入时需要输入权限校验码;
开放数据区:用于读写数据,写入时不需要输入权限校验码;
2、存储器中的数据读写操作前需先经过存储器保护单元,通过权限校验码来控制存储器保护单元是否开启对存储器的相关区域的操作权限。
作为优选,所述的权限校验码通过外部通信接口(如USB、串口等)输入,用完即丢弃。
作为优选,存储器内数据可以实时加解密和配置密钥,对存储器中的数据进行加密,加/解密模块由寄存器控制是否开启,当开启加/解密功能时,配置密钥,密钥寄存器只能写入,不能读出。对存储区中的数据可以实时加解密而不影响整个系统的性能。
作为优选,配置存储器中六个区域的大小,根据不同的应用需求配置不同的容量参数,程序区、保护数据区和开放数据区的大小是可以重新通过配置寄存器进行调整。
作为优选,在只执行算法区中,在非特定情况,只能执行程序和写入数据,读取数据是有限制的。当前程序位于只执行算法区内时,若要用到只执行算法区的数据,可以读取数据;当前程序位于只执行算法区外时,则不能读取数据。这样能够使软件编程更方便,只执行算法区内的程序的参数变量都可以编译在只执行区内部空间。
作为优选,只执行算法区的保护机制:当需要更新只执行算法区内程序时,必须将整个只执行算法区全部擦除,再写入,而且只能通过芯片内ROM程序中的更新函数来完成。
作为优选,更新只执行算法区内程序时,在一次硬件复位后,设定为只有一次写入权限,当写完后,将权限校验码换成其他的值后无法再进行写入,这样限定数据更新功能,一定程度增加该区段的数据安全。
作为优选,序列号存放区存放的序列号在芯片生产过程就写入,并且永远不能擦除,每个芯片都有各自的序列号。芯片启动后就会读出序列号,只有序列号正确,程序才能运行,这样可以保证每个芯片的程序只能在对应的芯片内运行,无法被复制到其它芯片中运行。序列号存放区开启写操作后只允许一次写入操作,之后关闭写入通道,达到类似OTP功能。
本发明有益的效果是:
1.分区管理和权限校验技术使不同地存储器地址段拥有不同的保护级别,分区大小可以由寄存器重新定义,保护过程有用户参与。
2.在只执行算法区只能运行程序和写入数据,非特定情况下无法读程序,有效地保护了存储器内数据的安全。
3.存储器中的数据可以以密文形式存在,而且密钥可以配置,保护了存储器内数据安全。
4.每个芯片具有单独的序列号,其相应的配套软件只能在固定芯片中运行,在安全领域应用非常广泛。
【附图说明】
附图1是存储器数据保护单元系统应用图;
附图2是存储器数据保护单元内部结构图;
附图3FLASH读/写流程图。
【具体实施方式】
下面结合附图和实施例对本发明作进一步说明:
本实施例以AS500安全芯片为例,说明本专利技术的实施应用。AS500是一款加密应用SOC芯片,内嵌有FLASH(即存储器),上位机PC通过USB口输入权限校验码来控制存储器保护单元,达到对内嵌FLASH的数据保护。AS500的内部ROM程序负责整个数据保护机制的软件部分,通过USB口,ROM程序会将PC中用户的权限校验码传入到存储器保护单元地寄存器中,通过校验开启相应的区域操作权限。
如图1所示,在芯片AS500中,CPU1和存储器保护单元2、FLASH控制器3、内嵌FALSH4、SRAM5、USB控制器6之间通过总线BUS7通讯;上位机PC8通过USB BUS9与USB控制器6相连;FLASH控制器3挂在BUS7上,CPU1可以对其进行配置;CPU1在对内嵌FALSH4进行数据读写前需先通过BUS7连接存储器保护单元2,再到内嵌FALSH4。上位机PC8通过权限校验码来控制存储器保护单元2是否开启对内嵌FALSH4相关区域的操作权限。
如附图2所示,存储器数据保护单元2包含地址判断逻辑21、寄存器组22、校验模块23、数据保护主控制器24和加/解密模块25。其中,地址判断逻辑21对访问地址译码,判断该访问处于内嵌FALSH4哪个区;寄存器组22控制各模块工作;校验模块23负责管理内嵌FALSH4分区操作权限控制;数据保护主控制器24负责对接内嵌FALSH4;加/解密模块25负责对内嵌FALSH4数据加/解密。
地址总线201由24位地址总线组成;寄存器总线202包含2组32位总线;分区总线203包含6位控制信号;存储器总线204包含24位地址总线和32位数据总线;CPU控制总线205为BVCI控制总线;寄存器总线206包含1组32位总线;校验总线207包含4位控制信号;CPU控制信号组208包含3根控制信号;数据总线209为32位数据总线;寄存器总线210包含1组32位总线;CPU数据总线211为BVCI数据总线。
根据CPU对存储器访问的特点,将存储器分为六个区域,每个区有不同的操作权限,如下表所示:
序列号存放区 配置参数区 只执行算法区 程序区 保护数据区 开放数据区 R+W R+W E+W R+W+E R+W R+W不需要权 限校验码
R-只读 W-只写 E-只执行
序列号存放区:存放芯片唯一序列号,只能写入一次;
配置参数区:存放每个区域的配置参数,写入时需要输入权限校验码;
只执行算法区:非特定情况下只能执行程序、写入数据,写入时需要输入权限校验码;
程序区:用于读、写和执行程序,写入时需要输入权限校验码;
保护数据区:用于读写数据,写入时需要输入权限校验码;
开放数据区:用于读写数据,写入时不需要输入权限校验码;
存储器中每种类别的区域的大小可根据不同的需求进行调整,不同的应用需求可以配置不同的容量参数,程序区、保护数据区和开放数据区的大小是可以重新通过配置寄存器来调整。
除了开放数据区,每个区都设有不同的权限校验码,只有权限校验码匹配正确后才能进行写入操作,保证数据的安全,防止被误改或误擦除。权限校验码不存放在内部存储器中,而是通过外部通信接口如USB、串口等方式输入,用完即丢弃。
每个芯片具有单独的序列号,系列号存放区开启写操作后只允许一次写入操作,写入后关闭相应写入通道使其无法再写入,也不能被覆盖或误删。序列号在芯片生产过程就写入,并且永远不能擦除,每个芯片都有各自的序列号,这样可以保证每个芯片的程序只能在对应的芯片内运行,无法被复制到其它芯片中运行。
存储器中的只执行算法区,只能执行程序和写入数据,一般情况下,无法读取其中的数据。当需要更新只执行算法区内程序时,必须将整个只执行算法区全部擦除,再写入,而且只能通过芯片内ROM程序中的更新函数来完成。更新只执行算法区内程序时,在一次硬件复位后,设定为只有一次写入权限,当写完后,将权限校验码换成其他的值后无法再进行写入,这样限定数据更新功能,一定程度增加该区段的数据安全。
只执行算法区是重点保护对象,客户定制的程序需要存放于此,要保证绝对安全,任何方法无法将其程序读出来,且该程序运行不受任何限制。在数据保护主控制器24中有一块逻辑电路CPU行为解码逻辑接收来自处理器方面的几位控制信号,CPU1工作时通过控制信号告诉数据保护主控制器24当前CPU1处于取值模式还是数据操作模式,以及判断是否处于JTAG模式。如果是数据操作模式,当前的指令处于芯片的哪个存储空间等。有了CPU1行为解码逻辑,数据保护主控制器24就会根据当前处理器的运行状态来控制内嵌FLASH4,做到相应的数据保护功能。
只执行算法区的保护效果为:当CPU1处于取指状态,只执行算法区执行程序工作正常;当CPU1处于读取数据状态,如果CPU1正运行在内嵌FLASH4的只执行算法区,则可以正常读取数据,如果CPU1正运行在其他地址空间,则不能读取只执行算法区的数据,读取的数据为全0。
存储器中对重要数据的保护,防止数据被误删除,主要通过保护数据区实现,此区域的数据写入时需要外部权限校验码。
可以对存储器中的数据进行加密,加/解密模块25可以由寄存器控制是否开启,当开启加/解密功能时,密钥是可以配置的,密钥寄存器只能写入,不能读出。
加/解密模块25由寄存器组22控制,可以开启或者关闭加解密功能。当开启加/解密功能时,加解密逻辑需要用到一个32位的密钥,不同的芯片默认有一个随机的密钥,此密钥也可以由用户配置,该寄存器是只有写操作权限,用户无法读取该密钥。可以做到每个芯片中的数据为密文,而且每个芯片的加密密钥不一样。
寄存器组22控制整个存储器保护模块的功能,以下是寄存器组22定义:
名称 偏 移 R/ W 复位值 描述 FLASH_ENCR YPT 0X1 8 w 0 E FLASH密钥寄存器
名称 偏 移 R/ W 复位值 描述 FLASH_CHEC K 0X1 C w 0 E FLASH校验寄存器 FLASH_DATAP RO 0X2 0 r/w 0X8002a0 00 E FLASH数据保护区起始地 址寄存器 FLASH_DATA OPEN 0X2 4 r/w 0X800400 00 E FLASH开放区起始地址寄 存器
以下是每个寄存器的具体描述:
寄存器FLASH_ENCRYPT存储密钥。
表1 FLASH_ENCRYPT寄存器
域名 位 R/ W 复位值 描述 Encryp tData 31:0 w 0 密钥
寄存器FLASH_CHECK校验存储区域写保护。
表2 FLASH_CHECK寄存器
域名 位 R/ W 复位值 描述 Check Data 31:0 w 0 存储区域写保护校验。如果寄存器的配置值同以下 值一致,则该区域的写保护关闭。开放区没有写保护开 关。 0x11115678:配置区和程序区 0x22225678:只执行区 0x33335678:数据保护区
寄存器FLASH_DATAPRO存储保护数据区的起始地址
表3 FLASH_DATAPRO寄存器
域名 位 R/ W 复位值 描述 StarDa taPro 31:0 r/ w 0X800 2a000 保护数据区的起始地址
寄存器FLASH_DATAOPEN存储开放区的起始地址
表4 FLASH_DATAOPEN寄存器
域名 位 R/ W 复位值 描述 StarData Open 31:0 r/ w 0X8004 0000 开放区的起始地址
寄存器FLASH_DATAPRO和寄存器FLASH_OPEN可以重新定义分区的地址范围,提供更安全的数据保护。
如图3所示,内嵌FLASH4读流程为:
1)用户通过寄存器组22来设置加/解密模块25,配置是否开启加/解密功能和配置密钥;
2)CPU1读取内嵌FLASH4空间的数据;
3)地址判断逻辑对CPU1访问的内嵌FLASH4地址解析判断当前CPU1访问内嵌FLASH4的区域;
4)数据保护主控制器24根据地址判断逻辑的解析结果判断是否从存储器控制器3取数据,如果CPU1访问的是保密区域,数据保护主控制器24会直接返回数据0给CPU1;
5)若数据允许访问,数据经过加/解密模块25传回给CPU1。内嵌FLASH4写流程为:
1)用户通过寄存器组22设置加/解密模块25,配置是否开启加/解密功能和配置密钥;
2)用户通过PC8从USB BUS9输入权限校验码并将权限校验码写入校验寄存器;
3)校验模块23读取校验寄存器中的值进行校验,当校验寄存器中的值与校验模块23内部的值一致,则开启相应的内嵌FLASH4区域操作权限;
4)CPU1对内嵌FLASH4空间进行写操作;
5)一方面数据经过加/解密模块25传给数据保护主控制器24;另一方面,地址判断逻辑解析CPU1发起写操作的内嵌FLASH4的地址;
6)数据保护主控制器24将写入数据发送给存储器控制器3,存储器控制器3将数据写入内嵌FLASH4空间。
写入操作时,除了开放数据区不需要操作权限校验,其他区都有一个权限校验码匹配过程才能进行写操作。由于序列号存放区比较重要,如果该区被覆盖或误删会导致内部程序无法运行甚至芯片不能启动,因此该区的权限校验码不对外开放。在芯片生产阶段就写入序列号,而且写入后关闭相应写入通道使其无法再写入,之后再也不能被覆盖或误删,达到类似OTP功能。
除上述实施例外,本发明还可以有其他实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围。