一种系统安全启动方法及装置与流程

文档序号:11156203阅读:266来源:国知局
一种系统安全启动方法及装置与制造工艺

本发明涉及电子通信领域,尤其涉及一种系统安全启动方法及装置。



背景技术:

随着各种通信业务的不断增长,嵌入式系统,特别是基站设备,对于系统启动的安全性、可靠性要求越来越高。目前通常采用BOOT来引导中央处理器启动,但是该种启动方法存在一定的缺陷:由于BOOT程序需要不断升级,如果升级时遇到断电等突发事件,将会导致BOOT程序丢失;如果BOOT被篡改成一个非法BOOT,则会导致系统运行不安全的程序,增加了系统设备的安全隐患。

现有技术中为克服上述的启动缺陷,通常采用安全BOOT模块来安全引导BOOT启动,防止系统运行非法BOOT;采用双BOOT技术来有效降低因BOOT损坏而导致系统无法启动的风险。然而目前的安全BOOT模块一般不具备认证双BOOT的功能,即安全BOOT总是从存储器固定位置去认证加载BOOT,不能按照用户要求从其他地址去认证加载备用BOOT;而对于双BOOT技术时,目前大多数方案均要借用外部逻辑器件(如EPLD、FPGA等)或者多个存储介质(如寄存器)实现BOOT之间的切换,这显然增加了设备成本、功耗和PCB板的面积。

因此,现有技术中存在不能实现双BOOT的安全认证以及双BOOT之间切换实现过分依赖外部器件的问题,不符合嵌入式产品需具备的低功耗、低成本、体积小等特点。



技术实现要素:

本发明提供一种系统安全启动方法及装置,用以解决现有技术不能实现双BOOT的安全认证以及双BOOT过分依赖外部器件实现的问题。

依据本发明的一个方面,提供了一种系统安全启动方法,将存储区域分为至少两级BOOT:其中,第一级BOOT存储BOOT引导区信息,其他级BOOT中每级BOOT均存储至少两个BOOT区的信息,所述方法包括:

获取步骤:所述BOOT引导区从第i级BOOT的存储信息中获取该级的控制信息,并根据所述控制信息从该级BOOT中选取一待认证BOOT区;

认证步骤:所述BOOT引导区对所选BOOT区进行认证,若认证成功,则引导中央控制器对所选的BOOT区加载运行;若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区,重复该步骤,直到认证成功,加载选取的BOOT区,并在加载成功后,令i=i+1,i最小取2,返回所述获取步骤。

优选地,在所述获取步骤前,还包括:

引导区加载步骤:所述中央控制器对所述BOOT引导区进行认证后加载。

优选地,所述BOOT引导区选取一待认证BOOT区后,修改所述控制信息使其选定除所选BOOT区以及认证失败的BOOT区外的其他BOOT区;

当所选BOOT认证/加载失败,根据修改后的控制信息选取BOOT区;

当所选BOOT加载成功,恢复所述控制信息选定当前BOOT区。

优选地,所述BOOT引导区对所选BOOT区进行认证时,

从所述该级BOOT的存储信息获取安全信息;

根据所述安全信息对所选BOOT进行认证。

优选地,根据所述安全信息对所选BOOT进行认证,包括:

对所选的BOOT区的版本进行哈希运算,获取哈希值;

从所述BOOT引导区的存储信息中获取BOOT区的认证公钥;

根据所述认证公钥对所选BOOT区的版本签名进行解密,获取解密值;

判断所述哈希值与所述解密值是否一致,当所述哈希值和解密值一致时, 认证通过;否则,认证失败。

依据本发明的另一个方面,提供了一种系统安全启动装置,包括:

存储模块:包括至少两级BOOT,第一级BOOT存储BOOT引导区信息,其他级BOOT中每级BOOT均存储至少两个BOOT区的信息;

获取模块:用于所述BOOT引导区从第i级BOOT存储信息中获取该级的控制信息,并根据所述控制信息从该级BOOT中选取一待认证BOOT区;

认证模块:用于所述BOOT引导区对所选BOOT区进行认证,若认证成功,则引导中央控制器对所选的BOOT区加载运行;若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区,重复该步骤,直到认证成功,加载选取的BOOT区,并在加载成功后,令i=i+1,i最小取2,并由所述获取模块继续处理。

优选地,所述装置还包括引导区加载模块:

用于所述中央控制器对所述BOOT引导区进行认证后加载。

优选地,所述装置还包括控制模块:

用于所述BOOT引导区选取一待认证BOOT区后,修改所述控制信息使其选定除所选BOOT区以及认证失败的BOOT区外的其他BOOT区;

当所选BOOT认证/加载失败,根据修改后的控制信息选取BOOT区;

当所选BOOT加载成功,恢复所述控制信息选定当前BOOT区。

优选地,所述认证模块包括:

获取单元,用于从所述存储模块中获取该级BOOT的安全信息;

认证单元,用于所述BOOT引导区根据所述安全信息对所选BOOT进行认证。

优选地,所述认证单元具体用于,

对所选的BOOT区的版本进行哈希运算,获取哈希值;

从所述存储模块的BOOT引导区存储信息中获取BOOT区的认证公钥;

根据所述认证公钥对所选BOOT区的版本签名进行解密,获取解密值;

判断所述哈希值与所述解密值是否一致,当所述哈希值和解密值一致时,认证通过;否则失败。

本发明有益效果如下:

本发明将单芯片上的存储区域划分多级,第一级存储BOOT引导区的信息;其他级存储至少两个BOOT区的信息。在加载时,BOOT引导区从每级BOOT的存储信息中获取控制信息;根据该控制信息可以选取待认证的BOOT区,并对所选的BOOT区进行认证后加载,若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区。与现有技术相比,本发明在不依赖外部逻辑器件条件下,通过软件控制方法即可同时实现了多BOOT的安全认证功能,保证了BOOT的可靠性,有效降低因升级BOOT导致系统无法启动的风险。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

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

图1为本发明实施例的系统安全启动方法的流程示意图;

图2为本发明实施例的多级BOOT的存储区域物理分区结构示意图;

图3为本发明实施例的双BOOT的存储区域物理分区结构示意图;

图4为本发明实施例的多级BOOT的系统安全启动方法的流程图;

图5为本发明实施例的双BOOT的系统安全启动方法的流程图;

图6为本发明实施例的双BOOT区的切换流程图;

图7为本发明实施例的双BOOT区的控制流程图;

图8为本发明实施例的BOOT区的认证流程图;

图9为本发明实施例的系统安全启动装置的结构示意图。

具体实施方式

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

为了解决目前双BOOT的安全认证以及双BOOT之间切换过分依赖外部器件实现的问题,本发明提供了一种系统安全启动方法,将存储区域分为至少两级BOOT:其中,第一级BOOT存储BOOT引导区信息,其他级BOOT中每级BOOT均存储至少两个BOOT区的信息,参见图1,具体包括步骤:

获取步骤S101:BOOT引导区从第i级BOOT的存储信息中获取该级的控制信息,并根据控制信息从该级BOOT中选取一待认证BOOT区;

认证步骤S102:BOOT引导区对所选BOOT区进行认证,若认证成功,则引导中央处理器对所选的BOOT区加载运行;若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区,重复该步骤,直到认证成功,加载选取的BOOT区,并在加载成功后,令i=i+1,i最小取2,返回获取步骤。

本发明将单芯片上的存储区域划分多级,第一级存储BOOT引导区的信息;其他级存储至少两个BOOT区的信息。在加载时,BOOT引导区从每级BOOT的存储信息中获取控制信息;根据该控制信息可以选取待认证的BOOT区,并对所选的BOOT区进行认证后加载,若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区。通过本发明在不依赖外部逻辑器件条件下,通过软件控制方法即可同时实现了双BOOT的安全认证功能,保证了BOOT的可靠性。

以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此 处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明将存储区域分为至少两级BOOT:其中,第一级BOOT存储BOOT引导区信息,其他级BOOT中每级BOOT均存储至少两个BOOT区的信息。通过在存储区域中配置各个BOOT的信息,在实际加载时,通过读写操作即可实现BOOT的选定、切换以及认证。

具体地,本发明中根据应用功能不同,将BOOT划分成BASEBOOT+各级BOOT架构。本发明中BOOT引导区(即BASEBOOT)主要完成各级主从BOOT区的选择、BOOT区的认证等最小功能。BASEBOOT功能集要尽量小,一旦研发调试完成,基本就不改动,确保外场不升级。其他各级BOOT用于完成相关驱动初始化、应用程序引导以及和应用相关的参数传递等功能,可能会由于需求变化或者版本的BUG而存在升级的可能性。

