程序校验、签名方法及装置、SOC芯片与流程

文档序号:26050931发布日期:2021-07-27 15:26阅读:334来源:国知局
程序校验、签名方法及装置、SOC芯片与流程

本申请涉及芯片技术领域,尤其涉及一种程序校验方法及装置、程序签名方法及装置、soc芯片、电子设备及存储介质。



背景技术:

soc是systemonchip的缩写,直译是“芯片级系统”,通常简称“片上系统”,是一种包含处理器、存储器和片上逻辑的集成电路。

对于soc芯片而言,由于某种原因引起处理器释放复位后,从指定地址开始取值运行指令建立某种目的软件执行环境,称为boot。在boot过程中,需要对待启动程序进行签名验证,签名验证过程包含大量的大数模运算,需要soc芯片持续与外部存储器交换大量数据,一方面会降低签名校验效率,另一方面存在数据泄露的风险。

鉴于上述问题,需要提供一种效率更高、安全性更好的程序校验方案。



技术实现要素:

本申请实施例的目的是提供一种程序校验方法及装置、程序签名方法及装置、soc芯片、电子设备及存储介质,以至少解决目前程序校验效率和安全性较低的问题。

为解决上述技术问题,本申请实施例提供如下技术方案:

本申请第一方面提供一种程序校验方法,所述方法包括:加载待启动程序至芯片内部存储器;利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;若签名验证不通过,则拒绝启动所述待启动程序;若签名验证通过,则允许启动所述待启动程序。

在本申请第一方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请第一方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和外部软件;所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证,包括:利用从所述芯片内部获取的验签密钥对所述bootloader和所述外部软件依次进行签名验证,其中,任意一项验证不通过则判断整体签名验证不通过。

在本申请第一方面的一些变更实施方式中,所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证,包括:提取所述待启动程序的数据字段和签名字段;计算所述数据字段对应的第一数字摘要;利用从所述芯片内部获取的验签密钥对所述签名字段进行解密,得到第二数字摘要;若所述第一数字摘要与所述第二数字摘要相同,则签名验证通过;若所述第一数字摘要与所述第二数字摘要不相同,则签名验证不通过。

在本申请第一方面的一些变更实施方式中,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请第一方面的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请第一方面的一些变更实施方式中,在所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证之前,还包括:从所述芯片内部的电子保险丝efuse中读取预存的第一坐标值,所述第一坐标值是基于ecc加密算法的验签密钥的一部分;采用所述ecc加密算法对应的曲线方程,计算与所述第一坐标值对应的第二坐标值;根据所述第一坐标值和所述第二坐标值确定验签密钥。

在本申请第一方面的一些变更实施方式中,在所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证之前,还包括:从所述芯片内部的efuse中读取预存的验签密钥。

在本申请第一方面的一些变更实施方式中,在所述加载待启动程序至芯片内部存储器之前,还包括:从外部存储器中获取已加密的待启动程序数据,其中,待启动程序经过加密后存储于所述外部存储器中;采用所述芯片内部预存的读写密钥对所述已加密的待启动程序数据进行解密,得到待启动程序。

在本申请第一方面的一些变更实施方式中,所述采用所述芯片内部预存的读写密钥对所述加密的待启动程序数据进行解密,包括:采用所述芯片内部的efuse中预存的读写密钥对所述加密的待启动程序数据进行解密。

在本申请第一方面的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请第一方面的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请第二方面提供一种程序签名方法,所述方法包括:确定用于在芯片上运行的待启动程序;基于签名密钥生成所述待启动程序的数字签名;将所述签名密钥对应的验签密钥存储至所述芯片内部,以便于在所述芯片内部对所述待启动程序的数字签名进行签名验证。

在本申请第二方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请第二方面的一些变更实施方式中,所述签名密钥包括采用非对称加密算法生成的私钥,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请第二方面的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请第二方面的一些变更实施方式中,所述将所述签名密钥对应的验签密钥存储至所述芯片内部,包括:将所述签名密钥对应的验签密钥的第一坐标值烧写入所述芯片内部的efuse中,以便所述芯片根据所述ecc加密算法对应的曲线方程计算与所述第一坐标值对应的第二坐标值,并根据所述第一坐标值和第二坐标值确定验签密钥,其中,所述第一坐标值是基于ecc加密算法的验签密钥的一部分。

在本申请第二方面的一些变更实施方式中,所述将所述签名密钥对应的验签密钥存储至所述芯片内部,包括:将所述签名密钥对应的验签密钥烧写入所述芯片内部的efuse中。

在本申请第二方面的一些变更实施方式中,所述方法还包括:获取针对外部存储器的读写密钥,所述读写密钥用于对写入或读出所述外部存储器的数据进行加密或解密;将所述读写密钥烧写入所述芯片内部的efuse中。

