CN114595460A - 签名固件校验方法、设备及计算机可读介质 - Google Patents
签名固件校验方法、设备及计算机可读介质 Download PDFInfo
- Publication number
- CN114595460A CN114595460A CN202210027834.6A CN202210027834A CN114595460A CN 114595460 A CN114595460 A CN 114595460A CN 202210027834 A CN202210027834 A CN 202210027834A CN 114595460 A CN114595460 A CN 114595460A
- Authority
- CN
- China
- Prior art keywords
- firmware
- information
- type
- signature
- upgraded
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了签名固件校验方法、设备和计算机可读介质,对待升级固件进行签名,获取设备树节点中的公钥信息并读取待升级固件中的魔幻数字段,根据魔幻数字段确定对应的待升级固件中的固件类型,并根据公钥信息对待升级固件进行与固件类型对应的签名校验。因此根据待升级固件头部的魔幻数字段确定固件类型,并根据公钥对该类型的固件进行对应的签名校验,能够对待升级固件中的不同固件类型进行针对性的校验,提高签名校验的准确性。
Description
技术领域
本发明涉及嵌入式技术领域,特别涉及签名固件校验方法、设备及计算机可读介质。
背景技术
目前,支持安全启动的设备需要对固件进行签名,并在启动过程中对固件进行校验。然而,现有的FOTA(Firmware Over-The-Air,无线升级)固件升级方案对于签名固件通常都是直接升级。在设备硬件(如SoC芯片)已经熔断的情况下,如果固件没有签名或者使用错误密钥造成的签名出错,将会导致升级后设备无法启动,因此对固件的签名校验尤为重要。
发明内容
本发明所要解决的技术问题是提供签名固件校验方法、设备及计算机可读介质,其能够提高签名校验的准确性。
在本发明的一个方面,提供一种签名固件校验方法。该方法包括步骤:对待升级固件进行签名;获取设备树节点中的公钥信息,并读取待升级固件中的魔幻数字段;根据所述魔幻数字段,确定对应的所述待升级固件中的固件类型,以及根据所述公钥信息对所述待升级固件进行与固件类型相对应的签名校验。
在本发明的另一方面,提供一种签名固件校验设备。该设备包括存储器,被配置为存储计算机程序;以及处理器,被配置为执行所述计算机程序以执行上述的签名固件校验方法。
在本发明的又一方面,提供一种计算机可读介质。该介质上存储有计算机程序,所述计算机程序被处理器执行以实现上述的签名固件校验方法。
本发明的有益效果在于:对待升级固件进行签名,获取设备树节点中的公钥信息并读取待升级固件中的魔幻数字段,根据魔幻数字段确定对应的待升级固件中的固件类型,并根据公钥信息对待升级固件进行与固件类型对应的签名校验。因此根据待升级固件头部的魔幻数字段确定固件类型,并根据公钥对该类型的固件进行对应的签名校验,能够对待升级固件中的不同固件类型进行针对性的校验,提高签名校验的准确性。
附图说明
图1为根据本发明实施例的签名固件校验方法的流程图;
图2为对启动引导程序固件和可信操作***固件进行校验的流程图;
图3为对启动固件进行校验的流程图;
图4为对升级模式固件进行校验的流程图;
图5为根据本发明实施例的签名固件校验设备的框图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
在已有技术中,在设备硬件已经熔断的情况下,如果固件没有签名或者使用错误密钥造成的签名出错,将会导致升级后设备无法启动,因此需要提高固件签名检验的准确性。
为了解决至少上述技术问题,本公开提供了用于签名固件校验方法。根据本公开,对待升级固件进行签名,获取设备树节点中的公钥信息,并读取待升级固件中的魔幻数字段;根据魔幻数字段,确定对应的待升级固件中的固件类型,根据公钥信息对待升级固件进行与固件类型相对应的签名校验。以此方式,根据本公开的实施例能够对待升级固件中的不同固件类型进行针对性的校验,提高签名校验的准确性。
下文中,将参考具体实施例并且结合附图描述根据本公开的技术方案。
图1是示出根据本公开的实施例的签名固件校验方法100的流程图。参照图1,该方法100包括以下步骤102至步骤106。
在步骤102,对待升级固件进行签名。待升级固件包括启动引导程序固件、可信操作***固件、启动固件、升级模式固件的固件中的一个或者多个。在一些实施例中,根据预设的数字签名算法生成一对公钥和私钥,依次获取待升级固件中的每一个固件,并根据待升级固件头部的魔幻数字段确定每一个固件的类型,通过每一个固件的类型确定每一个固件所需的签名方法并用私钥进行签名,最后将公钥信息存储至设备树节点中。以此方式,能够对每一种类型的待升级固件的固件进行针对性的签名,保证了固件签名的安全性。
在步骤104,获取设备树节点中的公钥信息。
在步骤106,读取待升级固件中的魔幻数字段。
在步骤108,根据所述魔幻数字段,确定对应的待升级固件中的固件类型。
在步骤110,根据公钥信息对待升级固件进行与固件类型相对应的签名校验。
在一些实施例中,如果魔幻数字段对应的是启动引导程序固件的第一类型或第二类型,则在进行签名校验时先将启动引导程序固件读取到内存中。在启动引导程序固件有签名标记时,第一类型的固件根据公钥信息读取数字签名信息,第二类型的固件根据数字签名的长度字段读取数字签名信息,并对启动引导程序固件的头部中的信息计算消息摘要,根据消息摘要、使用公钥信息对数字签名信息进行校验。以此方式,能够对不同类型的启动引导程序固件进行适应性校验。
在一些实施例中,如果魔幻数字段对应的是可信操作***固件的第一类型或第二类型,则在进行签名校验时先将可信操作***固件读取到内存中。在可信操作***固件有签名标记时,第一类型的固件根据数字签名的长度字段读取数字签名信息,并对可信操作***固件的头部中的信息计算消息摘要,根据消息摘要、使用公钥信息对数字签名信息进行校验,第二类型的固件对可信操作***固件中起始地址到数字签名信息的偏移地址之间的数据计算消息摘要,根据数字签名信息的偏移地址读取数字签名信息,并根据消息摘要、使用公钥信息对数字签名信息进行校验。以此方式,能够对不同类型的启动固件进行适应性校验。
在一些实施例中,如果魔幻数字段对应的是启动固件的Android boot类型,则当待升级固件存在镜像文件时,从镜像文件中获取启动固件相关的校验信息进行校验,或者从启动固件尾部获取校验信息进行校验。当不存在镜像文件时,直接获取待升级固件中的启动固件。之后将启动固件读取到内存中,若所述启动固件有签名标记,则用公钥对启动固件中被签名的内容进行重签名,根据签名结果进行校验。以此方式,能够对不同类型的启动固件进行适应性校验。
在一些实施例中,如果魔幻数字段对应的是升级模式固件的Android boot类型,则当待升级固件存在镜像文件时,从镜像文件中获取升级模式固件相关的校验信息进行校验,或者从升级模式固件尾部获取校验信息进行校验。当不存在镜像文件时,直接获取待升级固件中的升级模式固件。之后将升级模式固件读取到内存中,若所述升级模式固件有签名标记,则用公钥对升级模式固件中被签名的内容进行重签名,根据签名结果进行校验。以此方式,能够对不同类型的升级模式固件进行适应性校验。
在一些实施例中,如果魔幻数字段对应的固件是FIT格式,则当固件头部存在签名数据所对应的FDT节点时,按照FIT固件校验方法对FIT格式的固件进行校验。以此方式,能够对预设格式的固件进行适应性校验,提高固件签名检验的准确性和可靠性。
根据本公开的实施例,通过签名固件校验方法,能够对待升级固件中的不同固件类型进行针对性的校验。以此方式,提高签名校验的准确性。
下文中,将通过示例描述根据本发明实施例的签名固件校验方法及设备的应用场景。
在对待升级的固件进行签名时,待升级的固件包括启动引导程序固件、可信操作***固件、启动固件、升级模式固件中的一个或者多个。
先根据选定的数字签名算法生成一对公私钥,并对待校验的固件二进制文件进行签名。
如果需要对启动引导程序固件进行签名,启动引导程序固件根据固件头部的魔幻数的不同可以分为三种类型:类型一、类型二和类型三。其中一级引导程序固件必须是类型一。
对于类型一来说,首先将数字签名算法和公钥参数信息写入固件的特定位置,同时将固件头部的签名标记(如SignFlag)字段设置为签名标记,然后将整个固件使用私钥进行签名,将签名信息写入固件尾部。
对于类型二来说,固件头部的最后三个部分分别是消息摘要算法类型字段、消息摘要字段(如hash)和一块保留区域,消息摘要字段保存的是该字段之前所有固件头部信息根据消息摘要算法类型指明的算法计算的消息摘要。头部最后面的保留区域部分包括三方面内容,分别是固件签名标记、数字签名信息长度和数字签名信息。
类型二固件签名过程中,首先将固件头部的签名标记(如SignFlag)字段设置为签名标记,根据数字签名算法类型设置固件头部的数字签名信息长度字段的值,最后使用私钥对固件头部的消息摘要字段(如hash)进行签名,并将签名信息写入固件头部的数字签名信息区域。
对于类型三来说,固件是FIT格式,则按照uboot FIT签名方法对FIT格式的固件进行签名。
如果需要对可信操作***固件进行签名,可信操作***固件根据固件头部的魔幻数的不同可以分为两种类型:类型一和类型二。
对于类型一来说,固件头部的最后三个部分分别是消息摘要算法类型字段、消息摘要字段(如hash)和一块保留区域,消息摘要字段保存的是该字段之前所有固件头部信息根据消息摘要算法类型指明的算法计算的消息摘要。头部最后面的保留区域部分包括三方面内容,分别是固件签名标记、数字签名信息长度和数字签名信息。
类型一固件签名过程中,首先将固件头部的签名标记(如SignFlag)字段设置为签名标记,根据数字签名算法类型设置固件头部的数字签名信息长度字段的值,最后使用私钥对固件头部的消息摘要字段(如hash)进行签名,并将签名信息写入固件头部的数字签名信息区域。
对于类型二来说,该类型的固件包含多个子固件(如ATF固件和TEE OS固件),其固件布局为:基本头部信息+子固件元信息+数字签名信息+各个子固件二进制数据。
其中“基本头部信息”包括固件签名标记、消息摘要算法类型字段、数字签名算法类型字段和数字签名信息偏移地址字段。“子固件元信息”包括各个子固件的消息摘要和加载地址等信息。
类型二固件签名过程中,首先将固件头部的签名标记(如SignFlag)字段设置为签名标记,分别设置消息摘要算法类型字段、数字签名算法类型字段和数字签名信息偏移地址字段。然后对数字签名信息偏移地址字段之前的所有信息(即固件中的“基本头部信息+子固件元信息”)按照消息摘要算法类型字段指定的算法计算消息摘要,最后使用私钥对计算出的消息摘要进行签名,并将签名信息写入数字签名信息偏移地址字段指明的位置。
如果需要对启动固件(如boot.img)进行签名,启动固件根据固件头部的魔幻数的不同可以分为两种类型:Android格式和FIT格式。
对于Android格式的固件有两种签名方式:方式一和方式二。
方式一:使用标准Android Verity对固件进行签名。
方式二:首先在启动固件头部(如BOOT HEADER)保留字段的某个固定位置写入签名标记,然后取启动固件头部(如BOOT HEADER)中每次编译都会发生变化的字段内容(如id字段)作为被签名的内容,最后使用私钥对该被签名的内容进行签名,并将签名信息写入启动固件头部(如BOOT HEADER)保留字段的某个固定位置。
对于FIT格式的启动固件来说,按照uboot FIT签名方法对FIT格式的固件进行签名。
如果需要对升级模式固件(如recovery.img)进行签名,升级模式固件根据固件头部的魔幻数的不同可以分为两种类型:Android格式和FIT格式。
对于Android格式的固件有两种签名方式:方式一和方式二。
方式一:使用标准Android Verity对固件进行签名。
方式二:首先在启动固件头部(如BOOT HEADER)保留字段的某个固定位置写入签名标记,然后取启动固件头部(如BOOT HEADER)中每次编译都会发生变化的字段内容(如id字段)作为被签名的内容,最后使用私钥对该被签名的内容进行签名,并将签名信息写入启动固件头部(如BOOT HEADER)保留字段的某个固定位置。
对于FIT格式的升级模式固件来说,按照uboot FIT签名方法对FIT格式的固件进行签名。
图2是示出对启动引导程序固件和可信操作***固件进行校验的流程图,具体执行步骤202至步骤212。
在步骤202,检查待校验的固件是否存在,如果不存在,设置校验结果标记为成功、并返回校验结果标记。如果存在,执行步骤204。
在步骤204,获取设备树(dtb)节点的公钥信息(如/sys/firmware/devicetree/base/public-key/data),包括所使用的公钥算法和公钥参数。如果公钥信息获取失败,设置校验结果标记为成功、并返回校验结果标记。如果成功获取到公钥信息,则执行步骤206。
在步骤206,读取固件头部的魔幻数字段,如果对应的是启动引导程序固件类型一,则执行步骤2082的启动引导程序固件校验,如果对应的是启动引导程序固件类型二,则执行步骤2084的启动引导程序固件校验;如果魔幻数对应的是可信操作***固件类型一,则执行步骤2102的可信操作***固件校验,如果魔幻数对应的是可信操作***固件类型二,则执行步骤2104的可信操作***固件校验;如果是其他值,则执行步骤212。
在步骤2082,如果固件头部的魔幻数字段对应的是启动引导程序类型一,则将待校验的启动引导程序固件完整读取到Memory(内存)中,检查固件头部的签名标记(如SignFlag)字段,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,则根据步骤204获取到的公钥算法类型,读取启动引导程序固件末尾固定长度的数字签名信息,然后获取启动引导程序固件除末尾数字签名信息之外的内容,并使用步骤204获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤2084,如果固件头部的魔幻数字段对应的是启动引导程序类型二,则将待校验的启动引导程序固件的头部读取到Memory中,检查固件头部的签名标记(如SignFlag)字段,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,则读取固件头部的数字签名长度字段,然后根据该数字签名长度字段的取值,读取数字签名长度字段之后指定长度的数字签名信息。根据固件头部的消息摘要算法类型字段对固件头部的消息摘要字段之前的所有固件头部信息计算消息摘要,最后根据计算出的消息摘要,并使用步骤204获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤2102,如果固件头部的魔幻数字段对应的是可信操作***固件类型一,则将待校验的可信操作***固件的头部读取到Memory中,检查固件头部的签名标记(如SignFlag)字段,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,则读取固件头部的数字签名长度字段,然后根据该数字签名长度字段的取值,读取数字签名长度字段之后指定长度的数字签名信息。根据固件头部的消息摘要算法类型字段对固件头部的消息摘要字段之前的所有固件头部信息计算消息摘要,最后根据计算出的消息摘要,并使用步骤204获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤2104,如果固件头部的魔幻数字段对应的是可信操作***固件类型二,则将待校验的可信操作***固件的头部读取到Memory中,检查固件头部的签名标记(如SignFlag)字段,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,则读取固件头部的消息摘要算法类型字段、数字签名算法类型字段和数字签名信息偏移地址字段,根据数字签名信息偏移地址字段的取值,读取可信操作***固件最开始0x0位置到数字签名信息偏移地址之间的所有数据到缓冲区,根据消息摘要算法类型字段指明的算法类型(如SHA-256)对上述读取到的数据(即缓冲区中的数据)计算对应的消息摘要。根据数字签名算法类型字段指明的算法类型(如RSA-2048)确定数字签名信息的长度,定位到待校验的可信操作***固件到数字签名信息偏移地址字段所指明的位置,读取确定长度的数字签名信息。最后根据上述计算的消息摘要,并使用步骤204获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤212,如果固件头部的魔幻数字段对应的是FIT(Flattened Image Tree)格式的固件,则检查固件头部中是否存在签名数据所对应的FDT节点(如signature),如果不存在,说明固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果存在签名数据所对应的FDT节点,则固件有签名,此时按照FIT固件校验方法对FIT格式的固件进行校验。如果校验成功则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果固件头部的魔幻数字段对应的是其他格式的固件,则设置校验结果标记为成功、并返回校验结果标记。
图3是示出对启动固件进行校验的流程图,具体执行步骤302至步骤310。
在步骤302,检查待校验的固件是否存在,如果不存在,设置校验结果标记为成功、并返回校验结果标记。如果存在,执行步骤304。
在步骤304,获取设备树(dtb)节点的公钥信息(如/sys/firmware/devicetree/base/public-key/data),包括所使用的公钥算法和公钥参数。如果公钥信息获取失败,设置校验结果标记为成功、并返回校验结果标记。如果成功获取到公钥信息,则执行步骤306。
在步骤306,读取固件头部的魔幻数字段,如果对应的是Android Boot固件类型,则执行步骤308的启动固件校验;如果魔幻数对应的是FIT(Flattened Image Tree)格式的固件,则执行如下步骤310的启动固件校验;如果是其他值,则设置校验结果标记为成功、并返回校验结果标记。
在步骤308,如果魔幻数对应的是Android Boot类型启动固件的校验,具体执行步骤3082至步骤3086。
在步骤3082,如果待升级固件中存在vbmeta镜像(如vbmeta.img),则首先将vbmeta镜像(如vbmeta.img)从待升级固件中提取出来,以临时文件的形式存储到Memory中或者可读写文件***分区中。然后检查vbmeta镜像是否包括启动固件(如boot.img)相关的校验信息,如果存在,但是设备处于非锁定状态,则设置校验结果标记为成功并返回,否则根据vbmeta镜像中的校验信息对启动固件(如boot.img)进行校验,如果校验成功,则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果vbmeta镜像没有包含启动固件(如boot.img)相关的校验信息,并且设备没有熔断,则设置校验结果标记为成功并返回;如果设备处于熔断状态,则执行步骤3084。
在步骤3084,如果待升级固件中不存在vbmeta镜像(如vbmeta.img),则检查启动固件(如boot.img)尾部是否存在校验信息,如果存在,但是设备处于非锁定状态,则设置校验结果标记为成功并返回,否则根据启动固件(如boot.img)尾部中的校验信息对启动固件(如boot.img)进行校验,如果校验成功,则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果启动固件(如boot.img)尾部没有包含校验信息,并且设备没有熔断,则设置校验结果标记为成功并返回;如果设备处于熔断状态,则执行步骤3086。
在步骤3086,将待校验启动固件Android Boot头部信息读取到Memory中,检查固件头部保留字段中的签名标记(如SignFlag)信息,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,继续读取固件头部保留字段中签名标记信息之后的数字签名信息长度信息,然后根据该数字签名长度字段的取值,继续读取固件头部保留字段中数字签名长度信息之后指定长度的数字签名信息。最后获取固件头部的被签名内容(如id字段),并使用步骤304获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤310,如果魔幻数对应的是FIT类型启动固件的校验,则检查固件头部中是否存在签名数据所对应的FDT节点(如signature),如果不存在,说明固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果存在签名数据所对应的FDT节点,则固件有签名,此时按照FIT固件校验方法对FIT格式的启动固件进行校验。
图4是示出对升级模式固件进行校验的流程图。具体执行步骤402至步骤410。
在步骤402,检查待校验的固件是否存在,如果不存在,设置校验结果标记为成功、并返回校验结果标记。如果存在,执行步骤404。
在步骤404,获取设备树(dtb)节点的公钥信息(如/sys/firmware/devicetree/base/public-key/data),包括所使用的公钥算法和公钥参数。如果公钥信息获取失败,设置校验结果标记为成功、并返回校验结果标记。如果成功获取到公钥信息,则执行步骤406。
在步骤406,读取固件头部的魔幻数字段,如果对应的是Android Boot固件类型,则执行步骤408的升级模式固件校验;如果魔幻数对应的是FIT(Flattened Image Tree)格式的固件,则执行步骤410的升级模式固件校验;如果是其他值,则设置校验结果标记为成功、并返回校验结果标记。
在步骤408,如果魔幻数对应的是Android Boot类型升级模式固件的校验,具体执行步骤4082至步骤4086。
在步骤4082,如果待升级固件中存在vbmeta镜像(如vbmeta.img)。则首先将vbmeta镜像(如vbmeta.img)从待升级固件中提取出来,以临时文件的形式存储到Memory中或者可读写文件***分区中。然后检查vbmeta镜像是否包括升级模式固件(如recovery.img)相关的校验信息,如果存在,但是设备处于非锁定状态,则设置校验结果标记为成功并返回,否则根据vbmeta镜像中的校验信息对升级模式固件(如recovery.img)进行校验,如果校验成功,则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果vbmeta镜像没有包含升级模式固件(recovery.img)相关的校验信息,检查升级模式固件(如recovery.img)尾部是否存在校验信息,如果存在,但是设备处于非锁定状态,则设置校验结果标记为成功并返回,否则根据升级模式固件(如recovery.img)尾部中的校验信息对升级模式固件(如recovery.img)进行校验,如果校验成功,则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果升级模式固件(如recovery.img)尾部也没有包含校验信息,并且设备没有熔断,则设置校验结果标记为成功并返回;如果设备处于熔断状态,则执行步骤4806。
在步骤4084,如果待升级固件不存在vbmeta镜像(如vbmeta.img),
检查升级模式固件(如recovery.img)尾部是否存在校验信息,如果存在,但是设备处于非锁定状态,则设置校验结果标记为成功并返回,否则根据升级模式固件(如recovery.img)尾部中的校验信息对升级模式固件(如recovery.img)进行校验,如果校验成功,则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
如果升级模式固件(如recovery.img)尾部没有包含校验信息,并且设备没有熔断,则设置校验结果标记为成功并返回;如果设备处于熔断状态,则执行步骤4806。
在步骤4086,将待校验启动固件Android Boot头部信息读取到Memory中,检查固件头部保留字段中的签名标记(如SignFlag)信息,如果固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果固件有签名,继续读取固件头部保留字段中签名标记信息之后的数字签名信息长度信息,然后根据该数字签名长度字段的取值,继续读取固件头部保留字段中数字签名长度信息之后指定长度的数字签名信息。最后获取固件头部的被签名内容(如id字段),并使用步骤404获取到的公钥算法和公钥参数对数字签名信息进行校验,看签名信息是否匹配,如果签名信息匹配则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
在步骤410,如果魔幻数对应的是FIT类型升级模式固件的校验,则检查固件头部中是否存在签名数据所对应的FDT节点(如signature),如果不存在,说明固件没有签名,设置校验结果标记为失败、并返回校验结果标记。如果存在签名数据所对应的FDT节点,则固件有签名,此时按照FIT固件校验方法对FIT格式的恢复模式或升级模式固件进行校验。如果校验成功则设置校验结果标记为成功并返回,否则设置校验结果标记为失败并返回。
根据本发明的另一方面,图5是示出根据本发明实施例的签名固件校验设备500的示意图。参照图5,该电子设备500包括存储器502、处理器504以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上面描述的签名固件校验方法。
根据本发明的又一方面,提供了一种计算机可读介质。该计算机可读介质上存储有计算机程序,该计算机程序被处理器执行以实现如上面描述的签名固件校验方法。
综上所述,在本发明提供的签名固件校验方法、设备及计算机可读介质中,对待升级固件进行签名,其中待升级固件中包括启动引导程序固件、可信操作***固件、启动固件、升级模式固件的固件中的一个或者多个。此外,获取设备树节点中的公钥信息并读取待升级固件头部的魔幻数字段,根据魔幻数字段确定对应的待升级固件中的固件类型,并根据公钥信息对待升级固件进行与固件类型对应的签名校验。因此,根据待升级固件头部的魔幻数字段确定固件类型,并根据公钥对该类型的固件进行对应的签名校验,能够对待升级固件中的不同固件类型进行针对性的校验,提高签名校验的准确性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种签名固件校验方法,其特征在于,包括:
对待升级固件进行签名;
获取设备树节点中的公钥信息;
读取所述待升级固件中的魔幻数字段;
根据所述魔幻数字段确定对应的所述待升级固件中的固件类型;以及
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验。
2.根据权利要求1所述的签名固件校验方法,其特征在于,对待升级固件进行签名包括:
根据预设的数字签名算法生成一对公钥和私钥;
依次获取所述待升级固件中的每一个固件,根据所述待升级固件的头部的魔幻数字段确定每一个固件的类型,所述待升级固件包括启动引导程序固件、可信操作***固件、启动固件、升级模式固件的固件中的一个或者多个;
根据每一个固件的类型确定每一个固件所需的签名方法并使用所述私钥进行对应签名;
将与所述公钥相关联的公钥信息存储至设备树节点中。
3.根据权利要求1所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的启动引导程序固件是第一类型还是第二类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:
若所述启动引导程序固件是第一类型,则根据所述公钥信息读取数字签名信息,并使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配;以及
若所述启动引导程序固件是第二类型,则读取数字签名长度字段,并且根据所述数字签名长度字段读取数字签名信息,对所述启动引导程序固件的头部中的信息计算消息摘要,并根据所述消息摘要、使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配。
4.根据权利要求1所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的可信操作***固件是第一类型还是第二类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:
若所述可信操作***固件是第一类型,则读取数字签名长度字段,根据数字签名长度字段读取数字签名信息,对所述可信操作***固件的头部中的信息计算消息摘要,并根据所述消息摘要、使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配;以及
若所述可信操作***固件是第二类型,则对所述可信操作***固件中起始地址到数字签名信息的偏移地址之间的数据计算消息摘要,根据数字签名信息的偏移地址读取数字签名信息,并根据所述消息摘要、使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配。
5.根据权利要求1所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的启动固件是否为Android boot类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:
若所述启动固件是Android boot类型,则判断所述待升级固件是否存在镜像文件,若是,则从所述镜像文件中确定与启动固件相关的校验信息,并且根据所述校验信息对所述启动固件进行校验,否则,从所述启动固件的尾部确定是否存在校验信息,并且根据所述校验信息对所述启动固件进行校验;以及
若设备处于熔断状态,则读取数字签名信息长度信息,根据所述数字签名长度信息读取数字签名信息,并且使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配。
6.根据权利要求5所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的启动固件是否为FIT类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:若所述启动固件是FIT类型,则确定所述启动固件的头部是否存在与签名数据相对应的FDT节点,若是,则按照FIT固件校验方法对FIT格式的所述启动固件进行校验,否则,确定校验结果失败。
7.根据权利要求1所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的升级模式固件是否为Android boot类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:
若所述升级模式固件是Android boot类型,则判断所述待升级固件是否存在镜像文件,若是,则从所述镜像文件中确定与升级模式固件相关的校验信息,并且根据所述校验信息对所述升级模式固件进行校验,否则,从所述升级模式固件的尾部确定是否存在校验信息,并且根据所述校验信息对所述升级模式固件进行校验;以及
若设备处于熔断状态,则读取数字签名信息长度信息,根据所述数字签名长度信息读取数字签名信息,并且使用所述公钥信息对所述数字签名信息进行校验,以确定签名信息是否匹配。
8.根据权利要求7所述的签名固件校验方法,其特征在于,根据所述魔幻数字段确定对应的所述待升级固件中的固件类型包括:根据所述魔幻数字段确定所述待升级固件中的升级模式固件是否为FIT类型,
根据所述公钥信息对所述待升级固件进行与所述固件类型相对应的签名校验包括:若所述升级模式固件是FIT类型,则确定所述升级模式固件的头部是否存在与签名数据相对应的FDT节点,若是,则按照FIT固件校验方法对FIT格式的所述升级模式固件进行校验,否则,确定校验结果失败。
9.一种签名固件校验设备,包括:
存储器,被配置为存储计算机程序;以及
处理器,被配置为执行所述计算机程序以执行根据权利要求1至8中任意一项所述的签名固件校验方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现根据权利要求1至8中任意一项所述的签名固件校验方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210027834.6A CN114595460A (zh) | 2022-01-11 | 2022-01-11 | 签名固件校验方法、设备及计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210027834.6A CN114595460A (zh) | 2022-01-11 | 2022-01-11 | 签名固件校验方法、设备及计算机可读介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114595460A true CN114595460A (zh) | 2022-06-07 |
Family
ID=81803439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210027834.6A Pending CN114595460A (zh) | 2022-01-11 | 2022-01-11 | 签名固件校验方法、设备及计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114595460A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115514498A (zh) * | 2022-09-27 | 2022-12-23 | 四川长虹电器股份有限公司 | 快速检测安卓电视***镜像文件中签名信息的方法 |
-
2022
- 2022-01-11 CN CN202210027834.6A patent/CN114595460A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115514498A (zh) * | 2022-09-27 | 2022-12-23 | 四川长虹电器股份有限公司 | 快速检测安卓电视***镜像文件中签名信息的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7512749B2 (en) | Safe software revision for embedded systems | |
CN111538517B (zh) | 一种服务器固件升级方法、***及电子设备和存储介质 | |
CN107783776B (zh) | 固件升级包的处理方法及装置、电子设备 | |
WO2008154862A1 (fr) | Procédé de gestion pour un système de terminal intelligent et terminal intelligent | |
TW201025008A (en) | System of updating firmware and method thereof, and method of creating firmware | |
CN110704428A (zh) | 区块链的数据索引方法、装置、计算机设备和存储介质 | |
CN107861832B (zh) | 数据验证方法、装置及可读存储介质 | |
CN111813428A (zh) | 终端固件的升级方法、装置、电子设备及存储介质 | |
CN114595460A (zh) | 签名固件校验方法、设备及计算机可读介质 | |
CN111400267A (zh) | 记录日志的方法和装置 | |
CN101009888A (zh) | 安全启动方法及用于该方法的移动终端 | |
CN113238790B (zh) | 基于sd卡和eeprom的固件程序更新方法及*** | |
CN115220796A (zh) | 安全引导设备 | |
KR20080083512A (ko) | Fota 시스템 | |
CN114547620A (zh) | 签名固件升级方法、设备及计算机可读介质 | |
CN115828255A (zh) | 升级签名固件的方法、电子设备和存储介质 | |
US20070233940A1 (en) | Method for updating data in flash memory | |
CN111459496B (zh) | 一种防篡改的程序文件的生成方法、设备的升级方法 | |
CN116909659A (zh) | 区块链智能合约的执行方法、装置、设备及存储介质 | |
CN117009976A (zh) | 固件加载的控制方法、装置及芯片 | |
CN115686946A (zh) | 固件更新方法、固件更新装置和车辆 | |
CN108132793A (zh) | eMMC在线升级文件的发送、升级方法及装置 | |
JP2019096200A (ja) | 書き換え確認装置、書き換え確認方法及び書き換え確認コンピュータプログラム | |
CN111611000A (zh) | 一种高可靠的固件空中升级方法及*** | |
CN112905218B (zh) | 一种固件升级方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |