背景技术
随着互联网行业和计算机的飞速发展,我们的生活已经离不开计算机了。计算机安全和数据隐私一直是学术界和工业界的热点。特别是在互联网环境下,网络服务存在较大安全问题。数据提供方一方面担心服务供应商收集自身的隐私数据,另一方担心服务提供商的平台被攻击者控制。
Intel在2013年提出的SGX技术就是一项旨在通过远程可信的硬件来解决上述安全远程计算问题的技术。SGX基于处理器硬件,提供认证(attestation),隔离执行(isolated execution)和密封(sealing)的特性,从而在不可信的云服务器上创建一个可信执行环境(也称飞地,enclave)供用户使用。
认证的目的是建立远程用户与可信执行环境之间的信任。用户在这个过程中会检查目标程序是否正确在SGX的环境中启动。
隔离执行是通过处理器指令在操作系统之外创建一个对操作系统透明的执行环境。所有的运行内容都以加密形式放在一段处理器预留内存(Processor ReservedMemory)中,仅处理器上的内存加密引擎(Memory Encryption Engine,MME)可以解密。
密封一方面保证了构建好的SGX程序可以以加密形式存放在不可信环境中,避免攻击者修改内容,另一方面,使得SGX程序可以把产生的数据保存在不可信环境中并保证安全性。
通常来说,在多用户场景下,每个用户需要认证目标程序并单独建立信任。其次,由于在一个大型应用程序的实例中可能有很多飞地,所以我们应避免分别验证每个飞地,而仅运行单个组合认证。第三,我们需要如实确保不留下任何敏感信息。在处理用户的私有数据后在安全区中使用“安全区”,以便重用安全区不会导致不同用户之间的秘密泄漏。最后,对于运行时间如此长的MLaaS,有必要通过检测故障或攻击并在需要时重构模型实例来提供容错能力。
英特尔SGX技术提供的远程认证方案依赖于CPU上的硬件私钥作为身份标识。该技术中飞地一开始接受用户质询,然后生成包含MRENCLAVE和用户发来的随机数等数据的报告,由引用飞地对报告签名,通过英特尔认证服务(IAS)验证,最终建立起用户与目标程序的可信通信信道。
SGX假定应用程序分为两个部分,可信运行时和不可信运行时,如图所示。可信运行时是在Intel SGXenclave环境内执行的代码,管理着enclave自身的代码,对enclave外部发起调用,并且接受相应的结果,提供标准C/C++库和运行时环境。不可信运行时是在Intel SGXenclave环境外执行的代码,功能主要是加载和管理enclave和对enclave发起调用,或从enclave中获取调用。当前关于SGX应用程序的应用,在建立信任方面基本都是直接采用了Intel提供的方案。该方案实现的远程认证从在安全性方面是相当严密的,依赖于处理器上的非对称私钥和Intel留底的非对称公钥,既实现了在不可信的信道上建立可信的通信信道的目标,又为用户提供了对应用程序的完整性检验报告。能够为用户提供充足的证据来建立信任。
然而,现有的远程认证主要有两个瓶颈:一是不能很好复用飞地,需要频繁的认证来建立信任,这不利于应用程序同时处理多个用户的请求,不符合云服务的高吞吐率需求。二单次认证过程本身就是一个非常耗时的工作,流程复杂,开销较大,甚至会超过实际计算的开销。
现有的工作同样没有提到对一个会使用到多个飞地的应用程序的处理。如果只是粗暴地对应用程序包含的每个飞地都进行认证,会给用户带来巨大的开销。而且从提供优质服务的角度来讲,不应提高用户的使用成本,也不应给用户开放过多接口。
发明内容
针对现有技术中存在的问题,本发明提供一种可信执行环境的快速认证方法及系统,设计合理,用于飞地的认证速度快,计算开销小,能够迅速地建立可信通信信道。
本发明是通过以下技术方案来实现:
一种可信执行环境的快速认证方法,包括,
在可信执行环境初始化时,代理飞地接收服务供应商的认证请求,预生成并得到自己的认证报告;
代理飞地管理的从属飞地依次发起认证请求,按照预先设定的认证程序进行校验认证,若所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道,否则停止初始化;
初始化完成后,接收用户服务请求,向用户发送服务请求对应的预生成的代理飞地的认证报告;并与用户交互认证后,加密通信内容,建立用户与代理飞地及其管理的从属飞地的可信通信信道,完成可信执行环境的快速认证。
优选的,所述在可信执行环境初始化时,代理飞地接收服务供应商的认证请求,预生成并得到自己的认证报告;具体的包括,
在可信执行环境初始化时,根据启动顺序,对启动完毕的代理飞地接收认证请求,预生成并得到自己的认证报告;所述的认证报告中的USERDATA字段存储有报告公钥;报告公钥为代理飞地生成的一对非对称密钥中的公钥。
进一步,所述的与用户交互认证时,具体包括,
目标代理飞地接收第一份密文和第一份公钥;所述第一份密文由用户根据报告公钥加密用户自己产生的随机数得到,用户生成一对非对称密钥获取第一份公钥;
目标代理飞地根据报告私钥解密第一份密文,并用第一份公钥加密第一份密文后得到第二份密文,发送给用户;
目标代理飞地接收用户核对随机数的结果,相同则与用户通信的目标代理飞地是运行着目标程序的可信飞地,完成认证,否则不可信;所述用户核对随机数的结果,由用户通过第一份私钥解密第二份密文后核对随机数得到。
优选的,所述代理飞地管理的从属飞地,依次发起认证请求,按照预先设定的认证程序进行校验认证,若所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道,否则停止初始化;具体的包括,
代理飞地会质询自己管理的从属飞地,发起认证请求,按照预先设定的认证程序进行校验,检查从属飞地运行环境的可靠性和其中运行程序的完整性;
如果有任何一个从属飞地无法通过认证,代理飞地都会阻塞所有用户请求,并发送异常,声明系统初始化失败。
进一步,所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道后,还包括,
代理飞地会保持所述通信信道,与对应的从属飞地定时发送心跳包,用于保证从属飞地在线,且不被攻击者替换;
如果某个从属飞地与代理飞地断开连接,代理飞地发送异常并阻塞用户请求,停止可信执行环境运行。
优选的,所述建立用户与代理飞地及其管理的从属飞地的可信通信信道时,具体包括,
所述的代理飞地不处理任何用户的隐私数据,用于为用户提供从属飞地的地址配置;
从属飞地在一个时刻仅为一个用户提供服务,此时其他用户请求被阻塞在飞地之外;
代理飞地主动生成一对对称密钥,通过可信通信信道分发给用户和对应的从属飞地,用于用户和从属飞地建立可信的通信信道。
进一步,所述从属飞地在一个时刻仅为一个用户提供服务,此时其他用户请求被阻塞在飞地之外;具体的,
从属飞地在完成用户的任务后,将用户使用过的内存初始化,计算并存储内存内容的初始哈希值;
在用户使用完毕并再次刷新后,再次将从属飞地对应的内存内容的哈希值,与初始哈希值进行对比,如果值相等,从属飞地能够供之后的用户使用,否则该从属飞地不可用。
进一步,所述代理飞地主动生成一对对称密钥,通过可信通信信道分发给用户和对应的从属飞地,用于用户和从属飞地建立可信的通信信道;具体的,
在可信执行环境初始化时,各个从属飞地之间根据拓扑结构,通过代理飞地分发的对称密钥,建立可信TCP通信信道;
从属飞地根据固化的控制逻辑自行控制数据流动方向。
再进一步,所述从属飞地根据固化的控制逻辑自行控制数据流动方向,具体的,
用户与第一个从属飞地通信时需要代理飞地分发的对称加密密钥,其他从属飞地之间通信时通过建立的可信TCP通信信道进行,直到最后一个从属飞地处理完用户数据后,通过对称密钥加密结果,发送回给用户;从属飞地间的通信过程中,消息以被处理后的用户数据与和初始分发的对称密钥拼合的报文形式在从属飞地间传输。
一种可信执行环境的快速认证系统,包括,
认证报告预生成模块,用于在可信执行环境初始化时,代理飞地接收服务供应商的认证请求,预生成并得到自己的认证报告;
飞地通信信道建立模块,用于代理飞地管理的从属飞地依次发起认证请求,按照预先设定的程序进行校验认证,若所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道,否则停止初始化;
快速认证模块,用于初始化完成后,接收用户服务请求,向用户发送服务请求对应的预生成的代理飞地的认证报告;并与用户交互认证后,加密通信内容,建立用户与代理飞地及其管理的从属飞地的可信通信信道,完成可信执行环境的快速认证。
与现有技术相比,本发明具有以下有益的技术效果:
本发明在原本英特尔的认证基础上,提前生成了认证报告,直接分发给用户,避免了为每个用户都生成认证报告,效率可以提升一个数量级,因此用户可以更快建立对平台硬件和软件的信任,但不会影响信任的程度。同时设计信任集中技术,可以让用户将信任建立的任务委托给一个代理飞地,而用户本身只需要建立对接受委托的代理飞地的信任即可;用户只需要信任这个代理,将自己的需求委托给代理即可,通过代理飞地与其管理的从属飞地的之间建立的安全的通信信道,实现用户与从属飞地的安全通信。
进一步的,本发明提供了一种安全的飞地重用方式,能够保证用户的隐私数据既不会泄露,也不会与其他用户的数据混在一起。一旦用户数据离开飞地,飞地通过计算模块内存的哈希值,与初始值对比,保证用户数据无残留,然后才开始处理下一个用户的请求。
进一步的,本发明充分给予了从属飞地中运行的自主性,将拓扑关系固化在处理逻辑中,使从属飞地并不依赖于代理飞地或用户的调度,减少了对用户开放的接口,提升了系统的易用性和安全性,使整个系统能高效地运行。
具体实施方式
下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
本发明一种可信执行环境的快速认证方法及系统,在实施例叙述中会涉及到相关的技术术语及解释,汇总如下表1所示。
表1相关技术术语解释。
本发明一种可信执行环境的快速认证方法,如图1所示,其包括,
在可信执行环境初始化时,代理飞地接收服务供应商的认证请求,预生成并得到自己的认证报告;
代理飞地管理的从属飞地依次发起认证请求,按照预先设定的认证程序进行校验认证,若所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道,否则停止初始化;
初始化完成后,接收用户服务请求,向用户发送服务请求对应的预生成的代理飞地的认证报告;并与用户交互认证后,加密通信内容,建立用户与代理飞地及其管理的从属飞地的可信通信信道,完成可信执行环境的快速认证。
本发明实施例,以设想的一个会同时使用到多个飞地的程序系统为例进行说明。该程序系统运行在云端的服务器集群上,每个云服务器有着一个或多个飞地,用于执行程序系统的程序模块。该程序系统接收用户数据,处理后返回结果给用户。
Intel的认证过程的核心在于证明运行环境的完整性和运行程序的正确性。运行环境依赖于刻录在硬件上的私钥进行标识,本身硬件环境的安全性保证在此不做赘述。
对于每个SGX应用程序,它的飞地的构建过程会产生一个日志。这个日志的哈希值就是MRENCLAVE值。MRENCLAVE的值可以被认为是一个飞地的唯一身份标识。飞地构建程序会在SGX应用程序编译完成后给出这个值,而且只要程序不修改,这个值就不会改变。因此,用户可以通过在本地构建一次SGX应用程序,用本地得到的MRENCLAVE值与远程的飞地的MRENCLAVE值进行对比,以确定远程飞地的身份。
但是我们需要保证这个远程的MRENCLAVE值是来源于安全硬件平台,而不是一个拥有MRENCLAVE值的第三方攻击者。这个就需要用到Intel刻录在CPU上的私钥了。远程认证过程会产生包含MRENCLAVE的一份报告,用来说明程序的完整性。这份报告会被CPU用私钥签名,用户可以通过英特尔远程认证服务(IAS)进行校验。通过这个过程,用户可以保证正确的程序运行在正确的硬件平台上。
实际上,原始的Intel的远程认证过程中,每次对同一个飞地的认证后得到的报告大同小异,而最耗时的部分就是产生这些相同的东西,比如生成报告和对报告签名。
其中,SGX技术的主要目的是保护数据和代码,这要求飞地在处理来自用户的私密数据时不能混杂,同时不能泄露。用户首先需要建立起对硬件平台的信任,其次需要建立对代码的信任。这个过程便是通过认证来完成。本地认证可以视为远程认证的一个子集,我们这个地方以更为复杂的远程认证为例进行说明。
远程认证是一个用户质询远程程序,检查目标程序完整性和目标平台是否可信的一个过程,具体流程如下:
1、最初,应用程序需要来自外部的服务平台,并与服务建立通信提供系统。服务提供商向该应用程序发起质询以证明它确实在运行一个或多个飞地内部的必要组件。质询本身包含仅使用一次的随机数(nonce)。
2、飞地会计算其初始代码和数据内容的SHA-256哈希值。这些对安全区的测量(称为MRENCLAVE和MRSIGNER)与安全区响应的密钥交换消息一起放入报告,并由处理器的专用认证密钥进行签名。
3、已签名的报告会发回给用户,并带有证书进行身份验证公开认证密钥。
4、用户收到报告后,可以通过查询充当证书颁发机构(CA)的英特尔认证服务(IAS)来验证认证密钥,即使用EPID公钥证书,并且吊销信息或证明验证服务验证报告上的签名。然后验证使用USERDATA的清单完整性,并检查清单以回应在步骤1中发送的质询。
5、然后,用户验证该报告并检查安全区域是否已初始化为信任状态。
6、如果完整性检查通过,则用户通过新建立的安全通信信道将其私密数据发送到安全区,并开始处理。
本发明所述的方法,是将一次远程认证的过程作为程序系统启动过程的一部分,如图2,也就是说,程序系统会有一个认证的客户端,在启动时就先对启动完毕的飞地发起认证请求,拿到被飞地签名后的认证报告。这份认证报告与传统的报告有一个区别,飞地会生成一对非对称密钥,将公钥放在报告的USERDATA字段。用户在验证认证报告时,除了能获取对应的应用程序的信息之外,还能拿到这个公钥。这个公钥有如下作用:1)避免了中间人攻击:用户可以通过公钥确认通信对象的身份2)用户可以通过公钥完成密钥交换,自己再生成一对非对称密钥,交换对称密钥建立可信通信信道。
用于与飞地建立信任。初始化完成后,用户向系统请求服务,此时目标飞地收到请求后会将自己的认证报告发送给用户。认证报告被飞地运行平台的CPU上的硬件私钥签名过,需要由用户向英特尔远程认证服务请求拿到证书,验证认证报告的完整性。
用户首先会取出认证报告中的MRENCLAVE,与自身构建目标程序时拿到的MRENCLAVE进行对比,确定这份认证报告对应的程序是否是用户需要的目标程序。然后,用户需要确定自己通信的飞地是否是正确的飞地,流程如图3。用户需要取出报告中的报告公钥,用报告公钥加密一个自己产生的随机数得到第一份密文,同时产生一对非对称密钥,把第一份密文和第一份公钥发送给目标飞地。目标飞地在收到第一份密文后,用自己的报告私钥解密,再用用户的第一份公钥加密得到第二份密文,发送给用户。用户收到第二份密文后,用自己的第一份私钥解密密文,如果解密得到的明文与之前产生的随机数相同的话,则说明与用户通信的目标飞地是运行着目标程序的可信飞地。接下来,两者可以用同样的流程,由用户产生对称加密密钥,完成对称密钥的交换,通过对称加密算法加密通信内容,建立更加高效的可信通信信道。
由此,用户成功与运行在云端的可信硬件平台飞地上的可信软件建立了可靠通信信道。
本发明上述内容公开了如何以更小的开销建立用户与可信硬件平台的信任关系,更迅速地建立可信通信信道。但对于一个涉及多个飞地协作的程序系统来说,用户对每个飞地同时进行认证是相当繁琐的,因此本发明公开了一种信任集中技术,通过可信硬件平台服务器集群构建,可以让用户将信任建立的任务委托给一个飞地,而用户本身只需要建立对接受委托的飞地的信任即可。换言之,我们设置了一个代理用户请求的代理飞地,用户只需要信任这个代理飞地,将自己的需求委托给代理飞地即可。因此上述的与飞地建立信任的方法,首先用于建立与代理飞地的认证,就能够完成用于、代理飞地和从属飞地的快速认证。
代理飞地按图4的方式组织和管理从属飞地。首先,代理飞地在系统启动时会接受服务供应商的认证请求,产生并得到自己的远程认证报告。然后,代理飞地会质询自己管理的从属飞地,发起远程认证请求,按照预先设定的程序进行校验,检查从属飞地运行环境的可靠性和其中运行程序的完整性。如果有任何一个从属飞地无法通过认证,代理飞地都会阻塞所有用户请求,并向管理程序抛出异常,声明系统初始化失败。这个部分的远程认证完成后会使代理飞地和从属飞地之间建立起一个安全的通信信道。代理飞地会分配给从属飞地对称密钥,供从属飞地间建立安全的通信信道。
具体的实现如下述的程序伪代码展示。
代理飞地会保持这个通信信道,与对应的从属飞地定时发送心跳包,保证从属飞地在线,且不被攻击者替换。如果某个从属飞地与代理飞地断开连接,代理飞地同样会抛出异常并阻塞用户请求,停止系统运行。
在一切准备就绪后,代理飞地就可以接受来自用户的请求了。代理飞地在收到用户请求后首先发送自己的报告,如用于与飞地建立信任中所述,在几次密钥交换和身份认证成功后,就可以根据用户请求提供服务了。
在这条用户-代理飞地-从属飞地的信任链条上,信任的基础是由安全硬件构建的远程认证体系。任意两方的信任关系都可以用信任和不信任进行表示,因为认证的结果是否通过直接决定了被认证的对象是否可信。当用户选择信任代理飞地时,他信任的内容包含了代理飞地对从属飞地的认证结果,即对从属飞地的认证是用户认证的一个子集。因此,代理飞地对从属飞地的信任可以通过用户对代理飞地的认证过程传递给用户。
对于一个运行在云端的程序系统来说,仅仅为一个用户提供服务是不太现实的。同样,如果每次在一个用户使用完系统后重启以保证安全性同样是不合理的,一方面会造成计算资源的大大浪费,另一方面带来巨大的初始化开销。
用于与飞地建立信任的技术可以为我们提供更快的飞地认证和可信信道建立速度,也很方便地提供了多用户支持。飞地复用,主要的问题能否在于保证不同用户的隐私数据不会混在一起,不会互相泄露信息。
因此,本发明在飞地的运行环境中,既要保证用户之间的数据隔离,又要保证一个用户使用完毕后不会在飞地中留存任何数据,保证运行环境清理及实现纯净度检验。
为了达到上述要求,本发明为类似的程序系统提供了一个程序模块化设计方案。代理飞地不处理任何用户的隐私数据,而是作为一个管理者和调度者,仅为用户提供从属飞地的地址配置。从属飞地中运行的是程序系统的一个个程序模块,这些程序模块在一个时刻仅为一个用户提供服务,此时其他用户请求被阻塞在飞地之外。在完成用户的任务后,会自动将用户使用过的内存初始化,即初始化模块。对每一个程序模块,在初始化时就会刷新一遍,计算并存储它的哈希值。在用户使用完毕并再次刷新后,会再次计算程序模块对应的内存内容的哈希值,与之前存储的哈希值进行对比,如果值相等,模块才能供之后的用户使用,否则这个程序模块是不可用的。
为了保证用户和从属飞地之间的通信安全,代理飞地会主动生成一对对称密钥,通过可信通信信道分发给用户和对应的从属飞地,帮助用户和从属飞地建立可信的通信信道。
为了加强从属飞地间的通信安全,代理飞地会定期收回分配给从属飞地的对称密钥,并分配新的对称密钥。代理飞地间的消息包含了顺序号和消息认证码。顺序号可以防止攻击者截留消息,发起重放攻击;消息认证码可以防止攻击者篡改消息。
本发明进一步通过控制数据流动提高系统效率。对于一个复杂的系统来说,运行在从属飞地上的每一个模块都有特定的功能和作用,这些模块之间复杂的逻辑和依赖关系会形成复杂的拓扑结构。而这些逻辑是不可能由用户来处理的。从软件设计的角度来讲,应该给用户开放尽可能少的接口和细节,既增强系统的安全性,也降低用户的使用难度。同样的,如果代理飞地监控每一个用户和从属飞地之间处理的细节,由代理飞地去控制数据流动,还是会产生巨大的开销,极大的降低效率。
因此,本发明将控制逻辑固化到程序系统的各个程序模块中,由各个程序模块自行控制数据流动方向。这要求在系统初始化的时候,各个从属飞地之间需要根据拓扑结构,通过密钥交换,建立好可信TCP通信信道。需要注意的是,用户与第一个从属飞地通信时需要代理飞地分发的对称加密密钥,但是后面从属飞地之间通信时是不需要这个密钥的,因为它们之间的可信通信信道早已建好。直到最后一个从属飞地处理完用户数据后,它需要通过对称密钥加密结果,发送回给用户。这个过程中,消息以被处理后的用户数据与和初始分发的对称密钥拼合的报文形式在从属飞地间传输,以便最后一个输出结果的从属飞地加密结果,送还给用户。
对应上述的方法,本发明还提供一种可信执行环境的快速认证系统,如图5所示,其包括,
认证报告预生成模块,用于在可信执行环境初始化时,代理飞地接收服务供应商的认证请求,预生成并得到自己的认证报告;
飞地通信信道建立模块,用于代理飞地管理的从属飞地依次发起认证请求,按照预先设定的程序进行校验认证,若所有从属飞地均通过认证,则建立代理飞地与其管理的从属飞地之间安全的通信信道,否则停止初始化;
快速认证模块,用于初始化完成后,接收用户服务请求,向用户发送服务请求对应的预生成的代理飞地的认证报告;并与用户交互认证后,加密通信内容,建立用户与代理飞地及其管理的从属飞地的可信通信信道,完成可信执行环境的快速认证。
本发明在原本英特尔的远程认证基础上,提出了一种新的可信硬件平台的快速认证方式,相比传统方式,提前生成了改进的远程认证报告,直接分发给用户,避免了为每个用户都生成认证报告,效率可以提升一个数量级,因此用户可以更快建立对平台硬件和软件的信任,但不会影响信任的程度。本发明默认只有SGX硬件本身是可信,而操作系统,管理员,网卡都是不可信的。实现可信硬件平台上的可信执行环境的快速认证技术。
本发明还提供了一种安全的飞地重用方式,能够保证用户的隐私数据既不会泄露,也不会与其他用户的数据混在一起。一旦用户数据离开飞地,飞地通过计算模块内存的哈希值,与初始值对比,保证用户数据无残留,然后才开始处理下一个用户的请求。从而使得不同用户之间相互隔离,每个用户使用完毕后通过计算哈希值保证数据完全清空。
本发明充分给予了从属飞地中运行的模块的自主性,将模块间的拓扑关系直接写入模块的处理逻辑中,使从属飞地并不依赖于代理飞地或用户的调度,减少了对用户开放的接口,提升了系统的易用性和安全性,使整个系统能高效地运行。通过飞地协作模式,将系统拆分成各个子模块以适应资源受限的可信执行环境,同时将控制逻辑写入模块中,模块之间通过可信的加密TCP连接进行通信。
总的来说,本发明提出了一种更符合多用户高并发云平台服务的要求的安全计算硬件系统设计和部署方案,解决了云服务平台数据安全的问题,既保证了云平台系统的效率,又为用户提供了更加安全的服务。