本发明的一个实施例中,在分配存储区域时,多级BOOT的FLASH的物理分区,参见图2。本实施例中在单一存储器芯片上依次划分第一级BOOT引导区、第二级至第N级的主BOOT区、第二级至第N级的从BOOT区、BOOT控制区以及安全信息区。其中:

第一级BOOT引导区的功能集尽量简单稳定,将功能变化点放入其他BOOT中,减少第一级BOOT升级的可能性。对其他级BOOT采用主从BOOT区结构,本发明中主BOOT区为一个,从BOOT区至少为一个。BOOT控制区用于存放各级BOOT的BOOT控制信息。BOOT引导区根据控制信息选择其他级BOOT的主从BOOT区。安全信息区存放各级BOOT的安全信息,用于各个BOOT区的安全认证。

本发明的一个实施例中,在分配存储区域时,双BOOT的FLASH的物理分区,参见图3。本实施例中单一存储器芯片分为第一级BOOT引导区、第二级主从BOOT区。其中每级中包含了相应的控制信息和安全信息。第一级BOOT、主BOOT区以及从BOOT区的字段长度大小相同。

具体地,第一级BOOT引导区的存储信息包括BASEBOOT版本、公钥、 保留字段以及安全信息。其中,公钥用于BOOT引导区对后续BOOT级的安全认证。安全信息根据CPU的安全BOOT功能要求进行设置,BASEBOOT的安全认证由CPU的安全BOOT模块认证。

主BOOT区的存储信息包括:主BOOT版本、安全信息以及保存字段;从BOOT区的存储信息:从BOOT版本、保留字段、安全信息以及BOOT控制字。其中,除第一级外的其他级的BOOT采用RSA非对称加解密方法,私钥由运营商或设备商进行保存,不可外泄。公钥作为BOOT引导区一部分(和BASEBOOT一起打包)。当BASEBOOT认证通过,则认为此公钥合法,用于后续各级BOOT的解密。版本签名,是通过私钥分别对主从BOOT区版本进行HASH加密计算后,得到的一个签名。BOOT控制字用于选择主BOOT还是从BOOT。

本发明中将BOOT分为多级在同一芯片中进行存储,因此针对多级BOOT认证加载的工作流程图,具体参见图4,中央控制器启动后,认证并加载第一级BASEBOOT;接着第一级BOOT依序在各级BOOT选取BOOT区,对所选的BOOT区进行认证并加载,直至第N级BOOT成功运行。若所选BOOT区认证失败后,选取本级BOOT的其他BOOT区进行认证并加载。

下面以两级BOOT、双BOOT区为例对具体的选取及认证过程进行详细说明说明。上述介绍了芯片中存储区域中除第一级BOOT外的其他级都包含BOOT控制信息,用于存放BOOT控制字。BOOT引导区根据BOOT控制字来选择后一级BOOT的主从BOOT区。在后续认证加载过程中,BOOT引导区根据实际运行情况对BOOT控制字进行修改,用以实现BOOT区之间的切换功能。本实施例所提供的系统启动方法,参见图5,具体包括如下步骤:

步骤501,中央控制器启动后,对BASEBOOT进行认证,认证通过,则加载运行第一级BOOT,否则复位或者通过提示灯等方式告知用户。本实施例中,在系统启动后,中央控制器需对BOOT引导区进行认证后加载,保证了BOOT引导区的安全性。

步骤502,第一级BOOT根据第二级BOOT的双BOOT控制字选择第二级 BOOT的主从BOOT区,并设置双BOOT区控制字。

这里设置双BOOT区控制字选定两个BOOT区中的未被选取BOOT区的。这样保证当前BOOT区认证或加载失败后,第一级BOOT能够从两个BOOT区中的另一个BOOT区选择第二级BOOT进行认证加载。

步骤503,第一级BOOT根据安全信息对被选第二级BOOT进行安全认证:若认证通过,则加载第二级BOOT,则设置双BOOT控制字选定当前所选的BOOT区;认证失败,则CPU复位,重复上述步骤,如果该级BOOT的两个BOOT区都认证失败或者不可正常运行,则会导致CPU不断复位,无法正常运行,因此本实施例采用指示灯来告警。