在本申请第二方面的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请第二方面的一些变更实施方式中,所述方法还包括:通过将所述efuse中密钥存储区外的指定电子位设置为指定状态,使所述密钥存储区禁止外部软件读写。

在本申请第二方面的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请第三方面提供一种程序校验装置,所述装置包括:内部加载模块,用于加载待启动程序至芯片内部存储器;签名验证模块,用于利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;拒绝启动模块,用于若签名验证不通过,则拒绝启动所述待启动程序;允许启动模块,用于若签名验证通过,则允许启动所述待启动程序。

在本申请第三方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请第三方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和外部软件;所述签名验证模块,包括:依次验证单元,用于利用从所述芯片内部获取的验签密钥对所述bootloader和所述外部软件依次进行签名验证,其中,任意一项验证不通过则判断整体签名验证不通过。

在本申请第三方面的一些变更实施方式中,所述签名验证模块,包括:字段提取单元,用于提取所述待启动程序的数据字段和签名字段;数字摘要计算单元,用于计算所述数据字段对应的第一数字摘要;数字摘要解密单元,用于利用从所述芯片内部获取的验签密钥对所述签名字段进行解密,得到第二数字摘要;摘要相同处理单元,用于若所述第一数字摘要与所述第二数字摘要相同,则签名验证通过;摘要不同处理单元,用于若所述第一数字摘要与所述第二数字摘要不相同,则签名验证不通过。

在本申请第三方面的一些变更实施方式中,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请第三方面的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请第三方面的一些变更实施方式中,所述装置还包括:部分密钥读取模块,用于从所述芯片内部的电子保险丝efuse中读取预存的第一坐标值,所述第一坐标值是基于ecc加密算法的验签密钥的一部分;部分密钥计算模块,用于采用所述ecc加密算法对应的曲线方程,计算与所述第一坐标值对应的第二坐标值;完整密钥确定模块,用于根据所述第一坐标值和所述第二坐标值确定验签密钥。

在本申请第三方面的一些变更实施方式中,所述装置还包括:完整密钥读取模块,用于从所述芯片内部的efuse中读取预存的验签密钥。

在本申请第三方面的一些变更实施方式中,所述装置还包括:外部数据读取模块,用于从外部存储器中获取已加密的待启动程序数据,其中,待启动程序经过加密后存储于所述外部存储器中;外部数据解密模块,用于采用所述芯片内部预存的读写密钥对所述已加密的待启动程序数据进行解密,得到待启动程序。

在本申请第三方面的一些变更实施方式中,所述外部数据解密模块,包括:读写密钥解密单元,用于采用所述芯片内部的efuse中预存的读写密钥对所述加密的待启动程序数据进行解密。

在本申请第三方面的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请第三方面的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请第四方面提供一种程序签名装置,所述装置包括:程序确定模块,用于确定用于在芯片上运行的待启动程序;程序签名模块,用于基于签名密钥生成所述待启动程序的数字签名;密钥存储模块,用于将所述签名密钥对应的验签密钥存储至所述芯片内部,以便于在所述芯片内部对所述待启动程序进行签名验证。

在本申请第四方面的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请第四方面的一些变更实施方式中,所述签名密钥包括采用非对称加密算法生成的私钥,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请第四方面的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请第四方面的一些变更实施方式中,所述密钥存储模块,包括:部分密钥烧写单元,用于将所述签名密钥对应的验签密钥的第一坐标值烧写入所述芯片内部的efuse中,以便所述芯片根据所述ecc加密算法对应的曲线方程计算与所述第一坐标值对应的第二坐标值,并根据所述第一坐标值和第二坐标值确定验签密钥,其中,所述第一坐标值是基于ecc加密算法的验签密钥的一部分。

在本申请第四方面的一些变更实施方式中,所述密钥存储模块,包括:完整密钥烧写单元,用于将所述签名密钥对应的验签密钥烧写入所述芯片内部的efuse中。

在本申请第四方面的一些变更实施方式中,所述装置还包括:读写密钥获取模块,用于获取针对外部存储器的读写密钥,所述读写密钥用于对写入或读出所述外部存储器的数据进行加密或解密;读写密钥烧写模块,用于将所述读写密钥烧写入所述芯片内部的efuse中。

在本申请第四方面的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请第四方面的一些变更实施方式中,所述装置还包括:禁止读写设置模块,用于通过将所述efuse中密钥存储区外的指定电子位设置为指定状态,使所述密钥存储区禁止外部软件读写。

在本申请第四方面的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请第五方面提供一种soc芯片,所述soc芯片采用本申请第一方面所述的方法对待启动程序进行签名验证。

本申请第六方面提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行以实现本申请第一方面或第二方面所述的方法。

