芯片和启动芯片的方法与流程

文档序号:17261617发布日期:2019-03-30 09:42阅读:1246来源:国知局
芯片和启动芯片的方法与流程

本申请涉及计算机领域,尤其涉及一种芯片和一种启动芯片的方法。



背景技术:

芯片是组成计算机系统的关键部件,其可以控制计算机系统的运行以及数据的读取,因此,芯片的安全对计算机系统的正常运行和数据的保密起到至关重要的作用。固件(firmware)作为芯片的大脑控制着芯片的运行,一旦固件被篡改或者被恶意代码植入,数据的安全性就无法得到保障,因此,确保芯片安全的关键在于确保固件的安全性。

一种检验固件安全性的方法是通过非对称加密算法(例如,李维斯特-萨莫尔-阿德曼,(rivest-shamir-adleman,rsa)算法)检验固件的安全性。其基本思路是利用芯片内部固化的引导只读存储器(bootread-onlymemory,bootrom)中的代码执行安全校验策略,对存储在bootrom之外的固件(简称为“外部固件”)做签名校验,保证外部固件的完整性和来源可信。若外部固件的完整性校验未通过,或者,若外部固件的来源不可信,则芯片拒绝执行该外部固件,从而确保了芯片的安全性。

然而,bootrom中的代码(简称为“bootrom代码”)需要在芯片流片(即,芯片生产)前固化在芯片内,芯片生产后bootrom代码不可更改,一旦bootrom代码存在缺陷(bug)或者其它安全隐患(例如,被破解),则需要重新流片,这对芯片的开发造成不利影响。



技术实现要素:

本申请提供了一种芯片和一种启动芯片的方法,能够解决芯片流片后部分bootrom代码(即,执行安全校验策略的代码)无法被修改的问题。

第一方面,提供了一种芯片,该芯片包括:引导引擎,用于固化存储引导芯片启动的启动代码,或者,用于根据固化在引导引擎中的逻辑信息引导芯片启动,启动代码或逻辑信息还用于基于校验信息验证存储于引导引擎之外的第一段固件的安全性,第一段固件为芯片启动后第一段执行安全校验策略的代码;可编程存储器,用于存储校验信息。

引导引擎可以是通过固化方式存储信息的存储器,其中存储有启动代码,该启动代码可以被核执行;引导引擎也可以是硬件电路,该硬件电路固化有逻辑信息,该硬件电路可以在上电后根据该逻辑信息引导芯片启动。由于第一段固件存储在引导引擎之外,在流片时无需将第一段固件固化在芯片中,因此,在流片完成后,若需要对第一段固件进行修改,则无需重新流片即可对第一段固件进行修改,从而解决了背景技术中所提出的问题。

可选地,上述“芯片启动”指的是:芯片从复位(reset)状态开始运行指令。

可选地,可编程存储器还包括第一比特位,第一比特位的状态用于指示是否对第一段固件执行安全校验处理。

可以在芯片调试阶段将第一比特位设置为无需对第一段固件执行安全校验处理,并且,可以在芯片调试完成后将第一比特位设置为需要对第一段固件执行安全校验处理,从而可以方便调试芯片。

可选地,可编程存储器还包括第二比特位,第二比特位的状态用于指示是否禁止对可编程存储器执行写入操作。

为了防止可编程存储器的剩余存储空间被写入非法信息,或者,为了防止可编程存储器中存储的信息被修改,可编程存储器内还可以提供一个专用比特位(即,第二比特位)来指示可编程存储器锁定存储空间。

可选地,可编程存储器为一次性可编程(onetimeprogrammable,otp)存储器。

otp存储器是一种仅能编程一次的存储器,即,校验信息一旦被烧入otp存储器的集成电路,该校验信息将不可被更改,从而提高了芯片的安全性。

可选地,可编程存储器还用于存储下列信息中的至少一个:根公钥的哈希值、不安全版本号和已吊销的二级密钥的标识。

根公钥的哈希值用于校验根公钥的安全性,不安全的版本号用于确定待执行的固件的版本是否属于安全版本,已吊销的二级密钥的标识用于确定二级密钥是否安全。上述信息可以进一步增强芯片的安全性。

可选地,所述芯片还包括:第一存储器,用于存储第一段固件。

第一存储器例如是闪存,闪存可以集成在芯片上。

可选地,所述芯片还包括:第二存储器,用于存储第一段固件在被执行时产生的数据。

第二存储器例如是随机访问存储器(randomaccessmemory,ram),用于为第一段固件提供可被执行的空间。

可选地,校验信息为基准值,引导引擎具体用于:对第一段固件执行摘要计算,得到计算结果;将计算结果与基准值对比,验证第一段固件的安全性。

