在运行时间期间向安全数据存储设备安全地写入数据的制作方法

文档序号:14959057发布日期:2018-07-18 00:09阅读:120来源:国知局

特别地经由互联网对计算机系统的非法攻击在频率和复杂性方面都在增加。这样的攻击的发起人可能试图访问用于身份盗窃的数据、以不间断的方式模仿合法服务、中断或拒绝服务、或者简单地任意损坏数据或硬件。

附图说明

随附各图图示了本文描述的原理的各种实现并且是本说明书的一部分。所图示的实现仅仅是示例,并且不限制权利要求书的范围。

图1是与所公开的实现一致的具有在运行时间期间可用于安全数据存储设备的应用程序接口(api)的示例独立计算核的图示。

图2是与所公开的实现一致的包括独立计算核的示例计算机系统的图示,所述独立计算核具有针对安全数据存储设备的数个应用程序接口(api)。

图3是与所公开的实现一致的使用具有针对安全数据存储设备的应用程序接口(api)的独立计算核以便在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。

图4是与所公开的实现一致的用于在运行时间期间向安全数据存储设备写入数据的示例消息的图示。

图5是示出了与所公开的实现一致的建立主机的bios与独立计算核之间的共享秘密以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。

图6是示出了与所公开的实现一致的准备从主机的bios去往独立计算核的消息以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。

图7是示出了与所公开的实现一致的验证从主机的bios去往独立计算核的消息以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。

图8是与所公开的实现一致的具有指令的非暂时性计算机可读介质的图示,所述指令在由独立计算核执行时使控制器处理来自主机的bios的消息以用于在运行时间期间向安全数据存储设备写入数据。

贯穿附图,相同的参考数字指定相似但是未必相同的元件。

具体实施方式

如以上所指出,特别地经由互联网对计算机系统的非法攻击在频率和复杂性方面都在增加。这样的攻击的发起人可能试图访问用于身份盗窃的数据、以不间断的方式模仿合法服务、中断或拒绝服务、或者简单地任意损坏数据或硬件。

用于这样的攻击的一个特定点是计算机系统的基本输入输出系统(bios)。这是允许计算机系统在运行操作系统(0s)之前启动起来的固件。大多数用户软件然后在os的平台上运行。bios存储在专用存储器(典型地,串行外围接口(spi)闪存)中,并且是在计算机系统开启时由中央处理单元(cpu)执行的第一个代码。如果bios被成功地破坏或者改变,那么问题的根源可能非常难以找出和校正,同时攻击者当时可能已经成功地使计算机系统的安全性和控制的许多方面受损。此外,bios代码典型地在比甚至大多数特权os代码更高的特权级别下执行。因而,破坏bios的攻击对于攻击者可能是非常有价值的。

bios的安全性通过分离的看门狗系统而改善。对于该看门狗系统,在计算机系统的系统板上提供专用芯片或集成电路。这可以例如是独立计算核(ec)或超级输入/输出(sio)芯片。为了便于引用,本文描述的看门狗系统的所有可能实现将被全体地称为“独立计算核”。

在开启或系统唤醒时,或者每当需要bios时,独立计算核将以加密方式验证bios是正确的,意味着bios尚未遭到任何恶意攻击、数据降级或其它故障的破坏或者改变。如果独立计算核标识与bios有关的任何问题,那么独立计算核可以使用bios的分离的安全备份副本来自动地修复bios。bios的安全副本和其它安全数据可以存储在串行外围接口(spi)芯片上,所述串行外围接口(spi)芯片经电气隔离以便仅可被独立计算核访问。经电气隔离以便仅可被独立计算核访问的这样的数据存储将在本文中和权利要求中称为“安全存储”或“安全存储器”。不可被独立计算核排他性地访问的数据存储位置将被称为“较不安全”的存储。

bios的备份副本和其它安全数据在安全存储中由独立计算核使用受信应用程序接口(api)来访问。该api包括api标志,所述api标志可以被设置为“关闭”或“打开”值。当该标志被设置为“关闭”时,通过对应api访问的数据不能更改,并且不能向安全存储位置写入。

作为安全预防措施,用于让api保护数据的任何这样的api标志可以由bios在系统启动期间设置为“关闭”。运行时间是指在启动起来之后的随后时间,诸如当操作系统在执行时。在启动起来并进入到运行时间期间受信api标志被设置为“关闭”的情况下,在运行时间期间不能向仅能被独立计算核访问的任何安全存储写入安全数据。

