固件完整性验证方法、装置、电子设备和存储介质与流程
- 国知局
- 2024-10-21 14:56:38
本公开涉及计算机安全,特别涉及一种固件完整性验证方法、装置、电子设备和存储介质。
背景技术:
1、固件是计算机等电子设备启动时连接硬件和操作系统的底层代码。为了避免电子设备运行过程中固件内容被无意或有意破坏,比较安全的方式是在执行bootloader(启动装载)时对将要加载的固件进行完整性检查,确认固件是完整没有被修改过之后再进行下一步的加载。其中,bootloader是系统在加电后执行的第一段代码,将写在掉电不丢失器件里的固件加载到内存中运行的一个小程序。
2、完整性验证的方法常用的有checksum(检验和)、crc(cyclic redundancy check,循环冗余校核)、md5(message-digest algorithm 5,信息摘要算法5)等。这些方法都需要对完整的固件数据进行计算,数据访问量和数据计算量都比较大,即使有些soc(system onchip,片上系统)有专用硬件进行辅助计算,但是数据访问量仍然无法下降。因此,现有方法在时间和成本上都存在问题,特别是对精简设计的低成本soc而言因为其精简设计并且缺少专用硬件辅助,更是劣势明显。
技术实现思路
1、有鉴于此,本公开提供一种固件完整性验证方法、装置、电子设备和存储介质,以提升固件完整性验证效率,实现利用较少硬件资源在较短时间内完成固件完整性验证的目的。
2、本公开的技术方案是这样实现的:
3、根据本公开实施例的一方面,提供一种固件完整性验证方法,包括:
4、获取待验证固件;
5、根据预设的反向终点偏移量,得到所述待验证固件中的反向终点字节位置;
6、根据固件后段数据长度、预设的摘要数据长度和预设的位置参考数列,从所述位置参考数列中选出至少一个字节位置偏移量,其中,所述固件后段数据长度为从所述反向终点字节位置到所述待验证固件尾部字节位置的数据长度,所述位置参考数列由多个字节位置偏移量组成;
7、根据所述反向终点字节位置和所述至少一个字节位置偏移量,得到所述待验证固件中的反向起点字节位置;
8、从所述反向起点字节位置向所述反向终点字节位置的方向,根据所述至少一个字节位置偏移量,从所述待验证固件中得到摘要数据;
9、将所述摘要数据与预设的验证数据进行比较,根据比较结果确定所述待验证固件是否完整。
10、在一种可能实施方式中,所述根据预设的反向终点偏移量,得到所述待验证固件中的反向终点字节位置,包括:
11、将从所述待验证固件的头部向所述待验证固件的尾部方向偏移所述反向终点偏移量的字节位置,确定为所述反向终点字节位置。
12、在一种可能实施方式中,所述根据固件后段数据长度、预设的摘要数据长度和预设的位置参考数列,从所述位置参考数列中选出至少一个字节位置偏移量,包括:
13、从预设的位置参考数列中,按照字节位置偏移量从小到大的顺序,确定出第一数量字节位置偏移量,所述第一数量等于所述摘要数据的长度;
14、在所述第一数量字节位置偏移量中的最大字节位置偏移量小于等于所述固件后段数据长度的情况下,从所述位置参考数列中选出所述第一数量字节位置偏移量,并将所述第一数量字节位置偏移量确定为所述至少一个字节位置偏移量;
15、在所述第一数量字节位置偏移量中的最大字节位置偏移量大于所述固件后段数据长度的情况下,从所述位置参考数列中,按照字节位置偏移量从小到大的顺序,选出第二数量字节位置偏移量,并将所述第二数量字节位置偏移量确定为所述至少一个字节位置偏移量,其中,所述第二数量字节位置偏移量当中的最大字节位置偏移量小于等于所述固件后段数据长度。
16、在一种可能实施方式中,所述位置参考数列为斐波那契数列、2的整数幂数列或者素数数列。
17、在一种可能实施方式中,所述根据所述反向终点字节位置和所述至少一个字节位置偏移量,得到所述待验证固件中的反向起点字节位置,包括:
18、将从所述反向终点字节位置向所述待验证固件的尾部偏移所述至少一个字节位置偏移量中的最大字节位置偏移量的字节位置,确定为所述反向起点字节位置。
19、在一种可能实施方式中,所述从所述反向起点字节位置向所述反向终点字节位置的方向,根据所述至少一个字节位置偏移量,从所述待验证固件中得到摘要数据,包括:
20、从所述至少一个字节位置偏移量中选取最小字节位置偏移量,从所述反向起点字节位置开始向所述反向终点字节位置的方向偏移所述最小字节位置偏移量,从偏移后所在的字节位置处得到所述待验证固件的片段数据;
21、从所述至少一个字节位置偏移量中选取次小字节位置偏移量,从所述反向起点字节位置开始向所述反向终点字节位置的方向偏移所述次小字节位置偏移量,从偏移后所在的字节位置处得到所述待验证固件的片段数据;
22、以此类推,直到从所述至少一个字节位置偏移量中选取最大字节位置偏移量,从所述反向起点字节位置开始向所述反向终点字节位置的方向偏移所述最大字节位置偏移量,从偏移后所在的字节位置处得到所述待验证固件的片段数据;
23、将得到的所有片段数据组成所述摘要数据。
24、在一种可能实施方式中,在从所述待验证固件中得到摘要数据的长度小于所述预设的摘要数据长度的情况下,根据预设的填充规则,将从所述待验证固件中得到摘要数据填充至所述预设的摘要数据长度。
25、在一种可能实施方式中,所述根据比较结果确定所述待验证固件是否完整,包括:
26、若比较结果为所述摘要数据与所述验证数据完全一致,则所述待验证固件完整;
27、若比较结果为所述摘要数据与所述验证数据不一致,则所述待验证固件不完整或者被篡改。
28、根据本公开实施例的另一方面,提供一种固件完整性验证装置,包括:
29、固件获取模块,被配置为执行获取待验证固件;
30、反向终点确定模块,被配置为执行根据预设的反向终点偏移量,得到所述待验证固件中的反向终点字节位置;
31、字节位置偏移量获取模块,被配置为执行根据固件后段数据长度、预设的摘要数据长度和预设的位置参考数列,从所述位置参考数列中选出至少一个字节位置偏移量,其中,所述固件后段数据长度为从所述反向终点字节位置到所述待验证固件尾部字节位置的数据长度,所述位置参考数列由多个字节位置偏移量组成;
32、反向起点确定模块,被配置为执行根据所述反向终点字节位置和所述至少一个字节位置偏移量,得到所述待验证固件中的反向起点字节位置;
33、摘要数据获取模块,被配置为执行从所述反向起点字节位置向所述反向终点字节位置的方向,根据所述至少一个字节位置偏移量,从所述待验证固件中得到摘要数据;
34、数据比较模块,被配置为执行将所述摘要数据与预设的验证数据进行比较,根据比较结果确定所述待验证固件是否完整。
35、根据本公开实施例的另一方面,提供一种电子设备,包括:
36、处理器;
37、用于存储所述处理器的可执行指令的存储器;
38、其中,所述处理器被配置为执行所述可执行指令,以实现如上述任一实施方式所述的固件完整性验证方法。
39、根据本公开实施例的另一方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的至少一条指令被电子设备的处理器执行时,使得所述电子设备能够实现如上述任一实施方式所述的固件完整性验证方法。
40、从上述方案可以看出,本公开的固件完整性验证方法、装置、电子设备和存储介质,针对固件篡改的特点,利用反向终点偏移量而绕过待验证固件的前段范围的数据区域,并根据固件后段数据长度、摘要数据长度和位置参考数列,得到待验证固件中的反向起点字节位置,进而在反向起点字节位置和反向终点字节位置之间构成所要获取摘要数据的数据区间,因为在固件产生增减等篡改情况时,从增减位置开始后面的数据段中的各个字节位置中的数据将会相对于篡改之前出现非常大的变化,因此,篡改后出现非常大的变化的字节位置一定会落在反向起点字节位置和反向终点字节位置之间的数据区间,并且越靠近反向终点字节位置的字节位置中的数据内容的变化越大,基于此,在本公开的优选方案中,位置参考数列采用例如斐波那契数列、2的整数幂数列的形式,利用其相邻数列元素之间的差值随数列元素的增加而增加的特点而在靠近反向起点字节位置附近增加用于选取片段数据的字节位置的密度,进而使得由所选取的各个片段数据组成的摘要数据能够反应出待验证固件的特点并且能够确摘要数据的唯一性,一旦待验证固件被篡改,其摘要数据将会发生非常大的变化,从而有利于摘要数据与验证数据之间的比对。同时,由于摘要数据是从待验证固件中的部分字节位置当中获取的数据所组成,而不是通过对完整的待验证固件进行计算而得到,因此缩短了获得摘要数据的时间,提升了固件完整性验证效率,并且本公开仅是从待验证固件中的部分字节位置当中获取数据,因此与对完整的待验证固件进行计算而得到摘要数据的方式相比,本公开的技术方案所消耗的硬件资源极少。因此,利用本公开技术方案,能够有效提升固件完整性验证效率,实现了利用较少硬件资源在较短时间内完成固件完整性验证的目的。
本文地址:https://www.jishuxx.com/zhuanli/20241021/319873.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。