处理器启动方法、装置及提供初始程序装入程序的装置
技术领域
本发明实施例涉及计算机技术领域,特别是涉及一种处理器启动方法、装置及提供初始程序装入程序的装置。
背景技术
在处理器启动时,首先会通过只读内存(Read-Only Memory;ROM)代码加载一段较小的初始程序装入程序(Initial Program Loader;IPL),被加载的IPL仅进行系统的基本配置;然后跳转并执行该IPL,并进一步加载更多的可执行程序到系统中。
现在的处理器在启动时,对加载的任意IPL均会执行对应的配置操作,如果加载的IPL为恶意修改后的IPL或者非指定的IPL,则处理器启动并执行这些IPL会对系统安全造成影响。
发明内容
本发明实施例公开了一种处理器启动方法、装置及提供初始程序装入程序的装置,以解决处理器启动时加载并执行任意IPL,对系统安全性造成影响的问题。
为了解决上述问题,本发明实施例公开了一种处理器启动方法,包括:处理器读取提供方生成的预加载初始程序装入程序IPL中安全启动控制块头SBH中的公钥,并生成与公钥对应的的第二公钥摘要值;当第二公钥摘要值与预存的第一公钥摘要值相同时,通过公钥对SBH中的摘要密文进行解密操作,得到第一IPL摘要值;生成预加载IPL中程序代码的第二IPL摘要值;当第一IPL摘要值与第二IPL摘要值相同时,执行预加载IPL使得处理器启动。
本发明实施例还公开了一种处理器启动装置,包括:公钥读取模块,用于读取提供方生成的预加载初始程序装入程序IPL中安全启动控制块头SBH中的公钥;公钥摘要值生成模块,用于生成与公钥对应的的第二公钥摘要值;解密模块,用于当第二公钥摘要值与预存的第一公钥摘要值相同时,通过公钥对SBH中的摘要密文进行解密操作,得到第一IPL摘要值;第二IPL摘要值生成模块,用于生成预加载IPL中程序代码的第二IPL摘要值;IPL执行模块,用于当第一IPL摘要值与第二IPL摘要值相同时,执行预加载IPL使得处理器启动。
本发明实施例还公开了一种提供初始程序装入程序的装置,包括:第一IPL摘要值生成模块,用于生成预加载IPL中程序代码的第一IPL摘要值;加密模块,用于通过密钥对中私钥对第一IPL摘要值进行加密操作,获得摘要密文;SBH生成模块,用于根据摘要密文以及密钥对中公钥,生成SBH;IPL获得模块,用于根据SBH以及预加载IPL中程序代码,得到预加载IPL。
本发明实施例通过采用上述技术方案,安全启动数据包括公钥(预置的公钥)、公钥摘要值(第一公钥摘要值)以及IPL的摘要密文。其中,第一公钥摘要值存储在处理器硬件只读存储器件中,在芯片生产或者出厂阶段写入。预置的公钥和IPL的摘要密文在提供方生成预加载IPL时存储在IPL启动控制块头(Security Boot Header;SBH)中。在处理器预启动时,首先将带有SBH的IPL(预加载IPL)加载到系统中。然后从IPL SBH中读出加密算法的公钥,通过摘要算法生成第二公钥摘要值并与存储在处理器硬件里的第一公钥摘要值比较,如果相同,则处理器继续启动流程。本步骤确保IPLSBH中的预置的公钥没有被篡改。
如果上述生成的第二公钥摘要值与存储在处理器硬件里的第一公钥摘要值相同,再从IPL SBH中读出IPL的摘要密文,使用公钥(IPL SBH中的公钥)对IPL的摘要密文进行解密得到第一IPL摘要值。对预先加载到系统中的IPL的程序代码通过摘要算法生成第二IPL摘要值。将解密得到的第一IPL摘要值与通过摘要算法生成的第二IPL摘要值进行比较,如果相同,则处理器启动成功,可以执行预加载IPL。
如果伪造处理器启动时预加载的IPL,必须得到密钥对(包括公钥和私钥),然后通过私钥对伪造的IPL的摘要值进行加密。虽然公钥公开保存在已发布的IPL SBH中,但私钥却是不对外公开的。根据加密算法的原理,私钥进行加密,公钥用于解密,根据公钥不可以推算出密钥对。所以不可以通过公开的公钥推算出密钥对进而采用该秘钥对伪造的IPL摘要进行加密。并且在本技术方案中,安全启动数据中包括的第一公钥摘要值(存储在处理器不可修改的硬件中),可以起到验证从IPL SBH读取出的公钥是否被修改的作用。修改后的公钥的公钥摘要值与安全启动数据中的第一公钥摘要值必定不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
而且,由于私钥不对外公开,具有保密性,利用私钥对IPL摘要值进行加密得到IPL的摘要密文,只能被唯一的不可修改的公钥解密,解密得到的IPL摘要值也是唯一。即使伪造IPL,但伪造出的IPL的IPL摘要值与对安全启动数据中的IPL的摘要密文进行解密得到的IPL摘要值不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
附图说明
图1是本发明实施例一中一种处理器启动方法流程图;
图2是本发明实施例二中一种处理器启动方法流程图;
图3是本发明实施例二中步骤200和步骤202的执行过程示意图;
图4是本发明实施例二中步骤204至步骤210的执行过程示意图;
图5是本发明实施例三中一种处理器启动装置结构示意图;
图6是本发明实施例四种一种提供IPL的装置结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明实施例公开的一种处理器启动方法和处理器,可以在处理器启动过程中进行两次比较,第一次比较为公钥摘要值的比较,第二次比较为IPL摘要值的比较,第二次比较的前提条件为第一次比较的结果为进行比较的两个公钥摘要值相同。并且当第一次比较的结果为公钥摘要值不同时,处理器启动失败,可以进入死循环的状态;当第一次比较的结果为公钥摘要值相同时,进行第二次比较。如果第二次比较的结果为IPL摘要值不同,则处理器启动失败;如果第二次比较的结果为IPL摘要值相同,则处理器启动成功,处理器可以加载并运行可执行程序。
下面通过列举几个具体的实施例详细介绍本发明公开的一种处理器启动方法和处理器。
实施例一
详细介绍本发明实施例公开的一种处理器启动方法。
参照图1,示出了本发明实施例中一种处理器启动方法流程图。
步骤100,处理器读取提供方生成的预加载IPL中SBH中的公钥,并生成与公钥对应的的第二公钥摘要值。
其中,提供方可以为预加载IPL的生产方或者供应方,提供方还可以是区别于处理器生产方和处理器使用方之外的第三方。
处理器获得提供方生成的预加载IPL后,从预加载IPL的SBH中读取出公钥,通常情况下,预加载IPL的SBH中只有一个公钥。处理器根据读取出的公钥生成公钥的唯一一个第二公钥摘要值。
步骤102,当第二公钥摘要值与预存的第一公钥摘要值相同时,通过公钥对SBH中的摘要密文进行解密操作,得到第一IPL摘要值。
处理器生成第二公钥摘要值之后,将第二公钥摘要值与预存的第一公钥摘要值进行比较。
其中,预存的第一公钥摘要值可以预先存储在处理器硬件只读存储器件中,是根据预置的公钥生成的。
第二公钥摘要值与第一公钥摘要值相同,可以表示在预加载IPL的SBH中读取得到的公钥是与预置的公钥一致的,是没有被篡改的“真实”的公钥。
由于读取得到的公钥为没有被篡改的“真实”的公钥,所以,可以通过读取到的公钥对SBH中的摘要密文进行解密操作,得到一个第一IPL摘要值。
步骤104,生成预加载IPL中程序代码的第二IPL摘要值。
其中,预加载IPL除了包含SBH之外,还包含程序代码。
处理器可以从预加载IPL中读取出程序代码,生成第二IPL摘要值。
步骤106,当第一IPL摘要值与第二IPL摘要值相同时,执行预加载IPL使得处理器启动。
当解密得到的第一IPL摘要值与生成的第二IPL摘要值相同时,表示预加载IPL为正常的、可安全执行的IPL。此时预加载IPL可以为处理器使用方指定加载的IPL,不是经过第三方篡改的IPL。
上述步骤104的执行时间可以在上述步骤106之前的任意时间,通常情况下,为了减少不必要的执行过程,降低处理器的工作负荷,通常在上述步骤102之后才执行步骤104的相关操作。
本实施例通过采用上述技术方案,在处理器启动过程中,进行两次比较的过程,分别为公钥摘要值的比较和IPL摘要值的比较。每次比较都可以理解为对预加载IPL的安全性的一次验证,当任意一次比较的比较结果为不同时,处理器均不会根据预加载IPL进行系统配置,处理器启动失败;当两次比较的比较结果均为相同时,处理器启动成功。由于增加了比较的过程,所以提高了系统的安全性。
实施例二
详细介绍本发明实施例公开的一种处理器启动方法。
参照图2,示出了本发明实施例中一种处理器启动方法流程图。
步骤200,提供方生成预加载IPL。
其中,提供方可以为预加载IPL的生产方或者供应方,提供方还可以是区别于处理器生产方和处理器使用方之外的第三方。
优选的,步骤200可以包括下列四个子步骤:
步骤2001,提供方生成预加载IPL中程序代码的第一IPL摘要值。
预加载IPL中预先包含程序代码。优选的,步骤2001可以为:
提供方对预加载IPL中程序代码进行摘要算法运算生成第一IPL摘要值。
其中,摘要算法运算可以是生成第一IPL摘要值的一种广义的运算算法,可以为安全散列算法(Secure Hash Algorithm;SHA)等,本发明实施例中优选采用SHA256算法进行IPL摘要值的生成运算。
步骤2002,通过密钥对中私钥对第一IPL摘要值进行加密操作,获得摘要密文。
其中,密钥对可以包括私钥和公钥。对于私钥提供方以外的各方,私钥具有不可见性,具有很好的保密特性。公钥可以是预置的,是真实合法的公钥。
所以通过私钥对第一IPL摘要值进行加密操作,得到的摘要密文也具有保密特性。
优选的,步骤2002中进行加密操作可以采用一种非对称的加密算法,如公钥加密算法(Rivest Shamirh Adleman;RSA)。
步骤2003,根据摘要密文以及密钥对中公钥,生成SBH。
可以将步骤2002中生成的摘要密文和密钥对中的公钥存储到SBH中。
步骤2004,根据SBH以及预加载IPL中程序代码,得到预加载IPL。
将预加载IPL中的程序代码和步骤2003中生成的SBH作为一个整体形成预加载IPL。
步骤202,处理器生产方生成并预存第一公钥摘要值。
优选的,预存的第一公钥摘要值是根据预置的公钥生成的。
处理器生产方可以将生成的第一公钥摘要值存储在处理器硬件只读存储器件中。
本实施例中的处理器硬件只读存储器件可以是一次性烧写的存储器。有Efuse(一种用户空间文件系统,Filesystem in Userspace)或者一次编程(one time program;OTP)存储器的分别。优选可以选用Efuse。
因为公钥摘要值需要灵活烧写。如果在工厂生产的时候进行烧写比较被动,所以处理器里包含了efuse,但是空的,可以写一次。可以根据不同需求提供不同的公钥密钥对,而且烧入公钥摘要值,还可以对处理器进行区分。
预置的公钥通常可以理解为官方的公钥,预置的公钥是不可以更改的。
需要说明的是,上述步骤200和上述步骤202的执行顺序并非完全固定不变,也可以先执行步骤202,再执行步骤200。
优选的,上述步骤200和步骤202的执行过程可以如图3所示。
1、通过SHA256算法获得IPL程序代码(CODE)的第一IPL摘要值(Code DigestHash)。
2、通过预先提供的私钥(Private Key)利用RSA算法对第一IPL摘要值进行加密,得到IPL的摘要密文(RSA Signature)。
3、通过SHA256算法获得预置的公钥(Public Key)的第一公钥摘要值(Public KeyDigest Hash),并存储到Efuse中。
4、存储IPL的摘要密文和预置的公钥到SBH中。
需要说明的是,获得第一公钥摘要值和第一IPL摘要值的算法可以不局限于SHA256,还可以通过其他方式获得第一公钥摘要值和第一IPL摘要值;获取IPL的摘要密文的算法可以不局限于RSA,还可以通过其他方式获得IPL的摘要密文。
步骤204,处理器读取提供方生成的预加载IPL的SBH中的公钥,并生成与读取出的公钥对应的的第二公钥摘要值。
其中,优选的,生成与读取出的公钥对应的的第二公钥摘要值的执行过程,可以为:
对读取出的公钥进行摘要算法运算生成第二公钥摘要值。
步骤206,当第二公钥摘要值与预存的第一公钥摘要值相同时,通过读取出的公钥对SBH中的摘要密文进行解密操作,得到第一IPL摘要值。
处理器生成第二公钥摘要值之后,将第二公钥摘要值与预存的第一公钥摘要值进行比较。
当第二公钥摘要值与预存的第一公钥摘要值相同时,可以执行步骤206的操作;当第二公钥摘要值与预存的第一公钥摘要值不同时,处理器不会执行预加载IPL,可以进入死循环的状态,处理器启动失败。
步骤208,生成预加载IPL中程序代码的第二IPL摘要值。
优选的,对预加载IPL中程序代码进行摘要算法运算生成第二IPL摘要值。
步骤210,当第一IPL摘要值与第二IPL摘要值相同时,执行预加载IPL使得处理器启动。
上述步骤208的执行时间可以在上述步骤200之后,上述步骤210之前的任意时间点,但是为了减少不必要的执行过程,降低处理器的工作负荷,通常在上述步骤206之后才执行步骤208的相关操作。
当第一IPL摘要值与第二IPL摘要值不同时,不执行预加载IPL的程序代码,处理器启动失败。此时表明预加载IPL不是指定的、正常的IPL,该IPL可能存在恶意代码等。
优选的,上述步骤204至上述步骤210的执行过程可以如图4所示。
1、从SBH读取公钥(Public Key),对读取到的公钥进行SHA256操作,得到第二公钥摘要值(Public Key Digest Hash),并用第二公钥摘要值与存储在Efuse中的第一公钥摘要值(Public Key Hash)比较。
当第二公钥摘要值与第一公钥摘要值相同时,继续后续操作;当第二公钥摘要值与第一公钥摘要值不同时,处理器启动失败,此时处理器的处理过程可能会进入死循环状态,同时也可以显示启动失败的提示信息等。
2、从SBH读取IPL的摘要密文(RSA Signature),并用读取到的公钥对读取到的IPL的摘要密文进行解密,得到第一IPL摘要值(Code Digest Hash1)。
3、生成预加载IPL的程序代码(CODE)的第二IPL摘要值(Code Digest Hash2),并将第一IPL摘要值与第二IPL摘要值进行比较。
其中,上述步骤204至上述步骤210的执行过程涉及到两次比较过程,第一次比较为第二公钥摘要值与第一公钥摘要值的比较,如果相同,则继续后续的比较;如果不同,则处理器启动失败。第二次比较为解密得到的第一IPL摘要值与计算得到的预加载IPL的程序代码的第二IPL摘要值的比较,如果相同,则处理器启动成功,如果不同,则处理器启动失败。
本实施例通过采用上述技术方案,安全启动数据包括预置的公钥、第一公钥摘要值以及IPL的摘要密文。其中,第一公钥摘要值存储在处理器硬件只读存储器件中,在芯片生产或者出厂阶段写入。预置的公钥和IPL的摘要密文可在提供方生成合法的预加载IPL时存储在IPL SBH中。在处理器预启动时,首先将带有SBH的预加载IPL加载到系统中。然后从IPL SBH中读出加密算法的公钥,通过摘要算法生成第二公钥摘要值并与存储在处理器硬件里的第一公钥摘要值比较,如果相同,则处理器继续启动流程。本步骤确保IPL SBH中的预置的公钥没有被篡改。
如果上述生成的第二公钥摘要值与存储在处理器硬件里的第一公钥摘要值相同,再从IPL SBH中读出IPL的摘要密文,使用公钥(IPL SBH中的公钥)对IPL的摘要密文进行解密得到第一IPL摘要值。对预先加载到系统中的IPL的程序代码通过摘要算法生成第二IPL摘要值。将解密得到的第一IPL摘要值与通过摘要算法生成的第二IPL摘要值进行比较,如果相同,则处理器启动成功,可以执行预加载IPL。
如果伪造处理器启动时预加载的IPL,必须得到密钥对中的公钥和私钥,然后通过私钥对伪造的IPL的摘要值进行加密。虽然公钥公开保存在已发布的IPL SBH中,但私钥却是不对外公开的。根据加密算法的原理,私钥进行加密,公钥用于解密,根据公钥不可以推算出密钥对。所以不可以通过公开的公钥推算出密钥对进而对伪造的IPL摘要进行加密。并且在本技术方案中,安全启动数据中包括的第一公钥摘要值(存储在处理器不可修改的硬件中),可以起到验证从IPL SBH读取出的公钥是否被修改的作用。修改后的公钥的公钥摘要值与安全启动数据中的第一公钥摘要值必定不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
而且,由于私钥不对外公开,具有保密性,利用私钥对IPL摘要值进行加密得到IPL的摘要密文,只能被唯一的不可修改的公钥解密,解密得到的IPL摘要值也是唯一。即使伪造IPL,但伪造出的IPL的IPL摘要值与对安全启动数据中的IPL的摘要密文进行解密得到的IPL摘要值不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
实施例三
详细介绍本发明实施例公开的一种处理器启动装置。
参照图5,示出了本发明实施例中一种处理器启动装置结构示意图。
上述一种处理器启动装置可以包括公钥读取模块300、公钥摘要值生成模块302、解密模块304、第二IPL摘要值生成模块306和IPL执行模块308。
下面分别详细介绍各模块的功能以及各模块之间的关系。
公钥读取模块300用于读取提供方生成的预加载IPL中SBH中的公钥。公钥摘要值生成模块302可以与公钥读取模块300连接,公钥摘要值生成模块302用于生成与公钥读取模块300读取出的公钥对应的的第二公钥摘要值。解密模块304可以与公钥摘要值生成模块302连接,解密模块304用于当第二公钥摘要值与预存的第一公钥摘要值相同时,通过读取出的公钥对SBH中的摘要密文进行解密操作,得到第一IPL摘要值。第二IPL摘要值生成模块306可以与公钥读取模块300、公钥摘要值生成模块302和解密模块304连接,第二IPL摘要值生成模块306用于生成预加载IPL中程序代码的第二IPL摘要值。IPL执行模块308可以与解密模块304和第二IPL摘要值生成模块306连接,IPL执行模块308用于当第一IPL摘要值与第二IPL摘要值相同时,执行预加载IPL使得处理器启动。
优选的,上述公钥摘要值生成模块302具体可以用于对读取出的公钥进行摘要算法运算生成第二公钥摘要值。上述第二IPL摘要值生成模块306具体可以用于对预加载IPL中程序代码进行摘要算法运算生成第二IPL摘要值。上述预存的第一公钥摘要值是根据预置的公钥生成的。
本实施例通过采用上述技术方案,在处理器启动过程中,进行两次比较的过程,分别为公钥摘要值的比较和IPL摘要值的比较。每次比较都可以理解为对预加载IPL的安全性的一次验证,当任意一次比较的比较结果为不同时,处理器均不会根据预加载IPL进行系统配置,处理器启动失败;当两次比较的比较结果均为相同时,处理器启动成功。由于增加了比较的过程,所以提高了系统的安全性。具体地,首先将带有SBH的预加载IPL加载到系统中。然后从IPL SBH中读出加密算法的公钥,通过摘要算法生成第二的公钥摘要值并与存储在处理器硬件里的第一公钥摘要值比较,如果相同,则处理器继续启动流程。本步骤确保IPL SBH中的预置的公钥没有被篡改。
如果上述生成的第二公钥摘要值与存储在处理器硬件里的第一公钥摘要值相同,再从IPL SBH中读出IPL的摘要密文,使用公钥(IPL SBH中的公钥)对IPL的摘要密文进行解密得到第一IPL摘要值。对预先加载到系统中的IPL的程序代码通过摘要算法生成第二IPL摘要值。将解密得到的第一IPL摘要值与通过摘要算法生成的第二IPL摘要值进行比较,如果相同,则处理器启动成功,可以执行预加载IPL。
实施例四
详细介绍本发明实施例公开的一种提供IPL的装置。
参照图6,示出了本发明实施例中一种提供IPL的装置结构示意图。
上述一种提供IPL的装置可以包括第一IPL摘要值生成模块400、加密模块402、SBH生成模块404和IPL获得模块406。
下面分别详细介绍各模块的功能以及各模块之间的关系。
第一IPL摘要值生成模块400用于生成预加载IPL中程序代码的第一IPL摘要值。加密模块402可以与第一IPL摘要值生成模块400连接,加密模块402用于通过密钥对中私钥对第一IPL摘要值进行加密操作,获得摘要密文。SBH生成模块404可以与加密模块402连接,SBH生成模块404用于根据摘要密文以及密钥对中公钥生成SBH。IPL获得模块406可以与SBH生成模块404连接,IPL获得模块406用于根据SBH以及预加载IPL中程序代码得到预加载IPL。
优选的,上述第一IPL摘要值生成模块400可以对预加载IPL中程序代码进行摘要算法运算生成第一IPL摘要值。
通过采用上述技术方案,如果伪造处理器启动时预加载的IPL,必须得到密钥对中的公钥和私钥,然后通过私钥对伪造的IPL的摘要值进行加密。虽然公钥公开保存在已发布的IPL SBH中,但私钥却是不对外公开的。根据加密算法的原理,私钥进行加密,公钥用于解密,根据公钥不可以推算出密钥对。所以不可以通过公开的公钥推算出密钥对进而对伪造的IPL摘要进行加密。并且在本技术方案中,安全启动数据中包括的第一公钥摘要值(存储在处理器不可修改的硬件中),可以起到验证从IPL SBH读取出的公钥是否被修改的作用。修改后的公钥的公钥摘要值与安全启动数据中的第一公钥摘要值必定不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
而且,由于私钥不对外公开,具有保密性,利用私钥对IPL摘要值进行加密得到IPL的摘要密文,只能被唯一的不可修改的公钥解密,解密得到的IPL摘要值也是唯一。即使伪造IPL,但伪造出的IPL的IPL摘要值与对安全启动数据中的IPL的摘要密文进行解密得到的IPL摘要值不同,则处理器启动失败,处理器不能加载运行伪造的IPL,提高了系统的安全性和稳定性。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本发明实施例所公开的一种处理器启动方法、装置及提供IPL的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。