更新引导代码的制作方法_2

文档序号:9620853阅读:来源:国知局
XE代码可分别被存储为存储器区域112和114中的引导块B和DXE代码B(或替代存储器区域112和114中的引导块B和DXE代码B)。
[0026]根据一些实施方式的安全更新技术或机制可使用存储器区域112和114中的更新后的引导块和更新后的DXE代码来分别更新引导块A和DXE代码A,该引导块A和DXE代码A是当前版本的引导块和DXE代码。
[0027]根据一些实施方式的安全更新机制可设置在引导块中或系统固件的其他部分中。可替代地,安全更新机制可以以其他代码来实施,或使用硬件控制电路(例如,硬件控制器104)来实施。
[0028](分别设置在存储器区域112和114中的)更新后的引导块和更新后的DXE代码可各自利用对应的数字签名被标记。数字签名用于确认更新后的引导块或更新后的DXE代码实际上是真实的且来自可信源。例如,更新后的引导块或更新后的DXE代码可通过应用使用密钥(例如,私钥)的密码运算来标记。随后,被标记的代码可使用另一个密钥(例如,公钥)来解密。
[0029]此外,引导块A、DXE代码A、引导块B、以及DXE代码B中的每个包含用于指示代码的对应版本的对应版本信息。随着引导块或DXE代码被更新,对应的版本信息也被更新,以允许引导块或DXE代码的版本被确定。
[0030]图2是用于更新当前版本的系统固件部分(例如,图1中描绘的引导块A和/或DXE代码A)的示例多阶段更新程序200的流程图。多阶段更新程序200可由在一个或多个处理器上运行的引导块A来执行。在其他实施方式中,多阶段更新程序200可由不同的实体来执行。
[0031]多阶段更新程序200 (在202处)确定更新后的第一引导阶段代码是否存在。更新后的第一引导阶段代码用于更新第一存储器区域中存储的当前版本的第一引导阶段代码。例如,当前版本的第一引导阶段代码可为存储器区域106中存储的引导块A,且更新后的第一引导阶段代码可为存储器区域112中存储的引导块B。可替代地,第一引导阶段代码可为系统固件的另一部分。在一些示例中,在系统中的引导程序的第一引导阶段期间,执行确定更新后的第一引导阶段代码是否存在。在第一引导阶段期间,运行当前版本的第一引导阶段代码。
[0032]响应于确定更新后的第一引导阶段代码存在,多阶段更新程序200 (在204处)验证更新后的第一引导阶段代码。例如,验证可基于与被标记的更新后的第一引导阶段代码关联的数字签名。
[0033]多阶段更新程序200 (在206处)确定验证是否指示更新后的第一引导阶段代码是有效的。如果否,程序200 (在208处)锁定包含当前版本的第一引导阶段代码的第一存储器区域(例如,存储引导块A的存储器区域106),且不更新当前版本的第一引导阶段代码而(在210处)退出。
[0034]但是,如果验证指示更新后的第一引导阶段代码是有效的,那么,程序200 (在212处)维持第一存储器区域被解锁,而锁定另一个存储器区域。另一个存储器区域用于存储另一个引导阶段代码,例如,用于存储DXE代码A的存储器区域108。
[0035]随后,多阶段更新程序200 (在214处)使用更新后的第一引导阶段代码来更新解锁后的第一存储器区域中的当前版本的第一引导阶段代码。在更新之后,程序200(在208处)锁定第一存储器区域,并(在210处)退出。
[0036]尽管图2中未示出,多阶段更新程序200可以附加地执行使用存储器区域114中的更新后的DXE代码B来进一步更新系统固件的其他部分,包括存储器区域108中的DXE代码A。
[0037]图3是根据可替代实施方式的多阶段更新程序300的流程图。多阶段更新程序300用于更新系统固件的多个部分,包括例如引导块A和DXE代码A。多阶段更新程序300可由例如引导块A执行。在其他实施方式中,多阶段更新程序300可由不同的实体来执行。
[0038]多阶段更新程序300 (在302处)(基于将引导块B的版本信息与引导块A的版本信息作比较)确定引导块B是否是引导块A的不同版本。如果否,程序300 (在304处)锁定存储器区域106和108,且不执行引导块A的更新而(在306处)退出。
[0039]如果引导块B是引导块A的不同版本,那么程序300 (在308处)使用引导块B的数字签名来验证引导块B。如果该验证(在309处)指示引导块B是无效的,那么(在310处)将引导块B标记为无效的,例如,通过使用引导块B的元数据中的标记来标记。将引导块B标记为无效的防止引导块B在下一次系统引导时的另一次有效性检查。在一些示例中,无效的引导块B可通过用引导块A替代引导块B而回滚到引导块A。程序300随后进行到任务304和306 (且不执行更新)。
[0040]但是,如果验证(在309处)指示引导块B是有效的,那么多阶段更新程序300(在311处)(基于将DXE代码A或B的版本信息与引导块B的版本信息作比较)确定一个版本的DXE代码A或DXE代码B是否与一个版本的引导块B相匹配。如果DXE代码A和DXE代码B都不与该版本的引导块B相匹配,则执行任务304和306 (且不执行更新)。
[0041]但是,如果该版本的DXE代码A或DXE代码B与该版本的引导块B相匹配,则程序300 (在312处)通过使用DXE代码B的数字签名来验证DXE代码B。如果DXE代码B的验证(在312处)指示DXE代码B无效,那么可(在314处)进行校正动作。校正动作可包括:通过用DXE代码A取代DXE代码B,基于DXE代码A回滚到无效的DXE代码B。接着,执行任务304和306 (且不执行更新)。
[0042]在另一个场景中,如果DXE B是无效的,且与该版本的更新后的引导块B相匹配,那么引导块B可标记为无效的,且DXE代码B从DXE代码A回滚。在此场景中也不执行更新。
[0043]如果验证(在313处)指示DXE代码B是有效的,那么多阶段更新程序300 (在315处)维持存储器区域106被解锁(由于有效的更新是待定的),而锁定存储器区域108,以防止在存储器区域106中的引导块A的更新期间对存储器区域108的篡改。
[0044]在一些示例中,可保存系统100的状态,且可(在316处)重引导系统100,使得存储器区域106的硬件锁定可被禁用单次引导的持续时间。
[0045]接着,在其中存储器区域106的硬件锁定被禁用的重引导之后,多阶段更新程序300(在318处)使用更新后的引导块B来更新被解锁的存储器区域106中的引导块A。注意,此时,存储DXE代码A的存储器区域108保持被硬件锁定。
[0046]随后,(在320处)重引导系统。在接下来的引导时,(在322处)锁定包含更新后的引导块A的存储器区域106,而维持包含当前版本的DXE代码(DXE代码A)的存储器区域108被解锁。随后,使用更新后的DXE代码(DXE代码B)(在324处)更新存储器区域108中的DXE代码A。随后,(在326处)执行系统100的重引导。在下一次引导时,(在304处)锁定存储器区域106和108,且更新程序300 (在306处)退出。
[0047]在一些示例中,可提供故障保护机制。以下场景可由于恶意软件或由于不同的原因而发生。如果确定引导块B有效且更新引导块A(如上所述的),但随后确定DXE A仍是旧版本而DXE B是新版本,且随后确定DXE B是无效的,则系统可从有效的DXE A回滚到DXE B,且可警告用户引导块版本和DXE代码版本不同步。在这样的情况下,可执行另一更新,以重新同步引导块和DXE代码的版本。
[0048]图4是根据其他实施方式的多阶段更新程序400的流程图。多阶段更新程序400可被认为是图3的多阶段更新程序300的简化
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1