掌桥专利:专业的专利平台
掌桥专利
首页

电子设备及其MCU固件保护方法

文献发布时间:2023-06-19 12:24:27


电子设备及其MCU固件保护方法

技术领域

本发明涉及数据安全领域,尤其涉及一种电子设备及其MCU固件保护方法。

背景技术

MCU固件的保护,往往会采取多级保护:第一级是读保护,即,防止别人读取;第二级是代码级保护,即,即使别人读取了本MCU的程序,也无法复制到另一颗MCU上正常执行。目前,代码级保护的主流做法是:运行时比较MCU的唯一ID(例如,STM32的96比特的唯一ID),若不是本MCU自身的ID就不执行,这种方法虽然可起到一定的保护作用,但对于价值高的MCU固件,依然很容易通过反汇编的方式破解,例如,对于ARM指令集,可通过找到比较唯一ID的汇编代码位置,然后将4比特的条件码修改为“AL,无条件执行”即可实现破解,因此安全性依然不高。

发明内容

本发明要解决的技术问题在于,针对现有技术存在的MCU固件安全性不高的缺陷,提供一种电子设备的MCU固件保护方法。

本发明解决其技术问题所采用的技术方案是:构造一种电子设备的MCU固件保护方法,包括:

步骤S10.在电子设备的产测阶段,接收产测工具发送的固件密文,并将其存储至FLASH中,其中,所述产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密以生成所述固件密文;

步骤S20.在电子设备的使用阶段,若需要运行所述关键代码或使用所述关键数据,则以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并运行所述关键代码或使用所述关键数据。

优选地,在所述步骤S20中,在获取所述关键代码或所述关键数据之后,还包括:

将所述关键代码或所述关键数据存储至RAM中。

优选地,所述将所述关键代码或所述关键数据存储至RAM中,包括:

在所述RAM中随机选择一存储地址,并将所述关键代码或所述关键数据存储至所述存储地址。

优选地,所述步骤S20包括:

步骤S21.若需要运行所述关键代码或使用所述关键数据,则判断RAM中是否存储有解密后的所述关键代码或所述关键数据,若是,在执行步骤S22;若否,则执行步骤S23;

步骤S22.直接对所述RAM中所存储的所述关键代码进行运行或所述关键数据进行使用,然后执行步骤S24;

步骤S23.以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并将其存储至RAM中,而且,运行所述关键代码或使用所述关键数据;

步骤S24.对所述关键代码的当前运行次数或所述关键数据的当前使用次数进行更新,并判断当前运行次数或当前使用次数是否达到预设次数值,若是,则执行步骤S25;若否,则结束;

步骤S25.对RAM中所存储的解密后的所述关键代码或所述关键数据进行清除。

优选地,所述步骤S10包括:

步骤S11.接收产测工具发送的ID读取指令;

步骤S12.向所述产测工具发送MCU的ID,以使所处产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密以生成所述固件密文;

步骤S13.接收所述产测工具发送的所述固件密文,并将其存储至FLASH中。

优选地,在电子设备的产测阶段,所述产测工具通过以下方式生成固件密文:

以所述MCU的ID为密钥,使用XOR算法对所述关键代码和/或关键数据的至少一部分进行加密,以生成固件密文;

在电子设备的使用阶段,MCU通过以下方式获取所述关键代码或所述关键数据:

以自身ID为密钥,使用XOR算法对所述固件密文的至少一部分进行进行解密,以获取所述关键代码或所述关键数据。

优选地,在电子设备的产测阶段,所述产测工具通过以下方式生成固件密文:

以所述MCU的ID为密钥,使用XOR算法对所述关键代码和/或关键数据的至少一部分进行加密,以获取第一中间数据;

对所述第一中间数据进行FEC编码,以获取第二中间数据;

生成随机数据,并按预设规则将所述随机数据填充至所述第二中间数据中以生成固件密文;

在电子设备的使用阶段,MCU通过以下方式获取所述关键代码或所述关键数据:

按预设规则从所述固件密文中挑选出其中的随机数据,并丢弃所述随机数据,以获取第二中间数据;

对所述第二中间数据进行FEC解码,以获取第一中间数据;

以自身ID为密钥,使用XOR算法对所述第一中间数据的一部分进行进行解密,以获取所述关键代码或所述关键数据。

优选地,所述对所述第一中间数据进行FEC编码,以获取第二中间数据,包括:

对所述第一中间数据进行FEC编码,以获取编码数据,其中,所述编码数据的数据长度为m;

在所述编码数据的m位数据中随机选择其中的n位数据,并将其替换为随机数,以获取第二中间数据,其中,n

本发明还构造一种电子设备,包括MCU、FLASH,其中,

所述FLASH,用于存储固件密文,其中,所述固件密文是在电子设备的产测阶段,产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密所生成的;

所述MCU,用于在电子设备的使用阶段,若需要运行所述关键代码或使用所述关键数据,则以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并运行所述关键代码或使用所述关键数据。

优选地,还包括RAM,而且,

所述MCU,用于在获取到所述关键代码或所述关键数据之后,在所述RAM中随机选择一存储地址,并将所述关键代码或所述关键数据存储至所述存储地址。

本发明所提供的技术方案,FLASH中存储的是固件密文,而该固件密文是在电子设备的产测阶段由产测工具以MCU的ID为密钥,对MCU固件的关键代码和/或关键数据进行加密而生成的。在电子设备的使用阶段,MCU只有在需要运行该关键代码或使用该关键数据时,才以自身ID为密钥,对FLASH中所存储的固件密文进行解密,从而获取到所需要的关键代码或关键数据,然后再运行该关键代码或使用该关键数据。这样,即使破解者获取到了FLASH中所存储的数据(固件密文),由于解密该固件密文需要用到原MCU的ID,而破解者无法知晓原MCU的ID,也无法知晓解密算法,所以依然无法进行反汇编,也就无法复制MCU固件。因此,既保证了本电子设备的MCU的正常运行,又防止了破解者直接复制MCU固件。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:

图1是本发明电子设备的MCU固件保护方法实施例一的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1是本发明电子设备的MCU固件保护方法实施例一的流程图,该MCU固件防护方法包括:

步骤S10.在电子设备的产测阶段,接收产测工具发送的固件密文,并将其存储至FLASH中,其中,所述产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密以生成所述固件密文;

在该步骤中,需说明的是,电子设备固件部分的生产分两个阶段:一、量产固件烧入阶段;二、产测阶段。

在量产固件烧入阶段,为了支持量产时大规模的固件的并行烧入,因此不做唯一的ID区分,对各MCU来说所烧入的固件都完全相同,同时,这也更方便固件的管控,因为现在电子设备的生产,往往采用外协的模式,研发与生产分离,固件有可能被工厂泄露出去。在量产固件烧入之后,MCU固件并不完整,还缺失部分关键数据及关键代码,此时,MCU只能运行一些普通功能,例如,各组件的测试等。

在产测阶段,需逐个测试电子设备的各功能,除验证功能外,还会基于MCU的唯一ID,生成并写入加密后的关键数据和关键代码,具体地,产测工具在对关键代码和部分关键数据进行加密时,以MCU的唯一ID作为KEY,其中,关键代码为“位置无关代码(position-independent code,PIC)”;关键数据则是一些正常运行所需的必要数据,比如,固件用到的一些常数值,具体可为:基于MCU的唯一ID采用相应的算法(例如Hash算法)生成的多个私有密钥,这些关键数据在某些场景会被MCU固件使用到,所以需要MCU能对其解密。这样,由于在产测阶段补齐了MCU固件的关键代码和/或关键数据,固件就成为一个完整的固件,而且是加密的。

步骤S20.在电子设备的使用阶段,若需要运行所述关键代码或使用所述关键数据,则以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并运行所述关键代码或使用所述关键数据。

在该步骤中,对于本电子设备的MCU,由于其知晓密钥(MCU的ID)及解密算法,所以可在运行时对加密后的MCU固件(包含关键代码和/或关键数据)进行正常解密,并加载执行。而对于非法破解者,即使其读取了FLASH中存储的数据(固件密文),由于解密该固件密文需要用到原MCU的ID,而其无法知晓原MCU的ID,也无法知晓解密算法,所以依然无法对其进行反汇编,也就无法直接复制MCU固件。这样,既保证了本电子设备的MCU的正常运行,又防止了破解者直接复制产品固件。

进一步地,在一个可选实施例中,在步骤S20中,在获取所述关键代码或所述关键数据之后,还包括:将所述关键代码或所述关键数据存储至RAM中。在该实施例中,当MCU第一次需要运行关键代码或使用关键数据时,可以自身ID为密钥对FLASH中所存储的固件密文进行解密,从而获取所需要的关键代码或关键数据,并运行该关键代码或使用该关键数据。当MCU需要再次运行关键代码或使用关键数据时,直接对RAM中所存储的关键代码进行运行或关键数据进行使用即可。这样,由于RAM具有掉电后数据丢失的特性,所以非法破解者是无法读取RAM中的数据的,因此保证了关键代码和/或关键数据的安全性,同时,在后续运行时,由于可直接执行RAM中的关键代码或使用RAM中的关键数据,而不用每次单独解密再执行,所以也保证了运行效率。

进一步地,在一个可选实施例中,在步骤S20中,在存储解密后的关键代码或关键数据时,可在RAM中随机选择一存储地址,并将关键代码或关键数据存储至该存储地址。这样,由于解密后的关键代码(PIC代码在任意位置都可执行)或关键数据是存储到一随机RAM地址,所以,可进一步提高关键代码和/或关键数据的安全性。

进一步地,在一个可选实施例中,步骤S20包括:

步骤S21.若需要运行所述关键代码或使用所述关键数据,则判断RAM中是否存储有解密后的所述关键代码或所述关键数据,若是,在执行步骤S22;若否,则执行步骤S23;

步骤S22.直接对所述RAM中所存储的所述关键代码进行运行或所述关键数据进行使用,然后执行步骤S24;