本申请第七方面提供一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现本申请第一方面或第二方面所述的方法。

本申请第一方面提供的一种程序校验方法,通过加载待启动程序至芯片内部存储器;利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;若签名验证不通过,则拒绝启动所述待启动程序;若签名验证通过,则允许启动所述待启动程序。从而在芯片内部实现待启动程序的校验,可以减少与外部存储器的数据交互,实现硬件层面的加速,从而有效提高程序校验效率,此外,由于签名校验过程是在芯片内部执行的,校验所使用的校验密钥也是存储在芯片内部的,因此,可以有效提高安全性。

本申请第二方面提供的程序签名方法、第三方面提供的程序校验装置、第四方面提供的程序签名装置、第五方面提供的soc芯片、第六方面提供的电子设备和第七方面提供的计算机可读存储介质,与本申请第一方面提供的程序校验方法出于相同的发明构思,与其具有相同的有益效果。

附图说明

通过参考附图阅读下文的详细描述,本申请示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本申请的若干实施方式,相同或对应的标号表示相同或对应的部分,其中:

图1示意性地示出了本申请的一些实施方式所提供的一种芯片签名及验签的整体流程图;

图2示意性地示出了本申请的一些实施方式所提供的一种程序校验方法的流程图;

图3示意性地示出了本申请的一些实施方式所提供的多重验签的示意图;

图4示意性地示出了本申请的一些实施方式所提供的对外部存储器数据进行加解密的原理示意图;

图5示意性地示出了本申请的一些实施方式所提供的一种程序校验装置的示意图;

图6示意性地示出了本申请的一些实施方式所提供的一种程序签名方法的流程图;

图7示意性地示出了本申请的一些实施方式所提供的一种程序签名装置的示意图;

图8示意性地示出了本申请的一些实施方式所提供的一种电子设备的示意图;

图9示意性地示出了本申请的一些实施方式所提供的一种计算机可读存储介质的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。

另外,术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

为了便于理解,结合图1对本申请实施例的整体技术构思进行简要说明如下,如图1所示,其示意性地示出了本申请的一些实施方式所提供的一种芯片签名及验签的整体流程图,在芯片出厂前,芯片供应方可以针对各个芯片需求方有针对性地进行程序签名,签名的程序可以是引导加载程序bootloader,也可以是芯片需求方需要在芯片上运行的外部软件(例如操作系统软件或其他软件),或者对上述bootloader和外部软件都进行签名,其步骤可以包括:

s201:确定用于在芯片上运行的待启动程序;

s202:基于签名密钥生成所述待启动程序的数字签名;

s203:将所述签名密钥对应的验签密钥存储至所述芯片内部,以便于在所述芯片内部对所述待启动程序的数字签名进行签名验证。

接下来,即可将已签名的待启动程序和已存储验签密钥的芯片提供给芯片需求方。

在芯片出厂后,芯片需求方及下游使用方在使用该芯片的过程中,当芯片发生boot时,需要采用芯片内部存储的验签密钥对准备在芯片上运行的待启动程序进行签名验证,其步骤可以包括:

s101:加载待启动程序至芯片内部存储器;

s102:利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;

s103:若签名验证不通过,则拒绝启动所述待启动程序;

s104:若签名验证通过,则允许启动所述待启动程序。

基于以上步骤,能够在芯片内部实现待启动程序的校验,可以减少与外部存储器的数据交互,实现硬件层面的加速,从而有效提高程序校验效率。此外,由于签名校验过程是在芯片内部执行的,校验所使用的校验密钥也是存储在芯片内部的,因此,可以有效提高安全性。

其中,可以针对不同的芯片需求方分配不同的签名密钥及验签密钥,使得芯片需求方只能在提供给自己的芯片上运行自己的待启动程序,起到防串货的效果,避免具有低拿货价的代理商为高拿货价的代理商出货。

在上述技术构思的基础上,本申请实施例提供了一种程序校验方法及装置、程序签名方法及装置、soc芯片、电子设备及存储介质,以至少解决目前程序校验效率和安全性较低的问题。下面结合附图进行示例性说明。

请参考图2,其示意性地示出了本申请的一些实施方式所提供的程序校验方法的流程图,如图2所示,一种程序校验方法,可以包括以下步骤:

s101:加载待启动程序至芯片内部存储器;

s102:利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;

s103:若签名验证不通过,则拒绝启动所述待启动程序;

s104:若签名验证通过,则允许启动所述待启动程序。

本申请实施例提供的上述程序校验方法,至少可以取得以下有益效果:通过加载待启动程序至芯片内部存储器;利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;若签名验证不通过,则拒绝启动所述待启动程序;若签名验证通过,则允许启动所述待启动程序,从而在芯片内部实现待启动程序的校验,可以减少与外部存储器的数据交互,实现硬件层面的加速,从而有效提高程序校验效率。此外,由于签名校验过程是在芯片内部执行的,校验所使用的校验密钥也是存储在芯片内部的,因此,可以有效提高安全性。

