本申请要求由Paul England,Marcus Peinado和Bryan M.Willman于2002年4月17日所共同提出的、名为“安全存储处理器”的美国临时申请60/373505的权益,上述临时申请在这里被作为参考。
这份专利文件所披露的一部分内容包括受版权保护的材料。版权所有者不反对以专利商标局的专利文件或记录的形式利用专利文件或专利披露中的任何一种进行复制,但版权所有者保留其它一切权利。
具体实施方式
图1说明一个典型访问控制模型100。主体102能够产生访问被保护资源的一个请求。所述请求被一个防护装置104所接收,该防护装置控制对资源106的访问。防护装置104在与所述资源和其他信息相关的访问策略的基础上检查所述请求并决定是否授权该请求,诸如识别发布所述请求的主体102。为更好的解释,图1中示出了一个单独的主体102、防护装置104和资源106。然而,应该说明,访问控制模型100可包括多个主体102、多个防护装置和104和/或多个资源106。
主体102涉及请求访问保护数据的一个组件或模块。该请求可以是用于检索被保护数据的一个请求(例如,用于检索一个密钥的一个请求),或使用所述保护数据来执行操作的一个请求(例如,所述保护数据可以是一个密钥,所述请求可以是通过使用所述密钥进行加密或解密的请求)。所述主体102能以硬件、软件、韧件的形式或硬件、软件和/或韧件的组合形式来被实现。
防护装置104涉及一个组件或模块,该组件或模块控制访问所述保护数据。防护装置104使用与所述保护数据相关的访问策略以及其它信息(例如对请求访问所述保护数据的主体的识别)确定是否允许所述主体访问所述保护数据。如果防护装置104确定所述请求主体被允许访问所述保护数据,则防护装置104以一种合适的方式响应所述请求(例如,如果所述请求是对所述保护数据一个请求,则所述保护数据被返回给所述主体;或者,如果所述请求是一个与将使用所述保护数据进行加密的特定数据相关的请求,则防护装置104使用所述保护数据来加密所述特定数据,并且返回所述密文(所述加密数据)到所述主体)。应该注意的是防护装置104基于所述请求的性质来约束主体。例如,防护装置104可以允许一个特定的主体具有使用所述保护数据签名的特定数据,但是不允许所述保护数据被返回给所述特殊主体。
防护装置104也可被表现为一个解密防护装置和/或一个服务防护装置。服务防护装置在没有公开所述保护数据的情况下依据所述主体请求,利用所述保护数据(例如,一个密钥)执行某个操作(例如,加密、解密、数字签名等)。另一方面,一个解密防护装置将所述保护数据披露给被授权的请求者。应该注意的是,一个特殊防护装置104可以同时是一个解密防护装置和一个服务防护装置。
资源106可以是访问被约束的任何数据类型。例如,资源106的例子包括密钥、银行账户、信用***、诸如社会保险号之类的个人信息、密码等等。资源106实质上可以是一个计算设备以外的别的东西。例如,资源106可以是物理存储器(例如,RAM或ROM),光盘或磁盘或磁盘机、视频卡、声卡、智能卡等等。又譬如,资源106也可以是操作***的抽象,例如,进程、文件、线程、信号等等。
在这里的论述中,将说明关于在一个单独的计算设备上执行的访问控制模型100。然而很明显所述,模型的不同部分可以在不同的计算设备上执行。例如,主体102可以在一个计算设备上,而防护装置104和资源106可以在其它的计算设备上。
在一个计算设备上的主体和防护装置可被分类为任意数目n的多个层次In。图2表示一个使用四个不同层的访问控制环境。在一个实施例中,层I1涉及一个硬件或保密核心层,层I2涉及一个基本输入/述出***(BIOS)层,层I3涉及一个操作***(OS)层,层I4涉及一个应用层。
在图2所示的范例环境中,最低层(层I1)保护根资源。在担任下一个更高层中主体的防护装置的同时,中间层(层I2和I3)中的程序担任从下一个更低层中请求访问的主体。所述中间层便可以为更高层中的主体增加功能。
例如,假设一个程序120期望检索被防护装置126所保护的根资源128。程序120担任一个请求从模块122访问所述根资源128的主体,即担任所述资源的一个防护装置。如果模块122具有所述资源128的一个副本(例如,响应与所述资源相关的在前请求并利用程序120或层I4中的某个其他程序从防护装置126中在前得到的或者当模块122被初始化或载入所述计算设备中时),模块122则检查程序120是否被允许检索所述资源。如果程序120被允许检索所述资源,则模块122返回所述资源到程序120。
但是,如果模块122没有所述资源128的副本,则模块122担任请求从模块124访问所述根资源的一个主体,模块124担任所述资源的一个防护装置。如果模块124具有所述资源128的一个副本(例如,由模块122或者在层I3中的某个其他模块响应与所述资源相关的在前请求从防护装置126中在前获得的或者当模块124被初始化或载入所述计算设备时),则模块124检查模块122是否被允许检索所述资源。如果模块122被允许检索所述资源,则模块124返回所述资源到模块122。
然而,如果模块124没有所述资源128的一个副本,则模块124担任请求从防护装置126访问所述根资源的一个主体。防护装置126检查模块124是否被允许检索所述资源,并且,如果模块124被允许检索所述资源,则返回所述资源到模块124。如果模块122被允许检索所述资源,则模块124返回所述资源到模块122,并且,如果程序120被允许检索所述资源,则模块122返回所述资源到程序120。
在这里的论述中,为图1的访问控制模型100的使用列出了多个参考,以允许验证软件操作。通常,在软件的验证操作中被保护的所述资源是密钥。然而很明显,软件验证操作仅仅是使用访问控制模型100的例子之一。
另一个使用访问控制模型100的例子是对计算机用户的验证。大多述当代计算机居有一个访问控制***。一个用户登录到计算机,以便该计算机知道用户是谁。登录之后,用户运行通常访问***资源(例如,读取文件、写到屏幕上的窗口等)所需要的程序。通常,所述计算机的所述访问控制***被商议(例如,“用户X能在资源Z上执行操作Y吗?”)。如果答案是否定的,所述程序便不能访问所述资源。
另一个使用访问控制模型100的例子是对远程服务用户的验证。诸如网络站点(例如,在线经纪人或银行)之类的远程服务可被认为具有访问控制***。所述资源是人民银行账户、他们的钱和股票。一个用户登录到所述网络站点之后,所述访问控制***将确定所述用户是否被授权执行其请求的访问,例如,对“银行账户数据”资源的访问(以检索最新的银行状态),或者对资源“银行账户12345中的1000美元”的一个“传输”访问。
另一个使用访问控制模型100的例子是对特殊建筑或区域的物理访问的约束。例如,当一个用户早上到达岗位时,该用户出示他/她的证件并请求对资源“前门”的“打开”操作。某个电子***(一个防护装置)根据证件上所存储的信息确定所述用户是否被允许进入该建筑并相应的对该门进行解锁。
如果可能让计算机程序(从一个解密防护装置或服务防护装置)获得对至少一个加密资源的保护访问,则一台计算设备使能一个程序(软件)的验证操作。如下文所述,在某些实施例中,使能验证和隔离的计算设备使能验证操作。
如果这两点都能够被满足,那么,程序C被称之为正在与另一个程序D相互隔离:(1)具有能被程序C访问而不能被程序D访问的存储器,(2)程序D不能运行程序C(除了由程序C确定的一个可能的入口点)。一个程序由它的转换规则(可执行代码)和它的初始状态(入口点或指令指示器IP初始值)所提供。由于数据能存储在不能被程序D所访问的存储器中,所以,即使有程序D的相悖行为的存在,所述第一点也能够保证程序C的程序代码和状态信息的完整。这一点还允许程序C能够保护来自由程序D的观察中的机密数据(例如,密钥)。所述第二点保证D不能通过选择相悖的入口点来破坏C的行为。
另外,如果程序C使能识别转换规则(程序代码)和程序D的初始状态,则可以说程序C能验证程序D。计算设备能从任何其它程序D隔离出程序任何程序C,一个例外是,每层j<i的单个程序Ej,其中i是程序C的层。这可保护多个程序免受任一程序的观察和干扰,除了防护装置的序列E1,E2,......,Ei-1之外,程序C通过该防护装置而请求访问其资源。并且,对任何层i而言,所述计算设备能使一个程序在层i中执行以验证至少在层i+1中的一些程序。该请求允许一个程序担任与来自所述下层中主题的请求相关的防护装置。这两个观察导致了一个归纳式论证,即任何层中的程序可通过向它的前任请求访问一个资源、并通过隔离来保护其完整和他们的资源以及验证来自下一个层中的主体的请求而担任资源的防护装置。
隔离可通过使用物理存储器保护来实现。这种途径被称之为“空间中的隔离”和“空间隔离”。例如,许多现代微处理器中的环和虚拟存储器保护足以实现空间中的隔离。以特权方式运行的一个操作***核心(层i)可为应用程序(层i+1)建立页表,从而,任何应用程序只能访问物理存储器的某些部分,该部分是所述操作***核心选定映入的所述应用程序虚拟地址空间。并且,所述核心约束应用程序的特权以使它们不能改变存储器映象,并保证应用程序仅在明确规定的入口点(***调用)来启动核心代码的执行。
另一种在两层之间实现隔离的途径是及时分离它们的执行。该方法涉及“及时分离”和“时间分离”。第一层i中的一个程序被完全执行,并使不能获得某些资源,然后便终止。随后,控制被转到下一个层i+1中。
验证发生在随后的多个层(j=i+1)之间。程序C验证程序(转换规则)和j的配置的初始状态。所述程序能通过使程序C检查层j中的程序来得以验证。即,典型程序C读取包含层j的程序的存储器,并在这个存储器的范围来计算一个机密摘要。应该注意的是,该点的目的仅在于确定所述代码的身份,而不是评估有关所述代码的其它主体的陈述。因此,在这一点上,证件并不是必要的。
程序C的第二个任务是识别程序D的初始状态。一般而言,在任意一个执行阶段来确定一个程序的初始状态时非常困难的。因此,程序C控制程序D的初始状态。实际上,这意味着如果程序C以δ状态启动程序D的执行,那么,程序C仅能确定程序D的初始状态δ。
总之,为了验证程序D,程序C检查其认为相关的存储器内容并计算一个机密摘要。之后,程序C传输执行到一个明确的程序D的入口点。
在所述资源是加密密钥的情况下,验证操作允许每一个操作***和应用程序排它地访问一个或多个机密。上述隔离保护每一个机密免受敌对代码的攻击。上述程序的验证允许程序被识别,从而每个机密只能够被披露给拥有它的所述程序。
通常,由于从程序(图1的一个主体102)给出一个请求,防护装置104设立所述程序的身份(即,防护装置104授权所述程序)。如果所述程序不是请求保密的所有者(资源106),则防护装置104拒绝该请求。否则,防护装置104计算所述机密的某个函数(其自身可以是所述机密),并且可能的话,还进一步计算由所述程序所提供的信息并返回所述结果。或者说,不是明确接收或拒绝请求,防护装置104可为所述请求服务,但将所述调用者的身份汇编到所述结果中。这种交替的方法是合适的,例如,如果被所述防护装置返回的所述结果不包括保密信息(例如,使用一个机密产生数字签名的请求)。项选通函数这里被用于查阅这两种情况。
另外,在各种情况下,防护装置104验证所述调用者(主体102)。对主体102的验证也涉及这里的一个函数ID(),该函数id()返回所述调用程序(该程序调用防护装置104的一个选通函数)的一个摘要。所述摘要可以由任何一种惯用方式生成,例如使用任何一个或多个加密哈希函数(也称为单向哈希函数),例如SHA1(保密哈希运算法则1),MD5(信息摘要5),MD2(信息摘要2),等等;使用键控MAC(消息验证码)等等。
这里所说明的一类选通函数实现封闭存储。封闭存储的目的在于允许程序存储机密,以使仅仅一组特殊的一个或多个程序(由存储机密的程序所规定)能检索所述机密。在一个实例中,仅有最初保存(封闭)所述机密的计算机能恢复(开启)所述机密。通常,这些机密的使用期限将超出所述程序的单独执行期限。在程序执行一次期间所使用的机密能被保存(封闭)或者隔离,一个随机数发生器也允许所述程序在一次执行期间保持所述机密。封闭存储也允许一个程序在整个执行期间自始至终都保持机密,这些执行不能即时重叠。借助以下接口(例如,使用“封闭”和“开启”操作和/或公开密钥封闭和公开密钥开启操作),层Ii将封闭存储暴露给下一层Ii+1。
关于封闭存储的论述涉及被用于加密和解密的密钥。这些密钥是与正在对资源进行防护的防护装置(例如,图1的防护装置104)相关的密钥。
这里的论述也涉及程序标识符(例如,调用一个操作的程序的一个标识符,或被允许访问一个资源的一个目标程序的一个标识符)。这些标识符在这里经常被称之为摘要。然而很明显,摘要仅仅是程序标识符的一个例子。可使用标识符的其它类型,该标识符是程序的一个度量或其它表现,并允许对程序的任何改动都被检测。如果程序被有所改动(例如,为恶意访问或利用保护数据的对手所改动的一个或多个指令),则所述程序的所述标识符将反映出该变动(例如,未发生变动的程序的标识符将不同于发生变动的程序的标识符)。
所述封闭操作接收将被封闭的数据(例如,一个机密)输入。所述封闭操作也可任选地接收作为输入的用于识别何时和/或向何者披露机密的条件。在一个实施例中,该条件是一个目标程序的一个摘要,该程序被允许检索(开启)所述数据。另外,被允许检索(开启)所述数据的程序能以其它方式被识别。例如,所述程序可被一个公开密钥识别,从而使得每个证明与一个或多个程序相关。
另外,除了或代替所述目标程序的标识符还可以使用其他条件。例如,所述条件可包括与所述数据可被披露(开启)的时间相关的特殊的时间约束,例如在所述机密可被披露(开启)期间的一周的一天或多天的特殊时间。又譬如,为了使所述机密被披露(开启),所述条件可包括必须被提供的一个口令或其它数据的标识符,例如,所述机密只能被知道口令的程序所开启。
又譬如,所述条件可以是一个逻辑公式(例如,写在第一阶逻辑中的任何陈述,写在谓词逻辑中的任何陈述等等)。所述逻辑公式被评估(例如,通过防护装置)并且只有当所述评估返回真的指示时,所述机密才被披露(开启)。
又譬如,所述条件可以是某种语言的可执行程序(例如,java,C*,Javascript,VBScript等等)。程序被执行(例如,通过防护装置),只有当所述程序返回某个为“真”或“满足”的指示时,所述机密才被披露(开启)。
在所述条件是所述目标程序的摘要的情况下,所述封闭操作可使用调用所述封闭操作的所述程序的摘要,(借此隐含地输入所述目标程序的摘要),来代替提供所述目标程序的摘要。另外,多目标程序的摘要可被输入到所述封闭操作,借此允许多目标程序披露(开启)所述数据。
所述封闭操作将所述调用者的标识符与输入(所述数据和允许披露(开启)所述数据的条件)一起进行加密。所述封闭操作以一个加密的形式(作为密文)返回所述输入数据。所述封闭操作也返回一个值(例如,一个消息验证码(MAC)值),该值可用于验证所述封闭数据的完整性。所返回的数据允许所存储的数据在随后的开启操作中被引用,在下文中将进一步论述
用于所述开启操作的伪码在表I中进行说明。在表I的伪码中,ID()涉及上文论述的ID()函数,e涉及被返回给所述调用程序的值(例如,一个字符串或位序列),数据涉及被封闭的数据,并且[t1......,tm]涉及一个或多个目标程序的摘要,该目标程序允许披露(开启)所述数据(或者说,一个或多个其它条件)。
表I
D=ID()E=store(data,[t1......,tm],d)Return e |
图3是说明用于实现所述封闭操作的一个范例处理200的流程图。处理200被图1中的防护装置104所执行,并且能以硬件、软件、韧件或其结合的形式来实现。
最初,从所述调用程序接收一个需要被封闭的机密(步骤202)。所述机密被加密以使所述机密只能被一个特殊的目标程序所检索(步骤202),或者,如果一个或多个特定条件被满足的话,所述机密只能被检索。包括加密机密的密文则被返回给所述调用程序(步骤206)。附加信息也可被返回给所述调用程序(作为所述密文的一部分或从所述密文分离),例如所述调用程序和/或所述目标程序的一个摘要。
所述开启操作接收作为输入的一个位串,该位串是在封闭所述调用程序现在希望检索的数据时由所述封闭操作返回的。所述开启操作获得用于披露所述数据的条件,并检查这些条件是否被满足。例如,如果条件包括被允许检索(开启)所述数据的一个或多个目标程序的摘要,则所述开启操作获得这些摘要并检查所述调用程序是否是一个或多个目标程序之一。如果所述调用程序不是一个或多个调用程序之一,则所述开启操作失败且所请求的数据不被返回给所述调用程序。然而,如果所述调用程序是一个或多个目标程序之一,则所述开启操作成功且所述被请求的数据被返回给所述调用程序。封闭所述数据的程序的摘要也被所述开启操作任意返回。
用于开启操作的伪码在表II中进行说明。在表II的伪码中,数据涉及正被请求的数据(并且先前已被封闭),[t1......,tm]涉及被允许检索(开启)所述数据的一个或多个目标程序的摘要(即一个或多个其它条件),e涉及对所述开启操作的输入(通过一个封闭操作的先前的典型输出),并且d涉及封闭所述数据的程序的摘要。
表II
(data,[t1......,tm],d)=retrieve(e)if ID()is in[t1......,tm]then return(data,d)else fail |
图4时说明用于实现所述开启操作的一个范例处理220的流程图。处理220由图1的防护装置104所执行,也可通过硬件、软件、韧件或其结合来实现。
最初,所述调用者所期望检索的、带有加密数据的密文被检索(步骤222)。作出一个关于是否允许所述调用程序检索所述数据的检查(步骤224),并进行基于是否允许所述调用程序检索所述数据的处理(步骤226)。如果所述调用程序被允许检索所述数据,则所述数据(已解密)被返回给所述调用程序(步骤228)。如果所述调用程序不被允许检索所述数据,则所述处理失败(步骤230)且所述数据不被返回给所述调用程序。
封闭存储可通过不同的方式实现。在一个实施例中,通过使用物理保护的非易失性存储器来实现封闭存储。在本实施例中,所述计算设备与具有被保护的非易失存储器的不同部分的防护装置相联,并允许每一个防护装置只能访问与所述防护装置相关的部分。在本实施例中,调用闭和开启操作中涉及的存储和检索操作以使所述计算设备能够分别存储和检索在与所述防护装置相关的被保护非易失性存储器中的数据。
例如,一个存储设备(例如一个硬盘驱动器)可实现一个防护装置。不是简单的对所述存储设备无条件地执行读写命令,所述存储设备识别企图访问该存储设备的主体(例如,基于所述主体的一个摘要),并仅仅允许一个特殊的主体访问所述存储设备。另外,不同的主体可被约束为只能访问所述存储设备的特殊部分(例如,特殊的扇区或地址范围)。
在另一个实施例中,通过使用密码术实现封闭存储。下面将描述通过使用密码术来进行封闭存储的一个典型实施例。
当使用密码术来实现封闭存储时,所述资源是一个密钥K而不是被物理保护的存储器。所述存储操作不是物理地存储其输入。相反的,所述存储操作产生一个密码保护的输出c,该输出c是一个以加密和整体保护形式出现的存储操作的输入。所述加密是将一个对称密码施加到所述输入上的结果。后一特性是通过(在所述输入被加密之前或之后)将一个消息验证码(MAC)施加到所述输入上获得的。
在表III中说明用于存储操作的伪码。在表III的伪码中,b涉及被输入到存储操作中的位串,c涉及被所述存储操作输出的位串。K1涉及密钥K的第一部分,K2涉及密钥K的第二部分。所述密钥K是实现封闭和存储操作的防护装置的对称密钥。
表III
M=MACk1(b)C=(m,Encryptk2(b))Return c |
因此,从表III中可以看到,通过将一个MAC应用于输入到所述存储操作中的位串而生成一个值(m)。所述MAC被用于密钥K的一个部分(K1)。输入到所述存储操作中的位串也通过使用密钥K的一个第二部分(k2)而被加密。通过将所述MAC施加到所述输入位串并加密所述输入位串而生成的值被返回给所述存储操作的调用程序。
所述密钥K被划分成两个独立的密钥K1和K2,以避免对MAC和密码使用相同的密钥。该划分能以多种方式中的任何一种方式执行。该划分可使用密钥K的不同的位或使用一个或多个相同的位。例如,假设密钥K是1024位,则低512位可用作密钥K1,高512位可用作密钥K2,偶数编号位(位0,2,4,6,8,10,......1022)可用作密钥K1,奇数编号位(位1,3,5,7,9,11,......,1023)可用作密钥K2,低650位可用作密钥K1,高650位可用作密钥K2(导致某些位可被用于K1和K2)等等。另外,同一密钥K可被用于MAC和密码。
表III中说明的伪码通过计算所述数据的MAC、加密数据以及输出所述MAC和所述密文来实现所述存储操作。另外,所述存储操作可以不同的方式实现。例如,所述存储操作可首先加密所述数据,然后计算所述密文的一个MAC,并输出所述密文和所述MAC。又譬如,所述存储操作可计算所述数据的MAC,然后加密所述数据和所述MAC,并输出所述密文。
通过存储操作的密文来执行的加密可通过使用不同的对称加密算法来实现。通常,对称加密算法使用同一密钥进行加密和解密。例如,包括三重DES(数据加密标准)、AES(高级加密标准)等的算法。
类似的,所述MAC可以是任意的消息验证码,例如,预先在密码学——密码机’96,即1996年的《计算机科学》讲稿No.1109中,M.Bellare,R.Canetti和H.Krawczyk的“用于信息验证的使用密钥的哈希函数”中所描述的MAC。另外,通过替代一个MAC的一个公开密钥数字签名来对整体进行保护。
图5是用于实现所述存储操作的一个范例性处理250的流程图。通过图1中的防护装置104来执行处理250,并能以硬件、软件、韧件或其结合的形式来实现。
最初,接收将被存储的数据(步骤252)。一个对称加密算法被应用于所述数据(步骤254)且一个消息验证码(MAC)被应用于所述数据(步骤256)。在步骤254中生成的加密数据和在步骤256中生成的MAC值被返回给所述调用程序(步骤258)。
所述检索操作接收包括一个MAC值和密文的的输入位串。所述密文被解密以生成明文,并生成所述密文的一个MAC值。如果所述明文的MAC值与作为输入位串的一部分而被接收的MAC值相同,则所述明文被返回给所述调用程序。但是,如果所述明文的MAC值与作为输入位串的一部分而被接收的MAC值不同,则所述检索操作失败且所述明文不被返回给所述调用程序。很明显,为从所述输入位串获得所述MAC和所述密文而进行的检索操作的特殊方式取决于实现所述存储操作的方式。
在表IV中说明用于检索操作的伪码。在表IV的伪码中,c涉及被输入到所述检索操作中的位串,b涉及被输出到所述检索操作中的位串,m涉及被输入到所述检索操作中的位串的部分MAC值,d涉及被输入到所述检索操作中的位串的部分密文,K1涉及所述密钥K的第一部分,K2涉及所述密钥K的第二部分。同上文中结合所述存储操作相关的论述一样,K1和K2是所述密钥K的同一部分。
表IV
Let(m,d)=cB=Decryptk2(d)If m=MACk1(b)then return bElse fail |
因此,从表IV中可以看到,通过解密输入给所述检索操作的位串来生成一个值(b)。如果所述检索操作生成的MAC值与作为输入给所述检索操作中的一部分的位串而被接收的MAC值相同,则所述值(b)被返回给所述检索操作的调用程序,否则所述检索操作失败。
表IV中的所述伪码基于所述存储操作的实现,在该存储操作中计算所述数据的MAC并加密所述数据,所述MAC和密文一起被输出(和作为到所述检索操作的输入位串)。如果所述存储操作首先加密所述数据,则计算所述密文的一个MAC并输出所述密文和MAC,然后,所述检索操作将计算所述密文的MAC并和以部分输入位串的形式所接收的MAC相比较,如果所述MAC值相匹配,则解密所述密文并返回所述解密数据。如果所述存储操作被用于计算所述数据的一个MAC,则加密所述数据和MAC,然后所述检索操作将解密所述输入位串,然后计算所述输入位串中的数据的一个MAC并将该MAC和所述解密字符串中的一个MAC相比较,如果所述MAC值相匹配,则返回所述数据。
类似于上文中所述存储操作的相关论述,所述检索操作能使用任意的解密算法。然而,所述解密算法应与所述加密算法相应,以使所述加密数据能被解密。类似的,任意的消息验证码能被用作所述MAC,但是所用的消息验证码应与所述存储操作使用的消息验证码相同。
图6是用于实现所述封闭操作的一个范例处理270的流程图。图1中的一个防护装置104执行处理270,且能以硬件、软件、韧件或其结合的形式来实现。
最初,接收一个密文和MAC值(步骤272)。所述密文被解密以生成明文数据(步骤274)。一个消息验证码(MAC)被应用于所述明文数据以生成一个MAC值,并检查步骤276中生成的MAC值是否等于步骤272中所接收的MAC值(步骤278)。根据所生成的MAC值是否等于所接收的MAC值来进行处理(步骤280)。如果所生成的MAC值等于所接收的MAC值,则所述明文数据被返回给所述调用程序(步骤282)。然而,如果所生成的MAC值不等于所接收的MAC值,则处理失败且所述明文数据不被返回所述调用程序。
因此,用于封闭操作的加密方法充分保证了值c(所述存储操作的输出)的任何讹误都能被检测,并且,若没有对密钥K2(用于加密值b的密码所使用的密钥)的访问,值b(所述存储操作的输入)不能被检索。
另一类选通功能实现远程验证。远程验证的目的是,即使在没有到验证装置强物理耦合(例如,使用服务器或智能卡)的情况下也能验证程序。在这种情况下,验证是基于密码的。即,两个实体形成一个加密验证协议。这包括能访问一个机密的验证配置,该配置通常是基于所述协议的一个专用密钥或一个对称密钥。另外,所述计算设备能将这些验证机密的使用和要求该使用的配置(例如,处理器和/或软件)的等同性连接起来。因此,所述验证装置能建立所述计算设备以及在其上执行的所述软件的的等同性。
引用操作和公开密钥开启操作分别是用于公开密钥签名和公开密钥解密的选通功能。实现这些选通功能的防护装置访问签名密钥Ks和解秘密钥Kd。所述签名密钥Ks和解秘密钥Kd也被称之为公开/专用密钥对的专用密钥。该公开/专用密钥对是实现所述引用和公开密钥开启操作的防护装置的一对密钥。
所述引用操作通过所述引用操作的输入和一个条件的一个结合(例如,级连)来返回一个公开密钥签名,该条件识别何时和/或所述机密可被披露给何者。与上文中论述的所述封闭和开启操作类似,所述机密的披露受限于多个条件的任意一个条件。在一个实施例中,该条件是所述调用程序的一个标识符(例如是所述调用程序的摘要)。
在所述签名内部具有表示所述操作是在被识别调用程序的请求的基础上执行的一个证明。所述引用操作与一个验证操作协力工作,该验证操作通常是在用于执行引用操作的设备以外的设备(例如在远程服务器或智能卡上等等)上执行。所述验证操作执行一个公开密钥签名验证,并检索和评估所述调用程序(和/或其它用于披露所述机密的条件)的标识符。
在表V中说明用于引用操作的伪码。在表V的伪码中,ID()涉及上述的ID()函数,a涉及被输入到所述引用操作中的数据,Ks涉及一个签名密钥。
表V
D=ID()Return sn=Signatureks(d,a) |
因此,从表V中可以看出,所述引用操作获得所述调用程序的一个摘要并接收一个输入值a。所述引用操作使用签名密钥Ks生成输入值a和所述调用程序的摘要的数字签名(sn)。输入值a可由所述调用程序生成,或者可以是从另一个组件或设备(例如,将被执行验证操作的设备)所接收的一个值。使用公开密钥加密来生成所述数字签名。
图7是说明用于实现所述引用操作的一个范例处理300的流程图。图1中的防护装置执行处理300,且能以硬件、软件、韧件或其结合的形式来实现。
最初,从一个调用程序(步骤302)接收输入数据。获得该调用程序的一个标识符(一个/或多个用于检索所述输入数据的其它条件)(步骤304)且生成一个数字签名(步骤306),该数字签名基于所述输入数据和所述调用程序的标识符(和/或一个或多个其它条件)的结合。
所述验证操作执行一个公开密钥签名验证并检索和评估所述调用程序的标识符。所述验证操作通常从除执行验证操作的设备以外的设备(例如,远程服务设备、智能卡等)中接收由一个调用程序生成的一个数字签名。所述验证操作提取所述程序的摘要(例如,一个应用程序、操作***、固件程序等)并评估该摘要以决定如何执行,上述程序从所接收的数字签名中调用所述引用操作。
在表VI中说明用于所述验证操作的伪码6。在表VI的伪码中,d涉及调用所述引用操作的程序的摘要,a涉及被输入到所述引用操作中的值,Sn涉及所述验证操作所接收的作为一个输入的数字签名。
表VI
(d,a)=ExtractKv(Sn)Evaluate(d) |
因此,从表VI可以看出,所述验证操作接收一个数字签名,并使用验证密钥Kv(该密钥是包括所述签名密钥Ks的公开/专用密钥对的公开密钥)从所述签名中提取所述摘要d和值a。所述验证操作能评估调用所述引用操作的程序的摘要d。评估摘要d的方式可以改变。例如,所述评估可包括将摘要d与被“核准的”或“信任的”应用程序的列表相比较。
图8是用于实现所述验证操作的一个范例处理320的流程图。图1中的防护装置104执行处理320,并能以硬件、软件、韧件或其结合的形式来实现。
最初,接收一个数字签名(步骤322)。引用一个输入值(使用所述引用操作)的调用程序(和/或一个或多个用于检索所述输入值的其它条件)的标记符和所述输入值本身从所述数字签名中被提取(步骤324)。评估所述调用程序的标识符(和/或一个或多个被提取的其它条件)以确定如何继续进行所述输入值(步骤326)。
所述公开密钥开启操作是在所述调用者(例如所述调用程序的摘要)的一致性的基础上逻辑选通的一个公开密钥加密版本或一个或多个其它条件。 被输入到所述公开密钥开启操作中的输入c的公开密钥解密结果被解释为一个对(d,s),其中,s是一个机密,d识别一个可向其披露s的配置(例如,一个调用程序的摘要)。如果公开密钥开启的调用者不是d,则所述公开密钥开启操作失败。一个第二公开密钥封闭操作生成对所述公开密钥开启操作的输入c,其能在除执行所述公开密钥开启操作的设备以外的设备(例如,远程服务设备、纸能卡等)上执行。所述公开密钥封闭操作执行对r(d,s)的公开密要加密。所述公开密钥开启操作和公开密钥封闭操作也可被用于实现封闭存储。
在表VII中说明用于所述公开密钥开启操作的伪码。在表VII的伪码中,ID()函数涉及上述的ID()函数,c涉及对所述公开密钥开启操作的输入,[d1,......,dm]涉及一个或多个调用程序的摘要,s可被披露给该程序(或者说一个或多个其它程序),s涉及所述保护数据,Kd涉及一个解秘密钥(与一个防护装置相关的一个公开/专用密钥对中的一个专用密钥,而该防护装置正执行所述公开密钥开启操作)。
表VII
([d1,......,dm],)=DecryptKd(c)if ID()is in[d1,......,dm]then return selse fail |
因此,从表VII中可以看出,所述公开密钥开启操作使用公开密钥解密和所述解密密钥Kd来解密所述输入值a。所述解密输入值包括一个或多个被允许向其披露所述保护数据s的调用程序的摘要[d1,......,dm](或一个或多个可识别保护数据s何时被披露和/或披露给何者的其它条件)。所述公开密钥开启操作也生成所述调用程序的一个摘要。如果所述调用程序的摘要与摘要[d1,......,dm]之一相等,则所述保护数据被返回给所述调用程序。但是,如果所述调用程序的摘要与摘要[d1,......,dm]中的任何一个都不相等,则所述保护数据不被返回给所述调用程序。
图9是用于说明实现所述公开密钥开启操作的处理340的流程图。图1中的防护装置104执行处理340,且能以硬件、软件、韧件或其一个结合的形式来实现。
最初,带有所述调用者所期望检索的加密数据的密文被检索(步骤342)。检查是否允许所述调用者检索所述数据(步骤344),并根据所述调用者是否被允许检索所述数据来进行处理(步骤346)。如果所述调用者被允许检索所述数据,则所述数据(已通过公开密钥被解密)被返回给所述调用者(步骤348)。如果所述调用者被允许检索所述数据,则所述处理失败(步骤350)且所述数据不被返回给所述调用者。
所述公开密钥封闭操作是一个在所述调用者(例如,所述调用程序的摘要,或一个或多个其它程序)一致性的基础上通过逻辑选通获得的公开密钥加密方案。所述公开密钥封闭操作执行一个函数对(d,s)的一个公开密钥加密,其中s是一个机密且d识别可以向其披露所述s的一个或多个配置(例如,一个调用程序的摘要)。
在表VIII中说明用于所述公开密钥封闭操作的伪码。在表VIII的伪码中,c涉及所述公开密钥封闭操作的输出,[d1,......,dm]涉及一个或多个调用程序的摘要,s能被披露给该调用程序,s涉及所述保护数据,Ke涉及一个加密密钥。
表VIII
C=EncryptKe([d1,......,dm],s)Return c |
因此,从表VIII中可以看出,所述公开密钥封闭操作接收作为输入的所述保护数据s和可以向其披露所述保护数据s的一个或多个程序的摘要[d1,...,dm]。所述函数对[d1,......,dm]、即s被使用基于所述加密密钥Ke的公开密钥密码加密s。所述加密密钥Ke是试图能够解密所述密文的所述防护装置的公开密钥。来自所述公开密钥加密的密文被返回给所述调用程序
图10是说明用于实现所述公开密钥封闭操作的一个范例处理360的一个流程图。处理360由图1中的一个防护装置104所执行,且能以硬件、软件、韧件或其一个结合的形式来实现。
最初,从一个调用者接收将被封闭的一个机密(步骤362)。使用公开密钥加密或者如果一个或多个其它条件被满足,则加密所述机密,从而使所述机密只能被一个特定的目标程序所检索(步骤364)。包括所述加密机密的密文被返回给所述调用者(步骤366)。附加信息也可被返回给所述调用者(作为所述密文的一部分或与所述密文分离的一部分),例如所述调用者的一个摘要和/或所述目标程序的摘要。
所述引用和公开密钥开启操作试图被用于连接公开密钥验证协议。大多数公开密钥验证协议可通过替换调用公开密钥解密、公开密钥加密、签名和签名验证中的任何一个而被直接修改,其中的公开密钥解密、公开密钥加密、签名和签名验证分别通过对公开密钥开启、公开密钥封闭、引用及验证的调用而实现。
在某些情况下,获得一个随机数是很重要的(例如,作为生成密钥的基础)。随机数能通过多种不同的方式而获得。在一个实施例中,随机数的来源是一个以计算设备硬件形式实现的密码随机数发生器。
作为上述封闭操作的一个选择是将所述封闭操作和一个随机数生成操作相结合的通用封闭操作。所述通用封闭操作接收作为输入的所述目标程序的摘要[t1,......,tm],该目标程序能检索所述机密(和/或必须被满足从而使得所述机密能够被检索的其它条件)。所述通用封闭操作生成一个随机数并封闭新生成的随机数,以使它只能由具有目标摘要[t1,......,tm]中一个摘要的调用程序(和/或被满足的其它条件)来检索。
在表IX中说明用于所述通用操作的伪码。在表IX的位码中,ID()涉及上述ID()函数,c涉及所述通用操作的输出,s涉及所述新生成的随机数,[t1,......,tm]涉及被允许检索值s的一个或多个目标程序(其是可调用所述通用操作的任意程序之一),或者说一个或多个其它条件,函数GenRandom()涉及生成一个随机数的一个函数。
表IX
D=ID()S=GenRandom()C=store(s,[t1,......,tm],d)Return c |
图11是说明用于实现所述通用封闭操作的一个范例处理380的一个流程图。处理380由图1中的防护装置104所执行,且能以硬件、软件、韧件或其一个结合的形式来实现。
首先,从用于识别能够检索一个机密的目标程序或将被满足以使得所述机密能够被检索的一个或多个条件的调用者处接收输入(步骤382)。然后生成所述机密(步骤384),所述机密被加密以使所述机密只能被识别的目标程序所检索(步骤386),或者只有当一个或多个条件被满足时,所述机密才能够被检索。然后,包括所述加密机密的密文被返回给所述调用者(作为所述密文的一部分或从所述密文所分离出的一部分),例如是所述调用者的一个摘要和/或所述目标程序的摘要。
由一个解密防护装置所提供的服务可被用于通用封闭服务。例如,参阅图1和图2,初始化中,层n-1基于层n的一致性而披露一个单密钥给层n(例如,在所述计算设备的复位和启动以后,或在一个程序开始执行之前)。层n存储该密钥并使用它加密附加机密。在所述平台被导入相同配置的下一时刻,所述解密防护装置提供相同的根密钥(例如,通过开启或公开密钥开启),且先前被加密的所有机密能被层n所检索。
在某个实施例中,当下一层被初始化时,一个较低层向所述下一层披露一个或多个机密(例如,在所述计算设备的复位和启动以后,或在一个程序开始执行之前)。在该选通披露之后,所述较低层不再被使用(直到下一个启动或复位)。该使用模型被称为解密防护模型。通过使用该解密防护模型,对所述较低层的访问被减少。
使用时间隔离和空间隔离,这里所述的选通功能可与服务防护装置和解密防护装置一起使用。实现验证操作的四种服务模型如下所述:(1)服务防护装置——空间隔离;(2)解密防护装置——空间隔离;(3)解密防护装置——时间隔离;(4)服务防护装置——时间隔离。这里所述的服务模型中,假设一个较低级防护装置已经向位于正在被考虑层处的所述防护装置披露了一个或多个密钥。获得这些密钥的方式依赖于所述防护装置和其下的层的隔离模型。在同一台计算设备中的不同的层可使用任何不同的服务模型。
(1)服务防护装置——空间隔离:初始化时,所述防护装置测量并保存请求程序的一致性。所述防护装置使用处理器服务和一个展现所述验证操作基本操作的***调用接口来实现一个保护***(例如,一个处理器或其它安全处理器或公用处理器)。
(2)解密防护装置——空间隔离:所述防护装置在初始化时获得加密码形式的服务请求。该点可被存储在存储器中,或者说从外存储器获得。所述防护装置测量初始化程序的一致性,并根据上述的控制函数将密钥披露给程序。在放弃对下一层的控制之前,所述防护装置为自身和其机密资源设立模式保护。
(3)解密防护装置——时间隔离:所述防护装置在初始化时获得密码点形式的服务请求(位组)。该点可被存储在存储器中,或者说可从外存储器获得。所述防护装置测量初始化程序的一致性,并根据上述的选通功能将密钥披露给程序。在传递对这些程序的控制之前,所述防护装置删除(反之使其不可接入)被用于实现所述选通功能的密钥。
(4)服务防护装置——时间隔离:在所述服务防护装置——时间隔离模型中,所述计算设备通过安全复位来安全地保持程序状态。该模型与模型(1)(服务防护装置——空间隔离)类似,然而,在将控制传递到下一层之前,所述服务防护装置删除其机密(使其丧失功能直到下一次重新启动)。下一层将正常执行,直到其需要请求来自所述防护装置的一个服务。在这一点上,其将所述请求的参数存储到存储器中的某个位置,该位置能使存储内容免于一个复位或执行一个复位。当所述设备被重新启动时,所述服务防护装置获得其机密,看见并(使用其密钥)执行所述请求,使所述密钥和任何相关信息失效,并将计算和控制的结果传送给下一层(最初请求服务的层)。
在某些实施例中,如果一台计算设备支持空间隔离,则所述安全核心将披露所述基本(操作)封闭、开启、获得随机数(用于获得一个随机数)和公开密钥开启(或引用)。所述安全核心可实现一个解密防护装置或一个服务装置。另一方面,如果所述平台支持时间隔离,则所述安全核心将提供一个解密防护装置,并实现所述基本(操作)开启、通用封闭和公开密钥开启(或引用)。
值得注意的是,可基于封闭和开启或者开启和通用封闭基本操作建立引用和公开密钥开启的功能。例如,厂商可依据在I1中实现的通用封闭和开启制造一个实现引用或公开密钥开启的I2程序并充当用于高级软件(例如,操作***)的一个主机。所述厂商能生成并封闭所述服务层所需要的密钥并将其和所述设备或CPU一起装船(或使其在线可用)。
以下是对一系列硬件实施的一个典型说明,该实施将能使平台支持验证操作。同所述***中的更高层一样,最低层图2中的I1)的特征是:(a)机密密钥资源,(b)有权访问这些密钥的特权码,和(c)所述层的受控初始化。
验证操作提供程序和机密密钥之间的强约束。在较高层中,较低层中的防护装置保证该约束。在最低层中,没有能够选通访问所述平台机密的潜在软件防护装置。因此,另一种引擎被用于支持所述I1密钥与所述I1程序的关联。完成该约束的一种途径是使I1软件成为不随制造而变化的平台微码或韧件并使得所述I1软件无约束地访问所述I1密钥。该平台微码或韧件可被称为安全核心,且所述I1密钥称为平台密钥。所述平台被设计成只能将控制传送到预定的安全核心。所述硬件的性能也能被解释为向所述预定安全核心披露所述平台密钥的简单资源防护装置。
所述平台密钥和安全核心韧件可以是所述处理器的一部分,也可以利用所述计算设备的一个或多个组件来实现(例如,一个安全处理其或共用处理器,其也可执行加密操作)。所述平台密钥和安全核心韧件可在一个单独的组件中被实现,也可以在所述计算设备的多个组件中被实现。
利用验证操作,程序在一个可控初始状态中被启动。在较高层中,在较低层中运行的程序可在正确的入口点开始执行。在I1处,由硬件来执行该函数。通常,在电源上升或随后复位的情况下,电流处理器按某种确定的顺序开始执行。例如,一个最简单的情况下,所述处理器启动来自一个规定存储器单元的取数和执行码。对于I1,程序可在一个可控初始状态中被硬件所启动,该硬件确保所述安全核心是在启动时执行的代码(作为确定序列的一部分)。
另外,没有其它平台状态能破坏所述安全核心的执行。复位和电源上升为所述处理器提供一个坚固的经过良好调试的清零状态。如同在本例中的使用,被用于启动或调用所述安全核心的所述平台状态的改变被称为一个安全复位。
此外,一个设备制造商将安排平台密钥的生成和安装,该密钥被用于实现I1的封闭和开启。如果所述设备被识别为一个PKI(公开密钥基础结构)的一部分,所述制造商也将保证用于所述平台的一个公开密钥。这可以直接是被I1所使用的一个平台密钥,或是一个较高层使用的一个密钥。
密钥的生成和认证是所述CPU制造商或诸如将所述CPU组装为一个设备的OEM的某些其他部门的职责,另外,所述职责应有多个当事人分担
一旦执行所述安全核心,则可使用上述的隔离引擎来避免其本身在较高层处代码的执行。空间中的隔离通常包括特权方式支持,时间中的隔离通常包括被隐藏在高层中的机密。
在最新的处理器上不需要附加平台支持来支持空间隔离——现有的特权方式或特权级是足够的(只要允许访问所述平台密钥的硬件资源能被保护于较高层)。
为支持时间隔离,硬件辅助允许所述安全核心在将控制传递给较高层之前隐蔽所述平台密钥。在所述时间隔离模型中提供平台密钥安全的一个途径是使用被称为复位锁存器的状态防护电路。复位锁存器是一个具有开启随后复位或电源上升特性的硬件电路,但是任何软件在任何时候都能关闭所述锁存器。一旦被关闭,所述锁存器便保持关闭状态直到下一个复位或电源上升。实现一个时间隔离安全核心的平台将控制一个复位锁存器状态下的平台密钥访问,且所述安全核心将在将控制传递给较高层之前关闭所述锁存器。如上所述,所述安全核心也将采取额外的行动,例如在传递控制之前清除存储器和寄存器,但是这些行动和在较高级中的使用相同。
如果所述平台使用空间隔离,则所述安全核心使用特权方式以避免其自身和其平台密钥受到它所接待的程序(例如操作***)的侵害。而且,所述安全核心为所述验证操作的调用而设立一个***调用接口。
如果所述平台使用空间隔离,则所述平台也将包括一个能够完好保存安全复位以便将参数传送给服务程序的存储器。为调用一个服务,操作***在所述安全核心已知的一个存储单元中准备一个命令和参数块,并执行一个安全复位。如果所述操作***希望继续执行后续的服务调用(与一个简单的重新启动相对),则该操作***和所述安全核心将进行附加的测量,以保证其被可靠和安全地执行。
这里所述的验证操作可被用于多种设置的安全性,例如保护个人数据免受病毒、保护秘密的服务数据免受网络攻击、网络管理、复制保护、可信赖的分布式计算等等。所述验证操作允许不同的程序,这些程序可在同一计算机上执行而不需一个特殊的信赖关系,以保护它们的与其它软件无关的加密资源。
以下的一些论述涉及一个SSP(安全服务处理器)。在一个实施例中,一个SSP是一个处理器(用于一台计算设备中),该处理器提供基础的机密服务给一台计算设备(例如,所述SSP支持这里所述的选通功能(例如,图2中的层I1))。所述SSP可使用密钥,具有一个或多个所述SSP才有的(或被认为才有的)密钥。所述SSP可以是所述设备的CPU的一部分,或者是一个或多个其它处理器。例如,所述SSP可以是一台计算设备中的一个分离芯片或集成电路(IC)。
在一个不同实施例中,,一个SSP是一个被适当隔离的软件程序,该程序同前面的实施例一样将相同的功能披露给它的调用者。所述SSP的实施例可(直接或间接地)访问加密密钥。为提供这种访问,有许多实施选项存在。例如,所述SSP可调用在较低层中的服务或解密防护装置。或者所述SSP可排它的访问包括所请求的密钥的永久存储器(例如,硬盘、闪存、ROM等等)的某部分。
总之,在一个较高层中,一个SSP由被暴露于主体的功能所定义。一个SSP是一个可访问密钥的防护装置(如上所述)。所述SSP使用这些密钥来提供加密服务给其调用者。以下的部分将描述SSP所体现的典型功能
实例操作
以下是对封闭存储操作和远程验证操作的实施例的论述。该部分说明上述封闭、开启、应用和公开密钥开启操作的实施例。
下列定义在本部分中使用:
名字 |
类型 |
说明 |
摘要 |
字节[20] |
160位值。通常是一个SHA-1哈希函数操作的输出。 |
机密 |
字节[32] |
256位值。通常是一个被封闭或被公开密钥封闭的机密。 |
序数 |
整数 |
每一个输入和输出结构的序数组件识别所述操作的归属并确定其是否是一个输入或输出结构 |
KM |
256位密钥 |
用于HMAC操作的密钥 |
KS |
256位密钥 |
用于封闭和开启的AES密钥 |
KU |
2048位*3 |
用于公开密钥开启的RSA密钥对 |
KQ |
2048位*3 |
用于引用的RSA密钥对 |
R |
128位 |
随机数 |
另外,该部分涉及存取策略涉而后面的部分涉及约束密钥操作。所述访问策略描述什么时候所述特定操作是功能性的(即,它们将在什么时候工作)。一台计算设备的用户可选择性地切断某个函数。例如,所述计算设备(例如,一个实现所述封闭操作的SSP)包括一个被称为FeatureEnable的寄存器。所述寄存器中的一个位被称为MainEnable。如果所述用户设置MainEnable为假,则在这些部分中没有函数再会工作。每个函数包括的存取策略描述描述了在什么样的FeatureEnable设置下所述函数才工作。
封闭
定义
SSP_STATUS Seal(
[in]SECRET S,
[in]DIGEST Targe[2],
[in]UNIT32 MaxLen,
[out]UNIT32*ActualLen,
[out]BYTE*SealedBlob
)
参数
Seal-Input::= SEQUENCE{
Ordinal INTEGER,
Secret Secret,
Target DigestPair}
Seal-Output::= SEQUENCE{
Ordinal INTEGER,
Status INTEGER,
Sealed-bolb OCTET STRING}
返回值
SSP_SUCCESS
注释
如果下列评估为真,则所述封闭操作形成只能被相应开启操作解密的一个加密点(一组位):
●编码正确吗?
●MAC正确吗?
●在所述封闭操作期间,名为目标的当前SK/SL(安全核心或安全装入城序)正在运行吗?
开启增加了内部随机性以使同一输入上的封闭操作的输出导致不同的结果。这确保开启不能被作为一个硬件设备标识符使用。开启也包括一个程序的标识符,当执行所述封闭以提供完整的信息给所述开启装置时,该程序调用所述封闭操作(例如,保存在所述SSP的PCR寄存器中的调用程序的摘要,在这里也被称为PCR值)。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsesymmKey==All|
FeatureEnable.UseSymmKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSummKey)
作用
所述封闭操作实现下列功能:
1.生成一个128位随机数R
2.使D()成为所述PCR[0]的当前值,D1=PCR[1]
3.摘要M=HMAC[KM](R||S||target||D0||D1)
4.C=AES[KS](R||S||Target||D0||D1||M)
5.返回带有SealedBlob的SSP_SUCCESS给C
开启
定义
SSP_STATUS Unseal(
[in]BYTE*SealedBlob,
[in]UINT32 SealedBlobLen
[out]SECRET S,
[out]DIGEST Source
)
参数
Unseal-Input::= SEQUENCE{
Ordinal INTEGER,
Sealed-blob OCTET STRING}
Unseal-Output::= SEQUENCE{
Ordinal INTEGER,
Status INTEGER,
Secret Secret,
Source Digest}
返回值
SSP_SUCCESS
SSP_UNSEAL_ERROR
注释
所述开启操作内部解密一个由所述封闭操作生成的点并检查下列条件
●编码正确吗?
●在所述封闭操作期间,是名为目标的所述PCR的当前值吗?
如果所有检查都成功,则所述机密和所述封闭装置的PCR被返回;否则返回一个UNSEAL_ERROR。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsesymmKey==All|
FeatureEnable.UseSymmKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSummKey)
作用
所述开启操作执行下列功能:
1.M=AES-1[KS](SealedBlob)
2.将M解释为(BIT[128]R||SECRET S1||DIGEST
Target()||DIGEST Target1||DIGEST Sealer()||DIGEST Sealer1||
DIGEST N).
3.DIGEST D=HMAC[KM](R||S1||Target()||Target1||
Sealer()||Sealer1).
4.If (Target()!=PCR[0]||Target1!=PCR[1])return
SSP_UNSEAL_ERROR with S,Source set to zero.
5.If D!=N return SSP_UNSEAL_ERROR with S,Source set tozero.
6.Else return SSP_SUCCESS with S set to S1 and Souce set to
{Sealer(),Sealer1}.
引用
定义
SSP_STATUS Quote(
[in]BITSTRING d-ext,
[out]PKSingnature SigBlob
)
参数
Quote-Input::={
Ordinal INTEGER,
d-ext DIGEST}
Quote-output::={
Ordinal INTEGER,
Status INTEGER,
Sig-blob PKSignature}
返回值
SSP_SUCCESS
SSP_CRYPTO_ERROR
注释
所述引用操作指示所述SSP对由外部提供的D-EXT和内部PCR值的连接进行签名。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSummKey)
作用
所述引用操作执行下列功能:
1.所述SSP构成由消息类型QuoteMessage的标识符、D-EXT和所述PCR寄存器的内容的拼接组成的一个信息M,在DER(特殊的编码规则)编码情况下:
SEQUENCE{
Message-type PKMessage Type,
d-ext Digest
pcr DigestPair
}
2.所述SSP使用KQ、PRIV并根据如在PKCS#V02.1中规定的RSASSA-PSS-SIGND的默认值经过M生成签名的消息。如果所述函数返回一个出错信息,则返回带有被设为零的SigBlob的SSP_CRYPTO_ERROR。
3.所述SSP返回SSP_SUCCESS和所述签名值,该签名值是刚刚和位于SigBlob中的签名算rSASSA-PSS-Default-Identifier一起计算的。
公开密钥开启
定义
SSP_STATUS_PK_Unseal(
[in]PKCiphertext SealedBlob,
[out]SECRET Secret,
)
参数
PKUnseal-Input::={
Ordinal INTEGER,
Pk-sealed-blob PKCiphertext}
PKUnseal-output::={
Ordinal INTEGER,
Status INTEGER,
Secret Secret}
返回值
SSP_SUCCESS
SSP_CRYPTO_ERROR
SSP_BAD_DATA_ERROR
注释
所述公开密钥开启操作采用一个416位长度的、特殊格式的加密点。该点被解密,且如果所述解密和解码成功,则所述416位信息被解释为一个加密值和所述PCR值的拼接,该拼接被允许接收所述解密值。
如果当前PCR值与在所述机密点中所规定的值相等,则披露所述机密;否则返回一个出错信息。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSummKey)
作用
所述引用操作实现下列功能:
1.所述SSP检测pk-seales-blob中的所述算法标识符是否为ssp V1BoundKey。
2.所述SSP根据在PKCS中规定的RSAES-OAEP-DECRYPT的默认值内部解密SealedBlob,获得一个明文消息M。
3.如果所述解码操作的输出是“解码错误”,则返回带有被置零的机密的SSP_BAD_DATA_ERROR。
4.否则,所恢复的信息M将具有根据DER编码的如下形式:
SEQUENCE{
Message-type PKMessage Type,
secret Secret
target Digest}
并且,机密由256位(=32八位字节)组成,且目标由160位(=20八位字节)组成。所述消息类型是sspV1PKSealedMessage。如果这些条件的任何一个没被满足,则返回带有被置零的机密的SP_BAD_DATA_ERROR。
1.如果target!=PCR返回带有被置零的机密的SP_BAD_DATA_ERROR。
2.如果target==PCR返回带有被置零的机密的SP_SUCCESS。
约束密钥操作
另外,一组约束密钥函数或操作允许局部设置和鉴定加密密钥(例如,利用SSP),且也允许密钥从所信任的远程部分进行通信(例如,传播到所述SSP)。
约束密钥的功能如下表示:
1.在某个***层处的一个服务防护装置(例如,SSP)直接访问一个约束密钥。每一个约束密钥具有一个相关条件,该条件确定哪一个(些)防护装置可以访问所述约束密钥。该条件被隐含地解释。即,所述约束密钥被加密,以使仅仅一组或多组防护装置利用所述密钥去解密它。
2.对所述约束密钥进行访问的服务防护装置将请求使用所述约束密钥(例如,签名、MAC、加密、解密)的函数披露给在较高层中的主体。每个约束密钥可具有一个相关使用条件,在这种情况下,所述防护装置将仅仅服务于满足相关条件的请求。
3.约束密钥被包含在被加密保护的数据结构中(也涉及这里的约束密钥点)。约束密钥点自行保护并能被存储在外部的可信环境中。
约束密钥具有下列优点:
●每一个主体可被允许拥有自己的约束密钥。并且,每一个主体可被允许拥有任意多个约束密钥。对于更精良的防护策略来讲,这允许在某些应用中设置和改善秘密。因此,防护装置不必局限于拥有被用于服务来自全部主体的请求的仅仅一个或几个密钥。
●所述约束密钥不向除经授权的防护装置以外的装置披露。因此,一个主体的损害(例如,由于一个程序错误)将不会导致任何约束密钥的损害。在一个实施例中,所述服务防护装置(SSP)以硬件的形式实现。如果这样的话,约束密钥不会由于恶意的或不争取的软件而被损害。
所述约束密钥函数提供对加密密钥的保护。约束密钥可被远程部分所生成,或它们可通过GenBoundKey命令而被局部设置。
被局部生成的约束密钥可发送一个“引用”证明,该证明可被用于给远程部分提供所述公开密钥类型的证明、生成密钥类型的证明、生成期间机器状态的证明以及约束所述密钥的条件(可选)(例如,摘要)的证明
约束密钥包括一个或多个下列要素:
●所述密钥的用途(例如,约束签名、约束引用、约束公开密钥开启、约束公开密钥解密、约束MAC、约束加密或约束解密)。该要素是可选的。如果被包括,该要素将所述约束密钥限定为只能和被识别的函数类型一起被使用。
●一个条件要素(如上所述),它规定在哪种条件下所述约束密钥才可以被使用(也被称为约束密钥使用条件)。例如,可以用一个或多个程序摘要的形式表达所述条件。在这种情况下,所述约束密钥必须只能被指定摘要的程序或其代表所使用。条件的另一例子包括如上所述的时间约束、逻辑式和可执行程序。该要素是可选的。如果该要素被忽略,某个默认条件便启用。例如,所述默认条件不可限制对所述约束密钥的访问(空条件)。
●允许计算所述密钥的加密密钥(所述约束密钥)或一些数据。
●(如上所述的)一个或多个条件,在该条件下,可以改变所述约束密钥的使用条件。该改变也被称为约束密钥迁移,且该条件是一个迁移条件。该要素是可选的。如果该要素被忽略,某个默认条件便启用。例如,所述默认条件可“一直为假”,以至于所述摘要(如果存在)不能被更改
●一个或多个条件,在该条件下,可直接访问所述约束密钥的一组服务防护装置可被更改。该更改也被称为约束密钥输出,且该条件是一个个输出条件。该要素是可选的。
约束密钥的加密保护
如上述的(封闭、开启、公开密钥开启)封闭存储和证明函数,约束密钥具有相同的加密要求。特别是,局部生成的约束密钥可被上述的存储和检索函数的任一加密执行所保护。在所有情况下,所述约束密钥自身的机密性和整个数据结构的完整性得以保护,以确保控制所述约束密钥的使用的的不同条件未曾被破坏。如上所述,这可通过对称密码或带有MACs或数字签名的公开密钥加密算法的不同结合而实现。在一个实施例中,所述约束密钥数据结构被公开密钥加密。
函数
在某个实施例中,约束密钥可被用于一个或多个下列函数:
●BoundSign(约束签名)
●BoundQuote(约束引用)
●BoundPKDecrypt(约束公开密钥解密)
●BoundPKUnseal(约束公开密钥开启)
●BoundMAC(约束消息验证码)
●BoundEncrypt(约束加密)
●BoundDecrypt(约束解密)
●GenBoundKey(通用约束密钥)
●BoundKeyMigrate(约束密钥迁移)
●BoundKeyExport(约束密钥输出)
在每一个上述函数中,所述约束密钥点(所述数据结构中的一组位)和被包括在所述约束密钥点中的密钥所操作的所述数据以参数的形式被提供给约束密钥函数。如果该密钥的使用单元被包括在所述约束密钥点中,则所述SSP确保所述约束密钥被用于正确的目的(例如,类型“BoundQuoteKey”所设置的一个密钥只能被用于一个BoundQuote操作中)。
在一些执行中,所述约束密钥是一个公开/专用密钥对的一个专用密钥。在这些执行中,所述约束密钥点可包括所述专用密钥,或者说允许计算所述密钥的一些数据。例如,一个专用密钥段可被包括在所述约束密钥点中,该密钥段与相应的公开密钥相结合,可被用于重构所述公开/专用密钥对的专用密钥。
所述BoundSign操作接收一个将被使用所述约束密钥签名的数据输入。所述SSP根据所述约束密钥点恢复所述专用签名密钥,然后使用所述恢复签名密钥而生成基于所述数据输入的一个数字签名信息。然后所述SSP输出所述数字签名信息。如果所述约束密钥点被破坏或任何所述约束密钥使用条件不令人满意,则所述SSP不执行所述操作。在没有被所述SSP所检索的专用密钥的情况下,使用所述恢复专用密钥对所述数据输入进行数字签名。
所述BoundQuote操作接收作为输入的一个将被签名的数据和一个约束密钥点。所述SSP从所述约束密钥点恢复所述专用密钥并使用所述恢复签名密钥来生成基于如上述引用操作所述的对所述操作的数据输入和当前PCR值(例如,一个标识符、诸如调用所述BoundQuote操作的程序的一个摘要)的一个签名。然后所述SSP输出所述数字签名信息。如果所述约束密钥被破坏或所述约束密钥使用条件没有被满足,则所述SSP不执行所述操作。在一个实施中,所述BoundQuote操作类似于所述BoundSign操作,但是其不同之处在于,当前PCR值在所述BoundQuote操作中被使用。
所述BoundDecrypt操作接收作为输入的一个密文和一个约束密钥点。所述SSP根据述约束密钥点恢复所述专用密钥,然后使用所述恢复专用密钥去解密所述输入密文。然后所述解密密文被所述BoundPKDecrypt操作所输出。如果所述约束密钥被破坏或任何所述约束密钥使用条件不令人满意,则所述SSP不执行所述操作。
所述BoundPKUnseal操作接收一个输入密文和一个约束密钥点。所述SSP从所述约束密钥点恢复所述专用密钥,并如同在上述的所述公开密钥开启操作中一样,使用该专用密钥去解密所述输入密文。然后,所述BoundPKUnseal操作输出所述解密数据。如果所述约束密钥点被破坏或所述约束密钥使用条件没有被满足,则所述SSP不执行该操作。
所述BoundMAC操作接收一个使用所述约束密钥计算其MAC的数据输入。 接收一个约束密钥点。如果所述约束密钥点被破坏或所述约束密钥使用条件没有被满足,则所述SSP不执行所述操作。否则,所述SSP根据所述约束密钥点恢复所述约束密钥,并通过使用被恢复的约束密钥的数据输入来生成一个消息验证码(MAC)。然后,所述SSP输出计算后的MAC。因此,在没有被所述SSP披露的约束密钥的情况下,可使用恢复约束密钥来计算一个用于数据输入的MAC。
所述BoundEncrypt操作接收一个数据输入,其可使用所述约束密钥来加密,且也接收一个约束密钥点。如果所述约束密钥点被破坏或所述约束密钥使用条件没有被满足,则所述SSP不执行所述操作。否则,所述SSP根据所述约束密钥点恢复所述约束密钥,并使用所述恢复约束密钥来加密所述数据输入。所述SSP输出计算后的密文。因此,在没有被所述SSP所披露的约束密钥的情况下,可使用恢复约束密钥来解密所述数据输入。
所述BoundDecrypt操作接收一个数据输入,其可使用所述约束密钥来被解密,并接收一个约束密钥点。如果所述约束密钥点被破坏或所述约束密钥使用条件没有被满足,则所述SSP不执行所述操作。否则,所述SSP根据所述约束密钥点恢复所述约束密钥,然后恢复约束密钥来解密所述数据输入。然后所述SSP输出计算后的明文。因此,在没有被所述SSP所披露的约束密钥的情况下,可使用恢复约束密钥来解密所述数据输入。
所述GenBoundKey操作使所述SSP设置一个新的约束密钥。该新的约束密钥是一个密码密钥,且生成包括新生成的密钥的一个新的约束密钥点。很明显,所述约束密钥点不必一直包括整个密钥。例如,如果新生成的密钥是一个公开/专用密钥对,则在所述约束密钥点中包括所述专用密钥就足够了。
所述新的约束密钥点必须是一个或多个防护装置——通常是执行所述操作的SSP(例如,类似于上述的存储函数,加密保护所述新的约束密钥点,或者反之保密所述新的约束密钥点以使其只能被所述SSP所检索)。所述GenBoundKey操作也可拥有确定所述新约束密钥点各个方面的参数,且描述这些参数的数据一整体保护的形式附着到所述新生成的专用密钥(例如,生成数据,作为所述新的约束密钥点的一部分)上。如上所述,作为这种数据的一个例子包括所述迁移条件和所述约束密钥使用条件等等。然后所述新的约束密钥点被所述GenBoundKey操作所输出。
通常,一个约束密钥可以使任何类型的密码密钥,包括一个对称密钥或一个公开——专用密钥对。精确密钥类型依赖使用该密钥类型的约束密钥操作。例如,在BoundMAC中使用的一个约束密钥将作为一个对成密钥,反之,在BoundSign中使用的一个约束密钥将作为一个公开/专用签名密钥对。所述密钥类型可被规定为GenBoundKey的一个参数。
所述BoundKeyMigrate操作允许一个约束密钥的使用条件被更改。所述SSP验证一个或多个迁移条件是否被更改。多个条件中的任何一个可和所述BoundKeyMigrate操作一起被使用(例如,类似于上述的关于所述封闭和开启操作的任何条件,该条件可识别何时和/或何种数据可被迁移)。如果没有成功地执行该验证,则所述防护装置设置一个新的约束密钥点,其中的约束密钥使用条件可根据请求而被改变。
所述BoundKeyExport操作指示所述SSP去更改一组能直接访问所述约束密钥的防护装置(SSP)。所述SSP验证一个或多个条件是否被满足。多个条件中的任何一个可与所述BoundKeyExport操作一起被使用(例如,类似于上述的关于所述封闭和开启操作的任何条件,该条件可识别何时和/或何种数据可被迁移)。如果未成功地作出该验证,所述操作失败。如果成功地进行了该验证,则所述SSP依照请求更改对所述约束密钥点的加密保护。在一个实施例中,所述SSP使用一个或多个新的密钥来加密所述约束密钥。
所述约束密钥的生成器(局部的或远程地)可规定条件的一类例子是所述约束密钥只能被代表其程序摘要具有一个特殊的值的一个主体而被使用。在这种情况下,在所述约束密钥点的内部检索之后,所述约束密钥操作检查请求主体的摘要,且如果所述摘要与在所述约束密钥点中规定的不同,则失效和不执行附加计算。
借助于请求所述特定SSP的唯一密钥以便继续的加密操作,所述约束密钥点通常被连接或束缚到一个特定的SSP上。例如,这种操作可以是MAC、数字签名、加密、组合加密和完整性验证函数。
约束密钥操作实例
在一个实施例中,通过一个局部迁移证明或一个由授权机构所发布的输出证明来授权一个迁移。该局部迁移证明是基于下列数据结构的RSASSA-PSS-SIGN的一个默认:
Bound-migration-info::=SEQUENCE{
Source-bound-blob-digest Digest,
Dest-PCR DigestPair
}
使用所述BoundKeyMigrate操作来请求局部SSP迁移。为了授权局部迁移,所述SSP被提供一个Bound-migration-info结构,该结构涉及该约束密钥和对由所述授权机构所提供的结构的一个适当形成的证明。如果所述迁移证明是可接受的,所述SSP利用剩余未变化的所有其它属性重新约束与新PCR相关的密钥(例如,如果最初没有限定所述密药为一个PCR值,当重新限定时便不再如此)。所述source-bound-blob-digest是由所述约束密钥的外部加密形式的摘要。
经过具有例如由所述授权机构签名的Bound-export-info结构的所述BoundeyExport函数实现所述远程迁移:
Bound-export-info::=SEQUENCE{
Source-bound-blob-digest Digest
Dest-pubkey RSAPublicKey
Dest-PCR DigestPair
}
当一个密钥被标记得可以输出时,所述授权机构完全处于其密钥受到重新约束的所述设备或软件的控制下。
所述约束密钥操作使用一个PKCiphertext,它是使用下述平台公开加密密钥被加密的一个类型Bound-Key-blob序列:
Bound-key-blob::= SEQUENCE{
Message-type PKMessageType,
Key-type Bound-key-type,
Bound-to-PCR BOOL,
Bound-to DigestPair,
Migrateable Bool,
Migrate-auth Digest,
Exportable Bool,
Export-auth Digest,
Pub-key-digest Digest,
Bound-key PKCmpressedPrivateKey}
其中:
Bound-key-type::= INTEGER{
BoundSignKey,
BoundQuoteKey
BoundDecryptKey,
BoundPKUnsealKey}
所述bound-to-PCR成分是一个标记,该标记指出所述bound-to摘要字段是否与当前PCR值相匹配以便使用所述约束密钥。{migrateable,migrate-auth}指出所述密钥是否是可迁移的,如果是,则受某种权限的控制(如果不可迁移,则所述migrate-auth值便不重要)。{exportable,export-auth}指出所述值是否是可输出的,如果是,则受某种权限的控制(如果不可输出,则所述export-auth值便不重要)。Pub-key-digest是相应的公开密钥的摘要,以在所述PKCompressedPrivateKey和所述公开密钥之间提供一个恢复所述专用密钥所需的强结合。
在一个例子中,如果通过所述GenBoundKey函数来局部创建一个约束密钥,则所述SSP针对在约束密钥输出期间祥述刚刚产生的所述密钥公开特性的数据结构和所述***结构创建一个签名。
Bound-key-pub-info::= SEQUENCE{
Message-type PKMessageType,
//sspV1 BoundKeyGenMessage
sig-nonce Digest,
key-type Bound-key-type,
bound-to-PCR BOOL,
bound-to DigestPair,
migrateable Bool,
migrate-auth Digest,
exportable Bool,
export-auth Digest,
creator-PCR DigestPair
bound-pub-key Digest}
在这个数据结构中,key-type,bound-to-PCR,bound-to,migrateable,migrate-auth,exportable和export-auth都是新生成密钥的约束密钥的特征。Creator-PCR是在输出所述密钥时的有效的PCR,bound-pub-key是新生成的公开密钥的摘要。Signonce是在请求公开密钥生成时所传递的所述digest-sized值。
所述BoundSign,BoundQuote,BoundPKDecrypt,BoundPKUnseal,GenBoundKey,BoundKeyMigrate和BoundKeyExport操作的典型定义如下:
BoundSign
定义
SSP_STATUS_BoundSign(
[in]PKCiphertext BoundKeyBlob,
[in]RSAPublicKey PubPartOfBoundKey,
[in]BITSTRING DataToBeSigned
[out]PKSignature sig-blob
)
参数
BoundSign-Input::={
Ordinal INTERGER,
Bound-key BoundKeyBlob,
Bound-pub-key RSAPublicKey,
Data-to-be-signed OCTET STRING}
BoundSign-output::={
Ordinal INTEGER,
Status INTEGER,
Sig-blob PKSignature}
返回值
SSP_SUCCESS
SSP_CRYPTO_ERROR
SSP_BAD_DATA_ERROR
SSP_UNSEAL_ERROR
注释
所述BoundSign操作采取类型sspV1 BoundKey的明文,该明文包括类型BoundSignKey的一个BoundKeyBlob和相应的公开密钥。如果这些条件中的任何一个未被满足,或所述序列未成功解码,则所述操作失败,返回SSP_CRYPTO_ERROR。
如果Bound-to-PCR被设定,则所述SSP检查当前PCR值是否与在所述Bound-key-blob序列中的规定相同。如果不是,则所述SSP返回SSP_CRYPTO_ERROR。
最后,所述SSP利用所述解密专用密钥对所述输入信息签名。
存取策略
Allowed=FeatureEnable.MainEnable&
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSummKey)
作用
所述BoundSign操作执行下列功能:
1.所述SSP检测pk-seales-blob中的所述算法标识符是否为ssp V1BoundKey。
2.述SSP根据在PKCS#1 V2.1中规定的RSAES-OAEP-DECRYPT的默认值内部解密SealedBlob,获得一个明文消息M。
3.如果所述解码操作的输出是“解码错误”,则返回带有被置零的机密的SSP_CRYPTO_ERROR。
4.否则,恢复的信息M将是带有类型BoundSignKey的Bound-key-blob形式的一个DER编码。如果不是,则所述SSP将发出SSP_CRYPTO_ERROR。
5.如果bound-to-PCR为真,则所述bound-to将和当前PCR值相比较。如果所述值不相同,则所述SSP将输出SSP_CRYPTO_ERROR。
6.然后所述SSP使用被提供的相关公开密钥来恢复所述约束专用密钥。如果失败,则所述SSP返回SSP_CRYPTO_ERROR。如果成功,则所述SSP依照PKCS#1 V2.1中所规定的RSASSA-PSS-SIGN的默认执行、使用所述恢复专用密钥bound-key来生成基于所述输入信息DataToSigned的一个签名信息。
7.返回SSP-SUCCESS
BoundQuote
定义
SSP_STATUS BoundQuote(
[in]PKCiphertext BoundKeyBlob,
[in]DIGEST DataToBeSigned
[out]PKSignature sig-blob
)
参数
BoundQuote-Input::={
Ordinal INTERGER,
Bound-key BoundKeyBlob,
Bound-pub-key RSAPublicKey,
Data-to-be-quoted Digest}
BoundQuote-output::={
Ordinal INTEGER,
Status INTEGER,
Sig-blob PKSignature}
返回值
SSP_SUCCESS
SSP_CRYPTO_ERROR
SSP_BAD_DATA_ERROR
SSP_UNSEAL_ERROR
注释
所述BoundQuote操作采取类型sspV1BoundKey的公开明文,该明文包括类型BoundQuoteKey的一个BoundKeyBlob。如果这些条件中的任何一个未被满足,或所述序列未成功解码,则产生SSP_CRYPTO_ERROR,操作失败。
如果Bound-to-PCR被设定,则所述SSP检查当前PCR值是否与在所述Bound-key-blob序列中规定的相同。如果不是,则所述SSP返回SSP_CRYPTO_ERROR。
最后,所述SSP引用具有所述解密专用密钥的输入消息。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述BoundQuote操作执行下列功能:
1.所述SSP检测pk-seales-blob中的所述算法标识符是否为ssp V1BoundKey。
2.所述SSP根据在PKCS#1 V2.1中规定的RSAES-OAEP-DECRYPT的默认值内部解密SealedBlob,获得一个明文消息M。
3.如果所述解码操作的输出是“解码错误”,则返回带有被置零的机密的SSP_CRYPTO_ERROR。
4.否则,恢复的信息M将是Bound-key-blob形式的一个DER编码,带有类型BoundSignKey。如果不是,则所述SSP将发出SSP_CRYPTO_ERROR。
5.如果bound-to-PCR为真,则所述bound-to将和当前PCR值相比较。如果所述值不相同,则所述SSP将输出SSP_CRYPTO_ERROR。
6.然后,所述SSP使用恢复专用密钥段和公开密钥以重构所述专用密钥。所述专用密钥可按如下方式被重构。通常,RSA密钥由数N=p*q(N是两个素数p和q的产物)和两个指数e(加密指数)和d(解密指数)组成。N和e形成所述公开密钥;d为所述专用密钥。通常,d和N的长度相同(例如,2048位)。如果N的因式分解是已知的(即,如果p和q是已知的),则所述专用密钥d可被轻易确定。注意,p和q只有N的一半。所以,我们存储p而不是d作为所述专用密钥。然后,由于给出了公开密钥N、e和p,所以可以计算值q=N/p,然后,值d确定地给出p和q。
然后依照上面定义的所述引用操作中的说明,所述专用密钥被用于针对所述输入信息DataToBeSigned和所述当前PCR产生签名消息。如果所述函数返回一个出错信息,则返回带有被置零的SigBlob的SSP_CRYPTO_ERROR。
7.返回SSP-SUCCESS
BoundPKDecrypt
定义
SSP_STATUS BoundPKDecrypt(
[in]PKCiphertext BoundKeyBlob,
[in]RSAPublicKey BoundPubKey,
[in]PKCiphertext DataToBeDcerypted
[out]Secret decrypted Data
)
参数
BoundSign-Input::={
Ordinal INTERGER,
Bound-key BoundKeyBlob,
Bound-pub-key RSAPublicKey,
Pk-sealed-blob PKCiphertext}
BoundPKDecrypt-output::={
Ordinal INTEGER,
Status INTEGER,
d-blob Secret}
返回值
SSP_SUCCESS
SSP_UNSEAL_ERROR
SSP_CRYPTO_ERROR
SSP_BAD_DATA_ERROR
注释
所述BoundSignPKDecrypt操作采取类型sspV1BoundKey的公开密钥明文,该明文包括类型BoundDecryptKey的一个BoundKeyBlob。如果这些条件中的任何一个未被满足,或所述序列未成功解码,则所述操作失败,返回SSP_CRYPTO_ERROR。
如果Bound-to-PCR被设定,则所述SSP检查当前PCR值是否与在所述Bound-key-blob序列中的规定相同。如果不是,则所述SSP返回SSP_CRYPTO_ERROR。
最后,所述SSP利用来自所述bound-blob的所述解密专用密钥解密所述输入信息。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述BoundPkDecrypt操作执行下列功能:
1.所述SSP检测pk-seales-blob中的所述算法标识符是否为ssp V1BoundKey。
2.所述SSP根据在PKCS#1 V2.1中规定的RSAES-OAEP-DECRYPT的默认值内部解密SealedBlob,获得一个明文消息M。
3.如果所述解码操作的输出是“解码错误”,则返回带有被置零的机密的SSP_CRYPTO_ERROR。
4.否则,恢复的信息M将是具有类型BoundSignKey的Bound-key-blob形式的一个DER编码,。如果不是,则所述SSP将发出SSP_CRYPTO_ERROR。
5.如果bound-to-PCR为真,则所述bound-to将和当前PCR值相比较。如果所述值不相同,则所述SSP将输出SSP_CRYPTO_ERROR。
6.所述SSP使用所提供的公开密钥恢复所述专用密钥。该专用密钥在BoundQuote操作中如上述一样可被恢复。然后使用在PKCS#1 V2.1中规定的RSAES-OAEP-DECRYPT的默认值恢复专用bound-key,以解密所述pk-sealed-blob,获得一个明文消息M。
7.所述SSP设置d-blob为M。
8.返回SSP-SUCCESS
BoundPKUnseal
定义
SSP_STATUS BoundPKDecrypt(
[in]PKCiphertext BoundKeyBlob,
[in]RSAPublicKey BoundPubKey,
[in]PKCiphertext DataToBeUnsealed
[out]Secret decrypted Data
)
参数
BoundSign-Input::={
Ordinal INTERGER,
Bound-key BoundKeyBlob,
Bound-pub-key RSAPublicKey,
Pk-sealed-blob PKCiphertext}
BoundPKDecrypt-output::={
Ordinal INTEGER,
Status INTEGER,
d-blob Secret}
返回值
SSP_SUCCESS
SSP_UNSEAL_ERROR
SSP_CRYPTO_ERROR
SSP_BAD_DATA_ERROR
注释
所述BoundSignPKDecrypt操作采取类型sspV1BoundKey的公开密钥明文,该明文包括类型BoundDecryptKey的一个BoundKeyBlob。如果这些条件中的任何一个未被满足,或所述序列未成功解码,则产生SSP_CRYPTO_ERROR,所述操作失败。
如果Bound-to-PCR被设定,则所述SSP检查当前PCR值是否与在所述Bound-key-blob序列中的规定相同。如果不是,则所述SSP返回SSP_CRYPTO_ERROR。
最后,所述SSP使用PK_Unseal开启具有来自所述bound-blob的所述解密专用密钥的输入消息。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述BoundPkUnseal操作执行下列功能:
1.所述SSP检查pk-seales-blob中的所述算法标识符是否为ssp V1BoundKey。
2.所述SSP根据在PKCS#1 V2.1中规定的RSAES-OAEP-DECRYPT的默认值内部解密SealedBlob,获得一个明文消息M。
3.如果所述解码操作的输出是“解码错误”,则返回带有被置零的机密的SSP_CRYPTO_ERROR。
4.否则,恢复的信息M将是带有类型BoundSignKey的Bound-key-blob形式的一个DER编码,。如果不是,则所述SSP将发出SSP_CRYPTO_ERROR。
5.如果bound-to-PCR为真,则所述bound-to将和当前PCR值相比较。如果所述值不相同,则所述SSP将输出SSP_CRYPTO_ERROR。
6.所述SSP使用所述约束密钥点重建所述专用密钥。所述专用密钥在所述BoundQuote操作中如上述一样可被恢复。然后使用在所述PK_Unseal命令中描述的步骤并使用所述恢复专用约束密钥开启所述pk-sealed-blob。
7.如果在所述开启点中命名的PCR与当前PCR不匹配,则所述SSP返回SSP_CRYPT0_ERROR。
8.否则,所述SSP设置d-blob为M。
9.返回SSP-SUCCESS。
GenBoundKey
定义
SSP_STATUS GenBoundKey(
[in]BoundKeyType KeyType,
[in]BOOL BoundToPcr,
[in]DIGEST BoundTo[2],
[in]BOOL migrateable,
[in]DIGEST migrationAuthority,
[in]BOOL exportable,
[in]DIGEST exportAuthority,
[in]DIGEST SigNonce,
[out]BoundKey bound-key,
[out]PKPublickey newPubKey,
[out]PKSignature boundKeyQuoteBlob
)
参数
GenBoundKey-Input::={
Ordinal INTEGER,
Key-type Bound-key-type,
Bound-to-pcr BOOL,
Bound-to DigestPair,
Migrateable BOOL,
Migrate-auth Digest,
Exportable BOOL,
Export-auth Digest,
Sig-nonce Digest
}
GenBoundKey-output::={
Ordinal INTEGER,
Status INTEGER,
Bound-blob PKCiphertext,
Bound-pub RSAPublicKey,
Sig-blob PKSignature}
返回值
SSP_SUCCESS
SSP_BAD_DATA_ERROR
注释
所述GenBoundKey操作使所述SSP生成包括新生成的专用密钥的一个新的约束密钥点。所述约束密钥点被利用所述SSP自己的公开密钥加密
GenBoundKey也输出所述新生成的密钥对的公开密钥、一个指出所述SSP生成所述密钥的引用签名、其特性和当生成所述密钥时所述PCR值。
GenBoundKey的调用者也指示将被生成的约束密钥类型:它是否被用于签名、引用、BoundPKUnseal的开启,还是BoundPKDecrypt的解密。所述调用者也规定所述约束密钥是否被限定为一个PCR,如果是,所述PCR值被限定。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述GenBoundKey操作执行下列功能:
1.所述SSP产生一个新的公开专用RSA密钥对。反之当所述SSP处于空闲时,所述SSP能可选地生成密钥对,并在非易失性存储器中存储一个用于直接检索的密钥小存储区。
2.所述SSP内部生成包含新生成的专用密钥、所述约束密钥类型以及由所述调用者提供的其它参数的的一个约束密钥结构。
3.所述SSP利用所述平台公开加密密钥来加密所述约束密钥点。
4.所述SSP生成一个bound-key-pub-info的一个签名点,该签名点包含在密钥创建和提供时的先创建密钥的特性以及所述PCR的值。
5.所述SSP输出所述加密约束密钥点、新生成的公开密钥和所述引用密钥点。
6.返回SSP_SUCCESS。
BoundKeyMigrate
定义
SSP_STATUS BoundKeyMigrate(
[in]PKCiphertext BoundKeyBlob,
[in]RSAPublicKey PubPa rtOfBoundKey,
[in]BOUND_MIGRATION_INFO MifrationInfo,
[in]RSA_SIG SigOnMigrationInfo
)
参数
GenBoundKey-Input::={
Ordinal INTEGER,
Migration-info Bound-migration-info,
Migration-pubkey RSAPublicKey,
Migration-auth PKSignature
}
GenBoundKey-output::={
Ordinal INTEGER,
Status INTEGER,
Re-bound-blob PKCiphertext,
}
返回值
SSP_SUCCESS
SSP_BAD_DATA_ERROR
注释
所述BoundKeyMigrate操作指令所述SSP以一个可控方式将所述密钥重新连接到一个不同的PCR值上。最初的密钥生成器、即本地或远程密钥生成器命名迁移授权机构。只有标记为可迁移的约束密钥可被迁移,且只有当所述SSP被提供有一个合适的签名Boundmigration-info结构时这些密钥才能被迁移。适当签名的装置利用其摘要包含在所述约束密钥点中的公开密钥签名。其余的约束密钥属性不被更改。
存取策略
Allowed=FeatureEnable.MainEnable&
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述BoundKeyMigrate操作执行下列功能:
1.所述SSP在内部解密所述约束密钥结构且将其解释为一个约束密要点。如果所述解码失败,则所述SSP返回SSP_CRYPTO_ERROR。
2.所述SSP确认Bound-export-info涉及同一密钥、所述签名被适当形成以及所述签名人的公开密钥的摘要与在所述约束密钥点的“可迁移”域中的命名相同。
3.所述SSP检查所述密钥的可迁移性。如果不可迁移,则所述SSP返回SSP_CRYPO_ERROR。
4.如果所述密钥被限定为一个PCR,则所述SSP检查当前PCR是否是在所述密钥点中被命名的那个。
5.所述SSP利用在所述Bound-migration-info的目标PCR域段中命名的值代替所述PCR值。
6.所述SSP重新加密所述约束密钥点,并输出所述重新加密的结构。
7.返回SSP_SUCCESS。
BoundKeyExport
定义
SSP_STATUS BoundKeyExport(
[in]PKCiphertext BoundKeyBlob,
[in]RSAPublicKey PubPartOfBoundKey,
[in]BOUND_Export_INFO ExportInfo,
[in]RSA_SIG SigOnMigrationInfo
[out]PKCipherText ReBoundBlob
)
参数
BoundKeyExport-Input::={
Ordinal INTEGER,
Bound-key PKCipherText,
Bound-pub-key RSAPublicKey,
Export-info Bound-export-info
Export-auth PKSignature
}
GenBoundKey-output::={
Ordinal INTEGER,
Status INTEGER,
Re-bound-blob PKCiphertext,
}
返回值
SSP_SUCCESS
SSP_BAD_DATA_ERROR
注释
所述BoundKeyExport操作指示所述SSP以一个可控方式将约束密钥的一个专用部分以和所述资源设备上的约束密钥相一致的格式输出给一个远程机构。最初的密钥生成器,即本地或远程密钥生成器命名所述输出授权机构。只有被标记为可输出的约束密钥可被输出,且只有当所述SSP被提供有一个正确签名的Bound-export-info结构时,这些约束密钥才被输出。适当签名的装置利用其摘要包含在最初约束密钥点中的公开密钥签名。BoundkeyExport允许合适授权的调用者规定将被重新约束所述密钥的所述目标机构的公开密钥和PCR值。这里没有外部实体是一个SSP的特殊要求,但是所述新的约束点遵循约束密钥的约定,以允许远程SSPs直接消耗输出的约束密钥。
存取策略
Allowed=FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey==All|
FeatureEnable.UsePrivKey==AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
作用
所述BoundKeyExport操作执行下列功能:
1.述SSP内部解密所述约束密钥结构且将其解释为一个约束密要点。如果所述解码失败,则所述SSP返回SSP_CRYPTO_ERROR。
2.所述SSP确认Bound-export-info涉及同一密钥、所述签名被正确形成以及所述签名人的公开密钥的摘要与在所述约束密钥点的“输出”段中的指定一样。
3.所述SSP检查所述密钥的可输出性。如果不可输出移,则所述SSP返回SSP_CRYPO_ERROR。
4.如果所述密钥被限定为一个PCR,则所述SSP检查当前PCR是否在所述密钥点中被命名。
5.所述SSP内部生成一个包括来自最初约束密钥结构的参数的新的约束密钥点结构和在Bound-export-info中提供的新的PCR值。其它所有参数保持一致。
6.所述SSP利用在Bound-export-info中提供的公开加密密钥来加密所述新约束密钥点。
7.所述新的约束密钥被输出。
8.返回SSP_SUCCESS。
通用计算机环境
图12说明一个通用计算机环境400,其可被用于实现这里所述的技术。所述计算机环境400只是计算环境的例子之一,并不是试图建议关于所述计算机和网络结构的使用或功能的任何限定。计算机环境400不应被解释为具有涉及在典型计算机环境400中说明的任何一个组件或其结合的任何相关或要求。
计算机环境400包括计算机402形式的一台通用计算设备。计算机402可被用于例如实现图1中的主体102和防护装置104或图2中的层。计算机402的组件可包括、但不限于一个或多个处理器或处理单元404(可随意包括一个或多个安全处理器或协处理器(例如一个SSP)和/或一个或多个加密处理器或协处理器),一个***存储器406和一个连接包括处理器404在内的各***组件到***存储器406的***总线408。
***总线408表示多种总线结构类型中一种或多种,包括一个存储总线或存储控制器、一个***总线、一个加速图形端口、一个处理器或使用任一总线结构的局域总线。例如,该结构可包括一个工业标准结构(ISA)总线、一个微信道结构(MCA)总线、一个增强ISA(EISA)总线、一个视频电子标准协会(VESA)局域总线和作为中层总线的一个***组件互连(PCI)总线。
计算机402通常包多种计算机可读媒体。该媒体可以是计算机402可访问的可用媒体,且包括易失和非易失媒体、可拆卸和不可拆卸的媒体。
***存储器406包括易失存储器形式的计算机可读媒体,例如一个随机访问存储器(RAM)410,和/或非易失存储器,例如只读存储器(ROM)412。一个基本输入/输出***(BIOS)414,包括帮助在计算机402中的元件之间传输信息的基本程序,例如在启动时被存储在ROM中的基本程序。RAM410通常包括可直接访问的和/或被处理单元404即时操作的数据和/或程序模块。
计算机402也可包括其它可移动的/不可移动的、易失的/非易失的计算机存储媒体。例如,图12说明一个用于对一个不可拆卸的非易失磁介质(图中未示)进行读写的硬盘驱动器416,用于对一个可拆卸的非易失磁盘(例如,一个“软盘”)进行读写的磁盘驱动器418,用于对诸如CD-ROM、DVD-ROM或其它光学媒体的一个可拆卸非易失存储光盘424进行读取得光盘驱动器422,。硬盘驱动器416、磁盘驱动器418和光盘驱动器422都通过一个或多个数据媒体接口426而被连接到***总线408。或者说,硬盘驱动器416、磁盘驱动器418和光盘驱动器422可通过一个或多个接口(图中未示)而被连接到***总线408。
所述盘驱动器和其相关的计算机可读媒体提供计算机可读指令、数据结构、程序模块和用于计算机402的其它数据的非易失存储。虽然本例示出了硬盘416、可移动磁盘420和可移动光盘424,但是很明显,可被一台计算机访问的可存储数据的其它类型的计算机可读媒体,例如磁带或其它磁存储设备、快速存储器卡、CD-ROM、数字通用盘(DVD)或其它光学存储器、随机访问存储器(RAM)、只读存储器(ROM)、电可擦除只读存储器(EEPROM)或类似物,也可被用于实现一个典型的计算***和环境。
作为例子包括操作***426、一个或多个应用程序428、其它程序模块430和程序数据432的许多程序模块可被存储在硬盘416、磁盘420、光盘424、ROM412和/或RAM410上。这种操作***426、一个或多个应用程序428、其它程序模块430和程序数据432中的每一个(或其某种结合)都可实现全部或部分支持分布式文件***的常驻组件。
用户通过诸如键盘434和点击设备436(例如,一个“鼠标”)向计算机402输入命令和信息。其它设备438(未特别示出)可包括麦克风、操纵杆、游戏垫、圆盘式***天线、串行端口、扫描仪和/或类似物。这些和其它输入设备通过连接到***总线408的输入/输出接口440而被连接到处理单元404上,但也可通过其它接口和总线结构而被连接,例如是并行端口、游戏端口或通用串行总线(USB)。
监视器442或其它类型的显示设备也可通过例如是一个视频适配器444的接口连接到***总线408,。除监视器442以外,其它输出***设备可包括诸如扬声器(未示出)之类的组件和可通过输入/输出接口440而被连接于计算机402的一个打印机446。
计算机402可以使用逻辑连接到诸如远程计算设备448的一个或多个远程计算机运行于网络环境中。例如,远程计算设备448可以是个人计算机、便携式计算机、服务器、路由器、网络计算机、同等的设备或其它通用网络节点和类似物。远程计算设备448被表示为一台便携式计算机,该计算机可包括这里就计算机402所描述的许多或全部构件和特征。
计算机402和远程计算机448之间的逻辑连接作为一个局域网(LAN)450和广域网(WAN)452而被描述。这种网络环境在办公室中是常见的,例如,企业之间的计算机网、企业内部互联网和国际互联网。
当在一个局域网联网环境中实现时,计算机402通过一个网络接口或适配器454而被连接于一个局域网450。当在一个广域网联网环境中执行时,计算机402通常包括一个用于在广域网452上建立通信的调制解调器456或其它装置。调制解调器456,其可被内置或外置于计算机402,可通过输入/输出接口440或其它合适的引擎而被连接于***总线408。很明显,示出网络连接是一个例子,在计算机402和448之间建立通信连接的其它装置也可被使用。
在诸如利用计算环境400示出的网络环境中,与计算机402相关的所述程序模块或其中的部分可被存储在一个远程存储设备中。例如,远程应用程序458驻留在远程计算机448的一个存储设备上。为说明的目的,应用程序和诸如所述操作***的其它可执行程序在这里被表示为离散块,虽然可以识别出这种程序和组件在不同时间驻留在计算设备402的不同存储组件中且被所述计算机的数据处理器执行。
这里,以诸如可被一个或多个计算机或其它设备执行的程序模块的计算机可执行指令的上下文来描述各种模块和技术。通常,程序模块包括能够执行特殊任务或实现特殊的摘要数据类型的子程序、程序、目标程序、组件、数据结构等等。通常,所述程序模块的功能可如在各实施例所希望的相互组合或分配。
这些模块和技术的一个执行可通过计算机可读存储媒体的形式被存储或传输。计算机可读存储媒体可以是能被一台计算机所访问的任何可用媒体。譬如但不限于,计算机可读媒体可包括“计算机存储媒体”和“通信媒体”。
“计算机存储媒体”包括以任意方法或技术实现的易失性和非易失性、可拆卸或不可拆卸的媒体,用于存储诸如计算机可读指令、数据结构、程序模块或其它数据。计算机存储媒体包括但不限于RAM、ROM、EEPROM、快速存储器或其它存储技术、CD-ROM、数字通用盘(DVD)或其它光学存储器、磁带盒、磁带、磁盘存储器或其它磁存储设备,或可被用于存储所期望的信息且可被一台计算机所访问的任何其它媒体。
“通信媒体”通常包括计算机可读指令、数据结构、程序模块或诸如载波或其它传输引擎的以调制数据信号形式存在的其它数据。通信媒体也包括任何信息传送媒体。术语“调制数据信号”是指具有一个或多个以对在所述信号中的信息进行编码的方式设置和改变的特征。譬如但不限于,通信媒体包括诸如一个有线网络或直接有线连接之类的有线媒体以及诸如声音、射频、红外线之类的无线媒体。上述的任一种结合也被包括在计算机可读存储媒体的范围内。
虽然上述说明使用了针对结构特征和/或方法行为的语言,但应当理解,由所附权利要求规定的本发明不限于所述特征或行为。即,所述特征和行为只是实现本发明的一个例子。