包含可进入安全执行模式的处理器的一计算机系统的初始化的制作方法

文档序号:6406795阅读:264来源:国知局
专利名称:包含可进入安全执行模式的处理器的一计算机系统的初始化的制作方法
技术领域
本发明涉及采用可进入安全执行模式的处理器的计算机系统,特别是涉及计算机系统及可进入安全执行模式的处理器的初始化。
背景技术
现代的计算机系统正在彻底改变人类生活的方式。这种现象在其中包含采用x86系统架构的微处理器的系统平台尤为真切。由于采用x86处理器的系统对大量用户可安装的第三方外围设备及应用程序的开放性,因而促成了具有竞争性、创新性及进化性的硬件及软件供货商的广大市场。这种进化性的一个例子就是现在已将该平台广泛地用来作为品质及能力愈来愈进步的数字通讯及媒体系统。在与互联网配合之下,这些系统平台正明确地彻底改变了数字内容的大量配送,可对报纸、全世界的实时天气状况及广播电台、在线银行及购物以及音乐及基于视频的娱乐节目进行获取点播。
因为x86平台是一种开放性的架构,所以各装置通常具有由供货商提供且在核心模式下执行以便存取该装置的驱动程序,且某些应用软件可包含核心模式模块。因此,虽然这种开放性架构有其优点,且对各应用程序之间偶发性的干扰仍然提供了相当程度的保护,但是现有架构上的保护机制在这种环境下仍然可能受到不当的操纵。
其中包含采用x86架构的微处理器的计算机系统包括设计成不会受到各应用程序之间相互干扰的一些特征。例如,基于x86的操作系统有赖于x86保护模式架构的两项特征,而提供一种使各应用程序相互隔离且使关键性的操作系统程序代码及数据与应用程序隔离的环境,这两项特征是1)分页式虚拟内存;以及2)执行优先级等级。
分页式虚拟内存可让操作系统(OS)为每一应用程序定义一独立的虚拟地址空间,并利用一组地址转换表而将各个分页的物理内存选择性地映射到这些虚拟地址空间的每一虚拟地址空间。这种方式给每一应用程序提供物理内存各自的专用区段,用于其它应用程序不得存取的程序代码及数据,。该虚拟内存机制也可让操作系统将各分页的物理内存选择性地映射到多个虚拟地址空间,并将虚拟空间中的这些分页选择性地指定为只读。这种共享的映射能力也可让操作系统核心本身的一拷贝常驻在每一应用程序的地址空间,且同样地可以以共享方式映射各外围设备存取端口及相关联的装置驱动例程,因而可使各应用程序有效率地使用操作系统服务,而无须高代价的地址空间切换。但是,地址空间的操作系统部分必然包含操作系统程序代码必须可修改的系统数据区,且仍然要使应用程序代码无法修改这些系统数据区。这种只读的指定可能无法对这些区域提供适当的保护。
x86架构也定义了0至3的四个优先级等级,而由操作系统将这些优先级等级指定给各程序代码区,且将这些优先级等级保存在程序代码片段描述符中。当前执行的程序代码或程序的优先级等级通常将被储存为当前优先级等级(Current Privilege Level;简称CPL)。因此,通常将这些优先级等级称为CPL0至CPL3。使用这些优先级等级时,只能由在适当等级下执行的程序代码使用某些系统资源。该分页式虚拟内存架构可以允许存取被优先级等级限制的各分页的虚拟内存。虽然定义了四个优先级等级,但是主流的操作系统通常只使用CPL0及CPL3等级,这是因为分页式虚拟内存架构并未将CPL1或CPL2与CPL3加以区分。通常将CPL0称为核心模式,且是最高的优先级等级,而通常将CPL3称为用户模式,且是最低的优先级等级。通常将CPL0指定给操作系统程序代码及数据,而将CPL3指定给应用程序代码及数据。CPL0执行优先级并不会凌驾于只读保护之上;这两种属性是独立的。程序代码片段描述符被用来指定这些等级。
除了该内存保护之外,所有的处理器控制寄存器(包括用来控制虚拟内存操作操作的那些处理器控制寄存器)在架构定义下只能在CPL0下被存取。此外,通常需要特殊的控制转移指令将执行自一片段切换到另一片段,且因而切换优先级等级。这些指令可让操作系统将这种控制转移的目标限制在受操作系统控制的程序代码中的特定进入点,因而一应用程序无法在不同时将控制递交给操作系统的情形下改变优先级等级。
虚拟内存地址转换表的内容可完全控制各地址空间的相互隔离以及操作系统与各应用程序间的隔离。这些转换表定义了使各应用程序的内存相互隔离的虚拟至物理分页映射关系,且还定义了用来保护共享的函式库及操作系统的只读及优先级等级属性。这些表本身是常驻在内存的数据结构,且包含若干转换数据项,用以将各转换数据项映射到共享的操作系统内存区域,并限制这些转换数据项对核心模式程序代码的存取。
现有的保护机制似乎对应用程序及操作系统提供了适当的保护。在一行为端正的系统(例如,操作系统正确地应用这些机制,正确地操作用来控制这些机制的操作系统程序代码,且在核心模式下执行的所有其它程序代码并不会干扰该机制)中,这些保护机制的确能发挥作用。然而,典型的x86系统包含来自操作系统供货商以及来自许多独立来源的大量的核心模式程序代码,因而任何人都无法保证不会发生偶发的或以其它方式进行的干扰。
根据用户正在执行的操作类型,且根据正在执行的应用软件的类型,外部的存取可能易于伤害到计算机系统内储存的或在计算机系统上执行的信息。因此,目前需要改良安全性,且因而可使x86架构系统较不易受到这种存取的伤害。

发明内容
本发明揭示了其中包含一可进入安全执行模式的处理器的一计算机系统的初始化的各实施例。在一实施例中,一种将其中包含一可进入安全执行模式的处理器及一系统内存的一计算机系统初始化的方法包含下列步骤将一安全操作系统程序代码片段加载程序储存在对应于该系统内存内的一特定地址范围的多个位置。该方法还包含下列步骤执行一安全初始化指令。执行该安全初始化指令时,可使其中包括传输其中包含该特定地址范围的一基址的一起始事务处理的数个操作被执行。此外,执行该安全指令时,也可使另一操作被执行,该另一操作包括自系统内存获取该安全操作系统程序代码片段加载程序,并以多个数据事务处理的形式传输该安全操作系统程序代码片段加载程序,以供验证。
在另一实施例中,该方法也可包含下列步骤除了可进入安全执行模式的处理器之外,禁止任何装置存取该特定地址范围。
在另一实施例中,安全初始化指令可以是其中包括多个以不可分割方式执行的微码成分的一单一指令,而当执行这些微码成分时可使这些操作被执行。


