CN117235740B - 固件的启动方法、启动装置 - Google Patents
固件的启动方法、启动装置 Download PDFInfo
- Publication number
- CN117235740B CN117235740B CN202311495457.XA CN202311495457A CN117235740B CN 117235740 B CN117235740 B CN 117235740B CN 202311495457 A CN202311495457 A CN 202311495457A CN 117235740 B CN117235740 B CN 117235740B
- Authority
- CN
- China
- Prior art keywords
- firmware
- authentication
- code segment
- authentication function
- signature
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000006870 function Effects 0.000 claims description 107
- 238000004590 computer program Methods 0.000 claims description 4
- 238000005242 forging Methods 0.000 abstract description 5
- 238000004891 communication Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及通信安全技术领域,提供一种固件的启动方法、启动装置,所述方法包括:将固件划分成n个代码段;针对每个代码段分配签名数据地址空间和认证函数地址空间;在每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,并对应分配在认证函数地址空间中;在固件生成后,使用签名工具生成每个代码段的签名数据,将嵌入到对应的签名数据地址空间中;在固件启动时,固件中的认证函数与芯片中的安全模块通讯进行通信,当代码段的业务函数被调用时,代码段对应的认证函数对对应的签名数据进行签名认证。本发明对固件进行分段并在固件运行时触发分段身份认证,不仅可以提高固件运行的安全性,也可以使得伪造固件的难度大大提高。
Description
技术领域
本发明涉及通信安全技术领域,具体涉及一种固件的启动方法和一种固件的启动装置。
背景技术
嵌入式应用***包括固件和芯片,固件由于尺寸较大很多放置在外部存储单元中,攻击者通过读取外部存储单元中的固件内容,再复制硬件电路板即可伪造***,达到省去开发耗费、仿照产品的目的。
为防止上述方式的攻击,相关技术中,通过芯片平台提供额外的安全核来对固件进行身份认证。由于身份认证的过程对固件大小敏感,一些固件比较大的***(例如,固件尺寸大于500KBytes的***),直接进行身份认证启动耗时较大,因此一般把启动身份认证的过程放置在尺寸较小的boot程序(引导启动程序)中,仅对boot程序进行身份认证,这样可以降低启动耗时。但该方式给攻击者一个只需要替换boot程序就能绕过身份认证的方法,而且boot程序和应用程序相对比较独立,仿照boot程序比较容易,进而使攻击者很容易对固件进行仿造,降低了***的安全性。
发明内容
本发明为解决上述技术问题,本发明第一方面实施例提供了一种固件的启动方法。
本发明第二方面实施例提供了一种固件的启动装置。
本发明第三方面实施例提供了一种非临时性计算机可读存储介质。
本发明采用的技术方案如下:
本发明的第一方面实施例提出了一种固件的启动方法,包括以下步骤:将所述固件划分成n个代码段,n为正整数;针对每个代码段分配签名数据地址空间和认证函数地址空间;在所述每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将所述认证函数对应分配在所述认证函数地址空间中;在所述固件生成后,使用签名工具生成每个所述代码段的签名数据,将所述签名数据嵌入到对应的签名数据地址空间中;在所述固件启动时,所述固件中的认证函数与芯片中的安全模块进行通信,当所述代码段的业务函数被调用时,所述代码段对应的认证函数对代码段对应的签名数据进行签名认证。
本发明上述的固件的启动方法还具有如下附加技术特征:
根据本发明的一个实施例,每个所述认证函数在运行时,对应的代码段的签名认证只进行一次。
根据本发明的一个实施例,所述芯片的安全模块中存储有密钥。
根据本发明的一个实施例,在程序链接时,根据固件的业务功能运行地址空间将所述固件划分成n个代码段。
本发明的第二方面实施例提出了一种固件的启动装置,包括:划分模块,所述划分模块用于将所述固件划分成n个代码段,n为正整数;分配模块,所述分配模块用于针对每个代码段分配签名数据地址空间和认证函;第一生成模块,所述第一生成模块用于在所述每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将所述认证函数对应分配在所述认证函数地址空间中;第二生成模块,所述第二生成模块用于在所述固件生成后,使用签名工具生成每个所述代码段的签名数据,将所述签名数据嵌入到对应的签名数据地址空间中;认证模块,所述认证模块用于在所述固件启动时,所述固件中的认证函数与芯片中的安全模块进行通信,当所述代码段的业务函数被调用时,所述代码段对应的认证函数对代码段对应的签名数据进行签名认证。
本发明上述的固件的启动装置还具有如下附加技术特征:
根据本发明的一个实施例,每个所述认证函数在运行时,所述认证模块对对应的代码段的签名认证只进行一次。
根据本发明的一个实施例,所述芯片的安全模块中存储有密钥。
根据本发明的一个实施例,所述划分模块具体用于:在程序链接时,根据固件的业务功能运行地址空间将所述固件划分成n个代码段。
本发明第三方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明第一方面实施例所述的固件的启动方法。
本发明的有益效果:
本发明对固件进行分段并在固件运行时触发分段身份认证,不仅可以提高固件运行的安全性,也可以使得伪造固件的难度大大提高。
附图说明
图1是根据本发明一个实施例的固件的启动方法的流程图;
图2是根据本发明一个实施例的固件划分示意图;
图3是根据本发明一个实施例的固件的启动装置的方框示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是根据本发明一个实施例的固件的启动方法的流程图,如图1所示,该方法包括以下步骤:
S1,将固件划分成n个代码段,n为正整数。
根据本发明的一个实施例,在程序链接时,根据固件的业务功能运行地址空间将固件划分成n个代码段。
具体地,如图2所示,在程序链接时,根据固件业务功能的运行地址空间[_linker_text1_start,_linker_text1_end],[_linker_text2_start,_linker_text2_end]...[_linker_textn_start,_linker_textn_end]将固件划分为n个代码段TEXT1,TEXT2,...TEXTn。
S2,针对每个代码段分配签名数据地址空间和认证函数地址空间。
具体地,如图2所示,针对每个代码段TEXTi,i为大于等于1的整数,对应分配一个签名数据地址空间SIGSi和一个认证函数地址空间VFYSi。
S3,在每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将认证函数对应分配在认证函数地址空间中。
具体地,TEXT1,TEXT2...TEXTn代码段程序在运行时必须调用到业务函数,本发明对这些业务函数进行改造,在函数的入口处加入对对应代码段的签名认证功能,然后依次放置在VFYS1,VFYS2,...VFYSn等段的地址空间中,生成认证函数,这些认证函数在调用时会启用安全固件签名认证功能,进行身份认证。
S4,在固件生成后,使用签名工具生成每个代码段的签名数据,将签名数据嵌入到对应的签名数据地址空间中。
具体地,在应用固件生成后,每个代码段TEXTi的位置和大小固定,使用签名工具生成各个代码段的签名数据,嵌入到对应的签名数据地址空间SIGSi。
S5,在固件启动时,固件中的认证函数与芯片中的安全模块进行通信,当代码段的业务函数被调用时,代码段对应的认证函数对代码段对应的签名数据进行签名认证。
芯片的安全模块中存储有密钥。
具体地,对于带安全启动的芯片启动时,调用到带有认证功能的函数(也即认证函数)时,启用认证函数,固件中的认证函数通过与安全模块通讯,获取安全模块中存储的密钥实现对固件的签名认证,触发认证函数的身份认证功能。本发明中每个认证函数对对应的代码段进行身份认证,比如VFS1中的认证函数对TEXT1的固件进行签名认证。
需要说明的是,在本发明的实施例中,每个代码段的业务函数在运行过程中,每个认证函数在运行时,对应的代码段的签名认证只进行一次。即,针对每个代码段,即使该代码段被多次调用,仅进行一次签名认证即可。
采用本发明上述启动方法的固件在运行中,必然调用认证函数,针对盗版电路板启动时,如果启动安全模块,由于电路板主芯片内的密钥与原版(出厂芯片)不一致,会导致盗版电路板启动失败,如果不启动安全模块,必然导致认证失败进而导致盗版电路板启动失败。因此,本发明可以防止固件的盗版。如果针对每个代码段的身份认证进行仿造,那么仿造消耗超过了重新开发***的消耗,且仿造难度也较大。
综上,根据本发明实施例的固件的启动方法,对固件进行分段并在固件运行时触发分段身份认证,不仅可以提高固件运行的安全性,也可以使得伪造固件的难度大大提高。
与上述的固件的启动方法相对于,本发明还提出一种固件的启动装置。由于本发明的装置实施例与上述的方法实施例相对应,对于装置实施例中未披露的细节,可参见上述的方法实施例,本发明中不再进行赘述。
图3是根据本发明一个实施例的固件的启动装置的方框示意图,如图3所示,该装置包括:划分模块1、分配模块2、第一生成模块3、第二生成模块4和认证模块5。
其中,划分模块1用于将固件划分成n个代码段,n为正整数;分配模块2用于针对每个代码段分配签名数据地址空间和认证函;第一生成模块3用于在每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将认证函数对应分配在认证函数地址空间中;第二生成模块4用于在固件生成后,使用签名工具生成每个代码段的签名数据,将签名数据嵌入到对应的签名数据地址空间中;认证模块5用于在固件启动时,固件中的认证函数与芯片中的安全模块进行通信,当代码段的业务函数被调用时,代码段对应的认证函数对代码段对应的签名数据进行签名认证。
根据本发明的一个实施例,每个认证函数在运行时,认证模块对对应的代码段的签名认证只进行一次。
根据本发明的一个实施例,芯片的安全模块中存储有密钥。
根据本发明的一个实施例,划分模块具体用于:在程序链接时,根据固件的业务功能运行地址空间将固件划分成n个代码段。
根据本发明实施例的固件的启动装置,划分模块将固件划分成n个代码段,n为正整数,分配模块针对每个代码段分配签名数据地址空间和认证函,第一生成模在每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将认证函数对应分配在认证函数地址空间中,第二生成模块在固件生成后,使用签名工具生成每个代码段的签名数据,将签名数据嵌入到对应的签名数据地址空间中,认证模块在固件启动时,固件中的认证函数与芯片中的安全模块进行通信,当代码段的业务函数被调用时,代码段对应的认证函数对代码段对应的签名数据进行签名认证。由此,对固件进行分段并在固件运行时触发分段身份认证,不仅可以提高固件运行的安全性,也可以使得伪造固件的难度大大提高。
此外,本发明还提出一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的固件的启动方法。
根据本发明实施例的非临时性计算机可读存储介质,存储在其上的计算机程序被处理器执行时,将固件划分成n个代码段,n为正整数,针对每个代码段分配签名数据地址空间和认证函数地址空间,在每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将认证函数对应分配在认证函数地址空间中,在固件生成后,使用签名工具生成每个代码段的签名数据,将签名数据嵌入到对应的签名数据地址空间中,在固件启动时,固件中的认证函数与芯片中的安全模块进行通信,当代码段的业务函数被调用时,代码段对应的认证函数对代码段对应的签名数据进行签名认证,由此,不仅可以提高固件运行的安全性,也可以使得伪造固件的难度大大提高。
在本发明的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行***、装置或设备(如基于计算机的***、包括处理器的***或其他可以从指令执行***、装置或设备取指令并执行指令的***)使用,或结合这些指令执行***、装置或设备而使用。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (7)
1.一种固件的启动方法,其特征在于,包括以下步骤:
将所述固件划分成多个代码段,其中,在程序链接时,根据固件的业务功能运行地址空间将所述固件划分成多个代码段;
针对每个代码段分配签名数据地址空间和认证函数地址空间;
在每个所述代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将所述认证函数对应分配在所述认证函数地址空间中;
在所述固件生成后,使用签名工具生成每个所述代码段的签名数据,将所述签名数据嵌入到对应的签名数据地址空间中;
在所述固件启动时,所述固件中的认证函数与芯片中的安全模块进行通信,当所述代码段的业务函数被调用时,所述代码段对应的认证函数对代码段对应的签名数据进行签名认证。
2.根据权利要求1所述的固件的启动方法,其特征在于,每个所述认证函数在运行时,对应的代码段的签名认证只进行一次。
3.根据权利要求1所述的固件的启动方法,其特征在于,所述芯片的安全模块中存储有密钥。
4.一种固件的启动装置,其特征在于,包括:
划分模块,所述划分模块用于将所述固件划分成多个代码段,其中,在程序链接时,根据固件的业务功能运行地址空间将所述固件划分成多个代码段;
分配模块,所述分配模块用于针对每个代码段分配签名数据地址空间和认证函数地址空间;
第一生成模块,所述第一生成模块用于在所述每个代码段的业务函数的入口处加入对应的签名认证功能以生成认证函数,将所述认证函数对应分配在所述认证函数地址空间中;
第二生成模块,所述第二生成模块用于在所述固件生成后,使用签名工具生成每个所述代码段的签名数据,将所述签名数据嵌入到对应的签名数据地址空间中;
认证模块,所述认证模块用于在所述固件启动时,所述固件中的认证函数与芯片中的安全模块进行通信,当所述代码段的业务函数被调用时,所述代码段对应的认证函数对代码段对应的签名数据进行签名认证。
5.根据权利要求4所述的固件的启动装置,其特征在于,每个所述认证函数在运行时,所述认证模块对对应的代码段的签名认证只进行一次。
6.根据权利要求4所述的固件的启动装置,其特征在于,所述芯片的安全模块中存储有密钥。
7.一种非临时性计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现根据权利要求1-3中任一项所述的固件的启动方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311495457.XA CN117235740B (zh) | 2023-11-10 | 2023-11-10 | 固件的启动方法、启动装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311495457.XA CN117235740B (zh) | 2023-11-10 | 2023-11-10 | 固件的启动方法、启动装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117235740A CN117235740A (zh) | 2023-12-15 |
CN117235740B true CN117235740B (zh) | 2024-03-22 |
Family
ID=89098618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311495457.XA Active CN117235740B (zh) | 2023-11-10 | 2023-11-10 | 固件的启动方法、启动装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117235740B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261664A (zh) * | 2008-04-10 | 2008-09-10 | 北京深思洛克数据保护中心 | 一种使用软件保护装置存储程序代码实现软件保护的方法 |
CN104102860A (zh) * | 2014-08-11 | 2014-10-15 | 北京奇虎科技有限公司 | 安卓平台应用程序的保护方法、运行方法、装置及*** |
CN108491289A (zh) * | 2018-03-22 | 2018-09-04 | 北京顶象技术有限公司 | 固件保护方法及装置 |
CN111832012A (zh) * | 2020-07-15 | 2020-10-27 | 北京经纬恒润科技有限公司 | 一种ecu及其启动方法 |
CN113468485A (zh) * | 2021-07-05 | 2021-10-01 | 桂林电子科技大学 | 基于Linux操作***的数字签名和证书验证的程序保护方法 |
CN114462050A (zh) * | 2022-02-11 | 2022-05-10 | 北京工业大学 | 一种面向多核bmc固件***的可信启动方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030056115A1 (en) * | 2001-09-20 | 2003-03-20 | Andreas Falkenberg | System for and method of protecting data in firmware modules of embedded systems |
US9792432B2 (en) * | 2012-11-09 | 2017-10-17 | Nokia Technologies Oy | Method and apparatus for privacy-oriented code optimization |
US10114941B2 (en) * | 2016-08-24 | 2018-10-30 | Altera Corporation | Systems and methods for authenticating firmware stored on an integrated circuit |
US12008146B2 (en) * | 2021-03-31 | 2024-06-11 | Seagate Technology Llc | Code-based signatures for secure programs |
-
2023
- 2023-11-10 CN CN202311495457.XA patent/CN117235740B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261664A (zh) * | 2008-04-10 | 2008-09-10 | 北京深思洛克数据保护中心 | 一种使用软件保护装置存储程序代码实现软件保护的方法 |
CN104102860A (zh) * | 2014-08-11 | 2014-10-15 | 北京奇虎科技有限公司 | 安卓平台应用程序的保护方法、运行方法、装置及*** |
CN108491289A (zh) * | 2018-03-22 | 2018-09-04 | 北京顶象技术有限公司 | 固件保护方法及装置 |
CN111832012A (zh) * | 2020-07-15 | 2020-10-27 | 北京经纬恒润科技有限公司 | 一种ecu及其启动方法 |
CN113468485A (zh) * | 2021-07-05 | 2021-10-01 | 桂林电子科技大学 | 基于Linux操作***的数字签名和证书验证的程序保护方法 |
CN114462050A (zh) * | 2022-02-11 | 2022-05-10 | 北京工业大学 | 一种面向多核bmc固件***的可信启动方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117235740A (zh) | 2023-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7364087B2 (en) | Virtual firmware smart card | |
US9721101B2 (en) | System wide root of trust chaining via signed applications | |
US8881290B2 (en) | Method and apparatus for computer code obfuscation and deobfuscation using boot installation | |
CN108960830B (zh) | 智能合约的部署方法、装置、设备及存储介质 | |
JP5647360B2 (ja) | メモリ範囲を無作為に割り当てたセキュアシステムにおいてjitをサポートするためのシステム及び方法 | |
US20190114401A1 (en) | On device structure layout randomization for binary code to enhance security through increased entropy | |
JP7100201B2 (ja) | トラステッドコンピューティング方法およびサーバ | |
CN105579955A (zh) | 应用控制流模型 | |
WO2016119548A1 (zh) | 防软件反编译的方法、防反编译软件启动的方法和装置 | |
US10303885B2 (en) | Methods and systems for securely executing untrusted software | |
CN112000382B (zh) | 一种Linux***启动方法、装置及可读存储介质 | |
CN114969713A (zh) | 设备验证方法、设备及*** | |
EP3785149B1 (en) | Memory assignment for guest operating systems | |
CN113946854B (zh) | 一种文件访问控制方法、装置及计算机可读存储介质 | |
CN117235740B (zh) | 固件的启动方法、启动装置 | |
CN108304158B (zh) | 一种动态库的代理方法及设备 | |
CN101236498B (zh) | 一种借助PCI卡启动在Windows操作***中嵌入内核驱动程序的方法 | |
CN110263532B (zh) | 可信计算方法、设备及*** | |
CN114077739A (zh) | 快速外设组件互联设备启动方法、装置以及存储介质 | |
JP7171339B2 (ja) | 情報処理装置、情報処理装置の制御方法、及び、プログラム | |
CN113239347B (zh) | 一种适用于tee安全应用实例的启动方法及装置 | |
CN112054895A (zh) | 可信根构建方法及应用 | |
WO2018158909A1 (ja) | 情報処理装置およびアクセス管理プログラム | |
JP6564549B1 (ja) | 正当性認証起動管理システム | |
WO2023156571A1 (en) | Protecting software |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |