一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于芯片的安全启动方法及装置与流程

2022-02-22 07:25:17 来源:中国专利 TAG:


1.本技术涉及安全技术领域,尤其涉及一种基于芯片的安全启动方法及装置。


背景技术:

2.随着互联网、通信技术的发展,越来越多的设备可以通过通信网络、互联网络或物联网络等实现自动化和智能化,为人们提供更多的便利。在人们生活越来越依赖各种设备的同时,设备网络安全问题日益重要。设备的网络安全与设备在启动阶段的启动方式有关,比如,一些设备中用于引导设备启动的指令集,存放在设备的可读可写存储器中,在设备上电时,可以从可读可写存储器中读取引导启动指令集,进行硬件检查、初始化等操作,在运行环境准备就绪时,运行引导启动指令集,引导设备进行启动,这种方式便于对引导启动指令集进行修复、升级等,但是这种方式容易遭到恶意攻击,他人很容易对可读可写存储器中的引导启动指令集进行修改,植入恶意代码,进而威胁设备的安全。


技术实现要素:

3.本技术提供一种基于芯片的安全启动方法及装置,通过本技术可以提高设备系统启动的安全性。
4.本技术实施例第一方面提供了一种基于芯片的安全启动方法,该方法可以基于芯片实现,该芯片可以包括第一存储器和启动引擎,第一存储器为一次性可编程存储器,启动引擎中固化有启动信息。
5.该方法中,启动引擎根据启动信息从第一存储器获取第一校验信息,从第二存储器中获取第一指令集,并利用第一校验信息对第一指令集和第一根公钥进行验证,并在验证通过的情况下触发第一指令集运行。其中,第二存储器是可读可写存储器,第二存储器可以该芯片内部的存储器,也可以为外部的存储器。第一根公钥是使用第一指令集校验第二指令集的依据,第一指令集还用于在第二指令集的校验通过后,触发第二指令集运行,第二指令集用于引导操作系统启动。
6.该方法中,启动信息固化在启动引擎中,第一校验信息固化在第一存储器中,这就使得启动引擎利用第一校验信息验证第一指令集和第一根公钥的验证算法(包含在启动信息中)、和验证基准(也就是第一校验信息)都是可靠的,实现了将安全启动的信任链可靠地传递至第一指令集和第一根公钥,从而保证了设备的安全启动。
7.结合第一方面,在一种可选的方式中,启动引擎可以包括第三存储器,启动信息包括第三存储器中固化存储器的第三指令集。
8.结合第一方面,在一种可选的方式中,启动引擎可以包括硬件电路,启动信息包括固化在硬件电路中的逻辑信息。
9.结合第一方面,在一种可选的方式中,第一校验信息包含第一哈希值,第一哈希值是通过合并算法和第一哈希算法计算得到的。
10.启动引擎利用第一校验信息进行验证时,具体通过上述合并算法确定第一指令集
和第一根公钥的第一合并结果,并通过第一哈希算法,计算第一合并结果的第二哈希值,进而在第二哈希值与第一哈希值相同的情况下,触发第一指令集运行。通过第一哈希值实现对第一指令集和第一根公钥哈希这二者的验证,节约了第一校验信息在第一存储器中占用的空间。
11.结合第一方面,在一种可选的方式中,第一校验信息包括第三哈希值和第四哈希值,第三哈希值用于验证第一指令集,第三哈希值是通过第二哈希算法计算得到的;第四哈希值用于验证第一根公钥,第四哈希值是通过第三哈希运算计算得到的。
12.启动引擎在利用第一校验信息进行验证时,具体通过第二哈希算法,计算第一指令集的第五哈希值,并通过第三哈希算法,计算第一根公钥的第六哈希值,进而在第五哈希值和第三哈希值相同,并且第六哈希值和第四哈希值相同的情况下,触发第一指令集运行。
13.结合第一方面,在一种可选的方式中,第一存储器存储有第二校验信息,第二校验信息用于验证第一指令集和第二根公钥,启动引擎触发第一指令集运行的操作是在第一指令集、第一根公钥和第二根公钥的验证通过的情况下执行的,第二根公钥是通过第一指令集校验第二指令集的依据,第一指令集具体用于在利用第一根公钥对第二指令集的校验通过,并且利用第二根公钥对第二指令集的校验通过的情况下,触发第二指令集运行。第一存储器中存储的第一校验信息和第二校验信息,可以实现双签名安全启动,避免第一指令集或第一根公钥被单方面篡改,提到了设备的安全性。
14.结合第一方面,在一种可选的方式中,第一存储器中存储有两个或两个以上的校验信息,第一存储器还存储有第一指示信息,第一指示信息用于指示第一校验信息。启动引擎具体可以根据第一指示信息,从两个或两个以上的校验信息中获取第一校验信息,并利用第一校验信息验证第一指令集以及与第一校验信息对应的第一根公钥,并在验证通过的情况下触发第一指令集运行。通过第一存储器中的第一指示信息,来指示用于校验第一指令集和第一根公钥的第一校验信息,提高了安全启动的灵活性。
15.结合第一方面,在一种可选的方式中,第二指令集具体用于对操作系统的引导启动指令集进行验证;并用于在对引导启动指令集的验证通过的情况下,触发引导启动指令集的运行,执行对操作系统的验证;以及用于在对操作系统的验证通过的情况下,启动操作系统。
16.结合第一方面,在一种可选的方式中,启动引擎在触发第一指令集运行后,还从第二存储器中获取二级公钥的第一签名信息,其中,二级公钥是第一根公钥对应的派生公钥,然后利用第一签名信息和第一根公钥,对二级公钥进行验证,并在对二级公钥的验证通过的情况下,从第二存储器中获取第二指令集,以及第二指令集的第二签名信息,启动引擎利用第二签名信息和二级公钥对第二指令集进行验证,在验证通过的情况下,触发第二指令集的运行。
17.结合第一方面,在一种可选的方式中,启动引擎在对二级公钥验证时,从第一存储器中获取二级公钥对应的分组信息,其中,分组信息用于指示芯片的应用设备类别,并根据分组信息和二级公钥,确定第三哈希值,进而利用第一根公钥对第一签名信息解密,得到第四哈希值,在第三哈希值与第四哈希值相等的情况下,触发第二指令集的运行。二级公钥的第一签名信息是根据分组信息确定的,避免了二级公钥及其第一签名信息在不同类设备之间的互相拷贝而带来的安全隐患。
18.本技术实施例第二方面提供了一种安全启动装置,该装置可以是通信设备、互联网设备、物联网设备等设备,或者是该设备中的一部分(如电路或芯片),该安全启动装置第一存储器和启动引擎。
19.其中,第一存储器用于存储第一校验信息。启动引擎用于固化存储启动信息,还用于:根据启动信息从第一存储器获取第一校验信息,从第二存储器获取第一指令集,利用第一校验信息对第一指令集和第一根公钥进行校验,在校验通过的情况下触发第一指令集的运行。其中,第一存储器为一次性可编程存储器,第二存储器为可读可写存储器;第一根公钥为通过第一指令集校验第二指令集的依据,第一指令集还用于在第二指令集的校验通过后触发第二指令集运行;第二指令集用于引导操作系统启动。
20.该装置中,启动引擎中固化有启动信息,第一存储器中固化有第一校验信息,保证了启动引擎用于校验第一指令集和第一根公钥的验证算法和验证基准都是可靠的,实现了将安全启动的信任链可靠地传递至第一指令集和第一根公钥,从而保证了设备的安全启动。
21.结合第二方面,在一种可选的方式中,启动信息包括第三指令集,第三指令集用于指示利用第一校验信息对第一指令集和第一根公钥进行校验,以及在校验通过的情况下运行第一指令集。启动引擎包括第三存储器和第一处理器;第三存储器为只读存储器,用于存储第三指令集;第一处理器用于运行第三指令集。
22.结合第二方面,在一种可选的方式中,启动引擎包括硬件电路,启动信息包括固化在硬件电路中的逻辑信息。硬件电路用于根据逻辑信息,利用第一校验信息对第一指令集和第一根公钥进行校验,以及在对第一指令集和第一根公钥的校验通过的情况下触发第二处理器运行第一指令集。
23.结合第二方面,在一种可选的方式中,第一存储器存储有第二校验信息,第二校验信息用于验证第一指令集和第二根公钥;启动引擎具体用于在第一指令集、第一根公钥和第二根公钥的验证均通过的情况下触发第一指令集运行。其中,第二根公钥为通过第一指令集校验第二指令集的依据;第一指令集具体用于在利用第一根公钥对第二指令集的校验通过,并且利用第二根公钥对第二指令集的校验通过的情况下,触发第二指令集运行。通过第一哈希值实现对第一指令集和第一根公钥哈希这二者的验证,节约了第一校验信息在第一存储器中占用的空间。
24.结合第二方面,在一种可选的方式中,第一存储器中存储有两个或两个以上的校验信息;第一存储器存储有第一指示信息。启动引擎具体用于:根据第一指示信息,从两个或两个以上的校验信息中获取第一校验信息,并利用第一校验信息验证第一指令集以及与第一校验信息对应的第一根公钥,以及在验证通过的情况下,触发第一指令集的运行。第一存储器中存储的第一校验信息和第二校验信息,可以实现双签名安全启动,避免第一指令集或第一根公钥被单方面篡改,提到了设备的安全性。
25.本技术实施例第三方面提供了一种存储介质,存储介质存储有指令,当该指令在处理器上运行时,使得处理器执行上述第一方面及其任意一种可能的实现方式中的基于芯片的安全启动方法。
26.本技术实施例第四方面提供了一种程序产品,程序产品包括:程序代码,当程序代码在处理器上运行时,使得处理器执行上述第一方面及其任意一种可能的实现方式中的基
于芯片的安全启动。
附图说明
27.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
28.图1是本技术实施例提供的一种安全启动的过程示意图;
29.图2是本技术实施例提供的一种安全启动架构示意图;
30.图3是本技术实施例提供的另一种安全启动架构示意图;
31.图4是本技术实施例提供的另一种安全启动架构示意图;
32.图5是本技术实施例提供的一种基于芯片的安全启动方法的流程示意图;
33.图6是本技术实施例提供的一种设备app安全启动的流程示意图;
34.图7为本技术实施例提供的一种第一根公钥的更新示意图;
35.图8是本技术实施例提供的一种双签名安全启动示意图;
36.图9是本技术实施例提供的一种安全启动装置的结构示意图。
具体实施方式
37.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
38.本技术实施例针对现有技术中设备在启动时存在安全漏洞的问题,提出了一种基于芯片的安全启动方法,为更好地理解该方法,在介绍本技术实施例提供的基于芯片的安全启动方法之前,首先介绍本技术实施例可能涉及的对象或技术。
39.1、安全启动
40.安全启动是主要通过数字签名技术实现系统在启动过程中可信的技术,通过公钥解密法和数字签名技术、以及哈希散列算法,保证只有特定主体(比如通信设备的设备制造商)签名的系统或软件才能在设备上运行。
41.安全启动通常需要一定的硬件基础,该硬件基础通常称为可信根(root of trust,rot),可信根验证可信根外部的第一条指令的完整性,第一条指令的完整性验证通过后,通过第一条指令校验后续被加载对象的数字签名,保证后续加载对象的完整性,按照这种“先检验,校验通过再执行”的方式,逐级将信任链传递下去。
42.参阅图1,图1是本技术实施例提供的一种安全启动的过程示意图,如图1所示,图1中,私钥1和公钥1为一对密钥对,私钥2和公钥2是一对密钥对,私钥3和公钥3是一对密钥对,上述密钥对可以是证书颁发机构生成的密钥对,各个密钥对可以均不相同,也可以存在相同的密钥对,比如,私钥1和私钥2相同,公钥1和公钥2相同。图1中,装载程序的数字签名是通过私钥1加密得到的,操作系统(operating system,os)的数字签名是通过私钥2加密得到的,应用程序的数字签名是通过私钥3加密得到的。设备可以通过可信根逐级启动装载
程序、操作系统和应用程序,具体的:首先,可信根通过公钥1对装载程序的数字签名进行解密并验证;然后,在装载程序的数字签名验证成功的情况下,运行加载程序,装载程序通过公钥2对操作系统的数字签名进行解密并验证;进而,在操作系统的数字签名验证成功的情况下,运行操作系统,操作系统通过公钥3对应用程序的数字签名进行解密并验证,运行应用程序。其中,装载程序是用于初始化以及引导操作系统启动的程序。上述过程通过数字签名逐级验证后续需要加载程序的完整性,实现了安全启动。
43.2、单签名安全启动机制和多签名安全启动机制
44.单签名安全启动机制是在安全启动的过程中,利用单一的数字签名进行校验的方案。比如,在一些通信设备的安全启动校验场景中,可以通过设备制造商的私钥对需要加载的对象进行签名,在启动校验时,利用设备制造商的公钥对应签名进行解密和校验。设备制造商的私钥由设备制造商掌握,设备制造商的公钥可以由设备的设备使用方获取并用于数字签名的验证。
45.多签名安全启动机制是在安全启动的过程中,利用多个独立的数字签名进行校验的方案。比如,双签名安全启动机制是多签名安全启动机制的一种,设备使用方需要在安全启动过程中,通过设备制造方和设备使用方双方的数字签名保证设备的安全启动,也就是说,设备制造商和设备使用方均通过自己的私钥对需要加载的对象进行签名,在启动校验时,利用设备制造商的公钥对设备制造商的数字签名进行解密并验证,利用设备使用方的公钥对设备使用方的数字签名进行解密并验证,这两个数字签名的验证均通过的情况下,运行后续需要加载的对象。设备制造商的私钥由设备制造商掌握,设备使用方的私钥由设备使用方掌握,设备制造商的公钥和设备使用方的公钥均可被设备使用方获取并用于数字签名的验证。不难看出,多签名安全启动通过多个独立的数字签名,保证了需要加载的对象不会被单方面篡改,安全性更高,更能满足复杂的应用环境。
46.3、数字签名、验签机制和签名密钥对
47.数字签名、验签机制可以基于一对包含公钥和私钥的签名密钥对实现,通过私钥签名,通过公钥对数字签名解密验证。数字签名机制是通过哈希算法对待签名信息计算摘要,进而通过私钥对待签名信息的摘要进行加密,得到待签名信息的数字签名。验签机制是通过公钥对待验证信息的数字签名解密得到摘要,并使用相同的哈希算法计算待验证信息的摘要,比较通过解密得到的摘要和通过哈希算法计算的摘要,若二者相同,则验签成功,否则,验签失败。
48.签名方(如设备制造商或设备使用方)通常有一对长效的签名密钥对,该密钥对可以是由ca(certificate authority,证书颁发机构)发布的,该密钥对的保密级别通常比较高,签名方通常不直接使用该密钥对直接对需要加载的对象(如操作系统或应用程序等)签名,而是通过一定的密钥派生算法,根据该密钥对定期派生出新的密钥对。ca机构颁布的密钥对可以称为根密钥对,派生得到的新的密钥对可以称为子密钥对或二级密钥对,二级密钥对也包含一个二级公钥和二级私钥,二级私钥用于签名,二级公钥用于对数字签名解密验证。通过定期更新二级密钥对,使用新的二级密钥对对需要加载的对象进行签名保护,避免了由于原来的二级密钥对泄露而导致需要加载的对象被非法篡改的风险。
49.4、otp存储器
50.otp(one time programmable,一次性可编程)存储器,该类型的存储器可以通过
写保护的方式,限制其数据写入的次数,比如,otp存储器中可以设置标志位,用于标志otp存储器可以被写入的次数。通常情况下,该类存储器在使用时,将其设置为只能写一次数据,数据写入后只能读取使用,不可对其进行更改或删除。该存储器中可以存储在安全启动过程中不需要更改的参数,防止被他人恶意篡改。
51.在向otp存储器写数据时,数据写完后,otp存储器中还可能有未被写入数据的比特位,写保护就是为了防止otp的未写数据的比特位被写入其他非法信息,通过otp存储器中的一个专用比特位指示锁定otp存储器中剩余的比特空间,从而实现对otp存储器写入次数的限制。比如当该专用比特位中为“0”时,表示otp存储器中剩余的比特空间不被锁定,还可以对otp存储器继续进行写操作;当该专用比特位中为“1”时,表示otp存储器中剩余的比特空间被锁定,当外部命令试图对otp存储器进行写操作时,otp存储器拒绝执行该命令。
52.otp存储器包括efuse(一次性电编程熔丝)存储器、antifuse(抗熔丝)存储器等。
53.5、bootrom
54.bootrom(或boot rom)是芯片内的一小块掩模rom,它包括芯片在上电或复位时执行的第一个指令集,根据某些带式引脚或内部保险丝的配置,它可以决定从哪里加载要执行的下一个指令集,以及如何验证其是否正确或有效。
55.6、bsbc
56.bsbc(boot rom secure boot code,启动只读存储器安全启动代码)是在芯片生产阶段固化在芯片内部(比如固化在启动只读存储器bootrom)的逻辑代码,该代码为只读代码,任何硬件或软件均无法对其进行篡改。该固化在芯片内部的代码在运行的过程中,不会被外部的任何逻辑打断。
57.bsbc的主要功能是对需要加载的完整性未知的对象进行安全验证,在完整性验证通过的情况下,加载运行该对象。
58.7、esbc
59.esbc(external secure boot code,外部安全启动代码)是芯片中固化代码运行后的第一段安全启动代码。esbc可以作为bsbc的加载对象,由bsbc验证和启动。
60.esbc的功能可以包括:
61.(1)初始化硬件,如初始化内存、初始化总线、初始化daw(digital audio workstation,数字音频工作站)等。
62.(2)选择启动介质(如ram),加载下级镜像,比如uefi(unified extensible firmware interface,统一可扩展固件接口)、bios(basic input and output system,基本输入输出系统)等。
63.(3)根据安全策略对下级镜像进行验证,验证通过时执行下级镜像,验证不通过时停止执行下级镜像。
64.8、引导启动指令集
65.引导启动指令集可以是bios或uefi等指令集,可以有如下功能:
66.(1)上电时对硬件部分进行检测,也叫做加电自检(power on self test,post)。
67.(2)初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测、对硬件设置参数等。
68.(3)引导操作系统启动。
69.可以看出bios和esbc的功能有部分重合,如初始化相关的功能等,一些实际使用中,esbc可以包括bios,也就是说可以由esbc承担bios的部分功能,或者说将bios看作部分esbc。
70.9、soc
71.soc(system on chip,芯片上系统)是在芯片上通过总线集成各种外部模块的控制器的系统。比如,手机内部的soc,是在一颗芯片上通过总线集成了arm(advanced risc machine,进阶精简指令集机器)核(也就是cpu)、ddr sdram(double data rate synchronous dynamic random access memory,双倍数据速率同步动态随机存取存储器)、wifi(wireless fidelity,无线高保真)模块、uart(universal asynchronous receiver/transmitter,通用异步收/发器)、相机(camera)、触摸屏等模块的控制器。arm核可以通过axi(advanced extensible interface,高级扩展接口)协议高速互联各个模块。
72.soc是芯片上执行安全启动的相关功能的系统,可以作为设备安全启动的rot,可以包括bootrom和otp,还可以包括硬件加速器等,其中,bootrom中可以固化有bsbc。
73.10、可靠版本指令集、可靠版本密钥、可靠版本证书
74.可靠版本指令集的签名,可以用于对该可靠版本指令集对应的其他版本指令集进行验证,其他版本指令集可以是可靠版本指令集经过一段时间的使用后、经过一定的传输节点传输后的指令集,该其他版本指令集在使用过程中或传输过程中可能存在被篡改的风险,因此可以通过可靠版本指令集的签名,来验证其他版本指令集是否被篡改。一种实现中,可靠版本指令集可以是研发人员经过开发、测试、发布的未曾被篡改指令集。
75.相应的,可靠版本密钥的签名,可以用于对该可靠版本密钥对应的其他版本密钥进行验证,其他版本密钥可以是可靠版本密钥经过一段时间的使用后、经过一定的传输节点传输后的密钥。可靠版本证书的签名,可以用于对该可靠版本证书对应的其他版本证书进行验证,其他版本证书可以是可靠版本证书经过一段时间的使用后、经过一定的传输节点传输后的证书。一种实现方式中,可靠版本密钥可以是证书颁发机构颁发的证书包含的、未曾被篡改的可靠密钥,可靠版本证书可以是证书颁发机构颁发的、未曾被篡改的证书。
76.下面介绍本技术实施例提供的基于芯片的安全启动方法所基于的架构,参阅图2,图2是本技术实施例提供的一种安全启动架构示意图,如图2所示,该安全启动架构1包含第一存储器10、第二存储器20以及启动引擎30,启动引擎30分别与第一存储器10和第二存储器20连接。可选的,第一存储器10和启动引擎30可以是soc内部的模块,第二存储器20可以是soc以外的模块,比如第二存储器20可以是与芯片在同一单板上的存储器,或者第二存储器20可以远端设备中的存储器,第二存储器20也可以是soc内部的模块,可以通过总线与soc内的其他模块相连。
77.下面具体介绍该安全启动架构1中的各个模块的功能:
78.第一存储器10可以是一次性可编程(otp)存储器,第一存储器10用于存储第一校验信息。
79.第二存储器20可以是可读可写存储器,第二存储器20用于存储第一指令集,第一指令集用于校验第二指令集,第二指令集用于引导操作系统启动。可选的,第二存储器20还可以用于存储第一根公钥。
80.启动引擎30用于固化存储启动信息,还用于根据启动信息从第一存储器10获取第
一校验信息,从第二存储器20中获取第一指令集,利用第一校验信息对第一指令集和第一根公钥进行验证,以及在验证通过的情况下触发第一指令集运行。
81.其中,启动引擎30内部有多种实现方式,结合图3介绍第一种实现方式,参阅图3,图3是本技术实施例提供的另一种安全启动架构示意图,如图3所示,启动引擎30包括第一处理器301和第三存储器302。
82.其中,第三存储器302中存储有第三指令集,第三指令集为启动引擎30中固化的启动信息,用于指示利用第一存储器10中的第一校验信息,对第二存储器20中的第一指令集和第一根公钥进行校验,以及在校验通过的情况下运行第一指令集。第一处理器301用于运行第三指令集。
83.可选的,如图3所示,启动引擎30中还可以包括第四存储器303,第四存储器303可以为内部静态随机访问存储器(internal static random access memory,isram),第四存储器303用于存储第一处理器301在运行第三指令集时,产生的临时文件和数据。
84.结合图4介绍启动引擎30的第二种实现方式,参阅图4,图4是本技术实施例提供的另一种安全启动架构示意图,如图4所示,启动引擎30包括硬件电路304。其中,硬件电路304中固化存储有逻辑信息,该逻辑信息为启动引擎30中固化存储的启动信息,用于引导硬件电路304进行安全启动。
85.可选的,如图4所示,在第二种实现方式中,该架构还可以包括第二处理器40,第二处理器40可以为中央处理器。该架构还可以包括第五存储器50,第五存储器50可以为内部静态随机访问存储器。
86.硬件电路304用于利用第一存储器10中的第一校验信息,对第二存储器20中的第一指令集和第一根公钥进行校验,以及在校验通过的情况下触发第二处理器40运行第一指令集,第五存储器50可以用于存储第二处理器40在运行第一指令集时,产生的临时文件和数据。
87.应理解,图3和图4中示出的架构中,第一存储器10和启动引擎30为soc内部模块,第二存储器20为soc外部的模块的情况,可以理解的是,在另一种未示出的可选方式中,第一存储器10、第二存储器20以及启动引擎30可以均为soc的内部模块。
88.该架构中,由于第二存储器20为可读可写存储器,为架构中的非安全保证区域,启动引擎30根据固化存储的启动信息,利用第一存储器10中写保护的第一校验信息,对非安全保证区域中的第一指令集和第一根公钥进行验证,由于启动信息是启动引擎30中固化存储的,第一校验信息为第一存储器10中通过写保护存储的,二者都是不可篡改的,这就保证了对第一指令集和第一根公钥进行验证时,验证算法(包含在启动信息中)和验证基准(也就是第一校验信息)都是可靠的,实现了将安全启动的信任链可靠地传递至第一指令集和第一根公钥,从而保证了系统的安全启动。
89.基于图2-图4中任一架构,可以实现本技术实施例提供的基于芯片的安全启动方法,下面介绍本技术实施例提供的基于芯片的安全启动方法,该方法可以应用在多种设备的系统启动过程中,如通信设备,包括路由器、交换机等,又如互联网设备,如服务器、防火墙等。设备中可以包括芯片,进而通过芯片完成系统的安全启动。具体的,芯片中可以至少包括第一存储器和启动引擎,启动引擎中固化存储有启动信息。可选的,设备中还可以包括第二存储器,第二存储器可以是芯片内部的存储器,也可以是芯片外部的存储器,第一存储
器、启动引擎和第二存储器的相关介绍,以及三者之间的连接关系可以参阅图2至图4中的架构中,针对第一存储器10、启动引擎30和第二存储器20的介绍,此处不再赘述。
90.需要说明的是,本技术实施例中涉及的指令集,如第一指令集、第二指令集、第三指令集、原始指令集、引导启动指令集等,可以为任意汇编语言形式的指令集,比如通过半编译型、全编译型语言等。
91.参阅图5,图5是本技术实施例提供的一种基于芯片的安全启动方法的流程示意图,如图5所示,所述方法可以至少包括步骤s501-s503。
92.s501,启动引擎根据所述启动信息从第一存储器获取第一校验信息。
93.其中,设备上电后,启动引擎自动执行步骤s501。启动引擎有不同的实现方式,具体可参阅图3和图4中介绍针对启动引擎30的两种实现方式。
94.当启动引擎包括第三存储器和第一处理器时,第三存储器可以是只读存储器,具体可以是引导只读存储器(bootrom),第三存储器中固化存储有第三指令集,第三指令集可以是bsbc,处理器上电后,从第三存储器中将第三指令集复制到第一处理器的运行空间中,运行第三指令集,第三指令集的运行进程可以从第一存储器中获取第一校验信息,并执行s502和s503。
95.当启动引擎包括硬件电路时,硬件电路中固化有逻辑信息,硬件电路中可以包括与门、或门、非门、ram和触发器等器件,通过各个器件的排列、连接、组合,将逻辑信息固化在硬件电路中,当硬件电路上电时,从第一存储器中获取第一校验信息,并执行s502和s503。
96.上述两种方式均可以实现启动信息在芯片内的固化,保证启动引擎在上电后执行的第一个指令集的完整和可靠,为后续系统的启动奠定安全基础。
97.其中,第一存储器为可读可写存储器,第一校验信息可以是在芯片生产阶段,或者设备投入使用之前,烧写入第一存储器的。第一校验信息是根据原始指令集和原始根公钥确定的,其中,原始指令集是第一指令集对应的可靠版本指令集,原始根公钥是第一根公钥对应的可靠版本密钥。
98.根据原始指令集和原始根公钥确定第一校验信息的方式有多种,这里示例性地介绍两种:第一种方式中,第一校验信息包括第一哈希值,根据第一合并算法,对原始指令集与原始根公钥进行合并,得到原始合并结果,通过第一哈希运算计算该原始合并结果的第一哈希值。第二种方式中,第一校验信息包括第三哈希值和第四哈希值,通过第二哈算法计算原始指令集的第三哈希值,通过第三哈希算法计算原始根公钥的第四哈希值。
99.上述方式中,第一合并算法可以是将原始指令集和原始根公钥一前一后拼接的方法,也可以是将原始指令集和原始根公钥按照指定方式进行交叉拼接的方式,也可以有其他合并算法,均不作限定,可以针对原始指令集和原始根公钥生成一个哈希值存储在第一存储器中,节约了第一存储器的存储空间。第一哈希算法、第二哈希算法和第三哈希算法可以是md5(message-digest algorithm 5,报文摘要算法5)、sha1(secure hash algorithm 1,安全散列算法1)或sha256(secure hash algorithm 256,安全散列算法256)等算法,第一哈希算法、第二哈希算法和第三哈希算法之间可以存在相同的算法,也可以是互不相同的算法。
100.s502,启动引擎从第二存储器中获取第一指令集。
101.其中,第一指令集用于校验第二指令集,第二指令集用于引导操作系统启动,其中,第二指令集可以用于直接对操作系统进行验证,并在验证通过后启动操作系统,这种情况下,第一指令集可以是esbc;第二指令集还可以用于通过多层下级指令集,分层、间接地对操作系统进行验证,在验证通过后间接触发操作系统启动,比如,第二指令集的下级指令集为引导启动指令集(比如bios或uefi等),第二指令集用于验证引导启动指令集,在引导启动指令集的验证通过的情况下,触发引导启动指令集的运行,基于引导启动指令集的运行,执行对操作系统的验证,在对操作系统的验证通过的情况下,引导启动指令集的运行进程执行对操作系统的启动,这种情况下,第一指令集可以是一级esbc,第二指令集可以是二级esbc。
102.可选的,启动信息中可以包含第一指令集的地址,进而启动引擎可以获取第一指令集。
103.s503,启动引擎利用第一校验信息对第一指令集和第一根公钥进行验证,并在验证通过的情况下触发所述第一指令集运行。
104.第一根公钥是使用第一指令集校验第二指令集的依据。可选的,第一根公钥可以是设备的安全验证方的根公钥,比如,第一根公钥的安全验证方可以是设备制造商、或者设备使用者等。可选的,第一根公钥可以存储于第二存储器中。第一指令集和第一根公钥可以是启动引擎同时获取的,也可以基于不同的动作分开获取的。
105.启动引擎利用第一校验信息对第一指令集和第一根公钥进行校验的方式与第一校验信息的生成方式相对应,也就是说,芯片在生产阶段,会根据第一校验信息的生成方式,将与之对应的校验方式的写入启动信息,比如写进第三指令集中,或固化在硬件电路的逻辑信息中,进而启动引擎可以根据启动信息中的校验方式进行校验。
106.比如,若按照步骤s501中举例的第一种方式确定第一校验信息,那么启动引擎利用第一校验信息对第一指令集和第一根公钥进行验证的方式是:启动引擎通过第一合并算法,计算第一指令集和原始根公钥的第一合并结果,通过第一哈希算法计算该第一合并结果的第二哈希值,在第二哈希值与第一校验信息中的第一哈希值相同的情况下触发第一指令集运行。
107.又如,若按照步骤s501中举例的第二种方式确定第一校验信息,那么启动引擎通过第二哈希算法计算第一指令集的第五哈希值,通过第三哈希算法计算原始根公钥的第六哈希值,在第五哈希值与第一校验信息中的第三哈希值相同,且第六哈希值与第一校验信息中的第四哈希值相同的情况下,触发第一指令集运行。
108.启动引擎内部的实现方式有多种,相应地,启动引擎触发第一指令集运行的方式也有多种,这里不做限定,仅举例说明。比如,当启动引擎如图3中的启动引擎30包含第一处理器301、第三存储器302和第四存储器303时,第一处理器301在利用第一校验信息对第一指令集和第一根公钥验证通过时,第一处理器301将第四存储器303作为运行第一指令集的运行空间,运行第一指令集。又如,当启动引擎如图4中的启动引擎30包含硬件电路304时,硬件电路304在利用第一校验信息对第一指令集和第一根公钥验证通过时,硬件电路304向第二处理器40发送运行指令,第二处理器40接收到运行指令时,从第二存储器20中将第一指令集复制至第五存储器50,将第五存储器50作为运行第一指令集的运行空间,并运行第一指令集。
109.本技术实施例中,启动信息固化在启动引擎中,第一校验信息固化在第一存储器中,这就使得启动引擎利用第一校验信息验证第一指令集和第一根公钥的验证算法(包含在启动信息中)、和验证基准(也就是第一校验信息)都是可靠的,实现了将安全启动的信任链可靠地传递至第一指令集和第一根公钥,从而保证了设备的安全启动。
110.可选的,启动引擎触发运行第一指令集后,可以将信任链逐级传递下去,下面对信任链的传递进行介绍,在s503之后,还可以包括以下步骤:
111.s504,第一指令集的运行进程从第二存储器中获取二级公钥的第一签名信息,并利用第一根公钥和第一签名信息验证二级公钥。在二级公钥验证通过的情况下,执行s505。其中,二级公钥是第一根公钥的派生公钥。
112.s505,第一指令集的运行进程获取第二指令集以及第二指令集的第二签名信息,并利用二级公钥和第二签名信息验证第二指令集,在验证通过的情况下,触发第二指令集的运行,并执行s506。
113.s506,第二指令集的运行进程获取引导启动指令集,以及引导启动指令集的第三签名信息,并利用引导启动指令集对应的数字证书和第三签名信息,验证引导启动指令集,在验证通过的情况下,触发引导启动指令集的运行,并执行s507。
114.s507,引导启动指令集的运行进程获取应用软件指令集,以及应用软件指令集的第四签名信息,并利用应用软件指令集对应的数字证书和第四签名信息,验证应用软件指令集,在验证通过的情况下,触发应用软件指令集的运行,实现应用软件的启动。
115.为进一步说明上述过程,可以参阅图6,图6是本技术实施例提供的一种设备app安全启动的流程示意图,如图6所示,该设备包含芯片和闪存,该芯片为系统级芯片,芯片内部部署有soc。
116.soc中有启动引擎,包括bootrom和otp存储器。bootrom中存储有bsbc,otp中存储有第一校验信息。
117.闪存中存储有esbc(l1)文件、esbc(l2)文件、bios/os文件以及app文件。
118.esbc(l1)文件中包含esbc(l1)和第一根公钥,esbc(l1)是一级esbc。
119.esbc(l2)文件中包含二级公钥及其第一根私钥签名、esbc(l2)、数字签名校验证书1以及二级私钥签名。
120.其中,第一根私钥签名是使用第一根私钥对二级公钥对应的可靠版本密钥的签名,第一根私钥和第一根公钥属于同一密钥对。
121.二级私钥签名可以有两种实现方式,一种可选的实现中,二级私钥签名可以仅用于验证esbc(l2),比如,二级私钥签名可以是使用二级私钥对esbc(l2)对应的可靠版本指令集的签名;另一种可选的实现中,二级私钥签名可以用于验证esbc(l2),还可以用于验证数字签名校验证书1,以保证esbc(l2)以及数字签名校验证书1均可靠。比如,二级私钥签名是使用二级私钥对esbc(l2)的可靠版本指令集、以及数字签名校验证书1对应的可靠版本证书的签名,又如,二级私钥签名包括使用二级私钥对esbc(l2)的签名以及通过二级私钥对数字签名校验证书1的签名。二级私钥和二级公钥属于同一密钥对。数字签名校验证书1是用于验证bios/os文件的证书,比如,可以是bios/os代码的发布方的证书,数字签名校验证书1中包括公钥1。
122.bios/os文件包括bios/os代码、数字签名校验证书2、以及数字签名1。
123.其中,数字签名1可以有两种实现方式,一种可选的实现中,数字签名1可以仅用于校验bios/os代码,比如,数字签名1可以是使用私钥1对bios/os代码对应的可靠版本指令集的签名;另一种可选的实现中,数字签名1可以用于验证bios/os代码,还用于验证数字签名2校验证书,比如,数字签名1可以是使用私钥1对bios/os代码对应的可靠版本指令集、以及数字签名校验证书2对应的可靠版本证书的签名,又如,数字签名2可以包括使用私钥1对bios/os代码对应的可靠版本指令集的签名,以及使用私钥1对数字签名校验证书2对应的可靠版本证书的签名。私钥1和数字签名校验证书1中包含的公钥1属于同一密钥对。数字签名校验证书2用于校验app文件的证书,比如,可以是app代码的发布方的证书,数字签名校验证书2中包括公钥2。
124.app文件中包括app代码及其数字签名2。其中,数字签名2是使用私钥2对app代码的签名,私钥2和数字签名校验证书2中的公钥2属于同一密钥对。
125.如图6所示,app安全启动的流程具体如下:
126.s1、soc上电之后,运行bootrom中的bsbc,bsbc的运行进程使用otp存储器中的第一校验信息,对闪存中的第一根公钥和esbc(l1)进行验证,若验证不通过,启动失败,若验证通过,触发esbc(l1)的运行,并执行s2。
127.s2、esbc(l1)的运行进程利用第一根公钥和第一根私钥签名,验证二级公钥,若验证不通过,启动失败,若验证通过,执行s3。
128.s3、esbc(l1)的运行进程利用二级公钥和二级私钥签名,验证ebcs(l2),若验证不通过,启动失败,若验证通过,触发esbc(l2)的运行,并执行s4。
129.s4、esbc(l2)的运行进程利用数字签名校验证书1和数字签名1,验证bios/os代码,若验证不通过,启动失败,若验证通过触发bios/os代码的运行,并执行s5。
130.s5、os的运行进程利用数字签名校验证书2和数字签名2,验证app代码,若验证不通过,启动失败,若验证通过,触发app代码的运行,实现app的启动。
131.其中,若二级私钥签名是通过二级私钥对esbc(l2)的可靠版本指令集的签名,那么,s3中,在对ebcs(l2)的验证通过后,即可执行s4;若二级私钥签名是使用二级私钥对esbc(l2)的可靠版本指令集、以及数字签名校验证书1对应的可靠版本证书的签名,那么,s3中,esbc(l1)的运行进程利用二级公钥和二级私钥签名,验证ebcs(l2)以及数字签名校验证书1,并在ebcs(l2)以及数字签名校验证书1的验证均通过的情况下,执行s4,否则启动失败。
132.若数字签名1是使用私钥1对bios/os代码对应的可靠版本指令集的签名,那么,s4中,在对bios/os代码的验证通过后,即可执行s5;若数字签名1是使用私钥1对bios/os代码对应的可靠版本指令集、以及数字签名校验证书2对应的可靠版本证书的签名,那么在s4中,esbc(l2)的运行进程利用数字签名校验证书1和数字签名1,验证bios/os代码以及数字签名校验证书2,并在bios/os代码以及数字签名校验证书2的验证均通过的情况下,执行s5,否则启动失败。
133.上述s1对应步骤s501-s503的执行过程,s2-s5分别对应s503之后的可选步骤s504-s507。通过上述过程,可以使得将信任链从启动信息(bsbc)和第一校验信息中,依次传递给第一指令集(esbc(l1))、二级公钥、第二指令集(esbc(l2))、引导启动指令集(bios/os代码)以及应用软件指令集(app代码),实现了从应用软件逐级的、安全的启动,保证了设
备的安全性。
134.需要说明的是,上述bios/os文件可以是os文件,或者bios/os文件包括bios文件和os文件。在bios/os文件是os文件的情况下,esbc(l1)和/或esbc(l2)可以具有bios的功能,即加电自检、初始化、引导操作系统启动等功能。在bios/os文件包括bios文件和os文件的情况下,esbc(l2)的运行进程对bios/os代码的验证通过后,bios可以进行自检、初始化后,引导os运行。
135.进一步可选的,第一存储器中还可以存储有二级公钥的有效性信息,该方法还可以包括根据二级公钥的有效性信息对二级公钥进行验证,在根据二级公钥的有效性信息对二级公钥验证通过,并且s504中利用第一根公钥和第一签名信息对二级公钥验证通过的情况下,执行s505。
136.一种实现方式中,二级公钥的有效性信息包括派生密钥吊销信息。第一根公钥可能有多个定期更新的派生公钥,每当有新的派生公钥生成并投入使用时,旧的派生公钥将被吊销,衍生密钥吊销信息可以指示被吊销的旧的派生公钥和/或新的有效的派生公钥,进而根据派生密钥吊销信息可以判断二级公钥是否有效。
137.比如,二级公钥的有效性信息可以通过八个比特位的取值指示,这八个比特位分别指示八个派生公钥的有效性,当比特位中数据为“0”时,表示对应的派生公钥有效,当比特位中的数据为“1”时,表示对应的派生公钥被吊销。具体使用时,这八个比特位均默认为“0”,在生成第一个派生公钥使用一段时间后,生成更新的第二个派生公钥,并将第一个派生公钥吊销,这时可以将指示第一个派生公钥的比特位设置为“1”,第二个派生公钥使用一段时间后,生成更新的第三个派生公钥,并将第二个派生公钥吊销,这时可以将指示第二个派生公钥的比特位设置为“1”,按此方式,在定期更新派生公钥时,将旧的派生公钥吊销,维护新的派生公钥的有效性。
138.可选的,第一存储器中可以存储有两个或两个以上的校验信息,第一存储器中还存储有第一指示信息,第二存储器中存储有两个或两个以上的根公钥,第一存储器中的校验信息可以与第二存储器中的根公钥一一对应。第一指示信息可以指示启动引擎用于指示在第一存储器存储的两个或两个以上的校验信息中,用于验证第一指令集的第一校验信息。因此,启动引擎可以根据第一指示信息,从第一存储器的两个或两个以上的校验信息中,获取第一校验信息,从第二存储器中获取第一校验信息对应的第一根公钥,进而利用第一校验信息验证第一指令集和第一根公钥,在验证通过的情况下,触发第一指令集的运行。
139.一种可选方式中,第一指示信息通过第一存储器中第一指示位的取值表示,第一指示位是第一存储器中的比特位。比如,第一存储器可以存储两个校验信息,第一指示信息可以通过一个比特位的取值表示,该比特位的取值可以为“0”或“1”,分别指示这两个校验信息。又如,第一存储器可以存储三个校验信息,第一为指示信息可以通过两个比特位的取值表示,这两个比特位的取值可以为“00”、“10”或“11”,分别指示这三个校验信息。
140.进一步可选的,第一指示信息可以指示两个或两个以上的用于对第一指令集进行校验的校验信息,也就是说,除指示第一校验信息之外,还可以指示第二校验信息,第二校验信息可以有一个或有多个。
141.比如,第一存储器中可以存储四个校验信息,第一指示信息可以通过四个比特位的取值表示,这四个比特位分别与四个校验信息相对应,当校验信息对应的比特位的取值
为“1”时,表示该校验信息被第一指示信息指示,如这四个比特位的取值为“1100”时,表示前两个比特位对应的校验信息中一个为第一校验信息,另一个为第二校验信息。进而,启动引擎分别利用第一校验信息分别对第一指令集和第一根公钥校验,利用第二校验信息分别对第一指令集和第二根公钥验证,其中,第二根公钥是第二校验信息对应的根公钥,在利用第一校验信息进行的验证和利用第二校验信息进行的验证均通过的情况下,触发第一指令集的运行。
142.这种第一指示信息指示第一校验信息和第二校验信息的方式可以实现多签名安全启动机制,关于多签名安全启动机制将在后文进行介绍,此处不再详述。
143.上述通过第一指示信息指示校验信息的方法可以应用在多种不同的场景中,比如,第一种场景中,第一存储器中可以预先存储多个校验信息,这多个校验信息是不同验证方对应的校验信息,用户在使用时,根据自身的需要,通过第一指示信息指示需要验证的校验信息,灵活性较强。又如,第二种场景中,第一指令集和/或第一根公钥需要更新时,如失效或变得不安全时,可以对第一指令集和/或第一根公钥进行更新,并根据更新操作之后的第一指令集和第一根公钥确定新的第一校验信息。应理解,若第一指令集进行了更新,第一根公钥未更新,则新的第一校验信息是根据更新后的第一指令集和未更新的第一根公钥确定;若第一指令集未更新,第一根公钥进行了更新,则新的第一校验信息是根据未更新的第一指令集和更新后的第一根公钥确定;若第一指令集和第一根公钥均进行了更新,则新的第一校验信息根据更新后的第一指令集和更新后的第一根公钥确定。
144.图7为针对第二种场景的示例,参见图7,图7为本技术实施例提供的一种第一根公钥的更新示意图,如图7所示,更新前的第一存储器中存储有第一校验信息,第二存储器中存储有与第一校验信息对应第一根公钥,第一存储器中的第一指示位的取值为“0”,用于指示启动引擎在上电时,根据第一校验信息对第一指令集和第一根公钥验证。
145.若使用第二根公钥更新第一根公钥,将第二根公钥存储在第二存储器中,并根据第一指令集和第二根公钥确定新的校验信息,得到第二校验信息,将第二校验信息存储在第一存储器中,并将第一指示位的取值修改为“1”,用于指示启动引擎在上电时,根据第二校验信息对第一指令集和第二根公钥验证。
146.若图7中的信任链从第一指令集继续往下传递,更新前的第二存储器中可以存储有二级公钥1及其第一根私钥签名,以及第二指令集及其二级私钥1签名。第一指示位的取值“0”还可以指示根据第一根公钥对二级公钥1验证;在二级公钥1验证通过的情况下,利用二级公钥1和二级私钥1签名,验证第二指令集和数字签名校验证书1;在第二指令集和数字签名校验证书1的验证均通过的情况下,利用数字签名校验证书1和数字签名1,验证操作系统和数字签名校验证书2;在操作系统和数字签名校验证书2的验证通过的情况下,利用数字签名校验证书2和数字签名2,验证应用软件,在应用软件的验证通过的情况下,启动引用软件。
147.在使用第二根公钥更新第一根公钥之后,将第二根公钥的二级公钥2以及二级公钥2的第二根私钥签名存储在第二存储器中,第二根私钥签名是通过第二根私钥对二级公钥2对应的可靠版本密钥的签名,其中第二根私钥与第二根公钥属于同一密钥对;并使用二级公钥2对应的私钥,对第二指令集的可靠版本指令集进行签名,得到二级私钥2签名,将二级私钥2签名存储在第二存储器中。此外,第一指示位中的取值为“1”,还可指示根据第二根
公钥和第二根私钥签名对二级公钥2验证,并在验证通过的情况下,利用二级公钥2和二级私钥2签名验证第二指令集和数字签名校验证书3;在第二指令集和数字签名校验证书3的验证均通过的情况下,利用数字签名校验证书3和数字签名3,验证操作系统的数字签名证书3;在操作系统和数字签名校验证书3的验证通过的情况下,利用数字签名校验证书4和数字签名4,验证应用软件,在应用软件验证通过的情况下,启动应用软件。
148.需要说明的是,上述数字签名校验证书3可以与数字签名校验证书1相同,也可以不同,数字签名证书4可以与数字签名校验证书2相同,也可以不同。可选的,若数字签名校验证书3与数字签名校验证书1相同,则数字签名证书3和数字签名1相同;若数字签名校验证书3与数字签名校验证书1不相同,则数字签名3和数字签名1不相同。若数字签名校验证书4与数字签名校验证书2相同,数字签名4和数字签名2相同,若数字签名校验证书4与数字签名校验证书2不相同,则数字签名4和数字签名2不相同。
149.通过上述过程完成了第一根公钥的更新升级,第一指令集的更新升级也可参阅上述过程进行,此处不再赘述。
150.可选的,第一存储器中还可以存储有二级公钥对应的分组信息,分组信息用于指示芯片的应用设备类别,比如,芯片的应用设备类别可以是路由器、交换机、中继器等设备类别中的一种,也就是该分组信息指示了芯片可以用在一类设备中。
151.其中,二级公钥的第一签名信息是对二级公钥的可靠版本公钥(二级公钥的可靠版本公钥可以是在二级公钥刚刚派生出来后,未被篡改的公钥)以及二级公钥的分组信息共同签名得到的。那么,在s504中,在对二级公钥验证的过程中,具体可以获取第一存储器中二级公钥的分组信息,根据二级公钥的分组信息以及二级公钥确定第三哈希值,并且利用第一根公钥对第一签名信息进行解密得到第四哈希值,在第三哈希值与第四哈希值相同的情况下,触发第二指令集的运行。
152.具体应用中,一些设备制造商针对不同类型的设备,派生出不同的二级公钥供不同类型的设备使用,如果出现他人恶意将某类型设备的二级公钥及其第一签名信息拷贝至其他类型的设备,上述这种二级公钥签名的签名机制,会使得其他类型的设备在启动过程中,根据自己的分组信息和二级公钥的第一签名信息,无法通过对二级公钥的校验,从而避免了这种恶意行为造成的其他类型设备的恶意启动。
153.比如,设备制造商根据第一根公钥派生出二级公钥a和二级公钥b,二级公钥a用于路由器的安全启动,二级公钥b用于交换机的安全启动。在正常使用情况下,路由器可以使用二级公钥a,通过上述步骤s501-s507完成安全启动,交换机可以使用二级公钥b,通过上述步骤s501-s507完成安全启动。但是在异常情况下,比如路由器的二级私钥a(二级私钥a是与二级公钥a属于同一密钥对的私钥)被恶意泄露给他人,二级私钥b(二级私钥b是与二级公钥b属于同一密钥对的私钥)未泄露。
154.这时,恶意得到二级私钥a的他人,只能对交换机的第二指令集恶意修改并启动,若对路由器的第二指令集修改,并通过二级私钥a进行签名,将路由器的二级公钥a以及二级公钥a的第一签名信息拷贝至交换机中,企图通过二级公钥a完成交换机的启动,那么,由于交换机对二级公钥b验证的过程中,二级公钥a的第一签名信息是对二级公钥a和路由器这一分组信息签名得到的,但交换机中固化存储的是交换机这一分组信息,因此,交换机中对二级公钥a的校验将会失败,该恶意方式不能启动交换机,保证了交换机的安全。
155.以上介绍了设备该方法中的单签名安全启动机制,本方法还可以支持设备的多签名安全启动机制。应理解,设备在基于多签名安全启动机制逐级启动指令集时,任一层级的指令集可以由多个签名信息(这多个签名信息是通过不同的私钥进行签名的),验证过程中需要使用每一个签名信息独立对指令集进行验证,在验证均通过的情况下,触发指令集的运行,如果有任意一个签名信息对指令集的验证不通过,那么设备的启动失败,中断启动。
156.这里,以双签名安全启动机制为例进行具体介绍,参阅图8,图8是本技术实施例提供的一种双签名安全启动示意图,如图8所示,第二存储器中可以存储有第一根公钥和第二根公钥,相应的,第一存储器中可以存储有第一根公钥对应的第一校验信息,以及第二根公钥对应的第二校验信息。其中,第一根公钥和第二根公钥均可用于第一指令集校验第二指令集的依据,在利用第一根公钥对第二指令集的校验通过,并且利用第二根公钥对第二指令集的校验通过的情况下,第一指令集触发第二指令集运行。应理解,图8中示出了第二存储器在芯片外部的情况,可选的,第二存储器也可以在芯片内部。
157.如图8所示,具体的,可以根据启动信息,从第一存储器中获取第一根公钥和第二根公钥,从第二存储器中获取第一指令集,并执行1a和1b的操作:
158.1a、利用第一校验信息验证第一指令集和第一根公钥。
159.1b、利用第二校验信息验证第一指令集和第二根公钥。
160.在1a和1b中的验证均通过的情况下,启动引擎触发第一指令集运行。
161.第一指令集运行后,第一指令集的运行进程可以验证第二指令集的可靠性。可选的,如图8所示,第二指令集的签名信息可以有两个,分别是二级公钥1对应的二级私钥1签名、以及二级公钥2对应的二级私钥2签名。其中,二级公钥1是第一根公钥对应的派生公钥,二级公钥2是第二根公钥对应的派生公钥。第一指令集的运行进程对第二指令集可靠性的验证可以包括2a和2b的操作:
162.2a、第一指令集的运行进程使用第一根公钥和第一根私钥签名验证二级公钥1。
163.2b、第一指令集的运行进程使用第二根公钥和第二根私钥签名验证二级公钥2。
164.在2a和2b中的验证均通过的情况下,执行3a和3b的操作:
165.3a、第一指令集的运行进程使用二级公钥1和二级私钥1签名验证第二指令集。
166.3b、第一指令集的运行进程使用二级公钥2和二级私钥2签名验证第二指令集。
167.其中,一种可选的方式中,二级私钥1签名还可以用于验证书签名证书1,二级私钥2签名还可以用于验证数字签名校验证书2,在3a中可以使用二级公钥1和二级私钥1签名验证第二指令集和数字签名校验证书1,在3b中使用二级公钥2和二级私钥2签名验证第二指令集和数字签名校验证书2。
168.在3a和3b中的验证均通过的情况下,触发第二指令集的运行,第二指令集的运行进程可以验证操作系统的可靠性。可选的,如图8所示,操作系统的签名信息可以有两个,分别是数字签名校验证书1对应的数字签名1、以及数字签名校验证书2对应的数字签名2。第二指令集的运行进程对操作系统的验证可以包括4a和4b的操作:
169.4a、第二指令集的运行进程使用数字签名校验证书1和数字签名1验证操作系统。
170.4b、第二指令集的运行进程使用数字签名校验证书2和数字签名2验证操作系统。
171.其中,一种可选的方式中,数字签名1还可以用于验证数字签名校验证书3,数字签名2还可以用于验证数字签名校验证书4,在4a中,可以使用数字签名校验证书1和数字签名
1验证操作系统和数字签名校验证书3,在4b中,可以使用数字签名校验证书2和数字签名2验证操作系统和数字签名校验证书4。
172.在4a和4b中的验证均通过的情况下,触发操作系统的运行,操作系统可以验证应用软件的可靠性。可选的,如图8所示,应用软件的签名信息可以有两个,分别是数字签名校验证书3对应的数字签名3、以及数字签名校验证书4对应的数字签名4。操作系统对应用软件的验证可以包括5a和5b的操作:
173.5a、操作系统使用数字签名校验证书3验证数字签名3。
174.5b、操作系统使用数字签名校验证书4验证数字签名4。
175.在5a和5b中的验证均通过的情况下,触发应用软件的运行。
176.需要说明的是,上述数字签名校验证书1和数字签名校验证书3可以相同,也可以不同;数字签名校验证书2和数字签名校验证书4可以相同,也可以不同。上述1a和1b中的操作可以同时执行,也可以先后执行,1a和1b的先后顺序不做限定;2a和2b中的操作可以同时执行,也可以先后执行,2a和2b的先后顺序不做限定;3a和3b中的操作可以同时执行,也可以先后执行,3a和3b的先后顺序不做限定;4a和4b中的操作可以同时执行,也可以先后执行,4a和4b的先后顺序不做限定;5a和5b中的操作可以同时执行,也可以先后执行,5a和5b的先后顺序不做限定。
177.应理解,多签名安全启动机制的执行可以是在第一存储器中存储有第一校验信息和第二校验信息时,设备默认的启动方式,也可以是通过第一存储器中的指示信息而选择的启动方式,比如通过上述第一指示信息指示,第一指示信息指示第一校验信息和第二校验信息,通过第一校验信息和第二校验信息实现双签名机制,也可以通过其他的指示信息指示,此处不做限定。通过多签名安全启动机制的实现过程,分别针对第一指令集、第二指令集、操作系统、应用软件进行了双签名校验,第一指令集、第二指令集、操作系统或应用软件中的任意一个被单方面篡改时,都会使安全启动中断,从而提高了设备的安全等级。
178.本实施例提供的安全启动方法将验证第一指令集的校验算法固化在启动引擎的启动信息中,将验证第一指令集的校验基准固化在第一存储器中的第一校验信息中,通过固化的启动信息和固化的第一校验信息可以确定第一指令集的可靠性,而第一指令集以及第一指令集的下级指令集均可以被保存在可读可写的第二存储器中,使得第一指令集、第一根公钥或第一指令集的下级指令集等均可以被修改或重写。
179.比如,一种场景中,在第一存储器被写入次数未达到最大值时,可以对第一指令集或第一根公钥修改,重新确定修改后第一指令集和第一根公钥的第一验证信息,并把新的第一验证信息写入第一存储器。
180.又如,另一种场景中,可以对第一指令集的下级指令集进行修改,比如对第二指令集进行修改后,并重新对修改后的第二指令集进行签名,在安全启动时,可以运行原先的第一指令集,通过第一指令集的运行进程,利用第二指令集新的签名,对修改后的第二指令集进行校验,校验通过后触发第二指令集运行,因此第二指令集的合法修改不影响设备系统的安全启动,也无需因为算法的升级对芯片的设计和构造有任何修改。
181.又如,在又一种场景中,若设备制造商发现之前生产的芯片中第一指令集中的算法有缺陷,需要对第一指令集进行升级,此时设备制造商可以在后续生产的芯片的过程中,将升级后的第一指令集写入第二存储器,将根据升级后的第一指令集和第一根公钥确定的
新的第一校验信息固化在第一存储器中,实现了在芯片硬件结构不变的情况下,完成对芯片的升级。
182.本技术实施例中的方法,相比于将所有系统安全启动的所有验证算法和验证基准均固化在芯片内部的方式,更加灵活,不仅保证了设备的安全启动,同时,缩短了因安全启动中使用的指令集或公钥变更,而对芯片进行升级的周期和成本。
183.本技术实施例还提供了一种安全启动装置,该装置可以是通信设备、互联网设备或物联网设备等设备,还可以是设备中的一部分(比如电路、或芯片等),通过该安全启动装置,可以提高设备系统启动的安全性。参阅图9,图9是本技术实施例提供的一种安全启动装置的结构示意图,如图9所示,该安全启动装置90可以至少包括第一存储器901和启动引擎902。
184.第一存储器901用于存储第一校验信息。
185.启动引擎902用于固化存储启动信息,还用于:根据启动信息从第一存储器获取第一校验信息,从第二存储器获取第一指令集,利用第一校验信息对第一指令集和第一根公钥进行校验,在校验通过的情况下触发第一指令集的运行。
186.其中,第一根公钥为通过第一指令集校验第二指令集的依据,第一指令集还用于在第二指令集的校验通过后触发第二指令集运行;第二指令集用于引导操作系统启动。
187.第一存储器901为一次性可编程存储器。
188.第二存储器为可读可写存储器,如快闪存储器(flash memory)、硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd),或其任意组合。可选的方式中,第二存储器可以为该安全启动装置90内部的存储器,可以为该安全启动装置90外部的存储器。
189.第一存储器901和启动引擎902互相连接,例如,可以通过总线904相连。总线904可以是pci总线或eisa总线等。总线904可以分为地址总线、数据总线和控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
190.可选的,安全启动装置90还包括通信接口903,通信接口903用于与其他装置或其他设备进行通信,比如,在第二存储器为该安全启动装置90外部的存储器时,可以通过通信接口903,从第二存储器中获取第一指令集等。
191.可选的,启动信息包括第三指令集,第三指令集用于指示第一校验信息对第一指令集和第一根公钥进行校验,以及在通过的情况下运行第一指令集。
192.启动引擎902可以包括第三存储器和第一处理器。第三存储器用于存储第三指令集。第一处理器用于运行第三指令集。
193.其中,第一处理器可以是中央处理器(central processing unit,cpu),第三存储器可以是只读存储器(read only memery,rom),例如启动只读存储器(bootrom)。
194.该可选方式中,启动引擎902内部的结构可以参阅图3对应的架构中启动引擎30的内部结构及其相应的介绍,此处不再赘述。
195.可选的,启动引擎902可以包括硬件电路,启动信息包括固化在硬件电路中的逻辑信息,硬件电路用于根据逻辑信息,利用第一校验信息对第一指令集和第一根公钥进行校验,并在对第一指令集和第一根公钥的校验通过的情况下触发第二处理器运行第一指令集。
196.其中,硬件电路可以是数字信号处理器(digital signal processor,dsp),专用
集成电路(application-specific integrated circuit,asic),现场可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。第二处理器可以是中央处理器,第二处理器可以是该安全启动装置90内部的处理器,也可以是该安全启动装置90外部的处理器。
197.该可选方式中,启动引擎902内部的结构可以参阅图4对应的架构中启动引擎30的内部结构及其相应的介绍,此处不再赘述。
198.可选的,第二存储器中存储有第二根公钥,第一存储器存储有第二校验信息,其中,第二校验信息用于验证第一指令集和第二根公钥。启动引擎902可以具体用于在第一指令集、第一根公钥和第二根公钥的验证均通过的情况下触发第一指令集运行,第二根公钥是通过第一指令集校验第二指令集的依据,第一指令集具体用于在利用第一根公钥对第二指令集的校验通过,且利用第二根公钥对第二指令集的校验通过的情况下,触发第二指令集运行。
199.可选的,第一存储器901中存储有两个或两个以上的校验信息,第一存储器901中还存储有第一指示信息,启动引擎902具体用于:根据第一指示信息从两个或两个以上的校验信息中获取第一校验信息,并利用第一校验信息验证第一指令集以及第一校验信息对应的第一根公钥,以及在验证通过的情况下,触发第一指令集的运行。
200.可以理解的,本技术实施例中的安全启动装置90可以实现图5对应的实施例中的步骤。关于图9中的安全启动装置90包括的功能组件的具体实现方式及相应的有益效果,可参考前述图5对应的实施例的具体介绍,此处不再赘述。
201.在本技术实施例中还提供了一种存储介质,可以用于存储图9所示实施例中的安全启动装置90所用的指令,其包含用于执行上述实施例中为安全启动装置90所设计的程序。该存储介质包括但不限于快闪存储器、硬盘、固态硬盘。
202.在本技术实施例中还提供了一种程序产品,该程序产品被安全启动装置运行时,可以执行上述图9所示实施例中为安全启动装置90所设计的安全启动方法。
203.本技术的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
204.此外,在本技术实施例的描述中,除非另有说明,“/”表示或的意思,例如,a/b可以表示a或b;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,在本技术实施例的描述中,“多个”是指两个或多于两个。
205.本领域普通技术人员可以理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献