基于二级密钥的SOC启动方法及系统与流程

文档序号:18886536发布日期:2019-10-15 21:00阅读:339来源:国知局
基于二级密钥的SOC启动方法及系统与流程
本发明涉及soc启动
技术领域
,具体涉及一种基于二级密钥的soc启动方法及系统。
背景技术
:soc安全启动是为了从源头上保证所有的启动代码都是可信的,一旦被篡改,应该能被检测到,从而拒绝运行被篡改的启动代码。一般把启动代码分成三大块:片内固化启动代码、bootloader(如uboot)和os(如linux)。片内固化启动代码是固化在soc内部的,本身就无法被篡改,所以它是可信的。片内固化启动代码负责认证bootloader是否可信,如果可信,则跳转到bootloader入口地址去执行,否则启动失败。如果bootloader可信,则bootloader负责认证os是否可信,如果可信,则跳转到os入口地址去执行,否则启动失败。现有技术中nxp选择的安全启动方案是采用rsa(非对称性加解密算法)私钥对bootloader和os加密,公钥对bootloader和os认证。具体的加密方案如下:生成一对或者四对公钥私钥对;对一个或四个公钥做sha哈希计算,并将哈希值烧录到片内efuse;对bootloader做哈希计算,并选择一个私钥对哈希值加密,作为bootloader的签名,将公钥、签名、以及使用的公钥的索引都放在bootloader的头部;对os做哈希计算,并选择一个私钥对哈希值加密,作为os的签名,将公钥、签名、以及使用的公钥的索引都放在os的头部。最终生成的bootloader和os的格式参图1所示,对应的格式说明如表1所示:表1:nxp安全启动中bootloader/os格式说明编号格式说明1一个或四个公钥2bootloader或者os的签名3用于认证的公钥的索引,如果只有一个公钥,则为04bootloader或者os的原始代码具体解密方案如下:片内rom启动代码读取bootloader头部的公钥,并交给专门的ip模块对公钥做哈希计算,获得公钥哈希值hash1;从efuse中读取预烧录的公钥哈希值hash2;比较hash1和hash2是否一致,如果一致,说明公钥有效,可以进行下一步认证;如果不一致,说明公钥无效,启动失败;从bootloader中读取签名、以及公钥索引,根据公钥索引选择公钥,并使用公钥解密,得到bootloader的哈希值hash3;读取完整的bootloader,并交给专门的ip模块对bootloader做哈希计算,得到哈希值hash4;比较hash3和hash4是否一致,如果一致,说明bootloader没有被篡改,可以跳转到bootloader入口地址执行;如果不一致,说明bootloader被篡改,启动失败;bootloader启动后,禁止从外部存储设备载入环境变量,同时禁止进入命令行,这主要是为了防止bootloader的执行流被恶意篡改;bootloader采用跟片内rom启动代码一样的方式,认证os是否可信,如果可信,则跳转到os入口地址执行;如果不可信,则启动失败。现有技术中的安全启动方案具有以下缺点:每次重新编译bootloader和os,都需要获取rsa私钥,这样容易导致私钥泄露。虽然私钥泄露后,可以将泄露的密钥对设置为失效,可是一旦4个密钥对都泄露,则没有手段保证系统安全;需要专门的ip模块做哈希计算以及rsa解密,增加了soc的复杂度以及成本;不能从外部存储设备载入环境变量,也不能进入bootloader命令行,灵活性较差。因此,针对上述技术问题,有必要提供一种基于二级密钥的soc启动方法及系统。技术实现要素:有鉴于此,本发明的目的在于提供一种基于二级密钥的soc启动方法及系统。为了实现上述目的,本发明一实施例提供的技术方案如下:一种基于二级密钥的soc启动方法,所述方法包括:加密步骤,基于一级密钥和二级密钥,对bootloader和os进行加密,得到bootloader头部信息和os头部信息;解密步骤,对bootloader头部信息和os头部信息进行解密,验证一级密钥及二级密钥的有效性,并判定bootloader和os是否可信。作为本发明的进一步改进,所述bootloader头部信息包括证书、二级公钥、bootloader签名及二级公钥的索引信息;所述os头部信息包括证书、二级公钥、os签名及二级公钥的索引信息;其中,所述证书包括一级公钥、二级密钥的签名及一级公钥的索引信息。作为本发明的进一步改进,所述加密步骤具体包括:生成一级密钥和二级密钥,一级密钥包括一级公钥和一级私钥,二级密钥包括二级公钥及二级私钥;对一级公钥做哈希计算,并将哈希值进行烧录;选定一个一级私钥,对二级公钥的哈希值加密,作为二级密钥的签名;将一级公钥、二级密钥的签名以及一级公钥的索引信息打包作为证书;对bootloader做哈希计算,并选择一个二级私钥对哈希值加密,作为bootloader签名;将证书、二级公钥、bootloader签名及二级公钥的索引信息作为bootloader头部信息。作为本发明的进一步改进,所述加密步骤具体包括:生成一级密钥和二级密钥,一级密钥包括一级公钥和一级私钥,二级密钥包括二级公钥及二级私钥;对一级公钥做哈希计算,并将哈希值进行烧录;选定一个一级私钥,对二级公钥的哈希值加密,作为二级密钥的签名;将一级公钥、二级密钥的签名以及一级公钥的索引信息打包作为证书;对os做哈希计算,并选择一个二级私钥对哈希值加密,作为os签名;将证书、二级公钥、os签名及二级公钥的索引信息作为os头部信息。作为本发明的进一步改进,所述解密步骤具体包括:从bootloader头部信息读取证书,并提取出证书中的一级公钥做哈希计算,得到一级公钥的哈希值hash1;读取预烧录的一级公钥哈希值hash2;比较hash1和hash2是否一致,如果一致,则一级公钥有效,可以进行下一步认证;如果不一致,则一级公钥无效,启动失败;如果一级公钥有效,通过一级公钥认证二级公钥;从证书中提取二级密钥的签名、及一级公钥的索引信息,通过一级公钥的索引信息选择一级公钥,并通过一级公钥解密,获取二级公钥的哈希值hash3;从bootloader头部信息读取二级公钥,并计算其哈希值hash4;比较hash3和hash4是否一致,如果一致,则二级公钥有效,进行下一步认证;如果不一致,则二级公钥无效,启动失败;从bootloader头部信息读取bootloader签名、及二级公钥的索引信息,通过二级公钥的索引信息选择二级公钥,并通过二级公钥解密,得到bootloader的哈希值hash5;读取完整的bootloader,并计算bootloader的哈希值hash6;比较hash5和hash6是否一致,如果一致,则bootloader是可信的,跳转到bootloader入口地址去执行;如果不一致,则bootloader不可信,启动失败。作为本发明的进一步改进,所述解密步骤具体包括:从os头部信息读取证书,并提取出证书中的一级公钥做哈希计算,得到一级公钥的哈希值hash1;读取预烧录的一级公钥哈希值hash2;比较hash1和hash2是否一致,如果一致,则一级公钥有效,可以进行下一步认证;如果不一致,则一级公钥无效,启动失败;如果一级公钥有效,通过一级公钥认证二级公钥;从证书中提取二级密钥的签名、及一级公钥的索引信息,通过一级公钥的索引信息选择一级公钥,并通过一级公钥解密,获取二级公钥的哈希值hash3;从os头部信息读取二级公钥,并计算其哈希值hash4;比较hash3和hash4是否一致,如果一致,则二级公钥有效,进行下一步认证;如果不一致,则二级公钥无效,启动失败;从os头部信息读取os签名、及二级公钥的索引信息,通过二级公钥的索引信息选择二级公钥,并通过二级公钥解密,得到os的哈希值hash5;读取完整的os,并计算os的哈希值hash6;比较hash5和hash6是否一致,如果一致,则os是可信的,跳转到os入口地址去执行;如果不一致,则os不可信,启动失败。作为本发明的进一步改进,所述bootloader头部信息及os头部信息的证书中包括一个或四个一级公钥,bootloader头部信息及os头部信息中包括一个或四个二级公钥。作为本发明的进一步改进,所述一级公钥为一个时,一级公钥的索引信息为0;所述二级公钥为一个时,二级公钥的索引信息为0。作为本发明的进一步改进,所述方法还包括:bootloader从外部载入环境变量并进入命令行。本发明另一实施例提供的技术方案如下:一种基于二级密钥的soc启动系统,所述系统包括:加密单元,用于基于一级密钥和二级密钥,对bootloader和os进行加密,得到bootloader头部信息和os头部信息;解密单元,用于对bootloader头部信息和os头部信息进行解密,验证一级密钥及二级密钥的有效性,并判定bootloader和os是否可信。本发明具有以下有益效果:通过一级密钥和二级密钥进行加密,可以更好地保护私钥,提高了soc启动的安全性;允许bootloader从外部载入环境变量并进入命令行,增加了bootloader的灵活性;软件加密机解密的方案减轻了soc的复杂度,降低了成本。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中bootloader/os的格式示意图;图2为本发明soc启动方法的流程示意图;图3为本发明soc启动系统的模块示意图;图4为本发明中bootloader/os的格式示意图。具体实施方式为了使本
技术领域
的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。参图2所示,本发明公开了一种基于二级密钥的soc启动方法,包括:加密步骤,基于一级密钥和二级密钥,对bootloader和os进行加密,得到bootloader头部信息和os头部信息;解密步骤,对bootloader头部信息和os头部信息进行解密,验证一级密钥及二级密钥的有效性,并判定bootloader和os是否可信。参图3所示,本发明还公开了一种基于二级密钥的soc启动系统,包括:加密单元,用于基于一级密钥和二级密钥,对bootloader和os进行加密,得到bootloader头部信息和os头部信息;解密单元,用于对bootloader头部信息和os头部信息进行解密,验证一级密钥及二级密钥的有效性,并判定bootloader和os是否可信。参图4及表2所示,本发明中的bootloader包括bootloader头部信息及bootloader的原始代码,os信息包括os头部信息及os的原始代码,其中,bootloader头部信息包括证书、二级公钥、bootloader签名及二级公钥的索引信息;os头部信息包括证书、二级公钥、os签名及二级公钥的索引信息;其中,证书包括一级公钥、二级密钥的签名及一级公钥的索引信息。表2:本发明中bootloader/os格式说明以下对本发明中加密和解密分别进行详细说明。soc启动方法的加密步骤具体包括:生成一对或四对一级密钥(公钥私钥对),一级密钥包括一级公钥和一级私钥;再生成一对或四对二级密钥(公钥私钥对),二级密钥包括二级公钥和二级私钥;对一级公钥做哈希计算,并将哈希值进行烧录,烧录到soc内部存储固件(如电可编程熔丝efuse)中,该固件硬件特定决定了它只能烧写一次;选定一个一级私钥,对二级公钥的哈希值加密,作为二级密钥的签名;将一级公钥、二级密钥的签名以及一级公钥的索引信息打包作为证书,证书发布给bootloader和os的开发人员;对bootloader做哈希计算,并选择一个二级私钥对哈希值加密,作为bootloader签名;将证书、二级公钥、bootloader签名及二级公钥的索引信息作为bootloader头部信息;对os做哈希计算,并选择一个二级私钥对哈希值加密,作为os签名;将证书、二级公钥、os签名及二级公钥的索引信息作为os头部信息。需要注意的是,bootloader和os的一级密钥必须是一样的,二级密钥可以不一样,因为一级密钥的公钥的哈希值是存储在soc内部无法修改的存储固件中的,该存储固件只能在启用安全启动时烧录一次,后续不能再次烧录。从加密流程可以看到,一旦生成了证书,一级私钥就可以保存起来,bootloader和os的开发人员直接使用证书就可以了,这样一级私钥泄露的可能就大大降低了。虽然每次编译bootloader或者os都要使用二级私钥,二级私钥泄露的风险偏高,可是一旦二级私钥全部泄露,可以生成新的二级密钥,生成并发布新的证书。soc启动方法的解密步骤具体包括:片内rom代码从bootloader头部信息读取证书,并提取出证书中的一级公钥做哈希计算,得到一级公钥的哈希值hash1;读取预烧录在soc内部存储固件仲的一级公钥哈希值hash2;比较hash1和hash2是否一致,如果一致,则一级公钥有效,可以进行下一步认证;如果不一致,则一级公钥无效,启动失败;如果一级公钥有效,通过一级公钥认证二级公钥;从证书中提取二级密钥的签名、及一级公钥的索引信息,通过一级公钥的索引信息选择一级公钥,并通过一级公钥解密,获取二级公钥的哈希值hash3;从bootloader头部信息读取二级公钥,并计算其哈希值hash4;比较hash3和hash4是否一致,如果一致,则二级公钥有效,进行下一步认证;如果不一致,则二级公钥无效,启动失败;从bootloader头部信息读取bootloader签名、及二级公钥的索引信息,通过二级公钥的索引信息选择二级公钥,并通过二级公钥解密,得到bootloader的哈希值hash5;读取完整的bootloader,并计算bootloader的哈希值hash6;比较hash5和hash6是否一致,如果一致,则bootloader是可信的,跳转到bootloader入口地址去执行;如果不一致,则bootloader不可信,启动失败。本发明中的bootloader可以从外部存储设备载入环境变量,也可以进入命令行,但是必须禁用其自带的启动命令,并添加新的安全启动命令。因为其自带的启动命令不带认证逻辑。bootloader采用跟片上rom启动代码相同的逻辑认证os,具体如下:bootloader从os头部信息读取证书,并提取出证书中的一级公钥做哈希计算,得到一级公钥的哈希值hash1;读取预烧录的一级公钥哈希值hash2;比较hash1和hash2是否一致,如果一致,则一级公钥有效,可以进行下一步认证;如果不一致,则一级公钥无效,启动失败;如果一级公钥有效,通过一级公钥认证二级公钥;从证书中提取二级密钥的签名、及一级公钥的索引信息,通过一级公钥的索引信息选择一级公钥,并通过一级公钥解密,获取二级公钥的哈希值hash3;从os头部信息读取二级公钥,并计算其哈希值hash4;比较hash3和hash4是否一致,如果一致,则二级公钥有效,进行下一步认证;如果不一致,则二级公钥无效,启动失败;从os头部信息读取os签名、及二级公钥的索引信息,通过二级公钥的索引信息选择二级公钥,并通过二级公钥解密,得到os的哈希值hash5;读取完整的os,并计算os的哈希值hash6;比较hash5和hash6是否一致,如果一致,则os是可信的,跳转到os入口地址去执行;如果不一致,则os不可信,启动失败。以上的解密流程中,sha哈希计算和rsa解密算法都由软件实现,不需要特定的安全ip模块参与,大大降低了soc的复杂度以及成本,另一方面来说。允许bootloader从外部载入环境变量以及进入bootloader命令行,这给了bootloader很大的灵活性。同时为了保证os可信,必须对bootloader加入一些额外的限制,防止bootloader跳过安全认证流程,直接启动不可信的os。首先必须禁用bootloader固有的启动命令,添加新的安全启动命令,新添加的安全启动命令,必须走安全认证流程。由以上技术方案可以看出,本发明具有以下优点:通过一级密钥和二级密钥进行加密,可以更好地保护私钥,提高了soc启动的安全性;允许bootloader从外部载入环境变量并进入命令行,增加了bootloader的灵活性;软件加密机解密的方案减轻了soc的复杂度,降低了成本。上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。本领域技术人员应明白,本说明书一个或多个实施例的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1