Flash存储器中的代码保护方法及保护装置
技术领域
本发明涉及存储技术领域,尤其涉及一种Flash存储器中的代码保护方法及保护装置。
背景技术
Flash存储器属于内存器件的一种,是一种非易失性(Non-Volatile)内存,常被用来存储终端设备上的运行程序。为了增强Flash存储器的使用灵活性,当前很多模组厂商都提供给了客户二次开发的功能。但是,为了保护自身的程序,厂商不希望自己烧写在Flash存储器中的算法代码被他人通过Flash烧录接口或者其他应用程序读取,然后拷贝到其他Flash存储器中使用。
为了解决这一问题,当前的主流方案是在Flash存储器中的外挂加密芯片,将Flash存储器中的部分算法代码存储在加密芯片中;或者是在程序运行之前,先去加密芯片进行一次握手验证。但是,这种方案的主要缺陷是需要设置额外的加密芯片以及增大PCB电路板的面积,进而导致Flash存储器整体成本的上升。
因此,如何对Flash存储器中的代码进行有效保护,防止非法窃取,同时不导致Flash存储器成本的大幅度增加,是目前亟待解决的技术问题。
发明内容
本发明提供一种Flash存储器中的代码保护方法及保护装置,用于对Flash存储器中的代码进行有效保护,防止非法窃取,同时不导致Flash存储器成本的大幅度增加。
为了解决上述问题,本发明提供了一种Flash存储器中的代码保护方法,包括如下步骤:
存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限;
判断是否有访问者访问Flash存储器,若是,则根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记;
获取与所述标记匹配的验证信息作为目标验证信息,并根据所述目标验证信息获取所述访问者的目标访问权限。
可选的,所述Flash存储器中包括代码区和数据区;
所述访问权限包括所述代码区的读写权限和所述数据区的读写权限。
可选的,所述验证信息为校验码;存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限的具体步骤包括:
设置与多种访问所述Flash存储器的方式一一对应的多个校验码;
提供一efuse存储器,所述efuse存储器中烧录有多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限;
加载多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限至与所述Flash存储器连接的Flash控制器中。
可选的,根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记的具体步骤包括:
获取所述访问者的原始访问地址;
根据所述访问者访问所述Flash存储器的方式添加对应的校验码至所述原始访问地址,形成标记访问地址。
可选的,还包括如下步骤:
存储秘钥至所述efuse存储器中;
当向所述Flash存储器中烧写所述代码区时,所述秘钥对烧写的代码明文进行加密;
当从所述Flash存储器中读取所述代码区的数据时,所述秘钥对所述代码区的数据进行解密。
为了解决上述问题,本发明还提供了一种Flash存储器中的代码保护装置,包括:
存储模块,用于存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限;
标记模块,用于判断是否有访问者访问Flash存储器,若是,则根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记;
处理模块,用于获取与所述标记匹配的验证信息作为目标验证信息,并根据所述目标验证信息获取所述访问者的目标访问权限。
可选的,所述Flash存储器中包括代码区和数据区;
所述访问权限包括所述代码区的读写权限和所述数据区的读写权限。
可选的,所述验证信息为校验码,多个所述校验码与多种访问所述Flash存储器的方式一一对应;
所述存储模块包括一efuse存储器,所述efuse存储器中烧录有多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限;
所述存储模块还用于加载多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限至与所述Flash存储器连接的Flash控制器中。
可选的,所述标记模块包括:
获取单元,用于获取所述访问者的原始访问地址;
标记单元,用于根据所述访问者访问所述Flash存储器的方式添加对应的校验码至所述原始访问地址,形成标记访问地址。
可选的,所述efuse存储器中还存储有秘钥;所述Flash存储器中的代码保护装置还包括:
保护模块,用于当向所述Flash存储器中烧写所述代码区时,所述秘钥对烧写的代码明文进行加密;所述保护模块还用于当从所述Flash存储器中读取所述代码区的数据时,所述秘钥对所述代码区的数据进行解密。
本发明提供的Flash存储器中的代码保护方法及保护装置,在外界访问者访问Flash存储器的过程中,对所述访问者进行标记,并根据标记和预先存储的验证信息,获取与访问者对应的访问权限,一方面,确保所述Flash存储器可以进行正常的读取;另一方面,通过对访问权限的限定,能够有效的防止外界访问者非法窃取Flash存储器中的内容、进而烧录到其他设备上使用,从而有效的对所述Flash存储器中的代码进行了保护。另外,由于本发明无需设置外挂加密芯片、也无需增大PCB电路板的面积,从而有助于Flash存储器中代码保护成本的降低,扩展了Flash存储器的使用范围。
附图说明
附图1是本发明具体实施方式中Flash存储器的代码保护方法流程图;
附图2是本发明具体实施方式中对Flash存储器中的代码进行保护时的示意图;
附图3是本发明具体实施方式中Flash存储器的代码保护装置的结构框图。
具体实施方式
下面结合附图对本发明提供的Flash存储器中的代码保护方法及保护装置的具体实施方式做详细说明。
本具体实施方式提供了一种Flash存储器中的代码保护方法,附图1是本发明具体实施方式中Flash存储器的代码保护方法流程图,附图2是本发明具体实施方式中对Flash存储器中的代码进行保护时的示意图。如图1和图2所示,本具体实施方式提供的Flash存储器中的代码保护方法,包括如下步骤:
步骤S11,存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限。
访问权限的具体内容本领域技术人员可以根据实际需要进行选择。可选的,所述Flash存储器中包括代码区和数据区;
所述访问权限包括所述代码区的读写权限和所述数据区的读写权限。
具体来说,由于所述Flash存储器中通常包括代码区和数据区,而所述代码区和所述数据区中存储的数据信息都存在被他人非法窃取的可能性,因此,为了对所述Flash存储器进行更为全面的保护,所述访问权限包括所述代码区的读写权限和所述数据区的读写权限。
可选的,所述验证信息为校验码;存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限的具体步骤包括:
设置与多种访问所述Flash存储器的方式一一对应的多个校验码;
提供一efuse存储器,所述efuse存储器中烧录有多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限;
加载多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限至与所述Flash存储器连接的Flash控制器中。
表1是访问所述Flash存储器的访问方式、校验码以及访问权限的对应关系表。以下以表1中的四种访问方式:ICache(指令高速缓冲存储器)、DTCM(Data Tightly CoupledMemory,数据紧密耦合存储器)、DMA Port0(Direct Memory Access Port0,直接存储器访问端口0)和DMA Port1(直接存储器访问端口1)为例进行说明。具体来说,模组厂商在出厂之前可以将所述校验码、对应的访问权限、以及所述代码区的地址范围烧写在所述efuse存储器中。当所述efuse存储器与所述Flash存储器上电时,将所述efuse存储器中存储的所述校验码、对应的访问权限以及代码区的地址范围加载至与Flash存储器连接的Flash控制器中。
表1访问方式、校验码以及访问权限的对应关系表
步骤S12,判断是否有访问者访问Flash存储器,若是,则根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记。
可选的,根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记的具体步骤包括:
获取所述访问者的原始访问地址;
根据所述访问者访问所述Flash存储器的方式添加对应的校验码至所述原始访问地址,形成标记访问地址。
表2是访问所述Flash存储器的访问者、原始访问地址以及标记访问地址之间的对应关系表。具体来说,本具体实施方式将与Flash存储器连接的Flash控制器(FlashController)作为一个Slave(从设备),一个外界访问者作为一个Master(主设备)。在如图2所示的地址重映射(Addr-Remap)中有一组寄存器用于存储Flash存储器的地址范围(多个地址),每一所述Flash存储器的地址均包括起始地址(Start Address)和终止地址(EndAddress)。所述Flash存储器的地址范围由模组厂商在出厂之前烧写在所述efuse存储器中,在所述efuse存储器与所述地址重映射上电时,加载至所述地址重映射中。当外界的访问者请求访问所述Flash存储器时,所述地址重映射先获取所述访问者的原始访问地址,然后对原始访问地址进行修改,根据其访问方式添加校验码信息。所述访问者的访问请求经过NIC400(总线)之后发送到所述Flash控制器。在本具体实施方式中所述Flash存储器的地址范围以及所述Flash存储器中所述代码区的地址范围都可以通过所述efuse存储器进行配置。
表2访问者、原始访问地址以及标记访问地址之间的对应关系表
访问方式 |
校验码 |
原始访问地址 |
标记访问地址 |
ICache |
0 |
0x??00_0000~0x??0F_FFFF |
0x??00_0000~0x??0F_FFFF |
DTCM |
1 |
0x??00_0000~0x??0F_FFFF |
0x??10_0000~0x??1F_FFFF |
DMA Port0 |
2 |
0x??00_0000~0x??0F_FFFF |
0x??20_0000~0x??2F_FFFF |
DMA Port1 |
3 |
0x??00_0000~0x??0F_FFFF |
0x??30_0000~0x??3F_FFFF |
步骤S13,获取与所述标记匹配的验证信息作为目标验证信息,并根据所述目标验证信息获取所述访问者的目标访问权限。
当所述访问者的访问地址落在所述Flash存储器的代码区的地址范围之内时,则根据所述访问者对应的标记访问地址获取所述访问者的校验码,以确定所述访问者的权限。以1MB大小的Flash存储器为例:如表2所示,所述Flash控制器根据所述标记访问地址中的bit20和bit21来判断访问者所携带的校验码与哪种访问方式对应,进而确定所述访问者能够被赋予的访问权限。
采用本具体实施方式提供的上述Flash存储器中的代码保护方法,一方面,能够确保所述Flash存储器的代码区中的代码可以被MCU(Microcontroller Unit,微控制单元)核正常的取指执行;另一方面,能够有效的防止他人通过运行在MCU中的应用程序将所述Flash存储器的代码区中的代码非法窃取并输出到外部设备中,从而实现了对所述Flash存储器的代码区中的代码的有效保护。
本领域技术人员还可以根据实际需要在所述Flash控制器中设置一个开关寄存器和一个秘钥(key)寄存器,且所述开关寄存器和所述秘钥寄存器能够通过应用程序进行读写。当所述开关寄存器的值为0时,表示所述Flash存储器的保护功能关闭,即不再对访问者的访问方式进行标记、也不再针对访问者匹配目标访问权限,所有的访问者均可以对所述Flash存储器中的所述代码区和所述数据区进行读写;当所述开关寄存器的值为1时,表示所述Flash存储器的保护功能开启,即需要按照步骤S11-步骤S13对访问者的访问权限进行限定。所述efuse存储器中也可以保存一个密码,只有当所述Flash控制器中的秘钥寄存器配置的值与所述efuse存储器中保存的所述密码一致时,所述Flash控制器中的所述开关寄存器的值才能够被改写。
可选的,所述Flash存储器中的代码保护方法还包括如下步骤:
存储秘钥至所述efuse存储器中;
当向所述Flash存储器中烧写所述代码区时,所述秘钥对烧写的代码明文进行加密;
当从所述Flash存储器中读取所述代码区的数据时,所述秘钥对所述代码区的数据进行解密。
具体来说,在所述Flash控制器中设置一异或加解密模块,用于对代码进行加解密。所述efuse存储器中存储了一个32bit的秘钥key xor,在所述Flash控制器与所述efuse存储器上电时,所述秘钥被加载至所述Flash控制器中。当向所述Flash存储器中烧写代码区时,代码明文会和所述秘钥按位异或得到密文,然后将所述密文烧写至所述Flash存储器中。当从所述Flash存储器中读取代码区中存储的数据时,再将所述密文和所述秘钥按位异或进行解密。本具体实施方式采用按位异或进行加解密,有助于减少硬件逻辑深度,避免增加打拍。通过设置与所述Flash存储器相对独立的所述efuse存储器,且在所述efuse存储器中存储所述秘钥,使得即便是他人直接在PCB板上通过Flash管脚将所述Flash存储器中所述代码区的内容读出,所述代码区的内容在其他Flash设备中也无法正常运行,从而有效防止了他人直接通过所述Flash存储器的引脚窃取代码区中的代码。
不仅如此,本发明还提供了一种Flash存储器中的代码保护装置,附图3是本发明具体实施方式中Flash存储器的代码保护装置的结构框图。本具体实施方式提供的Flash存储器中的代码保护装置的控制方法可参见图1和图2。如图1-图3所示,本具体实施方式提供的Flash存储器中的代码保护装置,包括:
存储模块30,用于存储多个验证信息、以及与多个所述验证信息一一对应的多个访问权限;
标记模块31,用于判断是否有访问者访问Flash存储器,若是,则根据所述访问者访问所述Flash存储器的方式对所述访问者进行标记;
处理模块32,用于获取与所述标记匹配的验证信息作为目标验证信息,并根据所述目标验证信息获取所述访问者的目标访问权限。
可选的,所述Flash存储器中包括代码区和数据区;
所述访问权限包括所述代码区的读写权限和所述数据区的读写权限。
可选的,所述验证信息为校验码,多个所述校验码与多种访问所述Flash存储器的方式一一对应;
所述存储模块30包括一efuse存储器301,所述efuse存储器301中烧录有多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限;
所述存储模块30还用于加载多个所述校验码以及与多个所述校验码一一对应的多个所述访问权限至与所述Flash存储器连接的Flash控制器中。
可选的,所述标记模块31包括:
获取单元311,用于获取所述访问者的原始访问地址;
标记单元312,用于根据所述访问者访问所述Flash存储器的方式添加对应的校验码至所述原始访问地址,形成标记访问地址。
可选的,所述efuse存储器301中还存储有秘钥;所述Flash存储器中的代码保护装置还包括:
保护模块33,用于当向所述Flash存储器中烧写所述代码区时,所述秘钥对烧写的代码明文进行加密;所述保护模块33还用于当从所述Flash存储器中读取所述代码区的数据时,所述秘钥对所述代码区的数据进行解密。
本具体实施方式提供的Flash存储器中的代码保护方法及保护装置,在外界访问者访问Flash存储器的过程中,对所述访问者进行标记,并根据标记和预先存储的验证信息,获取与访问者对应的访问权限,一方面,确保所述Flash存储器可以进行正常的读取;另一方面,通过对访问权限的限定,能够有效的防止外界访问者非法窃取Flash存储器中的内容、进而烧录到其他设备上使用,从而有效的对所述Flash存储器中的代码进行了保护。另外,由于本发明无需设置外挂加密芯片、也无需增大PCB电路板的面积,从而有助于Flash存储器中代码保护成本的降低,扩展了Flash存储器的使用范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。