可选地,所述芯片还包括:处理器核,用于在第一段固件的安全性校验通过后,运行第一段固件执行安全校验策略。

可选地,所述引导引擎为硬件电路。

通过硬件电路引导芯片启动以及对第一段固件进行安全性校验,可以进一步减小了芯片出现缺陷(bug)的风险。,所述硬件电路用于根据固化在所述引导引擎中的逻辑信息引导芯片启动。

可选地,所述引导引擎为bootrom,bootrom用于固化存储引导芯片启动的启动代码。

第二方面,本申请提供了一种启动芯片的方法,应用于包括可编程存储器和引导引擎的芯片,该方法包括:向第一存储器的控制器发送读命令,读命令用于读取第一存储器中的第一段固件,第一存储器为可读可写存储器,第一段固件为芯片启动后第一段执行安全校验策略的代码,其中,所述芯片被固化在引导引擎中的启动代码或者逻辑信息引导启动;从可编程存储器中读取校验信息,校验信息用于验证第一段固件的安全性;根据校验信息验证第一段固件的安全性。

可选地,所述第一存储器与所述引导引擎为两个不同的组件。

当引导引擎为bootrom时,上述方法可以由芯片的核执行;当引导引擎为硬件电路时,上述方法可以由该硬件电路执行。由于第一段固件存储在引导引擎之外,在流片时无需将第一段固件固化在芯片中,因此,在流片完成后,若需要对第一段固件进行修改,则无需重新流片即可对第一段固件进行修改,从而解决了背景技术中所提出的问题。

可选地,校验信息为基准值,根据校验信息验证第一段固件的安全性,包括:对第一段固件执行摘要计算,得到计算结果;对比该计算结果和基准值,验证第一段固件的安全性。

可选地,上述摘要计算为哈希算法,上述计算结果为哈希值,所述对比计算结果和基准值,验证第一段固件的安全性,包括:

当哈希值与基准值相同时,确定第一段固件的安全性校验通过;

当哈希值与基准值相异时,确定第一段固件的安全性校验失败。

第三方面,本申请还提供了一种电子设备,包括第一方面所述的芯片。其中,该电子设备在启动该芯片时,按照第二方面所述的方法进行启动。

第四方面,本申请提供了一种服务器,包括处理器和基板管理控制器(baseboardmanagementcontroller,bmc),其中,bmc为第一方面所述的芯片。

可选地,服务器还包括第四代双倍速率存储器(ddr4),ddr4与bmc连接,用于存储处理器和/或bmc运行代码时产生的临时数据。

可选地,服务器还包括寄存器,该寄存器与bmc连接,用于存储处理器和bmc之间的交互信息。

可选地,服务器还包括闪存,bmc闪存用于存储第一方面所述的第一段固件。

可选地,服务器还包括基本输入输出系统(basicinputoutputsystem,bios)闪存,bios闪存用于存储服务器的bios。

可选地,服务器还包括视频接口、物理层芯片和网卡,其中,视频接口用于连接显示器,物理层芯片与网卡和bmc连接,物理层芯片用于为服务器提供数据收发服务。

第五方面,本申请提供了一种终端设备,包括:系统级芯片(systemonchip,soc),该soc为第一方面所述的芯片。

可选地,该终端设备还包括闪存,用于存储第一方面所述的第一段固件。

可选地,该终端设备还包括控制电路,用于基带信号与射频信号的转换以及对射频信号进行处理。

可选地,该终端设备还包括天线,用于发送控制电路输入的射频信号,以及,用于向控制电路发送接收到的射频信号。

可选地,该终端设备还包括输入输出装置,用于接收用户输入的数据以及对用户输出数据。

第六方面,本申请提供了一种基站,包括:soc,该soc为第一方面所述的芯片。

可选地,该基站还包括闪存,用于存储第一方面所述的第一段固件。

可选地,该基站还包括远端射频单元(remoteradiounit,rru)和基带单元(basebandunit,bbu),bbu用于进行基带处理,以及,对基站进行控制;rru用于射频信号的收发以及射频信号与基带信号的转换。

附图说明

图1是一种适用于本申请的芯片系统的示意图;

图2是本申请提供的一种芯片的示意图;

图3是本申请提供的另一种芯片的示意图;

图4是本申请提供的启动芯片的方法的示意图;

图5是本申请提供的签名流程示意图;

图6是本申请提供的签名校验流程示意图;

图7是本申请提供的一种包含芯片的服务器的示意图;

图8是本申请提供的一种包含芯片的终端设备的示意图;

图9是本申请提供的一种包含芯片的网络设备的示意图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

图1是一种适用于本申请的芯片系统的示意图。