然而,bios可能需要在运行时间期间接收前往安全存储位置的输入。如果例如需要记录对bios的备份副本的更新或者需要存储或更新其它安全数据,那么这就可能发生。在情况如此的情况下,bios将临时地将更新数据保存到较不安全的位置,诸如,非易失性随机存取存储器(nvram)。bios然后将重启系统以便打开用于受信api的标志。一旦受信api打开,可以使用独立计算核将要保护的数据写入到安全存储,所述独立计算核具有对该安全存储位置的排他性访问权。一旦写入安全数据,受信api再次在系统运行时间之前关闭。该过程然后在需要向安全存储写入数据的下一次重复。

由于将较不安全的存储(诸如nvram)用作用于安全数据的临时数据存储位置,所以该方案产生潜在脆弱性。获悉用于安全数据的恰当格式的攻击者可能在某些情况之下成功地攻击nvram或者其它临时数据存储以便更改等待被转移至由独立计算核排他性管理的安全存储的安全数据。这继而可以引起对安全存储中的数据的错误或恶意改变。对较不安全的存储(诸如nvram)的这样的攻击要比尝试打败受信api以便更直接地访问安全存储简单得多。

相应地,为了避免在较不安全的存储位置中临时存储安全数据的需要,本说明书描述了一种用于允许在运行时间期间向由独立计算核排他性访问的安全存储位置的通信的安全机制。作为结果,在等待重启以及受信api打开的同时,这样的安全数据不需要保持在较不安全的位置(诸如nvram)中,在那里它更易受攻击。

如本文中以及以下权利要求书中使用,术语“独立计算核”用于指代包括处理器的芯片、集成电路或者任何其它设备,所述处理器是与(多个)主系统处理器分离的实体,用以控制对安全数据存储的排他性访问并且在启动对应的计算机系统时使用bios固件之前验证bios固件。独立计算核可以例如是分离的独立计算核或者计算机系统的系统板上的超级输入/输出(sio)芯片。

如本文中以及以下权利要求书中使用,术语“安全数据存储设备”、“安全存储”或“安全存储器”将是指经电气隔离以便仅可由独立计算核访问的数据存储设备或者这样的设备上的位置。不可由独立计算核排他性访问的其它数据存储设备和位置将被称为“较不安全”的存储。

在一个示例中,本说明书描述了一种计算机系统,包括独立计算核;以及仅可由独立计算核访问的、用于存储数据的隔离的安全数据存储设备。独立计算核响应于接收到经验证的消息而在计算机系统的运行时间期间打开应用程序接口(api),所述经验证的消息包含要向安全数据存储设备写入的安全数据。

在另一个示例中,本说明书描述了一种方法,包括在计算机系统的运行时间期间响应于接收到经验证的消息而利用独立计算核打开应用程序接口(api),所述经验证的消息包含要向安全数据存储设备写入的安全数据;以及通过api向安全数据存储设备写入安全数据。

在又一个示例中,本说明书描述了一种包含指令的非暂时性计算机可读介质,所述指令在由计算机系统的独立计算核执行时使独立计算核:在接收到消息时,验证该消息;响应于消息的验证,在计算机系统的运行时间期间,打开应用程序接口(api);以及在验证之后通过api向安全数据存储设备写入来自消息的安全数据,所述安全数据存储设备在逻辑上仅可被独立计算核访问。

在以下描述中,出于解释的目的,阐述具体细节以便提供对本公开的透彻理解。然而,对本领域技术人员将清楚明白的是,与本公开一致的示例可以在没有这些具体细节的情况下实践。在说明书中对“实现”、“示例”或类似语言的引用意味着结合该实现或示例描述的特定特征、结构或特性包括在该至少一个实现中,而未必包括在其它实现中。短语“在一个实现中”或者类似短语在说明书中各种地方的各种实例未必全部是指相同的实现。

图1是与所公开的实现一致的具有在运行时间期间可用于安全数据存储设备的应用程序接口(api)的示例独立计算核的图示。如图1中所示,系统(100)包括独立计算核(102)。如上文所述,该独立计算核(102)可以提供在主机计算机系统的系统板上,并且可以用于增加计算机系统的安全性。具体地,计算机系统(100)包括安全数据存储设备(104),在所述安全数据存储设备(104)上存储安全数据,所述安全数据的完整性防护主机计算机系统的操作并且保护系统的用户的数据和身份。例如,该安全数据可以包括用于主机计算机系统的bios固件的备份副本(116)。