上述程序校验方法可以基于bootrom实现,bootrom(或称bootrom)是嵌入处理器芯片内的一小块掩模rom或写保护闪存。它包含处理器在上电或复位时执行的第一个代码。根据某些带式引脚或内部电子保险丝的配置,它可以决定从哪里加载要执行的代码的下一部分以及如何或是否验证其正确性或有效性。

上述芯片可以是soc芯片,也可以是微控制器等内部集成有处理器和存储器的芯片,其均可以使用本申请实施例提供的方法。

上述内部存储器可以是集成于芯片上的可读写存储器,例如静态随机存取存储器(staticrandom-accessmemory,sram),用于临时存储需要验签的待启动程序数据。

另外,上述待启动程序可以是引导加载程序bootloader,也可以是芯片需求方需要在芯片上运行的外部软件(例如操作系统软件或其他软件),或者同时包括上述bootloader和外部软件。

若上述待启动程序包括引导加载程序bootloader和外部软件,则所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证(步骤s102)可以包括:利用从所述芯片内部获取的验签密钥对所述bootloader和所述外部软件依次进行签名验证,其中,任意一项验证不通过则判断整体签名验证不通过。

上述签名验证的过程可以理解为多重验签(签名验证简称验签),请参考图3,其示意性地示出了本申请的一些实施方式所提供的多重验签的示意图。如图3所示,bootrom可以首先加载已签名的bootloader至内部存储器sram,对其进行签名验证,若该项验证不通过,则没有必要对后续项目(例如外部软件)进行验签,可立即中止多重验签过程并判断整体签名验证不通过,拒绝启动所述待启动程序;若该项验证通过,再对后续项目进行验签,其中,若后续项目有多个,也需要依次进行验签,任意一项验证不通过则中止多重验签过程并判断整体签名验证不通过,拒绝启动所述待启动程序,若所有项目均通过验签,则判断整体签名验证通过,允许启动待启动程序。

通过上述实施方式,可以在发现任意一项验证不通过时就判断整体签名验证不通过,避免后续对其他项进行无意义的验签工作,从而整体上提高验签效率。

为了加快boot过程,可以只进行bootloader的签名验证,即上述待启动程序可以是指bootloader,上述步骤s102利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证,可以包括:利用从所述芯片内部获取的验签密钥对bootloader进行签名验证。由于外部软件一般较大,如果也对外部软件进行验签,会增加芯片负载,降低整体验签效率,因此,通过只对bootloader而不对外部软件进行验签,可以有效提高整体验签效率,进而提高boot效率。

对于任意一个验签项目(例如bootloader或外部软件),其较为具体的验签过程可以包括以下步骤:提取所述待启动程序的数据字段和签名字段;计算所述数据字段对应的第一数字摘要;利用从所述芯片内部获取的验签密钥对所述签名字段进行解密,得到第二数字摘要;若所述第一数字摘要与所述第二数字摘要相同,则签名验证通过;若所述第一数字摘要与所述第二数字摘要不相同,则签名验证不通过。

该验签流程与现有的验签流程相似,具体过程不再赘述,其不同之处主要在于验签密钥是从芯片内部获取的,验签的过程也是在芯片内部实现的,可以有效提高验签效率和安全性。

另外,本申请实施例中所涉及的签名密钥和验签密钥可以是使用对称加密算法生成的对称密钥,也可以是采用非对称加密算法生成的公私密钥。为了提高破解难度,优选采用非对称加密算法生成的公私密钥作为签名密钥和验签密钥,其中,签名密钥为私钥,验签密钥为公钥。

对于上述非对称加密算法,本申请实施例并不做限定,其可以采用现有技术提供的任意非对称加密算法实现,考虑到椭圆曲线密码编码学(ellipticcurvecryptography,ecc)ecc加密算法可以采用较小的密钥获得较高的安全性,本申请优选采用ecc加密算法实现,其中,上述ecc加密算法并不限于椭圆曲线数字签名算法(ellipticcurvedigitalsignaturealgorithm,ecdsa),其也可以采用基于ecc的其他签名验证算法实现,本申请实施例不做限定。

出于安全性的考虑和避免芯片需求方对芯片中的验签密钥进行擦写篡改,本申请实施例中,可以在芯片出厂前,将验签密钥烧写在芯片中的电子保险丝efuse中,efuse即一次性可编程存储器,也称为电子保险丝或电子熔断器,在芯片出厂之前会被写入信息,其中的电子位初始都是1,当且仅能一次把1改成0,从而实现一次性编程,避免芯片出厂后被芯片需求方篡改验签密钥。