如图1所示,系统100包括内部只读存储器(internalread-onlymemory,irom)110、内部静态随机访问存储器(internalstaticrandomaccessmemory,isram)120、闪存(flash)控制器130、闪存140、同步动态随机存储器(synchronousdynamicrandomaccessmemory,sdram)控制器150、sdram160、电子熔化存储器(efuse)170和核(core)180。

其中,irom110、isram120、闪存控制器130、sdram控制器150、efuse170和核180位于同一个芯片上,闪存140和sdram160可以位于该芯片上,也可以位于该芯片之外,例如,位于云服务器或者存储服务器中的单板上。核180例如是中央处理器(centralprocessingunit,cpu)的核,即,控制单元(controlunit,cu)。

irom110即bootrom,用于存储启动代码,核180在上电之后执行固化在irom110中的启动代码,该启动代码即引导程序(bootloader,bl),isram120为引导程序提供运行空间。闪存140用于存储其它引导程序(该引导程序例如需要被启动代码引导运行,并且,用于在运行后引导其它程序运行)和操作系统(operationsystem,os)。闪存控制器130用于控制闪存140,对闪存140执行读操作或写操作。sdram160用于存储芯片(例如,基板管理控制器(baseboardmanagementcontroller,bmc))的操作系统在运行时生成的文件和临时数据。sdram控制器150用于控制sdram160执行读操作或写操作。核180用于运行操作系统。

系统100所示的各个存储器中闪存140和irom110在断电后能够保存代码,其中,irom110中存储的代码为启动代码;闪存140中存储有引导程序和os。由于闪存140中的代码不能直接被执行(即,需要被引导执行),因此,系统100上电后,核180首先运行irom110中存储的代码。其中,核180在运行irom110中存储的代码的过程中可以根据efuse170中存储的信息确定是否进入安全引导模式。

核180运行irom110中的启动代码之后可以引导闪存140中存储的引导程序。例如,核180可以将闪存140中的引导程序复制到isram120中,并在isram120中运行该引导程序。

核180运行闪存140中的引导程序对sdram控制器150执行初始化,并将闪存140中的操作系统加载到sdram160中。随后,核180开始运行操作系统,芯片启动流程执行完毕。

应理解,系统100所包含的组件以及各个组件之间的位置关系仅是举例说明,适用于本申请的技术方案的系统不限于图1所示的系统100。系统100包含的组件还可以被替换为其它类型的具有相同功能的组件,组件替换后的系统同样适用于本申请所提供的技术方案。例如,闪存140可以被替换为安全数字(securedigital,sd)存储卡,sdram160可以被替换为其它类型的动态随机存储器(dynamicrandomaccessmemory,dram)。

系统100还可以包含更多的组件和更少的组件,随着系统100中所包含组件的不同,芯片启动流程也略有差异。

例如,若闪存140为非或(notor,nor)闪存,则irom110在引导芯片运行闪存140中存储的引导程序时,无需将该引导程序复制到isram120,引导程序可以直接在闪存140中被执行。相应地,系统100也可以不再包含isram120。

在芯片启动的过程中,为了确保引导程序未被篡改,需要对引导程序的安全性进行校验。由于bootrom中的代码均为固化代码,出厂之后无法被更改,因此,通常将执行安全校验的程序写入bootrom,由bootrom执行安全校验操作。

然而,由bootrom执行安全校验操作存在诸多不利因素。

首先,由于安全校验代码需要在芯片流片时写入bootrom,因此,若芯片流片完成后发现安全校验代码存在缺陷(bug)或者安全隐患,例如,安全校验算法被破解,则芯片需要重新流片。

其次,将安全校验代码写入bootrom还存在产品功能赶不上客户需求的问题,例如,芯片流片前设计的安全校验算法为单签名校验算法,芯片流片后,客户希望在芯片上应用双签名校验算法,则芯片需要重新流片。

再次,bootrom代码开发验证的工作量很大,在芯片的设计阶段考虑所有的场景会对芯片的投产时间造成不利影响。

最后,bootrom代码本身占用的存储空间也较多,导致芯片成本较高。

为此,本申请提供了一种芯片,能够解决上述问题。

本申请所提供的芯片也可被称为安全芯片,安全芯片指的是在启动时能够执行安全校验策略以验证外部固件的安全性的芯片,上述外部固件指的是存储在启动引擎之外的固件,该外部固件可以存储在芯片上的存储器中,也可以存储在芯片之外的存储器中。

“固件”可以有不同的定义,在计算机领域内的合理解释都适用于本申请。例如,可以有如下解释。以下解释仅为举例说明,而不应被认为是对本申请的技术方案的限定。

固件可以被解释为:预安装到硬件产品内部的只读记忆体里面,与硬件产品捆绑匹配的程序。例如,计算机的基本输入输出系统(basicinputoutputsystem,bios)即属于固件的一种。