为了确保安全数据存储设备(104)上的数据的安全性,除了独立计算核(102)之外,安全数据存储设备(104)可以与主机计算机系统的其它组件电气隔离。作为结果,独立计算核(102)具有对安全数据存储设备上的数据的排他性访问权。如将在下文描述,提出了一种机制以便允许独立计算核(102)甚至在计算机系统(100)的运行时间期间接收并且验证要向安全数据存储设备(104)写入的数据。

由独立计算核(102)控制的应用程序接口(api)由独立计算核使用以便访问安全数据存储设备(104)上的数据。如将在下文进一步描述,每一个这样的api包括可以被设置为打开或关闭状态的标志。在关闭状态下,api不准许对安全数据存储设备上的对应数据的写入访问。

如本文中以及随附权利要求书中使用,打开或者关闭api是指将api标志的状态改变为打开或者关闭以便准许或者阻止对安全数据存储设备上的对应数据的写入访问。

图2是与所公开的实现一致的包括独立计算核的示例计算机系统的图示,所述独立计算核具有针对安全数据存储设备的数个应用程序接口(api)。如图2中所示,计算机系统(200)包括具有支持存储器单元的中央处理单元(cpu)(110)。这些可以包括主存储器设备(118),诸如,硬驱动或固态驱动,连同随机存取存储器(ram)和非易失性nvram(122)。如图2中所示,主存储器设备(118)存储操作系统(o/s)(120)。

在开启期间,cpu将执行来自bios存储(112)的bios固件(114)。因而,与cpu(110)相关联地示出bios(130)的实例化版本。在运行时间,o/s将由cpu(110)从存储器(118)实例化。因而,也与cpu(110)相关联地示出o/s(132)的实例化版本。

总线(140)提供cpu(110)、存储设备(112、118和122)与独立计算核(102)之间的通信。如上文所述,安全数据存储设备(104)与其它系统(200)组件电气隔离,并且仅可被独立计算核(102)访问。如同样在上文所提及,安全数据存储设备(104)可以包含备份bios映像(116),独立计算核(102)可以在启动之前利用所述备份bios映像(116)修复或者替换bios存储(112)中的bios映像(114)。

如同样之前在上文所述,独立计算核(102)控制应用程序接口(api)(106),所述应用程序接口(api)(106)用于控制对安全数据存储设备(104)上存储的数据的写入访问。该api包括标志(108),所述标志(108)可以被设置为关闭或打开状态,如上文所述。如同样在图2中所示,可以存在数个api(106-1-106-n)。每一个api(106)可以提供对安全数据存储设备上的特定数据或位置的访问。因而,通过给对应api(106)加上打开标志而同时其它api仍然标志为关闭,可以使得仅特定数据能被访问。

最后,如图2中所示,在运行时间期间,可以在cpu(110)处准备消息(150),所述消息(150)包括需要存储在安全数据设备(104)中的安全数据。将该消息(150)发送给独立计算核(102)。该消息可以通过数个信道来发送,包括将消息(150)存储在可被cpu(110)和独立计算核(102)二者访问的存储器单元中,所述存储器单元诸如nvram(122)。

图3是与所公开的实现一致的使用具有针对安全数据存储设备的应用程序接口(api)的独立计算核以便在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。如图3中所示,方法包括在计算机系统的运行时间期间响应于接收到经验证的消息而利用独立计算核打开(302)应用程序接口(api),所述经验证的消息包含要写入到安全数据存储设备的安全数据;以及通过api将安全数据写入(304)到安全数据存储设备。

图4是与所公开的实现一致的用于在运行时间期间向安全数据存储设备写入数据的示例消息的图示。如图4中所示,消息(400)包括至少七个字段。

第一字段是密钥散列消息认证代码(hmac)(402)。hmac是特定构造,用于计算消息认证代码(mac),牵涉到与秘密加密密钥组合的加密散列函数。在该情况下,摘要(digest)是使用在bios(130,图2)与独立计算核(102,图2)之间共享的共享秘密作为散列密钥的消息(400)的某些其它字段的散列。具体地,摘要(402)是来自消息(400)中的所有其它字段的值的散列。将所有字段并入在摘要(402)中,因为这样做允许让每一个字段都被hmac验证。