由于efuse的存储容量较小,例如128bit、256bit等,因此,本申请对应的采用了ecc加密算法,以生成较小的能够存储在efuse中的验签密钥。考虑到efuse还需要存储其他信息,为了避免验签密钥占用较多存储空间,本申请实施例结合ecc加密算法的特性,可以将基于ecc加密算法的验签密钥的一部分(例如第一坐标值x)存储至efuse中,在验签时,再根据该第一坐标值x利用椭圆曲线计算出对应的第二坐标值y,然后利用该第一坐标值x和第二坐标值y确定验签密钥,从而进一步减少验签密钥的占用空间。

对应于上述内容,在所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证(步骤s102)之前,还包括:从所述芯片内部的电子保险丝efuse中读取预存的第一坐标值,所述第一坐标值是基于ecc加密算法的验签密钥的一部分值,所述第一坐标值是基于ecc加密算法的验签密钥的一部分;采用所述ecc加密算法对应的曲线方程,计算与所述第一坐标值对应的第二坐标值;根据所述第一坐标值和所述第二坐标值确定验签密钥。

作为上述实施方式的一种变更实施方式,也可以在efuse中存储完整的验签密钥,相应的,在所述利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证(步骤s120)之前,还包括:从所述芯片内部的efuse中读取预存的验签密钥。

上述实施方式的优点在于可以减少验签过程中计算第二坐标值以还原验签密钥的步骤,可以提高整体的验签效率。

需要说明的是,芯片需求方所使用的待启动程序是存储在外部存储器的,该外部存储器是指芯片外部的存储器,可以包括但不限于flash、ram、rom等存储器。在现有技术中,待启动程序的数据是以明文的形式存储在外部存储器中的,存在数据泄露的风险。对此,请参考图4进行理解,图4示意性地示出了本申请的一些实施方式所提供的对外部存储器数据进行加解密的原理示意图,如图4所示,本申请实施例可以在连接外部存储器的总线(例如ahb总线和apb总线)中增设一加解密模块,对写入或读出外部存储器的数据可选择性地进行加密或解密,这样能够对需要避免泄露的数据(例如待启动程序数据)进行加密后存储,避免数据泄露的风险。相应的,在所述加载待启动程序至芯片内部存储器(步骤s101)之前,还包括:从外部存储器中获取已加密的待启动程序数据,其中,待启动程序经过加密后存储于所述外部存储器中;采用所述芯片内部预存的读写密钥对所述已加密的待启动程序数据进行解密,得到待启动程序。

其中,上述读写密钥可以采用用于对称加解密的对称密钥实现,由于对称加密算法具有高速、高效和便于实现的特点,因此,可以确保从外部存储器读取数据和写入数据的速率不受太大影响,确保数据传输速率满足使用需求。

另外,上述读写密钥也可以存储在efuse中,以避免芯片需求方对读写密钥进行篡改,相应的,上述采用所述芯片内部预存的读写密钥对所述加密的待启动程序数据进行解密,可以包括:采用所述芯片内部的efuse中预存的读写密钥对所述加密的待启动程序数据进行解密。

通过将读写密钥写入efuse中,可以确保读写密钥不会在出厂后被芯片需求方或下游使用方破解和篡改,确保外部存储器中数据的安全性。

其中,上述对称加密算法可以包括但不限于aes、idea等,本申请实施例不做限定。

在上述的实施例中,提供了一种程序校验方法,与之相对应的,本申请还提供一种程序校验装置。本申请实施例提供的程序校验装置可以实施上述程序校验方法,该程序校验装置可以通过软件、硬件或软硬结合的方式来实现。例如,该程序校验装置可以包括集成的或分开的功能模块或单元来执行上述各方法中的对应步骤。请参考图5,其示意性地示出了本申请的一些实施方式所提供的一种程序校验装置的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

如图5所示,本申请实施例提供一种程序校验装置10,所述装置10包括:内部加载模块101,用于加载待启动程序至芯片内部存储器;签名验证模块102,用于利用从所述芯片内部获取的验签密钥对所述待启动程序进行签名验证;拒绝启动模块103,用于若签名验证不通过,则拒绝启动所述待启动程序;允许启动模块104,用于若签名验证通过,则允许启动所述待启动程序。

在本申请实施例的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请实施例的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和外部软件;所述签名验证模块102,包括:依次验证单元,用于利用从所述芯片内部获取的验签密钥对所述bootloader和所述外部软件依次进行签名验证,其中,任意一项验证不通过则判断整体签名验证不通过。