固件还可以被解释为:运行在“非控制处理器”中的程序,上述“非控制处理器”指不直接运行操作系统的处理器,例如外设中的处理器,上述“非控制处理器”也可以指被用于裸金属(baremetal)虚拟机系统的处理器中的一些核。

固件还可以被解释为:不支持动态安装应用的操作系统和不支持动态安装应用的可执行文件。

如图2所示,本申请提供的芯片200包括引导引擎210和可编程存储器220。其中,

引导引擎210用于:引导芯片200启动,以及,基于校验信息验证存储于引导引擎210之外的存储器中的第一段固件的安全性,第一段固件为芯片200启动后第一段执行安全校验策略的代码;

可编程存储器220用于:存储上述校验信息。

引导引擎210用于在上电之后引导第一段固件运行,或者,引导引擎210用于存储启动代码,以便于芯片200的核在上电后运行该启动代码引导第一段固件运行。引导引擎210还可以有其它作用,本申请对此不作限定。引导引擎210可以是硬件电路;也可以是bootrom,如图1所示的irom110。其它用于在芯片上电后引导第一段固件运行的组件均可称为引导引擎210。

芯片200启动后,引导引擎210首先对存储于引导引擎210之外的第一段固件执行安全性校验。其中,“启动”可以被解释为芯片200从复位(reset)状态开始运行指令。上述关于“启动”的解释仅是举例说明,不应被理解为对本申请的保护范围的限定。

当引导引擎210为硬件电路时,该硬件电路在芯片200上电引导芯片200启动并对第一段固件进行安全校验,即,根据固化在该硬件电路中的逻辑信息引导芯片启动以及校验第一段固件的安全性,校验通过后由芯片200的核运行第一段固件执行后续安全校验步骤。其中,该硬件电路可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其它可编程逻辑组件。

上述芯片200的核例如是cpu核,用于运行代码控制芯片200执行与该代码对应的步骤实现特定的功能,例如,芯片200的核运行引导引擎210中的代码对第一段固件进行安全校验运算,芯片200的核还用于从可编程存储器220中读取校验信息,验证上述安全校验运算的结果是否正确。

图2未示出芯片200的核,本申请对芯片200的核的具体形式以及与芯片200的位置关系不做限定。作为一个可选的示例,芯片200的核集成于芯片200上,并且通过总线与引导引擎210和可编程存储器220连接。可以参考系统100中核180与ipom110和efuse170之间的连接关系。

当引导引擎210为bootrom时,bootrom用于固化存储启动代码,芯片200上电后,核运行该启动代码引导芯片200启动并对第一段固件进行安全校验,校验通过后由核运行第一段固件执行后续安全校验步骤。

第一段固件可以是存储在非易失性存储器中的代码,该非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存(flash)。

上述非易失性存储器可以集成于芯片200上,也可以是与芯片200物理分离的存储器。

第一段固件可以是安全校验代码的一部分代码,也可以是安全校验代码的全部代码。引导引擎210可以将第一段固件读入芯片200中的isram中,对第一段固件执行校验运算,并验证运算结果。引导引擎210也可以在存储第一段固件的存储器(例如,nor闪存)中对第一段固件执行校验运算,并验证运算结果。

引导引擎210获取校验运算的结果后,可以从可编程存储器220中读取预先存入的校验信息,以验证上述运算结果是否符合安全性要求。

本申请对校验第一段固件的具体方法不做限定。

例如,可以通过消息摘要算法(messagedigestalgorithm,mda)校验第一段固件。mda的特点是:无论原始数据的长度是多少,经过计算后输出的密文的长度都是固定的,这种算法的原理是根据一定的运算规则对原数据进行提取处理,提取处理的结果就是“摘要”,被提取的数据内容与原始数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。

当通过mda校验第一段固件的安全性时,可编程存储器220中存储的校验信息为基准值,引导引擎210对第一段固件执行摘要计算,得到计算结果,引导引擎210对比所述计算结果和基准值,若计算结果与基准值相等,则确定第一段固件的安全性校验通过;若计算结果与基准值不相等,则确定第一段固件的安全性校验失败。其中,上述基准值可以是哈希值,上述摘要计算可以是哈希算法。

若第一段固件的安全性校验通过,引导引擎210可以引导第一段固件代码启动运行;若第一段固件的安全性校验失败,引导引擎210可以停止运行,也可以尝试其它策略,例如,校验第一段固件的备份固件。

综上所述,由于芯片200中执行安全校验策略的代码存储在引导引擎210之外,因此,芯片200在流片时不需将上述代码进行固化处理,芯片制造商可以在芯片上市销售前对安全校验代码进行修改,因此,若流片后发现安全校验代码存在缺陷或者安全隐患,或者,客户对安全校验算法提出了新的需求,芯片制造商在芯片上市销售前直接修改安全校验代码即可,无需重新流片即可解决上述问题,降低了芯片的制造成本。