基于上述可知,本实施例通过两次设置双BOOT控制字,即可实现了双BOOT之间的切换。对于BOOT控制字的设置方式,具体参见图6和图7,通过控制字0、1实现主从BOOT的切换。控制字为1选取主BOOT区的,控制字为0则选取从BOOT。BOOT引导区选择完BOOT区后,即刻对双BOOT控制字进行取反。如果被选BOOT认证成功且加载成功,则将BOOT控制字再次取反。如果认证失败或加载失败,看门狗溢出复位,启动CPU。需要说明的是,双BOOT切换也可以通过下述的方式实现:在选取BOOT区后,不需要设置控制字。而当认证失败或者运行异常后,则设置双BOOT控制字取反;认证通过后,保持控制字不变即可。

本发明根据当前运行BOOT的运行情况,设置BOOT控制字:当前BOOT如果认证/加载失败,则能使得CPU复位后选择另一个BOOT区,达到BOOT区之间的切换功能。通过采用不断更改BOOT控制字的形式切换BOOT区,可以有效保证BOOT的可靠性,有效降低升级BOOT导致系统无法启动的风险。

BOOT引导区选定BOOT区后,从该级BOOT的存储信息中获取安全信息,并根据安全信息对被选BOOT进行安全认证,参见图8,具体包括如下步骤:

对所选BOOT版本进行HASH运算,得到一个HASH值VAL1;

获取的BASEBOOT存储信息中的公钥,并根据公钥对所选BOOT版本签 名解密,得到VAL2;

将VAL1和VAL2进行比较:如果相等,则被选BOOT认证通过,否则将CPU复位,下次启动时从两个BOOT区中选择另一个BOOT进行认证。

对于HASH算法可以自行选择,这里不做限定,但需要保证BOOT版本签名采用的HASH算法和认证使用的HASH算法一致即可。第二级BOOT认证后,就可以正常加载运行。

本发明还提供了一种系统安全启动装置,如图9所示,具体包括:

存储模块:包括至少两级BOOT,第一级BOOT存储BOOT引导区信息,其他级BOOT中每级BOOT均存储至少两个BOOT区的信息;

获取模块:用于BOOT引导区从第i级BOOT存储信息中获取该级的控制信息,并根据控制信息从该级BOOT中选取一待认证BOOT区;

认证模块:用于BOOT引导区对所选BOOT区进行认证,若认证成功,则引导中央控制器对所选的BOOT区加载运行;若认证失败,则在该级BOOT的其他BOOT区中选取一待认证BOOT区,重复该步骤,直到认证成功,加载选取的BOOT区,并在加载成功后,令i=i+1,i最小取2,并由获取模块继续处理。

进一步地,该装置还包括引导区加载模块:

用于中央处理器中央控制器对BOOT引导区进行认证后加载。

进一步地,该装置还包括控制模块:

用于BOOT引导区选取一待认证BOOT区后,修改控制信息使其选定除所选BOOT区以及认证失败的BOOT区外的其他BOOT区;

当所选BOOT认证/加载失败,根据修改后的控制信息选取BOOT区;

当所选BOOT加载成功,恢复控制信息选定当前BOOT区。

进一步地,认证模块包括:

获取单元,用于从存储模块中获取该级BOOT的安全信息;

认证单元,用于BOOT引导区根据安全信息对所选BOOT进行认证。

进一步地,认证单元具体用于,

对所选的BOOT区的版本进行哈希运算,获取哈希值;

从存储模块的BOOT引导区存储信息中获取BOOT区的认证公钥;

根据认证公钥对所选BOOT区的版本签名进行解密,获取解密值;

判断哈希值与解密值是否一致,当哈希值和解密值一致时,认证通过;否则失败。

综上所述,本发明所提供的系统安全启动方法,根据下一级BOOT的控制字选择主从BOOT区,并根据安全信息对被选BOOT区进行安全认证:当认证通过,则加载所选BOOT;认证失败,则设置双BOOT控制字,同时复位;复位后,从本级其他BOOT区中的选择一BOOT进行认证加载:如果运行过程异常,则设置双BOOT控制字,同时复位,使得复位后,本级其他BOOT区选择一BOOT区进行认证加载。依此类推,直到第N级BOOT加载运行。因此,与现有技术相比本发明在能够不依赖外部器件的条件下,通过软件手段同时实现安全BOOT和双BOOT,既可以保证系统安全、可靠启动,又可以降低系统设备成本和功耗。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。

虽然通过实施例描述了本申请,本领域的技术人员知道,本申请有许多变形和变化而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1