步骤S23.以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并将其存储至RAM中,而且,运行所述关键代码或使用所述关键数据;

步骤S24.对所述关键代码的当前运行次数或所述关键数据的当前使用次数进行更新,并判断当前运行次数或当前使用次数是否达到预设次数值,若是,则执行步骤S25;若否,则结束,其中,所述关键代码的当前运行次数或所述关键数据的当前使用次数的初始值为0;

步骤S25.对RAM中所存储的解密后的所述关键代码或所述关键数据进行清除。

在该实施例中,RAM中所存储的解密后的关键代码或关键数据在运行一定次数后自动清除掉,下次需要运行时再重新解密并在RAM中加载,因此,可在关键代码和/或关键数据的安全性与运行效率之间实现最佳平衡。

进一步地,在一个可选实施例中,步骤S10包括:

步骤S11.接收产测工具发送的ID读取指令;

步骤S12.向所述产测工具发送MCU的ID,以使所处产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密以生成所述固件密文;

步骤S13.接收所述产测工具发送的所述固件密文,并将其存储至FLASH中。

在该实施例中,在产测阶段,产测工具与电子设备的通信过程为:产测工具发出ID读取指令;电子设备返回MCU的唯一ID;产测工具以MCU的ID为密钥,将MCU固件的关键代码和部分关键数据加密,并写入到FLASH中。

进一步地,在一个可选实施例中,在电子设备的产测阶段,产测工具通过以下方式生成固件密文:以所述MCU的ID为密钥,使用XOR算法对所述关键代码和/或关键数据的至少一部分进行加密,以生成固件密文。在电子设备的使用阶段,MCU通过以下方式获取所述关键代码或所述关键数据:以自身ID为密钥,使用XOR算法对所述固件密文的至少一部分进行进行解密,以获取所述关键代码或所述关键数据。在该实施例中,产测工具及MCU均使用XOR算法对关键代码或关键数据进行加解密。

进一步地,在一个可选实施例中,在电子设备的产测阶段,所述产测工具通过以下方式生成固件密文:

以所述MCU的ID为密钥,使用XOR算法对所述关键代码和/或关键数据的至少一部分进行加密,以获取第一中间数据;

对所述第一中间数据进行FEC编码,以获取第二中间数据;

生成随机数据,并按预设规则将所述随机数据填充至所述第二中间数据中以生成固件密文;

在电子设备的使用阶段,MCU通过以下方式获取所述关键代码或所述关键数据:

按预设规则从所述固件密文中挑选出其中的随机数据,并丢弃所述随机数据,以获取第二中间数据;

对所述第二中间数据进行FEC解码,以获取第一中间数据;

以自身ID为密钥,使用XOR算法对所述第一中间数据的一部分进行进行解密,以获取所述关键代码或所述关键数据。

在该实施例中,在对关键代码和/或关键数据进行加密时,先使用XOR算法对其中至少一部分关键代码和/或关键数据进行加密,再基于随机数的保护机制,在FEC编码后的数据中加入随机数据以作为最终的密文。相应地,在对关键代码和/或关键数据进行解密时,先挑选并丢弃掉其中的随机数据,再进行FEC解码,最后使用XOR算法解密,获得所需要的关键代码和/或关键数据。这种方法增加了破解的难度,大幅提升了算法的安全性,尤其适合于算力有限的MCU。

进一步地,在对所述第一中间数据进行FEC编码,以获取第二中间数据,包括:

对所述第一中间数据进行FEC编码,以获取编码数据,其中,所述编码数据的数据长度为m;

在所述编码数据的m位数据中随机选择其中的n位数据,并将其替换为随机数,以获取第二中间数据,其中,n

在该实施例中,在进行FEC编码(例如采用Reed-solomon编码)后,所得到编码数据可标记为M,其数据位长度记为m,则编码数据M中的冗余数据的数据长度c为:c=m-l,该冗余数据能够纠错的数据位长度记为n,显然有n

本发明还构造一种电子设备,该电子设备包括MCU、FLASH,其中,FLASH用于存储固件密文,其中,所述固件密文是在电子设备的产测阶段,产测工具以所述MCU的ID为密钥,对所述MCU固件的关键代码和/或关键数据进行加密所生成的;MCU用于在电子设备的使用阶段,若需要运行所述关键代码或使用所述关键数据,则以自身ID为密钥,对所述FLASH中所存储的所述固件密文进行解密,以获取所述关键代码或所述关键数据,并运行所述关键代码或使用所述关键数据。

进一步地,本发明的电子设备还包括RAM,而且,MCU用于在获取到所述关键代码或所述关键数据之后,在所述RAM中随机选择一存储地址,并将所述关键代码或所述关键数据存储至所述存储地址。

进一步地,MCU还用于在判断所述关键代码的当前运行次数或所述关键数据的当前使用次数达到预设次数值时,对RAM中所存储的解密后的所述关键代码或所述关键数据进行清除。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何纂改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

相关技术
  • 电子设备及其MCU固件保护方法
  • 固件保护方法及装置、电子设备
技术分类

06120113283878