此外,芯片200在流片时不需将执行安全校验策略的代码进行固化处理,使得芯片制造商有更多的时间对安全校验策略(例如,上述mda)进行开发验证,降低了芯片开发成本。

最后,由于bootrom的成本高于闪存或者其它非易失性存储器的成本,芯片200的安全校验代码存储在bootrom之外,减小了bootrom所需的存储空间,从而降低了芯片的制造成本。

由于bootrom存储的代码减少,bootrom还可以被硬件电路替换,进一步减小了芯片200出现缺陷(bug)的风险。

芯片200中,存储校验信息的可编程存储器220可以是可多次编程的存储器,也可以是一次性可编程(onetimeprogrammable,otp)存储器。

otp存储器是一种仅能编程一次的存储器,即,校验信息一旦被烧入otp存储器的集成电路,该校验信息将不可被更改,从而提高了芯片200的安全性。

上述otp存储器例如是电子熔化存储器(efuse),可以通过下述两种方式中的一种在efuse中写入信息。

方式一。

将联合测试工作组(jointtestactiongroup,jtag)烧写器(例如,j-link烧写器)连接到芯片200的jtag接口,通过jtag烧写器对efuse进行烧写。

方式二。

通过芯片200的对外接口向芯片200发送命令,芯片200的软件接到处理命令后,触发芯片200内的硬件烧写efuse,其中,上述对外接口可以是网口、串口、内部集成电路(inter-integratedcircuit,i2c)或串行外设接口(serialperipheralinterface,spi)。

由于efuse写入校验信息或者其它信息后可能还有未烧写比特位,为了防止efuse的未烧写比特位被写入非法信息,efuse内还可以提供一个专用比特位(即,第二比特位)来指示efuse锁定剩余存储空间。

例如,当第二比特位的状态为“0”时,表示efuse不锁定未烧写比特位,此时还可以对efuse进行写操作;当第二比特位的状态为“1”时,表示efuse锁定未烧写比特位,当外部命令试图对efuse进行写操作时,efuse拒绝执行该外部命令。

上述方法仅是举例说明,第二比特位还可以包含多个比特位。

efuse除了包含第二比特位之外,还可以包含第一比特位,第一比特位的状态用于指示芯片200在启动时是否进入安全引导模式,即,是否对第一段固件进行安全校验。

例如,当第一比特位的状态为“0”时,表示不进入安全引导模式,此时,bootrom可以直接引导第一段固件启动,以便于对安全校验算法进行调试;当第一比特位的状态为“1”时,表示进入安全引导模式,此时,bootrom需要对第一段固件进行安全校验。

efuse除了用于存储校验第一段固件的校验信息之外,还可以存储其它校验信息,例如,根公钥的哈希值、不安全版本号(insecureversion)和已吊销的二级密钥的标识(identifier,id)。第一段固件运行后可以利用这些校验信息对其它固件进行校验。

下面,以芯片200为系统级芯片(systemonchip,soc)、引导引擎210为bootrom以及可编程存储器220为efuse为例,再举出一个本申请提供的芯片的例子。

如图3所示,soc300包括bootrom301、efuse302、闪存控制器304、isram305以及核306,上述组件可以通过内部总线(internalbus)连接,互相通信。应理解,图3所示的芯片仅是举例说明,而不应被理解为对本申请的技术方案的限定,闪存303可以位于soc300内部,isram305也可以位于soc300外部。

bootrom301的功能可以参考芯片200中的引导引擎210的描述,efuse302的功能可以参考芯片200中的可编程存储器220的描述,为了简洁,在此不再赘述。

闪存控制器304用于接收指令,对闪存303进行读操作或者写操作。

isram305用于为soc300中的程序提供运行区域,例如,核306可以执行bootrom301中存储的代码命令闪存控制器304将闪存303中的程序复制到isram305中运行。

核306用于运行程序,例如,核306可以运行闪存303中存储的第一段固件和os。

闪存303用于存储程序,该程序包括第一段固件,可选地,该程序还可以包括soc300的os。

基于闪存303的位置不同,将第一段固件和os加载到闪存303中的方法也不同。

当闪存303位于soc300内部时,可以通过下述两种方法加载程序。

a)先烧后贴:将soc300放到批量烧写设备上,通过jtag接口烧写闪存303。

b)先贴后烧:先将soc300加工到单板上,然后使用j-link加载器通过soc300的jtag接口将程序烧写到闪存303中。

当闪存303位于soc300外部时,可以通过下述两种方法加载程序。

c)先烧后贴:通过闪存烧写器,批量烧写闪存(包括闪存303),然后将闪存303和soc300加工到单板上。