在本申请实施例的一些变更实施方式中,所述签名验证模块102,包括:字段提取单元,用于提取所述待启动程序的数据字段和签名字段;数字摘要计算单元,用于计算所述数据字段对应的第一数字摘要;数字摘要解密单元,用于利用从所述芯片内部获取的验签密钥对所述签名字段进行解密,得到第二数字摘要;摘要相同处理单元,用于若所述第一数字摘要与所述第二数字摘要相同,则签名验证通过;摘要不同处理单元,用于若所述第一数字摘要与所述第二数字摘要不相同,则签名验证不通过。

在本申请实施例的一些变更实施方式中,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请实施例的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请实施例的一些变更实施方式中,所述装置10还包括:部分密钥读取模块,用于从所述芯片内部的电子保险丝efuse中读取预存的第一坐标值,所述第一坐标值是基于ecc加密算法的验签密钥的一部分;部分密钥计算模块,用于采用所述ecc加密算法对应的曲线方程,计算与所述第一坐标值对应的第二坐标值;完整密钥确定模块,用于根据所述第一坐标值和所述第二坐标值确定验签密钥。

在本申请实施例的一些变更实施方式中,所述装置10还包括:完整密钥读取模块,用于从所述芯片内部的efuse中读取预存的验签密钥。

在本申请实施例的一些变更实施方式中,所述装置10还包括:外部数据读取模块,用于从外部存储器中获取已加密的待启动程序数据,其中,待启动程序经过加密后存储于所述外部存储器中;外部数据解密模块,用于采用所述芯片内部预存的读写密钥对所述已加密的待启动程序数据进行解密,得到待启动程序。

在本申请实施例的一些变更实施方式中,所述外部数据解密模块,包括:读写密钥解密单元,用于采用所述芯片内部的efuse中预存的读写密钥对所述加密的待启动程序数据进行解密。

在本申请实施例的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请实施例的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请实施例提供的程序校验装置10,与本申请前述实施例提供的程序校验方法出于相同的发明构思,具有相同的有益效果,此处不再赘述。

基于与上述程序校验方法相同的技术构思,本申请实施例还提供一种程序签名方法,下面关于程序签名方法的实施例可以参考前述关于程序校验方法的实施例说明进行理解,部分内容不再赘述,相应的,上述关于程序校验方法的实施例也可以参考下述关于程序签名方法的实施例说明进行理解。请参考图6,其示意性地示出了本申请的一些实施方式所提供的一种程序签名方法的流程图,如图6所示,一种程序签名方法,可以包括以下步骤:

s201:确定用于在芯片上运行的待启动程序;

s202:基于签名密钥生成所述待启动程序的数字签名;

s203:将所述签名密钥对应的验签密钥存储至所述芯片内部,以便于在所述芯片内部对所述待启动程序的数字签名进行签名验证。

本申请实施例提供的上述程序校验方法,至少可以取得以下有益效果:通过在对待启动程序进行数字签名后,将签名密钥对应的验签密钥存储至所述芯片内部,可以确保在后续程序校验过程中,在所述芯片内部对所述待启动程序的数字签名进行签名验证,从而提高程序校验效率和安全性。

其中,上述芯片可以包括片上系统soc芯片,上述待启动程序可以包括引导加载程序bootloader和/或外部软件。

在一些实施方式中,所述签名密钥可以包括采用非对称加密算法生成的私钥,所述验签密钥包括可以采用非对称加密算法生成的公钥。

另外,上述非对称加密算法可以包括椭圆曲线密码编码学ecc加密算法。

相应的,上述将所述签名密钥对应的验签密钥存储至所述芯片内部(步骤s203),可以包括:将所述签名密钥对应的验签密钥的第一坐标值烧写入所述芯片内部的efuse中,以便所述芯片根据所述ecc加密算法对应的曲线方程计算与所述第一坐标值对应的第二坐标值,并根据所述第一坐标值和第二坐标值确定验签密钥,其中,所述第一坐标值是基于ecc加密算法的验签密钥的一部分。

作为上述实施方式的变更实施方式,还可以将整个验签密钥都存储至efuse中,相应的,所述将所述签名密钥对应的验签密钥存储至所述芯片内部(步骤s203),可以包括:将所述签名密钥对应的验签密钥烧写入所述芯片内部的efuse中。

另外,考虑外部存储器数据安全问题,本申请实施例还可以对外部存储器中的数据利用读写密钥进行加密,相应的,所述方法还可以包括:获取针对外部存储器的读写密钥,所述读写密钥用于对写入或读出所述外部存储器的数据进行加密或解密;将所述读写密钥烧写入所述芯片内部的efuse中。

其中,所述读写密钥可以包括用于对称加解密的对称密钥。

在上述任意实施方式的基础上,上述方法还可以包括:通过将所述efuse中密钥存储区外的指定电子位设置为指定状态,使所述密钥存储区禁止外部软件读写。