用于创建hmac(402)的散列算法是任意的,并且可以是使用加密密钥的任何散列算法。使用什么散列算法的记录保持在散列算法标识符字段(410)中。

例如,hmac摘要字段(402)本身可以被设置为64字节长,它长到足以接受除了sha-3shake128和shake256之外的任何sha-2或sha-3hmac摘要长度。因而,hmac摘要考虑到了在生成摘要(402)时使用任何经认可的散列算法的灵活性。不需要追踪实际hmac的长度,因为所有被支持的摘要的长度基于特定散列算法是固定的。

第二字段是消息标识值(404)。这是标识每一个单独的消息的唯一数字。使用不安全的数据信道发送的每一个有效输入消息将包含消息标识值,所述消息标识值确切地匹配由独立计算核预期的当前消息标识值。一旦已经使用消息标识值,该标识值就增加1。由于每一个消息包含唯一的消息标识值,所以该字段阻碍通过不安全信道的重放攻击。

当系统每一次启动时,在关闭受信api之前,当前消息标识值由bios(130,图2)从独立计算核(102,图2)检索,所述受信api保护该数据以过渡至运行时间。bios然后存储当前消息标识值,例如,存储在系统管理ram(smram)中或者受信平台模块(tpm)层级中,这取决于系统的能力和配置。

在此之后,在运行时间期间,在发送/接收到每一个安全消息(400)之后,独立计算核和bios分离地增加消息标识值。由于二者在相同的消息标识值处开始,所以消息标识值的独立增加帮助确保每一个消息(400)的真实性。由于消息标识值在每一次启动之后再次同步,所以消息标识值同步性的任何非预期缺失可以在系统重启时恢复。这允许让系统从非预期错误恢复,同时仍然维持总体消息传递系统的安全性和完整性。

第三字段(406)是共享秘密标识符。该标识符(406)是标识用于hmac的特定共享秘密的序数。该标识符在其中bios与独立计算核共享多个秘密的情况下提供帮助。甚至在受信api被设置为关闭时,可以准许知晓共享秘密的实体向由所述受信api控制的字段写入数据。

第四字段(408)是数据位置。该值充当用于总体消息的子命令,由此允许bios向独立计算核告知是什么种类的数据包含在消息中。独立计算核因而可以基于数据位置字段向安全数据存储设备(104,图2)中的适当位置写入数据。

第五字段(410)是散列算法标识符。每一个被支持的散列算法,诸如,sha-2算法和sha-3算法,对应于该字段中的唯一值。因而,任何散列算法可以被指定以供在使用该字段(410)生成hmac(402)中使用。

第六字段(412)是消息长度。这允许在运行时间从bios向独立计算核安全地发送任意长度的消息。在一些实现中,将消息长度上限设置在某一任意值处以便防止拒绝服务攻击尝试向独立计算核发送非常大的消息。

第七字段(414)是实际消息内容。消息长度(412)可以指定以字节计的该内容(414)的长度。消息内容可以是要保持在安全数据存储设备(104,图2)中的没有约束的任何数据。消息(400)的发送方(可假定是bios(130,图2))应当确保消息内容(414)对于所指定的数据位置(408)有意义。

除了验证hmac(402)的完整性之外,独立计算核可以或者可以不验证所述消息的值,所述hmac(402)封装消息(400)的数据。附加验证可以特定于特定的消息或应用。

图5是示出了与所公开的实现一致的建立主机的bios与独立计算核之间的共享秘密以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。如图5中所示,bios(103,图2)将生成(502)随机数字。bios可以使用tpm来生成该数字,或者它可以使用系统固件或硬件来生成该随机数字。在这些情况中的任一个下,bios保证随机数字在加密方式上是秘密的,这意味着随机数字具有与其相关联的足够熵,使得它是用于加密操作的可靠随机数字。

bios然后向独立计算核(102,图2)请求(504)当前消息标识值。如上文所述,独立计算核然后将提供它的用于当前消息标识的值。将该值与bios的当前消息标识相比较(506)。如果在消息标识值之间有任何差异,那么就纠正它(510)。