d)先贴后烧:先将soc300和闪存303加工到单板上,然后使用加载器通过soc300的jtag接口间接将程序烧写到闪存303中。

上文详细描述了本申请提供的芯片,下面,将基于芯片300对本申请提供的启动芯片的方法进行说明。

图4示出了本申请提供的一种启动芯片的方法的示意图。

soc300包括bootrom301和efuse302。bootrom301存储有启动代码,efuse302内存储有第一段固件的哈希值、根公钥的哈希值、已吊销的二级密钥的标识(revokedid)、不安全的版本号以及安全引导使能比特位(即,指示进入安全引导模式的第一比特位)。

需要说明的是,上述列举的各个信息仅是一个示例,本申请不限定efuse302必须存储上述全部信息,例如,efuse302可以存储第一段固件的哈希值和根公钥的哈希值;efuse302也可以存储第一段固件的哈希值、根公钥的哈希值和已吊销的二级密钥的标识;efuse302还可以存储第一段固件的哈希值、根公钥的哈希值、已吊销的二级密钥的标识和不安全的版本号。

efuse302中存储的信息与下述闪存303中存储的信息相关,若闪存303中存储有第一段固件和根公钥,则efuse302存储有第一段固件的哈希值和根公钥的哈希值;若闪存303中存储有第一段固件、根公钥、二级密钥公钥和二级密钥id,则efuse302存储有第一段固件的哈希值、根公钥的哈希值和已吊销的二级密钥的标识;若闪存303中存储有第一段固件、根公钥、二级密钥公钥、二级密钥id和安全版本号,则efuse302存储有第一段固件的哈希值、根公钥的哈希值、已吊销的二级密钥的标识和不安全的版本号。

作为一个可选的示例,闪存303内存储有第一段固件、信息头(header)、根公钥、二级密钥公钥、二级密钥id、根私钥对第一内容的签名结果、固件哈希值、固件安全版本号、二级密钥私钥对第二内容的签名结果。其中,第一内容包括二级密钥公钥,以确保二级密钥的安全性,第一内容还可以包括其它信息,例如,二级密钥的id;第二内容包括固件哈希值,以确保除第一段固件以外的待校验的固件的安全性,第二内容还可以包括其它信息,例如,上述待校验的固件的安全版本号。

soc300上电后,核306运行bootrom301中的启动代码,例如执行下列步骤1至步骤6。

步骤1:关看门狗。

步骤2:初始化指令缓存控制器。

步骤3:初始化栈区域。

步骤4:初始化堆区域。

步骤5:初始化块设备复制功能(blockdevicecopyfunction)。

步骤6:初始化锁相环(phaselockedloop,pll)以及设置系统时钟。

随后核306检测各个引脚的电平情况,基于电平情况确定引导程序的存储器为闪存303,初始化闪存控制器304。随后,检查efuse302中的安全引导使能比特位(securebootenable),确定进入安全引导模式,开始执行下列步骤。

s401,核306运行bootrom301中的代码向闪存控制器304发送读命令,命令闪存控制器304将闪存303中的第一段固件复制到运行区域(可以soc300内部的sram或者外部的sram),对第一段固件执行哈希运算,得到运算结果。上述读命令例如是总线命令,用于操作闪存控制器304的寄存器。bootrom301可以根据对寄存器的访问操作从efuse302中读取第一段固件的哈希值,将该哈希值与上述运算结果进行对比,若二者相同,则执行下一步;否则,不再引导soc300启动,或者,执行其它策略,例如,校验第一段固件的备份固件。

由于第一段固件没有固化在bootrom301中,若soc300流片完成后存在安全校验代码存在安全隐患,或者,客户在soc300流片完成后对第一段固件所对应的安全校验算法提出了新的需求,芯片制造商可以在soc300流片完成之后对第一段固件进行修改,无需重新流片,从而减小了soc300的制造成本。

第一段固件校验通过后,核306可以通过查询寄存器或者其它存储区确定第一段固件校验通过,后续由核306运行第一段固件执行安全校验策略,即,执行s402以及后续的步骤。

s402,第一段固件指示闪存控制器304将根公钥、二级密钥公钥、二级密钥id、根私钥对二级密钥公钥的签名结果、固件哈希值、固件安全版本号以及二级密钥私钥对固件哈希值的签名结果复制到运行区域,第一段固件根据efuse302中存储的信息对根公钥进行校验,即,计算根公钥的哈希值,比较计算结果与efuse302中存储的根公钥的哈希值,若二者相同,则执行下一步;否则,不再引导soc300启动,或者,执行其它策略。

其中,信息头可以指示根公钥在闪存303内的偏移位置和大小、二级密钥公钥在闪存303内的偏移位置和大小以及待校验的固件在闪存303内的偏移位置和大小。上述信息头的作用仅是举例说明,信息头还可以指示其它内容。