图1为根据一可进入安全执行模式的处理器的一实施例的操作领域以及在这些领域中操作的程序代码的行为。
图2为采用一可信赖的运算平台的一计算机系统的一实施例的一方框图。
图3为一可进入安全执行模式的处理器的一实施例的一方框图。
图4为其中包含一可进入安全执行模式的处理器的一计算机系统的一实施例在一安全初始化期间的操作的一流程图。
虽然本发明易于作出各种修改及替代形式,但是这些图式中以举例方式示出本发明的一些特定实施例,且已在本文中详细说明了这些特定实施例。然而,我们当了解,这些图标及本文中详细说明的用意并非将本发明限制在所揭示的这些特定形式,相反地,本发明将涵盖最后的权利要求范围所定义的本发明的精神及范围内的所有修改、等效物及替代。
具体实施例方式
安全运算平台概观可信赖的运算可让计算机系统(例如个人计算机)的用户参与诸如下载电子现金及电影同时使其隐私不会受到侵犯等的新活动。要成为一可信赖的运算环境中的一部分时,用户以及诸如银行及内容提供者等的外部实体都必须信赖该PC本身。产生一可信赖的PC所必需的关键性要素包括一可信赖的处理环境、特定平台的秘密、密码处理、安全储存以及被称为一安全核心(Security Kernel;简称SK)的安全操作系统程序代码片段。在下文中将更详细地说明用来实施这些要素的建构模块。
被设定成执行x86指令的处理器通常包含诸如提供分页式虚拟内存及优先级执行模式的保护模式等的一些架构功能、以及控制这些功能的一组控制寄存器。对这些控制寄存器及分页表存取的控制可提供禁止对一计算机系统内的程序代码及数据进行未经授权的存取的额外保护。因此,增添这种处理器的一组架构延伸以及对应的软件支持时,可提供这种保护。可将一处理器的整体安全强化措施称为一安全执行模式(Secure Execution Mode;简称SEM)。安全执行模式是一种加入一处理器的新操作模式,用以产生可使一安全核心在不会被外部篡改的情形下执行的一可信赖的执行环境。
因此,可在SEM中工作的一处理器可包含安全硬件(图中未示出),而当该安全硬件被SEM启动时,将提供诸如操作的一可信赖的执行(TX)模式等的对SEM操作模式的支持。如将在下文中更详细说明的,根据正在执行的何种软件及其优先级等级,该可信赖的执行模式包含了除了可在正常用户模式及正常核心模式中操作外还可在一安全用户模式及一安全核心模式中操作的可进入SEM的处理器。还可提供用来产生一受保护的内存区域的机制,其中只能由在该环境内执行的软件存取该受保护的内存区域,并禁止某些硬件内存存取(例如直接内存访问(Direct Memory Access;简称DMA))操作对该区域的存取。
这个新的可信赖的执行环境(TX)有些类似于用来将用户与核心环境隔离的传统的正常/保护模式(CPL3/CPL0)。如将在下文中配合图1而更详细说明的,用户/核心模式与可信赖的/不可信赖的模式的组合产生了一种四个象限的模式。因此,一可进入SEM的CPU包含用来产生并强化TX模式的硬件机制。
现在请参阅图1,图中示出一可进入安全执行模式的处理器的一实施例的操作领域、以及在这些领域中操作的程序代码的行为。如上所述,现有的基于x86的操作系统通常使用四个可用优先级等级中的两个优先级等级(例如CPL0及CPL3)来实施一正常执行模式或保护领域内的两种模式正常核心模式及正常用户模式。当SEM被启动时,这些SEM强化措施定义了被称为可信赖的执行(TX)模式的一新的执行模式。当将TX模式与现有的正常执行模式保护领域结合时,TX模式产生了将在下文中说明的四个不同的模式或软件操作领域。在所示实施例中,这些四个领域是正常用户(Normal User;简称NU)领域1010、正常核心(Normal Kernel;简称NK)领域1020、安全用户(SecureUser;简称SU)领域1030、以及安全核心(Secure Kernel;简称SK)领域1040。
NU领域1010的特征为可在一正常用户模式(亦即CPL=3)中执行但无法在可信赖的执行(TX)模式中执行的一处理器。在NU领域1010中,典型的虚拟内存环境可允许未经修改的应用程序的正常操作。然而,在SEM之下,不允许这些应用程序存取常驻在SU领域1030的应用程序的内存、或存放了SK领域1040中的安全核心1021的内存。此外,诸如U/S及R/W分页属性等现有的保护逻辑机制也不允许这些应用程序存取操作系统核心1023或正常核心领域1023中的装置驱动程序。
在NK领域1020中,SEM可允许未经修改的操作系统核心1023组件及核心模式装置驱动程序的正常操作。在该领域中执行的程序代码可存取NU领域1010中的对象,但是在SEM之下禁止这些程序代码存取SU领域1030或SK领域1040中的对象。此外,NK领域1020的特征为可在一正常核心模式(亦即CPL=0)中执行但无法在TX模式中执行的一处理器。当在NK领域1020中启动分页机制时,有时可将一处理器称为在一本地核心模式(Native kernel mode)中操作。
在SU领域1030中,SEM可允许执行诸如高安全应用程序(HighSecurity Application;简称HSA)1等的一新类型的应用软件。现有的x86分页保护及分页映射机制可禁止HSA软件存取任何其它领域中的对象。此外,禁止HSA对其中包括操作系统核心1023及装置驱动程序(图2中未示出)的NU领域1010及NK领域1020中执行的任何程序代码作未经授权的存取。如将在下文中更详细说明的,安全核心1021可负责建立并维护各HSA的虚拟地址空间。此外,SU领域1030的特征为可在用户模式(亦即CPL=3)中且可在TX模式中执行的一处理器,因而也可将SU领域1030称为一安全用户模式。
在SK领域1040中,SEM可允许安全核心1021完整地存取所有的平台资源,此外,也可将对这些资源的唯一控制权授予安全核心1021。SK领域1040的特征为可在核心模式(亦即CPL=0)中且可在TX模式中执行的一处理器,因而也可将SK领域1040称为一安全核心模式。
一般而言,安全核心1021是在可信赖的执行(TX)模式中执行的软件。在一实施例中,安全核心1021可以是在SK领域1040中执行的唯一软件。在SK领域1040中,安全核心1021可控制所有的虚拟至物理内存映射,且可控制外部装置可存取物理内存的哪些区域。然而,安全核心1021将依赖操作系统核心的程序产生功能,其中包括正常模式的虚拟内存映射、HSA内存起始映射以及HSA程序代码及数据区段的加载。然而,安全核心1021可监视每一这种内存映射,以便确保不会将可信赖的内存未经授权地映射到不可信赖的虚空间。因此,安全核心1021可将内存中不可信赖的所有区域视为不可信赖的。此外,安全核心1021可将不受安全核心1021控制的所有执行中的程序代码视为不可信赖的。请注意,在一实施例中,安全核心1021可以是可能为一现有操作系统的修补程序的一独立程序代码片段。在替代实施例中,安全核心1021可以是在一特定操作系统内且为该特定操作系统的一部分的一模块或程序代码片段。
SEM的主要功能包括通过将在SEM执行的处理器初始化,而将系统置于可信赖的环境;验证SK的可信赖性;以及使该可信赖的环境不会受到外部的攻击。请注意,可互换地使用CPU、微处理器及处理器这些术语。因此,SEM的一项主要特征是在系统开机及执行之后,可易于启动SEM保护。在一实施例中,可以不需要改变典型x86平台的启动程序。通常可由一系统软件模块(为了便于说明本文件,将该系统软件模块称为一SEM驱动程序(图中未示出))开启SEM保护。该SEM驱动程序可独立于操作系统核心,但在核心模式中执行,非常像任何装置驱动程序。如将于下文中参照图2至4而更详细说明的,自典型x86平台的未受保护的系统环境可靠地建立SEM保护的的关键是被称为安全核心初始化(Security Kernel Initialization;简称SKINIT)指令的一个新的安全指令,而该SKINIT指令将为SEM驱动程序所使用。
产生一可信赖的PC的主要部分是一唯一的且为特定平台的秘密。实际上,该秘密可以是一公开/私有密钥对的那私密的一半。只有在可信赖的环境内执行该PC时,才必须使用该秘密,且必须将该秘密泄漏给任何人或任何程序代码。可泄漏使用该秘密的密码操作的结果,但不可泄漏该秘密本身。为了使上述步骤可运作,该秘密以及使用该秘密的密码处理机必须存在于具有受控制的输入及输出的一密封盒子中。以实际的术语而言,一密封的盒子意指包含处理能力及非易失性储存单元的一单一集成电路(IC)封装。该装置被称为一安全服务处理器(Security Service Processor;简称SSP)。在一实施例中,需要至少一个SSP,且正好只有一个SSP参与该平台初始化程序。
以架构而言,可将该SSP放置在该平台中的任何位置。唯一的要求是在可进入SEM的处理器与该SSP之间存在有一条无法仿冒的且为安全的通讯路径。在本说明书的用法中,在可进入SEM的处理器与该SSP之间的一条无法仿冒的通讯路径意指该SSP不会从在该可信赖的环境之外执行的软件或DMA硬件接收到命令的一条安全通讯路径。当正在将可信赖的环境初始化时,上述的状况可能尤其复杂。在这点上,该SSP必须验证SK的有效性,且必须确定正在被验证的该SK实际上就是此时在该可进入SEM的处理器上执行的程序代码。该验证采取该SK的映射文件的一密码散列值(cryptographic hash)的形式。必须以一种无法由正常软件的操作而产生的方式将该散列值传送到该SSP。此外,该可进入SEM的处理器必须从一干净的初始化状态(且该SSP必须得知此点)开始执行该SK。可使用正常软件无法利用的CPU微码及硬件机构,而符合上述那些要求。使用该SKINIT指令来执行各种安全初始化功能,例如将可进入SEM的处理器重新初始化;证实一多重处理(MP)系统中的其它处理器都被停止了;以及诸如使用保留的系统地址及特有的总线事务处理并跳到SK程序代码,而与该SSP通讯。请注意,在一实施例中,该SKINIT指令是具有以不可分割方式执行的多个微码成分的一单一指令。在本说明书的用法中,不可分割方式执行(to execute atomically)意指在不中断的情形下按照一指定的顺序一直执行到完成。又请注意,在一实施例中,该初始化程序包含两个步骤由该SSP确认一小的安全加载程序(Security Loader;简称SL);以及随即确认大许多的SK。该SL是用来执行与SK的加载相关联的功能的一安全操作系统程序代码片段加载程序。
采用一可信赖的运算平台的计算机系统请参阅图2,图中示出采用一可信赖的运算平台的一计算机系统的一实施例的一方框图。计算机系统10包含标示为SEM处理器100A及SEM处理器100B的两个可进入SEM的处理器。通过一处理器总线105将SEM处理器100A连接到SEM处理器100B。计算机系统10还包含被连接到SEM处理器100A的一系统内存110A以及被连接到SEM处理器100B的一系统内存110B。通过一系统总线125将SEM处理器100A连接到一I/O接口120。在所示的实施例中,通过一外围设备总线145而将I/0接口120连接到一储存装置140及一外围设备150。又通过外围设备总线135而将I/O接口120连接到SSP130。在另一个实施例中,SSP130并未被连接到外围设备总线135,而是可被连接到外围设备总线145。请注意,虽然图中示出两个SEM处理器,但是其它的实施例可包含其它数目的SEM处理器。还请注意,具有相同代号及一英文字母的各组件可被单独的代号所代表。例如,在适当的时机,可只以SEM处理器100来表示SEM处理器100A。又请注意,在另一个实施例中,可将系统内存110直接连接到I/O接口120。在这些实施例中,可在集成电路中以独立于SEM处理器100A及100B的方式制造一个或多个内存控制器。例如,在这些实施例中,I/O接口120可包含一个或多个内存控制器。
SEM处理器100是采用x86架构的一处理器的例子。例如,在一实施例中,SEM处理器100可以是由Advanced Micro Devices,Inc.所提供的一AthlonTM处理器。因此,SEM处理器100被设定成执行可被储存在系统内存110或储存装置140中的x86指令。在所示实施例中,SEM处理器100可包含安全硬件(图2中未示出),而当该安全硬件被SEM启动时,提供对诸如前文中参照图1所述的可信赖的执行(TX)模式等的SEM操作模式的支持。
在所示实施例中,SEM处理器100A及SEM处理器100B分别包含被标示为内存控制器101A及101B的集成内存控制器。如将在下文中更详细说明的,内存控制器101包含可使用来储存SL映像的一个64KB的地址范围不会受到未经授权的存取的安全硬件(图2中未示出)。也可将该安全硬件设定成将与SKINIT指令相关联的各事务处理绕送到I/O接口120。请注意,在与SEM处理器100A及100B相同的集成电路上分别制造诸如内存控制器101A及101B等的集成内存控制器。
请注意,在诸如图2所示配置的一多处理器实施例中,根据现有的高级可编程中断控制器(Advanced Programmable InterruptController;简称APIC)标准特征,将其中一个处理器称为启动处理器(BootStrap Processor;简称BSP),且将另一处理器称为应用处理器(Application Processor;简称AP)。在所示实施例中,为了便于说明,SEM处理器100A是BSP,而SEM处理器100B是一AP。然而,在其它的实施例中,SEM处理器100B可以是BSP,而SEM处理器100A可以是AP。因此,一INIT处理器间中断(Inter-Processor Interrupt;简称IPI)可将这些AP置于一暂停状态,而该暂停状态只响应一后续的启动IPI。该启动IPI可使各API在内存中由该BSP所指定且连同该启动IPI而传送的一记忆位置上开始执行。如将在下文中参照图3而更详细说明的,虽然被用来作为一AP,但是SEM处理器100A或100B都可被设定成响应一启动IPI,而支持一SEM初始化。
在所示实施例中,SEM处理器100A及SEM处理器100B分别包含被分别标示为系统接口102A及102B的一系统接口单元。如将在下文中更详细说明的,系统接口102包含可被设定成支持多处理器安全初始化的安全硬件(图2中未示出)。
系统内存110被设定成储存SEM处理器100经常使用的程序指令及数据。在一典型的系统配置中,可将储存装置140用来更持久地储存程序指令及数据,且当SEM处理器100需要数据及程序代码时,可将这些数据及程序代码转移到系统内存110。在SEM处理器100的操作期间,来自系统内存110且可配合操作系统而执行的安全核心可提供对SEM操作模式的额外支持。此外,可将系统内存110分成一可信赖的部分及一不可信赖的部分。该安全核心为常驻在系统内存110的可信赖的部分。如前文所述,通常利用分页式虚拟内存机制来存取系统内存110。在这种配置中,内存的个别分页或块块可使用系统内存110。通常由操作系统内存管理功能来处理该该分页功能。
在一实施例中,可使用以动态随机存取内存(Dynamic RandomAccess Memory;简称DRAM)技术或诸如同步DRAM(Synchronous DRAM;简称SDRAM)等可用的各种DRAM技术中的一种DRAM技术实现的多个内存芯片来实现系统内存110。通常是将这些DRAM芯片安装在具有一边缘连接器的小型电路板上,而这些小型电路板则被插入一主机板上的一插座连接器中。根据电路板的配置,可将这些小型电路板称为单列直插内存模块(Single In-line Memory Module;简称SIMM)或双列直插内存模块(Dual In-line Memory DModule;简称DIMM)。系统内存110可包括多组内存模块,而可允许内存扩充。
如前文所述,储存装置140可储存程序代码及数据。在一实施例中,储存装置140可以是一硬盘机或一组硬盘机,但是也可考虑包含诸如光驱、软盘机及磁带机等的其它大量储存装置的其它实施例。
外围设备150可以是诸如调制解调器、视频捕捉装置或其它一般用途输入输出装置等的任何外围设备。请注意,在其它的实施例中,可使用其它数目的外围设备。
可将I/O接口120设定成总线控制及事务处理,以供正常系统操作期间在不同的外围设备总线与SEM处理器100A及100B间的事务处理。在一实施例中,I/O接口120可执行与一北桥芯片相关联的各功能。例如,外围设备总线145可以是一外围设备互连(PeripheralComponent Interconnect;简称PCI)总线,且外围设备总线135可以是一低引脚数(Low Pin Count;简称LPC)的总线。此外,可将I/O接口120设定成决定是否有一SSP被连接到该I/O接口以及该SSP被连接到哪一总线,并可允许在一安全初始化期间在SEM处理器100与SSP130之间进行无法仿冒的通讯。还将I/O接口120设定成识别与SKINIT指令相关的消息,并以外围设备总线135的特定格式而将这些消息传送到SSP130。
安全执行模式初始化一般而言,在诸如SEM处理器100A及SEM处理器100B等的可进入SEM的处理器上执行安全核心初始化指令(SKINIT)。如前文所述,SKINIT指令可以是具有以不可分割方式执行的多个微码成分的一单一指令。此外,在一实施例中,该SKINIT指令可具有诸如EAX寄存器的内容的一单一输入操作数。在一实施例中,该SKINIT指令包含三个执行阶段初始化、数据转移及跳越。该SKINIT指令可包含一特殊的协议,而该协议包含明确的转移开始(例如散列开始,Hash_Start)及转移终止(例如散列结束,Hash_End)指示,用以规范一可变量目的数据转移周期(例如散列数据,Hash_Data)。
在执行该SKINIT指令之前,该SEM驱动程序可作各种系统准备,例如分配内存以供SL及SK使用;建立信息,而在SK取得控制权之后,该信息可恢复操作系统的状态(该信息尤指诸如CR3、IDTR及LDTR等的各处理器控制寄存器的内容);以及将可执行的SL(及或有的SK)映射文件加载诸如系统内存。
在成功地完成了该SKINIT指令之后,该SL可将其它的SEM硬件机构及数据结构初始化,确认该可执行的SK映像,启动SEM,并开始执行该SK。该SK然后可取得各地址转换表、各控制寄存器、及各SEM硬件机构的控制权,然后回到可恢复操作的正常操作系统,此时该SK退出,但使完全的SEM保护就定位。SEM驱动程序及SL操作的确切细节与实施例有关,且取决于特定的操作系统、SL及SL特征。
在一实施例中,该SL映像可包含一安全加载程序的一完整实施例的程序代码及初始化后的数据区段。该SL映像包含以一种完全安全的方式将一安全核心初始化并启动所需的所有程序代码及起始数据。该初始化包括分配给SL及SK使用的内存建立DMA排除的保护。该SEM驱动程序可将SL加载内存中被称为安全加载程序块(Secure LoaderBlock;简称SLB)的一区域,且将在下文中说明该SLB。该SLB的容量可以是64KB,且可以硬件来强化该SLB。然而,实际上,由于将在下文中说明的理由,该最大的容量可以稍微少些。在一实施例中,SL映像的第一字组包含到SL进入点的SL映像之一无正负号的位移量。第二字组包含该映像的长度。SKINIT指令可使用这两个值。软件常规可决定该映射文件的其余部分的配置。该映像也可包含用于验证用途的一数字签章,而该数字签章的散列值可包含进入点及长度字段。在开始SL执行之前,SKINIT指令将该SL映像转移到SSP以供验证。该SL至少在初始化时可在关闭分页机制的32位平坦保护模式(32-bitflat protected mode)下执行。为了使SL程序代码的位置具有独立性,可自EAX寄存器中的值推导出一基址,以便利用基址加位移量寻址法存取该SL映射文件内的数据区域。
请参阅图3,图中示出一可进入SEM的处理器的一实施例的一方框图。SEM处理器300包含被连接到一内存控制器330、一系统接口320及一中断控制逻辑340的一执行单元310。此外,中断控制逻辑340被连接到系统标识逻辑350。在一实施例中,SEM处理器300可以是图2所示SEM处理器100A及100B的代表。
如前文所述,在初始化阶段中,内存控制器330可将SL映射文件加载系统内存110A中。以在禁止DMA存取之前先保护该SL映像,阻止对SLB的存取。该64K字节空间的基址是SKINIT指令的一参数(例如,使用EAX输入到SKINIT)。一Hash_Start事务处理载送该基址作为其地址字段的一部分。在这种方式下,可将哪一内存区域受到保护的消息通知接收到该Hash_Start事务处理的所有内存控制器。
在一实施例中,该安全加载程序块是可位于任何64KB对准地址的一64KB物理内存范围。SEM驱动程序可分配该内存。在另一个实施例中,可预先在任何时间分配该内存。SEM驱动程序可在执行SKINIT之前的任何时间将该SL映像加载开始于位移量0的SLB。在一实施例中,在为内存的其余部分建立DMA排除向量(DMA Exclusion Vector;简称DEV)保护之前,在安全加载程序进行输入时,可立即使用介于SL映像的末尾与SLB的末尾之间的内存作为诸如一起始堆栈的安全暂时储存空间(secure scratch space)。
为了使SLB不会受到SEM处理器300以外的任何装置的存取,内存控制器330包含被连接到一直接内存访问(DMA)排除向量控制寄存器331及SL_DEV基址寄存器332的MC控制逻辑333。
DMA排除向量控制寄存器331包含对应于MC控制逻辑333的操作的控制信息。在所示实施例中,DEV控制寄存器331包含被标示为“DEV启动”及“SL_DEV启动”的控制位。该“DEV启动”位可控制DEV存取保护被启动或关闭。在所示实施例中,当该“DEV启动”位被触发时,即启动DEV保护,且当该“DEV启动”位被停止触发时,即关闭DEV保护。该“SL_DEV启动”位可控制该SLB是否不会受到DMA存取。在所示实施例中,当该“SL_DEV启动”位被触发时,将使该SLB不会受到DMA存取,且当该“SL_DEV启动”位被停止触发时,将关闭对SLB的保护。请注意,在其它的实施例中,DEV控制寄存器331可包含具有额外功能的其它位。
SL_DEV基址寄存器332包含对应于系统内存中受到SKINIT指令保护的区域的位置(例如SLB)的信息。在所示实施例中,被加载SL_DEV基址寄存器332的地址可对应于在SL的执行期间以及在启动完整的DMA保护之前不会受到DMA存取的SLB的开始地址。该地址被称为SL_DEV基址。MC控制逻辑333可使用该SL_DEV基址来决定一特定存取要求的目标地址是否在该受保护的区域内。软件无法直接读取SL_DEV基址寄存器332的内容,MC控制逻辑333可响应接收到一Hash_Start事务处理,而加载该SL_DEV基址寄存器332。请注意,在其它的实施例中,SL_DEV基址寄存器332可包含具有额外功能的其它位。因此,该MC控制逻辑可被设定成响应接收到一Hash_Start事务处理,而将SL_DEV基址加载该SL_DEV基址寄存器,并触发该“SL_DEV启动”位。
在一实施例中,MC控制逻辑333可包含可使用只由SKINIT指令使用的一特殊协议(特有的控制、地址及/或命令)而提供将SL映像自SEM处理器300安全地转移到SSP130的支持的逻辑(图中未示出)。该协议包含明确的转移开始(亦即Hash_Start)及转移终止(亦即Hash_End)指示,用以规范一可变量目的数据转移周期(亦即Hash_Data)(自无至64KB量的任何大小)。该协议不允许任何其它装置或SKINIT指令以外的其它指令产生这些开始、终止及数据转移指示。因此,可将MC控制逻辑333设定成将前文所述的每一事务处理绕送到SSP130。此外,可将MC控制逻辑333设定成自系统内存读取SL,并提供SL映像,以供在Hash_Data事务处理时的传输。
此外,MC控制逻辑333可在多个内存控制器系统上提供SL_DEV支持。可以与转移开始状态指示的设定同时或在该设定之前,将SL_DEV_BASE地址分送到所有的内存控制器,并在所有的内存控制器上启动该SL_DEV_BASE地址。
此外,在诸如计算机系统10等的多处理器系统中,当SEM处理器300正在被用来作为一BSP时,在将SL映像传送到SSP130以供验证之前,SEM处理器300必须确保所有其它的处理器处于一APIC INIT状态。例如,当在一BSP上执行时,SEM驱动程序在呼叫SKINIT指令之前,可先将一APIC INIT IPI发出到所有的AP。然而,当被用来作为一AP时,SEM处理器300可提供其已进入APIC INIT状态的一指示。在一实施例中,一AP可响应接收到该IPI而提供该指示。请注意,在其它的实施例中,可由SKINIT指令的微码发出该APIC INIT IPI。
为了支持SEM模式中的APIC INIT功能,系统接口320包含被连接到Hash_Start状态寄存器321的SI控制逻辑323。Hash_Start状态寄存器321包含对应于该计算机系统内的其它处理器的起始状态的位。在所示实施例中,一Hash_Start状态寄存器321包含一状态位及一看到位(seen bit)。该状态位指示一Hash_Start事务处理是否成功。在一实施例中,该Hash_Start事务处理可使用该状态位来决定所有其它的处理器是否已转变到一APIC INIT状态。在其它的实施例中,该Hash_Start事务处理可促使APIC INIT IPI被发出,因而使所有其它的处理器进入APIC INIT状态。该看到位可指示另一处理器是否发出了一Hash_Start事务处理。系统接口320可使用Hash_Start状态寄存器321的内容来决定Hash_Start事务处理是否成功,且是否要通知内存控制器330传送SL映像。请注意,在一实施例中,软件可能无法直接读取Hash_Start状态寄存器321内的位。可将SI控制逻辑323设定成根据是否从计算机系统10中所有其它的处理器接收到通知,而设定及清除这些位。请注意,在其它的实施例中,Hash_Start状态寄存器321可包含具有额外功能的其它位。
如前文所述,当被用来作为一AP时,SEM处理器300可响应接收到一启动IPI,而在内存中由该启动IPI所提供的一位置上开始执行。此外,如将在下文中参照图4而更详细说明的,也可将SI控制逻辑323设定成在该看到位被触发时清除全局中断标识。在一实施例中,SL可发出该启动IPI,但是在其它的实施例中,SK可发出该启动IPI。
一般的x86架构提供了EFLAGS寄存器,用以支持在非安全执行模式中的系统操作控制。更具体而言,该EFLAGS寄存器的IF标识可启动及关闭处理器对诸如INTR等可屏蔽的硬件中断要求的响应。因此,在一非安全执行模式期间,多个中断来源可中断处理器的执行。然而,为了维持SEM之下的系统安全,必须以不可分割方式执行与SK进入及退出相关联的系统工作环境切换指令序列,而且这种方式不只是针对正常的外部中断(例如INTR接脚),而且也针对诸如INIT#、NMI、SMI以及调试端口中断及调试陷阱等非屏蔽的中断。因此,在所示实施例中,系统标识逻辑350包含一全局中断标识(Global Interrupt Flag;简称GIF)、一SEM启动标识及一EFLAGS.IF标识。在一实施例中,可将该GIF设定成当SEM处理器300正在一安全执行模式中操作时,启动及关闭所有的中断及调试陷阱。该GIF可包含所有的中断来源,而提供EFLAGS.IF功能的一超集。请注意,在一实施例中,该GIF是一内部的处理器标识,且软件正常无法读取该标识。请注意,虽然将系统标识逻辑350描述为包含该GIF、SEM启动标识及EFLAGS.IF标识,但是也可考虑在特定的实施例中可在各独立的逻辑单元中实施这些标识。
在所示实施例中,中断控制逻辑340可自SEM处理器300内部及外部的许多来源接收多个中断。中断控制逻辑340可根据SEM启动位的状态而决定SEM处理器是否正在安全执行模式中操作。此外,在一实施例中,可将中断控制逻辑340设定成分别响应两个新指令STGI及CLGI的执行,而设定及清除该GIF。(在该环境中,设定该GIF指触发该GIF,而清除该GIF指停止触发该GIF。)请注意,系统标识逻辑可包含用来储存GIF状态的储存单元。该储存单元可以是诸如一寄存器或RAM储存位置等任何类型的储存单元。
在一实施例中,可将该STGI及CLGI指令优先级化,且唯有SK及诸如SKINIT指令等其它的优先级操作以及呼叫SK的其它操作可使用该STGI及CLGI指令。如果SEM并未被启动,则在任何模式中尝试执行该STGI及CLGI指令时,将造成一无效运算码错误(#UD)。当SEM被启动时,在CPL>0下的TX模式中尝试执行该STGI及CLGI指令时,将造成一般性保护错误(#GP),且在任何CPL下的正常模式中执行时,将造成一#UD异常中断。请注意,在一实施例中,可将执行逻辑310设定成产生前文所述的无效运算码错误及一般性保护错误(#GP)。
在一实施例中,为了保护系统工作环境切换指令序列,当从正常模式进入SK时,可自动清除该GIF,且可将此时所触发的任何中断保留在待处理状态。在完成该系统工作环境切换指令序列之后,SK可通过STGI指令而设定该GIF。此时,可使用对同时中断的正常优先级规则来响应任何待处理的中断。请注意,在一实施例中,在进入SK时,也可自动清除EFLAGS.IF标识,因而除了STGI之外,可能需要一STI来启动装置中断。然而,可不理会且有效地舍弃任何待处理的调试陷阱。
在一实施例中,在准备退出安全执行模式时,SK可先以CLGI指令清除GIF,然后执行必要的系统工作环境切换。可以通过SMRET指令自动设定该GIF。
图4是用来描述其中包含一可进入安全执行模式的处理器的一计算机系统的一实施例在一安全初始化期间的操作的一流程图。请整体地参阅图1至图4,现在将说明一多处理器计算机系统的一安全初始化。在步骤400中开始,计算机系统10的SEM处理器100A及100B可在一非安全模式中操作。在步骤405中,SEM处理器100A的操作系统呼叫SEM驱动程序。在一实施例中,SEM驱动程序可在步骤410中进行诸如分配内存以供SL及SL使用等的各种系统准备。在SK取得控制权之后,SEM驱动程序也可建立可允许恢复操作系统状态的信息(例如各处理器控制寄存器的内容),且可进一步在步骤415中将可执行的SL及SK映射文件加载到系统内存110。SEM驱动程序可将内存中用来加载SL的64KB范围的基址储存在EAX寄存器中。一旦完成了这些准备之后,SEM驱动程序可在步骤420中呼叫SKINIT指令。
如前文所述,该安全指令可以是具有以不可分割方式执行的多个微码成分的一单一指令。在一实施例中,该SKINIT指令被优先级化,且可在步骤425中在CPL0下由SEM处理器100A执行该SKINIT指令。如果在一错误的模式中尝试执行SKINIT指令,则可在步骤430中由一般性保护错误来禁止SKINIT指令的执行。
回到步骤425,如果SEM处理器100A是处于CPL0,则可在SEM未被启动时在正常模式中执行SKINIT指令。当SEM被启动时,可在TX模式中(亦即由SK)执行SKINIT指令。在启动SEM之前,将主要在正常模式中使用SKINIT指令,但是也可根据需要而由SK将SKINIT指令用来重新将该系统初始化。在任一模式中的操作可以是相同的。
在步骤435中,该SKINIT指令的微码可使任何已安装的微码修补程序被清除。请注意,直到此时且包括此时,该SKINIT微码都是不可修补的。因而可有效地使该SKINIT指令的其余部分也都是不可修补的。此外,以与一INIT#信号相同的方式将SEM处理器100A的状态初始化,然后在步骤440中将SEM处理器100A置于32位平坦保护模式(且使分页机制关闭),而不是使SEM处理器100A停留在真实模式中。例如,在一实施例中,控制寄存器CR0的PE位设定为1;CS及SS选择符被分别设定为0008h及0010h,且将CS及SS基址、限制及属性寄存器设定为与一系统管理呼叫(SMCALL)指令时相同的值。DS、ES、FS及GS保留为16位真实模式片段,且在使用这些寄存器之前,SL必须将具有适当GDT数据项的保护模式选择符重新加载这些寄存器。除了保持其值的EAX寄存器以及存有型号、系列及时程信息的EDX寄存器之外,清除这些一般性寄存器的内容。如同x87以及SSE操作数及控制寄存器,高速缓存的内容可保持不变。此外,大部分的模式专用寄存器(Model Specific Register;简称MSR)也保持其值,但例外者是可能为了SEM保护而不保持其值的那些MSR。在步骤445中,SKINIT微码然后可读取EAX寄存器的内容,然后清除该EAX寄存器的位15:0,而形成SLB基址。
在数据转移阶段中,SKINIT微码可执行一Hash_Start、一Hash_Data及一Hash_End事务处理。在一实施例中,该Hash_Start事务处理可以是在SEM处理器100A与SSP130之间的所有插入链路及总线上传送的一广播事务处理,因而可在步骤450中在处理器总线105、系统总线125及外围设备总线135上传送该Hash_Start事务处理。内存控制器101A及101B可接收其中包括SLB基址的该Hash_Start事务处理。在步骤455中,MC控制逻辑333可将该SLB基址加载到SL_DEV基址寄存器332,并触发DEV控制寄存器331的SL_DEV启动位。请注意,该系统中的每一内存制器都可执行该功能。通过触发该SL_DEV启动位,SLB现在不会被SEM处理器100A以外的任何其它装置所存取。该机制也可使SLB不会受到通过图形地址重新映射表(GraphicsAddress Remapping Table;简称GART)转换后地址的存取,且该机制还可阻止装置对外围设备互连(PCI)配置空间的存取。
在图2所示的多处理器环境中,在传送SL映像之前,SEM处理器100A在步骤460中可等候来自SEM处理器100B的一响应,而决定该Hash_Start事务处理是否成功。被用来作为一AP时,SEM处理器100B可以指示“APIC Init模式在作用中”或“APIC Init模式不在作用中”的一状态位来响应该Hash_Start事务处理。如果该Hash_Start成功了,则系统接口320的SI控制逻辑323可触发Hash_Start状态寄存器321的状态位。SKINIT微码可在步骤465中响应该Hash_Start状态位的触发,而使MC控制逻辑333从系统内存110读取SL映像,并在步骤470中将该SL映像传输到SSP130,作为供验证的一系列的Hash_Data事务处理。在一实施例中,SSP130可使用SL映像的长度字段来决定散列函数的精确长度。
一旦将Hash_Data事务处理及其对应的数据传送到SSP130之后,该微码可执行一Hash_End事务处理。在步骤475中,可以用在SEM处理器100A与SSP130之间的所有插入链路及总线上的一广播事务处理的方式传送该Hash_End事务处理。该Hash_End事务处理可通知SSP130完成该散列运算,并验证该SL映射文件的数字签章。在一实施例中,如果该SSP确认该SL映射文件的数字签章,则SSP130可转变到一待命状态。在该待命状态中,SSP130可接受较大的SK的一后续散列值,以供验证。
在步骤480中,SKINIT微码可清除SEM处理器100A的GIF,以便关闭其中包括NMI、SMI及INIT的所有中断,因而确保可以用不可分割方式执行后续的程序代码。当SEM处理器100B被用来作为一AP时,如果看到位被触发,SEM处理器100B在接收到一APIC启动IPI时可清除GIF。
SKINIT微码可将来自SL的无正负号的16位进入点位移值加到SLB基址,而形成一SL进入点。在步骤485中,SKINIT微码可执行一跳越到该SL进入点地址,而完成执行。SL执行现在可从该SL进入点开始。当SL在BSP(例如SEM处理器100A)上开始执行时,各AP(例如SEM处理器100B)保持暂停在APIC INIT状态。
如前文所述,SL可执行各种功能,以便初始化并启动一安全核心。在一实施例中,SL可在步骤490中产生SK的一散列值,并使该SK的散列值传送到SSP130以供验证。如果SSP130先前处于待命状态,则SSP130可执行对该SK的散列值的一验证。如果该SK的散列值被确认,则可将SSP130解除锁定,以便在一可信赖的执行环境中执行与计算机系统10的操作相关联的后续的密码功能。然后在步骤495中,该SL程序代码执行跳越到安全核心。此时,SK在步骤500中执行任何剩余的工作,以便完成安全系统的初始化。
例如,在一实施例中,SK可在任何适当的时点发出这些AP的启动IPI。在另一个实施例中,SL可发出这些AP的启动IPI。这些AP响应该启动IPI,而在16位真实模式下在所指定的位置上开始执行。在一实施例中,该AP启动码将每一AP上的各SEM机型专用寄存器中的起始值设定为(由SL或SK决定的)适当的值,并启动SEM。在每一AP上,该AP程序代码转变进出TX模式至少一次,因而设定GIF,并重新启动中断,且在将对处理器的控制权交回操作系统之前,先恢复SKINIT指令之前的系统工作环境(由在BSP上执行的SL或SK所指示)。SL可将AP启动码包含在经过散列运算的SL映像中,并诸如在将该SL映像复制到所需的区域之前,先建立DEV保护,而保证AP启动程序序列的完整性。然而,该AP启动码并不需要执行SKINIT指令。
请注意,在一实施例中,就SKINIT而言,由SSP130执行的对SL映像的验证是一单向的事务处理。在传输该SL映像之后,且在跳到SL进入点以便无条件地开始安全加载程序的执行之前,该事务处理并不取决于来自SSP130的任何响应。
考虑在其它的实施例中,SL可利用标准总线事务处理来建立与SSP130间的通讯,以便自SSP130接收对SL映像验证的一肯定的或否定的确认消息。该通讯的细节可取决于实施方式。
回到步骤460,如果SEM处理器100B并不以“APIC Init模式在作用中”的消息作为响应,则SEM处理器100A可结束该Hash_Start,然后传输一Hash_End事务处理,因而略过了Hash_Data事务处理。在这种情形中,SSP130可断定并未传输任何有效的SL映像,且可保持在待命状态,因而无法参与任何后续的SK验证。然后可参照前文中配合步骤475所述的方式继续执行操作。
请注意,在初始化序列期间,SL可异常中断。在一实施例中,如果SL决定其无法正确地将一有效的SK初始化,则SL可将其正在异常中断的消息通知SSP130。可将SL映像的长度字段设定为零,将进入点改变到一异常中断继续点,并执行SKINIT指令,而在无须与SSP130建立一安全(例如加密的)通讯信道的情形下,可靠地执行该异常中断。
请注意,将某些要素描述为在硬件中实施,而将其它的要素描述为在软件中实施,这些都只是为了要便于表达该系统及其各组件的操作特征。然而,应该考虑到在各实施例中,可以软件来实施前文所述的硬件组件的全部或部分,且可以硬件来实施前文所述的软件组件的全部或部分。
又请注意,将各逻辑位描述为被触发或被停止触发。在本说明书的用法中,一被触发的位是提供一肯定指示的一位,而一被停止触发的位则提供了一否定的指示。因此,一特定实施例可在被触发时使用一个一的逻辑值,而另一实施例可在被触发时使用一个零的逻辑值。
虽然前文中已相当详细地说明了这些实施例,但是本领域技术人员在完全了解前文的揭示事项之后,将可易于作出许多变化及修改。将把最后的权利要求范围解释为包含所有此类的变化及修改。
工业应用本发明主要应用于采用可进入安全执行模式的处理器的计算机系统。
权利要求
1.一种将其中包含一可进入安全执行模式的处理器100A及一系统内存110的一计算机系统10初始化的方法,该方法包含下列步骤将一安全操作系统程序代码片段加载程序储存在对应于该系统内存内的一特定地址范围的多个位置;以及执行一安全初始化指令;其中执行该安全初始化指令的该步骤包含使多个操作被执行,而这些多个操作包含传输其中包含该特定地址范围的一基址的一起始事务处理;自该系统内存获取该安全操作系统程序代码片段加载程序;以及以多个数据事务处理的形式传输该安全操作系统程序代码片段加载程序,以供验证。
2.根据权利要求1所述的方法,进一步包含下列步骤除了该可进入安全执行模式的处理器之外,禁止任何装置存取该特定地址范围。
3.根据权利要求1所述的方法,其中该安全初始化指令是其中包括多个以不可分割方式执行的微码成分的一单一指令,而当执行这些微码成分时可使这些多个操作被执行。
4.根据权利要求1所述的方法,进一步包含下列步骤获取并传输一安全操作系统程序代码片段,以供验证。
5.根据权利要求1所述的方法,其中这些多个操作进一步包含关闭各中断。
6.根据权利要求1所述的方法,进一步包含下列步骤使另一可进入安全执行模式的处理器110B转变至一初始化状态。
7.根据权利要求6所述的方法,进一步包含下列步骤响应该另一可进入安全执行模式的处理器并未转变至该初始化状态的决定,而禁止传输该安全操作系统程序代码片段加载程序。
8.一种计算机系统10,包含一可进入安全执行模式的处理器100,该处理器100被设定成执行一安全初始化指令;一内存控制器(101),该内存控制器(101)被设定成将一安全操作系统程序代码片段加载程序储存在对应于一系统内存110内的一特定地址范围的多个位置;传输装置,用以响应该安全初始化指令的执行,而传输其中包含该特定地址范围的一基址的一起始事务处理;以及获取装置,用以响应该安全初始化指令的执行,而从该系统内存获取该安全操作系统程序代码片段加载程序,并以多个数据事务处理的形式传输该安全操作系统程序代码片段加载程序,以供验证。
9.根据权利要求8所述的计算机系统,进一步包含用以除了该可进入安全执行模式的处理器之外禁止任何装置存取该特定地址范围的装置。
10.根据权利要求8所述的计算机系统,其中该安全初始化指令是其中包括多个以不可分割方式执行的微码成分的一单一指令。
全文摘要
一种将其中包含一可进入安全执行模式的处理器100的一计算机系统10初始化的方法,包含下列步骤将一安全操作系统程序代码片段加载程序储存在对应于一系统内存110内的一特定地址范围的多个位置。该方法还包含下列步骤执行一安全初始化指令。执行该安全初始化指令时,可使其中包括传输其中包含该特定地址范围的一基址的一起始事务处理的数个操作被执行。此外,执行该安全指令时,也可使另一操作被执行,该另一操作包括自该系统内存取该安全操作系统程序代码片段加载程序,并以多个数据事务处理的形式传输该安全操作系统程序代码片段加载程序,以供验证。
文档编号G06F12/14GK1647039SQ03808705
公开日2005年7月27日 申请日期2003年4月18日 优先权日2002年4月18日
发明者K·J·麦格拉思, G·S·斯特龙金, D·S·克里斯蒂, W·A·休斯, D·E·古利克 申请人:先进微装置公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1