bios然后将随机数字发送(508)给独立计算核。然后将随机数字用作在bios与独立计算核之间共享的共享秘密。如上文所述,如果需要的话,可以分配一个序数,该序数在bios与独立计算核之间共享的其它秘密之中标识该随机数字。在一些实现中,独立计算核可以生成随机数字,并且将该数字提供给bios,而不是反过来。在这样的实现中,bios是独立计算核已经知晓的并且由独立计算核存储的随机数字的接收方。当bios是接收方时,它将该随机数字存储在smram中,正如当bios是随机数字的发送方时一样。

独立计算核然后将共享秘密存储(512)在安全数据存储设备(104,图2)中。独立计算核然后关闭(514)特定于共享秘密的api。该api可以被链接以用于访问安全数据存储设备(104,图2)中的共享秘密和消息标识值二者。作为结果,针对消息标识值而对独立计算核的任何随后请求(其可能是攻击的部分)由于该api的关闭而被忽略。

图6是示出了与所公开的实现一致的准备从主机的bios去往独立计算核的消息以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。如图6中所示,bios(130,图2)使用以上在图4的示例中描述的格式来建立消息。

首先,bios添加(602)当前消息标识值。然后,如果存在与独立计算核共享的多个秘密的话,那么bios添加(604)共享秘密标识符。bios然后添加(606)散列算法标识符以便指定要使用可用散列算法中的哪一个。

bios然后利用消息特定值来指定(608)数据位置、消息长度和消息内容字段。bios然后还增加(610)它的消息标识值并且准备(612)消息的数据的hmac。bios然后将hmac添加(614)至消息并且传送(616)消息。

图7是示出了与所公开的实现一致的验证从主机的bios去往独立计算核的消息以用于在运行时间期间向安全数据存储设备写入数据的示例方法的流程图。如图7中所示,当由独立计算核(102,图2)接收到(702)消息时,控制器可以通过检查(704)消息长度字段而开始。如上文所述,这可以快速地标识意图作为对独立计算核的拒绝服务攻击的过度大的消息。如果消息长度超出所允许的最大值(确定706),那么就丢弃消息(716)。

如果消息的长度是可接受的,那么独立计算核接下来检查(708)散列算法标识符字段和共享秘密标识符字段。独立计算核然后访问所指示的散列算法和共享秘密。

独立计算核然后准备(710)其自身的、消息的数据的hmac。在各种示例中,hmac可以是来自消息的所有或者仅所选的字段的hmac。

独立计算核然后确定(712)这种所准备的hmac是否与包含在消息的hmac字段(402,图4)中的hmac匹配。如果否,那么所述消息就没有通过验证并且被丢弃(716)。然而,如果hmac匹配,那么所述消息就通过了验证并且被处理(718)。当该操作成功时,该操作就证实独立计算核信任消息发送方(在该情况下,发送方是bios)。如果该操作失败,那么独立计算核假定消息来自于攻击者并且不允许进一步的消息处理。一旦将发送方验证为受信发送方(因为该过程成功),独立计算核就处理消息。这将包括将消息的消息内容存储在安全数据存储设备中由消息的数据位置字段(408,图4)指定的位置处。

独立计算核然后将增加(720)它的消息标识值。作为结果,独立计算核的消息标识值应当继续匹配bios的消息标识值,因为如上文所述,作为生成消息的过程的部分,bios增加它的消息标识值。要指出,消息标识符中的任何非一致性将由独立计算核解读为攻击。因而,在其中消息标识符与预期值不匹配的任何情况下,独立计算核都丢弃该消息。

图8是与所公开的实现一致的具有指令的非暂时性计算机可读介质的图示,所述指令在由独立计算核执行时使控制器处理来自主机的bios的消息以用于在运行时间期间向安全数据存储设备写入数据。如图8中所示,非暂时性计算机可读介质(800)包括指令,所述指令在由计算机系统的独立计算核执行时使独立计算核:在接收到消息时,验证(802)消息;响应于消息的验证,在计算机系统的运行时间期间打开(804)应用程序接口(api);以及在验证之后通过api向逻辑上仅可被独立计算核访问的安全数据存储设备写入(80)来自消息的安全数据。

此处应当指出,非暂时性计算机可读介质不排除被视为非暂时性计算机可读媒介的易失性存储器设备,诸如ram。

已经介绍了前面的描述,仅仅用于说明和描述所描述的原理的示例。该描述不意图是穷举性的或者将这些原理限于所公开的任何精确形式。许多修改和变形鉴于以上教导是可能的。

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