此外,下列信息可以一次性复制到运行区域,也可以分批次复制到运行区域:根公钥、二级密钥公钥、二级密钥id、根私钥对二级密钥公钥的签名结果、固件哈希值、固件安全版本号以及二级密钥私钥对固件哈希值的签名结果。

本领域技术人员可以理解,在s402中,“第一段固件指示闪存控制器304”即核306运行第一段固件指示闪存控制器304,下列步骤中,若出现第一段固件的主动行为描述,均指核306运行第一段固件实现第一段固件的功能。

s403,第一段固件根据根公钥对“根私钥对二级密钥公钥的签名结果”进行签名校验,校验通过则执行下一步;否则,不再引导soc300启动,或者,执行其它策略。

上述步骤被执行前,需要对二级密钥公钥进行签名处理,例如,在soc300上次运行时,核306对二级密钥公钥进行签名处理。处理过程如图5所示。

首先,核306对二级密钥公钥执行哈希运算,得到二级密钥公钥的哈希值。

其次,核306通过根私钥对该哈希值进行加密,即,进行签名处理,得到“根私钥对二级密钥公钥的签名结果”。

在s403中,第一段固件对上述签名结果进行签名校验,校验过程如图6所示。

首先,第一段固件使用根公钥对“根私钥对二级密钥公钥的签名结果”进行解密处理,得到二级密钥公钥的哈希值,其中,该根公钥已经通过安全校验。

其次,第一段固件对二级密钥公钥进行哈希计算,得到二级密钥公钥的另一个哈希值。

最后,第一段固件比较上述两个哈希值是否匹配,若二者匹配,则二级密钥公钥的签名校验通过。

s404,第一段固件基于efuse302中存储的已吊销的二级密钥的标识确定闪存303中的二级密钥公钥是否可用。即,当闪存303中的二级密钥id与efuse302中存储的已吊销的二级密钥的标识相异,确定二级密钥公钥可用,执行下一步;否则,不再引导soc300启动,或者,执行其它策略。

s405,第一段固件使用二级密钥公钥对固件哈希值进行签名校验,若校验通过,则执行下一步;否则,不再引导soc300启动,或者,执行其它策略。

上述对固件哈希值的签名校验过程可以参考对二级密钥公钥的签名校验过程,为了简洁,在此不再赘述。

s406,第一段固件校验固件安全版本,若固件安全版本号与efuse302中存储的不安全版本号不同,则确定固件安全版本可用,执行下一步;否则,不再引导soc300启动,或者,执行其它策略。

s407,第一段固件校验固件的安全性。例如,第一段固件计算固件的哈希值,并与s405中签名校验通过的固件哈希值进行对比,若二者相同,则确定校验通过,执行运行该固件;否则,不再引导soc300启动,或者,执行其它策略。

若闪存303还包含其它固件,则基于当前引导成功的固件继续校验其它固件。

在闪存303最后一个固件通过安全校验后,最后一个固件引导os运行,例如,该最后一个固件初始化dram控制器,然后将闪存303中的os加载到dram中,最后,核306跳转到os的起始地址运行os,芯片启动完毕。

上文详细描述了本申请提供的芯片和启动芯片的方法,应理解,本申请提供的芯片可以应用于不同的电子设备中,该电子设备可以是服务器,也可以是终端设备,还可以是网络设备,还可以是其它类型的电子设备。

图7示出了本申请提供的一种服务器的结构示意图。

如图7所示,服务器700包括处理器710和基板管理控制器(baseboardmanagementcontroller,bmc)720,其中,bmc720可以是芯片200或soc300,处理器710例如是cpu。

bmc720还可以与其它组件连接,例如,与第四代双倍速率(doubledatarata,ddr)存储器(简称为“ddr4”)、寄存器、bmc闪存、视频接口和物理层芯片(例如,网卡)连接。

ddr4用于为bmc720或处理器710提供运行程序或者代码的空间。

bmc闪存可以是存储bmc自身固件和相关数据的闪存。

视频接口用于连接显示器等外部设备。物理层芯片连接网卡,用于为服务器700提供数据收发服务。

处理器710和bmc720还可以通过开关与bios闪存连接,运行bios闪存中存储的bios。

上述服务器700的架构仅是举例说明,而不应被理解为对本申请提供的技术方案的应用限定,本申请提供的技术方案还可以应用于包含更多或者更少的组件的服务器中。

例如,服务器700可以是云计算服务器,此时,服务器700可以包括多个计算单元,计算单元可以是cpu、也可以是图形处理器(graphicsprocessingunit,gpu),还可以是fpga、asic、dsp、神经网络处理器(neural-networkprocessunit,npu)或者其它类型的计算单元。该多个计算单元可以组成同构计算(homogenouscomputing)资源池和/或异构计算(heterogeneouscomputing)资源池为用户提供服务。

