版本生成和版本烧写方法及装置、安全启动方法及数据卡 【技术领域】
本发明实施例涉及版本生成和版本烧写方法及装置、安全启动方法及数据卡。
背景技术
现有数据卡(data card),如无线上网卡等,通常采用安全启动机制和非安全启动机制。其中,安全启动机制是指为了防止数据卡中的镜像数据和机要数据被恶意改写,在数据卡启动时通过数据采用安全启动流程,以下简要说明现有的安全启动原理:
利用数据卡的芯片只读存储器(Read Only Memory,简称:ROM)中预存的根公钥(Root Public Key)去鉴权第一个镜像数据的证书签名;鉴权通过后,取出该数字证书(Certificate Authority,简称:CA)中携带的镜像公钥,对采用哈希(Hash)值签名的第一个镜像数据进行鉴权;鉴权通过后,该第一个镜像数据得到CPU的控制权,继续从ROM中取出根公钥去鉴权第二个镜像数据的CA签名;鉴权通过后,取出该CA中携带的镜像公钥,对采用哈希(Hash)值签名的第二个镜像数据进行鉴权;鉴权通过后,该第二个镜像数据得到CPU的控制权,依次类推,重复上述过程,最终完成对机要数据的鉴权。只有当所有鉴权都通过后,才能确认所有的镜像数据和机要数据的完整性。
非安全启动机制是指在安全启动之前并不执行上述安全启动流程,即不需要确认镜像数据和机要数据的完整性而直接进行启动。在实际应用中,上述两种启动机制均是可行的,用户可以根据自身需要进行选择。但是,现有技术中至少存在如下问题:
在现有安全启动机制中,除了根公钥是保存在芯片ROM中以外,上述镜像数据、机要数据、镜像签名、镜像数据的CA及CA签名均保存在片外闪存(Flash)中的特定位置,并且在片外闪存的固定区域中设置一个配置表,用于存储上述数据在闪存中的存储位置,当进行安全启动时,通过该配置表定位到与镜像数据的镜像签名、镜像数据的CA及CA签名,以便执行上述安全启动流程。在进行版本生成时,由生产线将上述数据及配置表逐一烧写到指定位置。
而在非安全启动机制中,不需要进行上述鉴权过程,也不需要设置配置表来存储镜像数据及机要数据在闪存中的存储位置,因此在进行版本生成时,需要采用与安全启动机制不同的生产以不同的方式进行烧写,从而造成采用安全启动机制的数据卡与采用非安全启动机制的数据卡无法使用相同的生产线进行烧写,并且这两种启动机制不能互相兼容,使得当从非安全启动机制升级到安全启动机制时,需要对升级工具进行较大的修改,因此会造成升级成本的增加。
【发明内容】
本发明实施例提供一种版本生成和版本烧写方法及装置、安全启动方法及数据卡,用以兼容安全启动机制和非安全启动机制。
本发明一实施例提供一种版本生成方法,其中包括:
将镜像数据的长度值写入到所述镜像数据的头字节中生成完整镜像数据;
对所述完整镜像数据进行数字签名生成镜像签名;
将所述镜像签名插入到所述完整镜像数据的尾部;
将所述镜像数据的数字证书及证书签名插入到所述镜像签名的尾部。
本发明另一实施例提供一种将采用上述实施例所述版本生成方法生成的镜像数据的版本烧写到闪存中的版本烧写方法,其中包括:
将第一个镜像数据的版本烧写到所述闪存的起始位置;
将多个镜像数据的版本顺序烧写到所述闪存中位于所述第一个镜像数据的版本之后的位置;
将机要数据烧写到所述闪存中位于最后一个镜像数据的版本之后。
本发明又一实施例提供一种基于上述实施例所述版本烧写方法进行烧写后得到的闪存的安全启动方法,其中包括:
在所述闪存的起始位置查找到第一个镜像数据;
从所述第一个镜像数据的头字节中获取所述第一个镜像数据的长度值;
根据所述长度值,查找到所述第一个镜像数据的镜像签名、数字证书、及证书签名;
利用芯片只读存储器中预存的根公钥及查找到的所述第一个镜像数据的数字证书和证书签名,鉴权所述第一个镜像数据的镜像签名;
所述第一个镜像数据的镜像签名鉴权通过后,查找下一个镜像数据;
利用芯片只读存储器中预存的根公钥及查找到的所述下一个镜像数据的数字证书和证书签名,鉴权所述下一个镜像数据的镜像签名;
当所有镜像数据通过后,利用最后一个镜像数据的数字证书中携带的镜像公钥,对机要数据进行鉴权。
本发明再一实施例提供一种版本生成装置,其中包括:
写入模块,用于将镜像数据的长度值写入到所述镜像数据的头字节中生成完整镜像数据;
签名模块,用于对写入模块生成地所述完整镜像数据进行数字签名生成镜像签名;
插入模块,用于将签名模块生成的所述镜像签名插入到所述完整镜像数据的尾部,并将所述镜像数据的数字证书及证书签名插入到所述镜像签名的尾部。
本发明再一实施例提供一种将由上述实施例所述版本生成装置生成的镜像数据的版本烧写到闪存中的版本烧写装置,其中包括:
第一烧写模块,用于将第一个镜像数据的版本烧写到所述闪存的起始位置;
第二烧写模块,用于将多个镜像数据的版本顺序烧写到所述闪存中位于由第一烧写模块烧写的所述第一个镜像数据的版本之后的位置;
机要数据烧写模块,用于将机要数据烧写到所述闪存中位于由第二烧写模块烧写的最后一个镜像数据的版本之后。
本发明再一实施例提供一种包括由上述实施例所述版本烧写装置进行烧写后得到的闪存的数据卡,其中还包括芯片只读存储器,其中:
所述芯片只读存储器包括:
第一查找模块,用于在所述闪存的起始位置查找到第一个镜像数据;
获取模块,用于从第一查找模块查找到的所述第一个镜像数据的头字节中获取所述第一个镜像数据的长度值;
第二查找模块,用于根据获取模块获取到的所述长度值,查找到所述第一个镜像数据的镜像签名、数字证书、及证书签名;
第一鉴权模块,用于利用芯片只读存储器中预存的根公钥及第二查找模块查找到的所述数字证书和证书签名,鉴权所述第一个镜像数据的镜像签名;
所述闪存包括:
第三查找模块,用于当所述芯片只读存储器对所述第一个镜像数据的镜像签名的鉴权通过后,查找下一个镜像数据;
第二鉴权模块,用于利用芯片只读存储器中预存的根公钥及第三查找模块查找到的所述下一个镜像数据的数字证书和证书签名,鉴权所述下一个镜像数据的镜像签名;
机要数据鉴权模块,用于当所有镜像数据通过后,利用最后一个镜像数据的数字证书中携带的镜像公钥,对机要数据进行鉴权。
本发明实施例无需针对不同的机制设计不同的升级工具,从而有利于节约升级成本和时间。
【附图说明】
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述版本生成方法实施例的流程图;
图2为本发明所述将采用本发明所述版本生成方法生成的镜像数据的版本烧写到闪存中的版本烧写方法实施例的流程图;
图3为将三个镜像数据的版本烧写到闪存中的举例示意图;
图4为基于本发明所述版本烧写方法进行烧写后得到的闪存的安全启动方法实施例的流程图;
图5为本发明所述版本生成装置实施例的结构示意图;
图6为本发明所述版本烧写装置实施例的结构示意图;
图7为本发明所述数据卡实施例的结构示意图。
【具体实施方式】
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明所述版本生成方法实施例一的流程图,如图所示,该方法包括如下步骤:
步骤101,将镜像数据的长度值写入到所述镜像数据的头字节中生成完整镜像数据。
具体地,可以编写批处理文件,在对镜像数据进行编译时自动生成所述完整镜像数据。由于镜像数据的开头前8个字节通常用于放置跳转指令,因此可以将所述长度值写入到所述镜像数据的开头第8个字节开始的4个字节中。
步骤102,对所述完整镜像数据进行数字签名生成镜像签名。
具体地,可以采用Hash加密算法以及RSA加密对所述完整镜像数据进行数字签名,并将加密后得到的Hash值作为所述镜像签名。
步骤103,将所述镜像签名插入到所述完整镜像数据的尾部。
步骤104,将所述镜像数据的数字证书及证书签名插入到所述镜像签名的尾部。
通过本实施例所述方法,使每一个镜像数据及其镜像签名、数字证书及证书签名形成为一个单独的文件,由于镜像数据的头字节包含了该镜像数据的长度值,并且镜像签名、数字证书及证书签名均具有固定的长度,使得安全启动机制和非安全启动机制下的版本结构得到了统一,因此当从非安全启动机制升级到安全启动机制时,可以通过本实施例所述方法使原先处于非安全启动机制下的镜像数据生成完整镜像数据,然后将相应的镜像签名、数字证书及证书签名插入到完整镜像数据的尾部即可生成安全启动机制下的版本,无需针对不同的机制设计不同的升级工具,从而有利于节约升级成本和时间。
图2为本发明所述将采用本发明所述版本生成方法生成的镜像数据的版本烧写到闪存中的版本烧写方法实施例的流程图,该方法包括如下步骤:
步骤201,将第一个镜像数据的版本烧写到闪存的起始位置。
其中,闪存的起始位置是指闪存中物理地址为0的位置。
步骤202,将多个镜像数据的版本顺序烧写到所述闪存中位于所述第一个镜像数据的版本之后的位置。
具体地,多个镜像数据的版本之间的距离既可以为预设的固定距离,也可以为任意距离。以下举例说明,如图3所示,假设数据卡中有三个镜像数据,“bootload”,、“bootrom”和“vxworks”,无论是安全启动机制还是非安全启动机制,均可以通过本发明所述版本生成方法将这三个镜像数据连同相应的镜像签名、CA及CA签名分别打成三个数据包,即形成三个版本数据“bootload.bin”、“bootrom.bin”和“vxworks.bin”。只不过在非安全启动时,镜像签名、CA及CA签名的位置为空数据。
步骤203,将机要数据烧写到所述闪存中位于最后一个镜像数据的版本之启。
具体地,该机要数据与最后一个镜像数据的版本距离可以根据需要进行预定设定。
通过本实施例所述方法,使安全启动机制下的版本生成过程与非安全启动机制下的版本生成过程相一致,因此,可以使用同一条生产线将在安全启动机制及非安全启动机制下生成的版本向闪存中进行烧写,而无需另设生成线,从而实现了产线重用,节约了烧写时间和成本,也简化了版本管理流程。
图4为基于本发明所述版本烧写方法进行烧写后得到的闪存的安全启动方法实施例的流程图,该方法包括:
步骤301,在所述闪存的起始位置查找到第一个镜像数据。
步骤302,从所述第一个镜像数据的头字节中获取所述第一个镜像数据的长度值。
步骤303,根据所述长度值,查找到所述第一个镜像数据的镜像签名、数字证书、及证书签名。
如前所述,无论镜像数据本身的长度,该镜像数据相应的镜像签名、数字证书及证书签名均具有固定的长度,因此通过获知镜像数据的长度值即可以分别查找到该镜像数据相应的镜像签名、数字证书及证书签名。
步骤304,利用芯片只读存储器中预存的根公钥及查找到的所述第一个镜像数据的数字证书和证书签名,鉴权所述第一个镜像数据的镜像签名。
具体地,可以先利用芯片只读存储器中预存的根公钥鉴权所述证书签名;所述证书签名鉴权通过后,再利用所述数字证书中携带的镜像公钥,对所述第一个镜像数据的镜像签名进行鉴权。
步骤305,所述第一个镜像数据的镜像签名鉴权通过后,查找下一个镜像数据。
由于在前述步骤中已经获知第一个镜像数据在闪存中的位置,且多个镜像数据均是顺序烧写的,因此,可以根据相邻两个版本的预设距离或者根据镜像数据头部标识,查找下一个镜像数据的版本,进而找到所有镜像数据的版本。
步骤306,利用芯片只读存储器中预存的根公钥及查找到的所述下一个镜像数据的数字证书和证书签名,鉴权所述下一个镜像数据的镜像签名。
具体地,由于本实施例中各个镜像数据的版本均采用本发明所述版本生成方法生成,因此,可以同样采用类似于步骤301~303的方法,查找到各个镜像数据的镜像签名、数字证书、及证书签名。并且,利用根公钥及查找到的所述下一个镜像数据的数字证书和证书签名下一个镜像数据的镜像签名进行鉴权的步骤也与前述步骤304相似,此处不再赘述。
步骤307,当所有镜像数据通过后,利用最后一个镜像数据的数字证书中携带的镜像公钥,对机要数据进行鉴权。
对机要数据鉴权通过后,则可以进行正常的安全启动。
本实施例所述步骤301~304中对第一个镜像数据的鉴权过程均是由芯片ROM中的片内程序执行的,而当对第一个镜像数据的鉴权通过后,则由第一个镜像数据接管CPU,对下一个镜像数据进行鉴权,以此类推,由前一个鉴权通过后的镜像数据对下一个镜像数据进行鉴权,直到由最后一个镜像数据对机要数据进行鉴权。但此处需要说明的是,虽然对各个镜像数据进行鉴权的过程是由各个镜像数据逐个接管CPU来完成的,但在鉴权各个镜像数据的证书签名时所利用的公钥均是预存在芯片ROM中的根公钥,由于芯片ROM中的数据是不能更改的,因此,这样做有利于保证数据的安全性,也便于管理。
通过本实施例所述方法,无需设置配置表即可以定位到与所述镜像数据的镜像签名、数字证书及证书签名,从而执行安全启动流程。由于不再需要设置配置表,因此省去了检验配置表的时间,从而加快了启动速度。
图5为本发明所述版本生成装置实施例的结构示意图,如图所示,该版本生成装置10包括:写入模块11、签名模块12、及插入模块13,其工作原理如下:
写入模块11将镜像数据的长度值写入到所述镜像数据的头字节中生成完整镜像数据;签名模块12对写入模块11生成的所述完整镜像数据进行数字签名生成镜像签名;插入模块13将签名模块12生成的所述镜像签名插入到所述完整镜像数据的尾部,并将所述镜像数据的数字证书及证书签名插入到所述镜像签名的尾部。
通过本实施例所述装置,使每一个镜像数据及其镜像签名、数字证书及证书签名形成为一个单独的文件,由于镜像数据的头字节包含了该镜像数据的长度值,并且镜像签名、数字证书及证书签名均具有固定的长度,使得安全启动机制和非安全启动机制下的版本结构得到了统一,因此当从非安全启动机制升级到安全启动机制时,可以通过本实施例所述方法使原先处于非安全启动机制下的镜像数据生成完整镜像数据,然后将相应的镜像签名、数字证书及证书签名插入到完整镜像数据的尾部即可生成安全启动机制下的版本,无需针对不同的机制设计不同的升级工具,从而有利于节约升级成本和时间。
图6为本发明所述版本烧写装置实施例的结构示意图,该版本烧写装置20用于将本发明实施例所述版本生成装置生成的镜像数据的版本烧写到闪存中,如图所示包括:第一烧写模块21、第二烧写模块22和机要数据烧写模块23,其工作原理如下:
第一烧写模块21将第一个镜像数据的版本烧写到所述闪存的起始位置;第二烧写模块22将多个镜像数据的版本顺序烧写到所述闪存中位于由第一烧写模块烧写的所述第一个镜像数据的版本之后的位置;机要数据烧写模块23将机要数据烧写到所述闪存中位于由第二烧写模块22烧写的最后一个镜像数据的版本之后。
通过本实施例所述装置,使安全启动机制下的版本生成过程与非安全启动机制下的版本生成过程相一致,因此,可以使用同一条生产线将在安全启动机制及非安全启动机制下生成的版本向闪存中进行烧写,而无需另设生成线,从而实现了产线重用,节约了烧写时间和成本,也简化了版本管理流程。
图7为本发明所述版数据卡实施例的结构示意图,如图所示,该数据卡30包括:闪存31及芯片只读存储器32,其中,该闪存31是由本发明实施例所述版本烧写装置20进行烧写后得到的闪存,其工作原理如下:
芯片只读存储器32中的第一查找模块3201在所述闪存的起始位置查找到第一个镜像数据;获取模块3202从第一查找模块3201查找到的所述第一个镜像数据的头字节中获取所述第一个镜像数据的长度值;第二查找模块3203根据获取模块3202获取到的所述长度值,查找到所述第一个镜像数据的镜像签名、数字证书、及证书签名;第一鉴权模块3204利用芯片只读存储器32中预存的根公钥及第二查找模块3203查找到的所述数字证书和证书签名,鉴权所述第一个镜像数据的镜像签名。
具体地,该第一鉴权模块3204利用芯片只读存储器32中预存的根公钥鉴权第二查找模块3203查找到的所述证书签名,所述证书签名鉴权通过后,利用第二查找模块3203查找到的所述数字证书中携带的镜像公钥,对所述第一个镜像数据的镜像签名进行鉴权。
当所述芯片只读存储32对所述第一个镜像数据的镜像签名的鉴权通过后,所述闪存31中的第三查找模块3101查找下一个镜像数据;第二鉴权模块3102利用芯片只读存储器32中预存的根公钥及第三查找模块3101查找到的所述下一个镜像数据的数字证书和证书签名,鉴权所述下一个镜像数据的镜像签名;当所有镜像数据通过后,机要数据鉴权模块3103利用最后一个镜像数据的数字证书中携带的镜像公钥,对机要数据进行鉴权。
通过本实施例所述装置,无需设置配置表即可以定位到与所述镜像数据的镜像签名、数字证书及证书签名,从而执行安全启动流程。由于不再需要设置配置表,因此省去了检验配置表的时间,从而加快了启动速度。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。