例如,可以将指定电子位设置为指定状态“0”,当有外部软件要访问密钥存储区中存储的验签密钥或读写密钥时,先判断该指定电子位的状态是否为上述指定状态“0”,若是,则禁止外部软件读写。通过本实施方式,可以防止efuse中的密钥被篡改和读取,提高方案的安全性。

在上述的实施例中,提供了一种程序签名方法,与之相对应的,本申请还提供一种程序签名装置。本申请实施例提供的程序签名装置可以实施上述程序签名方法,该程序签名装置可以通过软件、硬件或软硬结合的方式来实现。例如,该程序签名装置可以包括集成的或分开的功能模块或单元来执行上述各方法中的对应步骤。请参考图7,其示意性地示出了本申请的一些实施方式所提供的一种程序签名装置的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

如图7所示,本申请实施例提供一种程序签名装置20,所述装置20包括:程序确定模块201,用于确定用于在芯片上运行的待启动程序;程序签名模块202,用于基于签名密钥生成所述待启动程序的数字签名;密钥存储模块203,用于将所述签名密钥对应的验签密钥存储至所述芯片内部,以便于在所述芯片内部对所述待启动程序进行签名验证。

在本申请实施例的一些变更实施方式中,所述待启动程序包括引导加载程序bootloader和/或外部软件。

在本申请实施例的一些变更实施方式中,所述签名密钥包括采用非对称加密算法生成的私钥,所述验签密钥包括采用非对称加密算法生成的公钥。

在本申请实施例的一些变更实施方式中,所述非对称加密算法包括椭圆曲线密码编码学ecc加密算法。

在本申请实施例的一些变更实施方式中,所述密钥存储模块203,包括:部分密钥烧写单元,用于将所述签名密钥对应的验签密钥的第一坐标值烧写入所述芯片内部的efuse中,以便所述芯片根据所述ecc加密算法对应的曲线方程计算与所述第一坐标值对应的第二坐标值,并根据所述第一坐标值和第二坐标值确定验签密钥,其中,所述第一坐标值是基于ecc加密算法的验签密钥的一部分。

在本申请实施例的一些变更实施方式中,所述密钥存储模块203,包括:完整密钥烧写单元,用于将所述签名密钥对应的验签密钥烧写入所述芯片内部的efuse中。

在本申请实施例的一些变更实施方式中,所述装置20还包括:读写密钥获取模块,用于获取针对外部存储器的读写密钥,所述读写密钥用于对写入或读出所述外部存储器的数据进行加密或解密;读写密钥烧写模块,用于将所述读写密钥烧写入所述芯片内部的efuse中。

在本申请实施例的一些变更实施方式中,所述读写密钥包括用于对称加解密的对称密钥。

在本申请实施例的一些变更实施方式中,所述装置20还包括:禁止读写设置模块,用于通过将所述efuse中密钥存储区外的指定电子位设置为指定状态,使所述密钥存储区禁止外部软件读写。

在本申请实施例的一些变更实施方式中,所述芯片包括片上系统soc芯片。

本申请实施例提供的程序签名装置20,与本申请前述实施例提供的程序签名方法出于相同的发明构思,具有相同的有益效果,此处不再赘述。

为了便于理解,下面结合具体实施方式进一步进行说明,其中,下述示例性说明可以参照前述任意实施例的说明进行理解,部分内容不再赘述。

需要说明的是,在下述示例性说明中,虽然部分用词发生了变化,但这并不影响其含义的表达,下述说明中会对部分用词与前述实施例说明中的用词进行对应性说明,该对应性说明所表达的对应关系既可以包括等同关系、也可以包括上下位关系,本领域技术人员可以结合实际情况进行理解。

在一些具体的实施例中,基于对称加密算法具有高速、高效和便于实现的特点,而非对称加密算法具有安全性高,但是速度比较慢的特点,本实施例使用对称加密算法加密明文数据,比如aes,使存储器的数据为密文。用sha-2加密算法处理软件版本得到数据摘要,再用ecc加密算法实现对摘要的数字签名,从而既保障了软件执行过程中的安全性,又完成了数字签名。而且,将加解密算法使用硬件加速,集成于soc芯片中,极大提高了系统吞吐率和数字签名生成、认证的速度,同时给boot启动方案的安全性提供了高强度的保障。

本实施例的安全boot启动方案包括两个层面:1)使用非对称加解密算法ecc对软件版本进行检验,当软件版本校验不通过时,判定为非法版本,系统拒绝启动;2)使用对称加解密算法对软件版本进行加密保护,避免数据泄露。