又例如,服务器700可以是存储服务器,此时,服务器700可以包括多个存储单元,存储单元可以是硬盘驱动器(harddiskdrive,hdd)硬盘,也可以是固态硬盘(solidstatedisk,ssd),还可以是小型计算机系统接口(smallcomputersysteminterface,scsi)硬盘或者其它类型的非易失性存储介质。当服务器700包括多个硬盘时,该多个硬盘可以组成磁盘阵列(redundantarraysofindependentdrives,raid),作为服务器700的存储资源池为用户提供服务。

图8示出了本申请提供的一种终端设备的结构示意图。

终端设备可被称为接入终端、用户设备(userequipment,ue)、用户单元、用户站、移动站、移动台、远方站、远程终端、移动设备、用户终端、终端、无线通信设备、用户代理或用户装置。接入终端可以是蜂窝电话、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备以及5g通信系统中的用户设备。上述各个电子设备仅是对终端设备的举例说明,终端设备还可以是其它电子设备,例如包含soc300的汽车或无人机。

如图8所示,当终端设备为手机时,手机800包括soc300、闪存303、控制电路、天线以及输入输出装置。soc300主要用于对通信协议以及通信数据进行处理,以及对整个终端设备进行控制,执行软件程序,处理软件程序的数据。闪存303主要用于存储软件程序和数据。soc300和闪存303用于在手机800启动时为手机800提供安全启动保障。控制电路主要用于基带信号与射频信号的转换以及对射频信号的处理。控制电路和天线一起也可以叫做收发器,主要用于收发电磁波形式的射频信号。输入输出装置,例如触摸屏、显示屏或键盘,主要用于接收用户输入的数据以及对用户输出数据。

当终端设备开机后,soc300可以按照图4所示的流程执行启动步骤,运行os,随后读取闪存303中的软件程序,解释并执行软件程序的指令,处理软件程序的数据。soc300可以包括基带芯片,当需要通过无线发送数据时,soc300的基带芯片对待发送的数据进行基带处理后,输出基带信号至射频电路,射频电路将基带信号进行射频处理后将射频信号通过天线以电磁波的形式向外发送。当终端设备接收数据时,射频电路通过天线接收到射频信号,将射频信号转换为基带信号,并将基带信号输出至处理器,处理器将基带信号转换为数据并对该数据进行处理。

本领域技术人员可以理解,为了便于说明,图8仅示出了一个存储器(闪存303)和一个处理器(soc300)。在实际的终端设备中,可以存在多个处理器和多个存储器。存储器也可以称为存储介质或者存储设备等,本申请对此不做限定。

图9示出了本申请提供的一种网络设备的结构示意图。

网络设备可以是码分多址(codedivisionmultipleaccess,cdma)系统中的基站(basetransceiverstation,bts),也可以是宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)系统中的基站(nodeb,nb),还可以是长期演进(longtermevolution,lte)系统中的演进型基站(evolutionalnodeb,enb),还可以是5g通信系统中的基站(gnb),上述基站仅是举例说明,网络设备还可以为中继站、接入点、车载设备、可穿戴设备以及包含soc300的汽车或无人机。

如图9所示,当网络设备为基站时,基站900可包括一个或多个射频单元,如远端射频单元(remoteradiounit,rru)901和一个或多个基带单元(basebandunit,bbu)(也可称为数字单元(digitalunit,du))902。所述rru901可以称为收发单元、收发机、收发电路、或者收发器等等,其可以包括至少一个天线9011和射频单元9012。rru901主要用于射频信号的收发以及射频信号与基带信号的转换。bbu902主要用于进行基带处理,对基站900进行控制等。bbu902中的单板上集成有soc300和闪存303,soc300和闪存303用于在bbu902启动时为bbu902提供安全启动保障。rru901与bbu902可以是物理上设置在一起的,也可以物理上分离设置的,即分布式基站。

bbu902为基站的控制中心,也可以称为处理单元,主要用于完成基带处理功能,如信道编码,复用,调制,扩频等等。

在一个示例中,bbu902可以由一个或多个单板构成,多个单板可以共同支持单一接入指示的无线接入网(如lte网),也可以分别支持不同接入制式的无线接入网(如lte网,5g网或其它网)。bbu902还包括闪存303和soc300,闪存303和soc300可以服务于一个或多个单板。也就是说,可以每个单板上单独设置存储器和处理器。也可以是多个单板共用相同的存储器和处理器。

本领域普通技术人员可以意识到,本文中公开的实施例所描述的模块及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各模块的组成及算法步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用场景来使用不同方法来实现本文所描述的功能,但是这种实现不应认为超出本申请的保护范围。

总之,以上所述仅为本申请的技术方案的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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