芯片安全boot过程如图3所示:bootrom将存储器中的bootloader搬进芯片内部sram进行签名验证,bootloader校验通过后,bootloader将大版本程序(即外部软件,考虑到外部软件会经常更新,可以只对大版本程序进行校验,以避免因程序更新而导致的误判)加载到内部sram,再次做校验,校验通过后,系统启动,否则拒绝启动;

签名过程:编译生成bootloader程序,生产测试工具利用sha2算法计算hash值,ecc算法对hash值进行加密得到bootloader的签名,ecc的公钥烧写电子保险丝efuse中。

验签过程:bootrom程序将bootloader加载到内部sram,提取数据字段和签名字段,计算bootlaoder的hash值,再将efuse中的公钥和签名作为ecc算法输入,确认签名的一致性,如果一致则继续启动,否则拒绝启动,当尝试一定次数不过则给出信息,进入异常处理。

大版本的签名和验签流程一样,使用同样的算法,为了加快boot过程,可以只进行bootloader的签名和验签。

签名验签只需把公钥的一坐标(x坐标或y坐标)存入efuse中即可,另一坐标可通过曲线方程计算得出,这样可节约efuse存储空间。通过分配不同的ecc秘钥对给客户,bootloader经过ecc签名后提供给客户,这样低价代理拿到的芯片,只能用匹配的bootloader,即只能用特定的软件版本,否则拒绝启动,可以防串货。

存储器加密的示意图如图4所示:芯片中的存储器控制器包括两条访问通道,一条是通过apb总线,可以对存储器进行读写;另外一条是通过ahb总线,只能对存储器进行读操作。

ahb和apb总线都经过外部存储器的加解密模块,该加解密模块可以对apb总线写入外部存储器的数据进行加密或不做任何处理;对ahb总线的读数据进行解密或不做任何处理,加解密控制信号存储于efuse中。使能加密后,使用物理手段(如串口spi)从存储器中读取的数据都是经过加密的,大部分数据无法恢复出真实数据。

加解密模块支持128位、192位和256位等不同的密钥,具体位数由加解密算法决定。密钥由随机数生成,生成之后烧写efuse中,通过efuse使能信号,可控制软件读写密钥区的功能,防止密钥被泄露及篡改。

通过上述实施例,至少还可以取得以下技术效果:

1、使用硬件加速,并集成到soc芯片中,极大提高了运算效率。

2、使用对称加密算法对存储器的数据进行加解密,防止数据被泄露。同时把加解密密钥存储于电子保险丝efuse中,对密钥加上软件禁止读写功能,以防密钥被篡改和读取。

3、通过不同的密钥对,可以防串货。

4、通过数字签名验证,保证芯片的正常功能实现,有效防止恶意软件侵入,有效提高产品的安全性、质量。

本申请实施方式还提供一种与前述实施方式所提供的程序校验方法对应的soc芯片,所述soc芯片采用本申请前述任意实施方式所提供的程序校验方法对待启动程序进行签名验证,相关之处请参考前述关于程序校验方法的实施例说明进行理解。

本申请实施例提供的soc芯片,与本申请前述实施例提供的程序校验方法出于相同的发明构思,具有相同的有益效果,此处不再赘述。

本申请实施方式还提供一种与前述实施方式所提供的程序校验方法或程序签名方法对应的电子设备,该电子设备可以包括但不限于设有上述soc芯片或微控制器的设备,以执行上述程序校验方法,该电子设备也可以包括但不限于芯片烧录设备、台式机电脑、笔记本电脑等设备,以执行上述程序签名方法。

请参考图8,其示意性地示出了本申请的一些实施方式所提供的一种电子设备的示意图。如图8所示,所述电子设备30包括:处理器300,存储器301,总线302和通信接口303,所述处理器300、通信接口303和存储器301通过总线302连接;所述存储器301中存储有可在所述处理器300上运行的计算机程序,所述处理器300运行所述计算机程序时执行本申请前述任一实施方式所提供的程序校验方法或程序签名方法。

其中,存储器301可能包含高速随机存取存储器(randomaccessmemory,ram),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口303(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。

总线302可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器301用于存储程序,所述处理器300在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的所述程序校验方法或程序签名方法可以应用于处理器300中,或者由处理器300实现。

处理器300可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器300中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器300可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器301,处理器300读取存储器301中的信息,结合其硬件完成上述方法的步骤。

本申请实施例提供的电子设备与本申请前述实施例提供的程序校验方法或程序签名方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。

本申请实施方式还提供一种与前述实施方式所提供的程序校验方法或程序签名方法对应的计算机可读介质,请参考图9,其示出的计算机可读存储介质为光盘40,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的程序校验方法或程序签名方法。

需要说明的是,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。

本申请的上述实施例提供的计算机可读存储介质与本申请前述实施例提供的程序校验方法或程序签名方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。

需要说明的是,附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram,)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。

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