掌桥专利:专业的专利平台
掌桥专利
首页

相关申请交叉引用

本国际申请要求2018年12月21日提交的第62/784,194号美国专利申请的优先权并且是2018年11月28日提交的第PCT/US2018/062847号国际专利申请的部分接续,这些专利申请的公开内容出于所有目的以全文引用的方式并入本文中。

背景技术

现代网络服务使得公众越来越关注他们管理敏感用户数据的方式缺乏透明度的问题。除了法律所规定的隐私策略外,用户并不清楚如何使用或与第三方共享他们的数据,更不用说控制了。不足为奇的是(用户不知道的是),他们的敏感数据激增、被误用并且有时由于安全漏洞而被泄露给攻击者。虽然此用户数据通常能够向用户提供原本不可用的功能性,但是一旦所述数据不再归用户所有,那些用户通常就无法控制所述数据的使用方式。

虽然存在用于控制用户数据使用的协议,但这些协议要求用户在线(或信任一个或多个在线的第三方以代表用户执行协议)。离线用户无法手动批准每个计算步骤,因此系统必须自动强制执行关于输入的使用方式的策略。当自动强制执行策略超出单独的可信执行环境(TEE)的能力时,这可能会使数据受到攻击,因为所述策略本身无法保护输入和输出。例如,(由TEE的主机控制的)敌方主机软件可能会跨越TEE托管的程序的重启使永久性存储装置回滚(rollback)并且篡改网络通信。在此实例中,敌方主机可能会关于用户数据集的不同子集反复地评估批准函数(也称为后退和分叉(rewind-and-fork)攻击)并推断关于单独记录的信息,这违背了仅显示针对所述用户数据集的聚合函数的用户愿望。另外,主机还可能仅向预期接收方的共谋(colluding)子集递送输出,这妨碍了数据的公平分发。

本发明的实施例单独地以及共同地解决这些问题和其它问题。

发明内容

本发明的实施例涉及用于使用户能够控制哪些实体被允许访问所述用户的哪些数据以及能够使用所述数据的方式,同时确保共享数据的各方之间的公平性的技术。在一些实施例中,用户能够创建一个或多个信息使用策略,其可包括可使用数据的条件。这些策略的存储方式保留了每个用户修改以及(例如,关于区块链的)用户信息的实际使用情况。然后,用户信息(例如,客户端装置收集的信息)在分发所述信息之前受制于信息使用策略。为了实现这一点,数据使用者可以向本文所描述的服务提供商提交对信息的请求。在一些情况下,服务提供商可以将所述请求转发到主机服务器,所述主机服务器可以是第三方实体或其它不可信实体。主机服务器可以通过根据存储在区块链上的数个事务编译当前策略来确定所述请求是否为被授权请求并适当地作出响应。

如果确定所述请求被授权,则主机服务器在专用包围区(private enclave)内处理所述请求,从而在数据无法用于在主机服务器上运行的其它应用程序的情况下处理所述数据。在处理请求期间,主机服务器使用存储在专用包围区中的密码密钥对所请求的数据进行解密。然后,主机服务器可以对所请求的数据执行数个计算,从而产生输出值。然后,可以针对多个接收实体多次对输出值进行加密并且写入到共享分类账。在一些实施例中,可以使用与所述接收方相关联的公用密码密钥针对每个接收方对输出值进行加密。然后同时向接收方中的每一个提供对加密的输出的访问权。

本公开的一个实施例涉及一种方法,包括:接收与客户端装置的用户有关的专用信息的分发指令,所述分发指令包括多个数据使用者的指示;使用第一密码密钥对所述专用信息进行加密;向所述多个数据使用者中的每一个提供对加密的专用信息的访问权;从所述多个数据使用者中的每一个接收所述数据使用者接收到对所述加密的专用信息的所述访问权的指示;以及在确认已向所述多个数据使用者中的每一个提供对所述加密的专用信息的访问权后,向所述多个数据使用者发布第二密码密钥,所述第二密码密钥能够用于访问所述专用信息。

本公开的另一实施例涉及一种计算系统,包括:处理器;以及存储器,其包括指令,所述指令在与所述处理器一起执行时使计算系统至少进行以下操作:接收与客户端装置的用户有关的输出数据的分发指令,所述分发指令包括多个数据使用者的指示;使用第一密码密钥对所述输出数据进行加密;向所述多个数据使用者中的每一个提供对加密的输出数据的访问权;从所述多个数据使用者中的每一个接收所述数据使用者接收到对所述加密的输出数据的所述访问权的指示;以及在确认已向所述多个数据使用者中的每一个提供对所述加密的输出数据的访问权后,向所述多个数据使用者发布第二密码密钥,所述第二密码密钥能够用于访问所述输出数据。

下文以及所附附录进一步详细描述本发明的这些和其它实施例。

附图说明

图1描绘了用于实施本公开的至少一些实施例的示例系统;

图2描绘了根据本公开的实施例的可被实施以实现可控制地访问专用数据的示例系统架构;

图3描绘了示出根据至少一些实施例的可响应于请求而提供对数据的访问权的过程的泳道图;

图4描绘了可根据本公开的实施例实施的示例区块链记录;

图5描绘了示出根据至少一些实施例的使用区块链来确定请求是否为被授权请求的技术的流程图;

图6描绘了示出根据至少一些实施例的以公平的方式向多个数据使用者提供所请求的信息的过程的流程图;

图7描绘了根据本公开的实施例的可由系统执行以确保分类账中的块有效的各种检查的实例;

图8描绘了根据至少一些实施例的使用包围区和共享分类账来完成符合策略的计算的技术的说明性实例;并且

图9描绘了根据至少一些实施例的用于将数据分发到多个数据使用者并同时确保所述数据分发的公平性的技术的说明性实例。

具体实施方式

在以下描述中,将描述各种实施例。出于解释的目的,阐述特定配置和细节以便提供对实施例的透彻理解。然而,所属领域的技术人员还应明白,可以在没有特定细节的情况下实践实施例。此外,可能省略或简化众所周知的特征以免使描述的实施例模糊不清。

在论述本发明的一些实施例的细节之前,对一些术语的描述可有助于理解各种实施例。

“区块链”可包括分布式数据库。区块链可用于维护不断增长的称为块的记录列表。区块链可用于以难以伪造的方式维护各方之间的事务或事件的记录。区块链中的每一块可包括若干记录以及区块链中的先前块的散列。如果先前块中的记录改变,那么任何以下块中的散列可被破坏。结果是为了伪造给定记录,黑客必须伪造所述记录以及所有后续记录使得散列最终相同。这在实践中极其困难。另外,区块链可通过分布式网络分发到大量实体。可通过比较区块链与多个单独记录来验证区块链的任何改变。

“区块链分类账”是根据区块链协议维护的一系列记录。区块链分类账的完整副本可包括系统执行的每个事务。分类账中的每一条目(例如,块)可包含前一个条目的散列。这具有创建从创始块到当前块的一系列块的效果。每一块都保证按时间顺序在前一个块之后,因为前一个块的散列不会以其它方式被知晓。每一块一旦已经处于所述一系列块中一段时间,在计算上进行修改也是不切实际的,因为所述块之后的每个块也必须重新生成。这些性质使得区块链分类账相对安全且防篡改。

“客户端装置”可以是由用户操作的装置。客户端装置的实例可包括移动电话、智能电话、个人数字助理(PDA)、笔记本计算机、台式计算机、服务器计算机、例如汽车的车辆、精简客户端装置、平板PC等。另外,客户端装置可以是任何类型的可穿戴技术装置,例如,手表、耳机、眼镜等。客户端装置可以包括能够处理用户输入的一个或多个处理器。客户端装置还可以包括用于接收用户输入的一个或多个输入传感器。如本领域中已知的,存在能够检测用户输入的多种输入传感器,例如加速度计、相机、麦克风等。由输入传感器获得的用户输入可以来自各种数据输入类型,包括但不限于,音频数据、视觉数据或生物特征数据。客户端装置可以包括用户可以操作的任何电子装置,所述电子装置还可以提供与网络的远程通信能力。远程通信能力的实例包括使用移动手机(无线)网络、无线数据网络(例如,3G、4G或类似网络)、Wi-Fi、Wi-Max,或可提供对例如互联网或专用网络等网络的访问的任何其它通信介质。

“计算”可以是具有一组属性的任何字符串。可以至少由一个或多个输入提供商(使用者)和一个或多个输出接收方(数据使用者)的函数、策略和身份来定义计算。可以使用唯一标识号(例如,64位数字)来标识每个计算。可以通过用于所述计算的规范将每个计算记录在分类账内。在一些实施例中,用于每个计算的规范可以与公钥相关联,所述公钥用于对在所述计算中使用的输入数据进行加密。用于计算的规范还可以指定用于对要提供到数据使用者的输出数据进行加密的公钥。与计算相关联的函数可以指示要对输入数据执行以便获得所需输出数据的一个或多个数学运算。

“计算装置”可以是配置成处理数据的任何合适的装置或软件模块。在一些实施例中,计算装置可包括例如使用移动电话(无线)网络、无线数据网络(例如,3G、4G或类似网络)、Wi-Fi、Wi-Max,或可提供对例如互联网、覆盖网络等网络的访问的任何其它通信介质的通信能力。计算装置的实例包括移动电话(例如蜂窝式电话)、PDA、平板计算机、上网本、笔记本计算机、个人音乐播放器、手持式专用阅读器、服务器计算机等。计算装置可包括用于执行此类功能的任何合适的硬件和软件,并且还可包括多个装置或组件(例如,当装置通过绑定到另一装置-即,将所述另一装置用作调制解调器-而访问网络时,结合在一起的两个电子装置可被视为单个计算装置)。

“密码密钥”可以包括用于密码算法中以将输入数据变换为另一表示的一条信息。密码算法可以是将原始数据变换成替代表示的加密算法,或将加密信息变换回到原始数据的解密算法。密码算法的实例可包括三重数据加密标准(TDES)、数据加密标准(DES)、高级加密标准(AES)等。

“密码密钥对”可以包括一对链接的密码密钥。例如,密钥对可包括公钥和对应的私钥。在密码密钥对中,第一密码密钥(例如,公钥)可以用于对消息进行加密,而第二密码密钥(例如,私钥)可以用于对加密的消息进行解密。另外,公钥能够验证用对应的私钥创建的数字签名。公钥可以分布在整个网络中,以便能够验证使用对应私钥签名的消息。公钥和私钥可以呈任何适当的格式,包括基于RSA或椭圆曲线密码学(ECC)的格式。在一些实施例中,可以使用非对称密钥对算法来生成密钥对。

“分散式网络”可包括单个计算装置或软件模块无法控制所有网络处理的网络。“集中式网络”可包括单个计算装置或节点(或相对较小数量的计算装置或节点)控制网络处理的网络。在这两者之间,分散式网络可能不太可能意外失效,因为它依赖于不可能同时失效的许多独立的组件。另外,相较于集中式网络,分散式系统攻击和销毁或操纵起来更昂贵,因为分散式网络缺乏相较于周围系统的经济规模可在低得多的成本下进行攻击的敏感的中心点。另外,分散式网络中的参与者可能明显更难以采取行动而以其它参与者为代价使他们自己获益。

“包围区”或“包围区程序”是隔离的存储器区,包含代码和数据两者,所述包围区或包围区程序受可信执行环境平台保护(即,仅信任处理器制造商)。主机计算机上的包围区被配置成使得包围区外部的应用程序无法访问包围区内的代码和数据。在一些情况下,主机计算机通过在将包围区的缓存行写入到存储器(例如,DRAM)之前对所述缓存行进行加密和完整性保护而使包围区免受硬件攻击。包围区还可以提供“密封存储装置”,在所述密封存储装置中,可以将数据存储在存储器中,并且使用只有处理器制造商知晓的秘密密钥对所述数据进行加密。以此方式“密封”的数据可以存储在主机计算机的存储器中、在包围区外部。然后,只能在包围区的内部对密封的数据进行解密和处理。

术语“公平”是指数据使用者各自有相同的机会接收数据的概念。出于本公开的目的,公平系统是所有有资格的数据使用者都接收或都不接收输出数据的系统。换句话说,对于被视为公平的系统,如果任何数据使用者都获得输出数据,则所有有资格者的诚实数据使用者都必须获得所述相同输出数据。确保公平性很重要,因为本文所描述的输出数据的通信由不可信方控制,所述不可信方可能与数据使用者共谋。

“节点”或“网络节点”可包括通信网络中的连接点。网络节点可以是物理电子装置,其能够创建、接收或传输数据(例如,服务器)。在一些实施例中,网络节点可以是记录保存网络(例如,区块链网络)内的计算装置。网络节点能够创建数据包(例如,数据有效负载)、转移数据包、接收数据包、验证数据包、访问中心记录和/或执行任何其它合适的功能。不同类型的网络节点能够执行记录网络中的不同组的功能。在一些实施例中,网络节点可与例如在线服务提供商、内容提供商的资源提供商、证书颁发中心、金融机构(例如,银行)、商家、事务处理网络或任何其它合适的实体相关联和/或由其操作。

“记录”可包括一个或多个交互的证据。数字记录可以是交互的电子文档。记录可包括记录标识符和记录信息。例如,记录信息可包括描述一个或多个交互的信息和/或与交互相关联的信息(例如,数字签名)。记录信息还可包括多个数据包,其中的每一个包括描述不同交互的不同数据。记录标识符可以是用于标识记录的数字、标题或其它数据值。记录标识符可以是非描述性的,因为它可能不会提供关于记录中包括的信息的任何有意义的信息。记录的实例包括医疗记录、学术记录、事务记录、凭证发行记录等。在一些实施例中,记录可存储在区块链的块中。在这些实施例中,单独块可包括单独记录或预定数量的记录,并且区块链可以是组织成块的一系列记录。

“服务器计算机”可包括功能强大的计算机或计算机集群。例如,服务器计算机可以是大型主机、小型计算机集群或像单元一样工作的一组服务器。在一个实例中,服务器计算机可以是耦合到网络服务器的数据库服务器。服务器计算机可以耦合到数据库,并且可包括用于服务于来自一个或多个客户端计算机的请求的任何硬件、软件、其它逻辑或前述内容的组合。服务器计算机可以包括一个或多个计算设备,且可使用各种计算结构、布置和编译中的任一种来服务来自一个或多个客户端计算机的请求。

“签名”可包括消息或一些数据的电子签名。数字签名可以是数字数据值、字母数字数据值或包括图形表示的任何其它类型的数据。数字签名可以是使用加密算法从消息和私钥生成的唯一数据值。在一些实施例中,可以使用使用公钥的验证算法来验证签名。

“软件防护扩展”(SGX)是一组中央处理单元(CPU)指令代码,其允许用户级代码分配专用存储器区,被称作包围区,其受保护以免于在较高特权等级下运行的程序。SGX被设计成适用于实施安全远程计算、安全网页浏览和数字权限管理(DRM)。

术语“验证”和其派生词可以包括利用信息来确定基础主题在一组给定情况下是否有效的过程。验证可包括任何信息比较以确保某些数据或信息是正确的、有效的、准确的、合法的和/或信誉良好的。在本公开中描述的验证的一些实例中,电子记录可以使用私钥来签名并且可以使用公钥来验证。例如,验证过程可以涉及独立地生成要验证的值(例如,来自提供的数据的散列值)。验证过程还可以涉及对要验证的信息执行密码操作(这可以涉及将公钥用于与要验证的信息相关联的实体)以产生要验证的信息的纯文字版本。然后,验证过程可以涉及将要验证的信息的纯文本版本与独立生成的值进行比较以确定匹配。如果两个值匹配,则很有可能使用实体的私钥对要验证的信息进行签名。这验证了信息是否有可能来源于声称已提供信息的实体。

现将更详细地描述本发明的一些实施例的细节。

图1描绘用于实施本公开的至少一些实施例的示例系统。在图1中,由用户104操作的客户端装置102可以与主机服务器106通信,所述主机服务器从客户端装置102收集用户信息。在此实例中,所收集的信息可以由客户端装置102或主机服务器106(例如,使用与本文所描述的服务相关联的公用加密密钥)进行加密,并且可以存储在数据库108中。另外,用户104可以具备通过分散式网络110(例如,区块链网络)更改信息使用策略的能力。数据使用者112可以从主机服务器106请求存储在数据库108中的一条或多条所收集的信息。在一些实施例中,数据使用者112可以另外访问输出数据库114。

在一些实施例中,客户端装置102可以是由用户104操作并且能够收集和传输信息的任何合适的电子装置。例如,客户端装置102可以是移动电话、智能手机、个人数字助理(PDA)、笔记本计算机、台式计算机、健身跟踪器或任何其它合适的电子装置。在一些实施例中,收集的信息可以包括关于用户104的信息。例如,客户端装置102可以被配置成收集关于由用户104执行的活动的信息或与用户104有关的生物特征信息。

主机服务器106可以是能够执行本文所描述的功能性的至少一部分的任何电子装置。虽然在图1中描绘为与分散式网络110分离,但应注意,在一些实施例中,主机服务器106可以是分散式网络110的网络节点。主机服务器106可以包括通过SGX分配的安全且专用的存储器区(即,专用包围区116)。专用包围区116可以存储一个或多个密码密钥。例如,与本文所描述的服务相关联的私钥可以存储在专用包围区116内。应注意,因为本文所描述的处理是对专用包围区116执行的,并且因为专用包围区中的数据受保护而免于甚至更高等级的特权等级应用程序,所以即使处理涉及敏感数据,也可以对不可信装置执行处理。应注意,当主机服务器106是不可信实体(例如,分散式网络110的网络节点)时,信息可以在被提供到主机服务器106之前由客户端装置102加密,从而防止主机服务器106访问所述数据。

分散式网络110可以是被配置成以分散方式存储数据的多个电子装置的任何合适的组合。在一些实施例中,分散式网络可以是将数据(例如,策略数据)存储在区块链内的区块链网络。在这些实施例中的至少一些中,区块链网络的区块链分类账可以存储与由数个用户提交的策略变化有关的事务。例如,用户104可以添加或撤销各种信息使用策略,其中每个策略添加/撤销都可以构成事务。在此实例中,可以通过在区块链分类账中标识与信息使用策略相关联的最新事务来评定与特定用户和/或数据使用者112相关联的任何给定信息使用策略的当前状态。

每个数据使用者112可以是被配置成使用或消耗由客户端装置102收集的数据的任何电子装置。在一些实施例中,数据使用者112可以是由第三方实体(即,与主机服务器106和/或客户端装置102无关的实体)操作的计算装置。每个数据使用者112可以维护与用户104和/或客户端装置102相关联的账户(其可以与由其它数据使用者112维护的账户分离)。

借助于示出可以使用本文所描述的系统进行的至少一些交互,考虑数据通过客户端装置102收集并提供到数据使用者112的以下示例性情境。在说明性情境的步骤1处,用户104可以在区块链网络(分散式网络110)中添加或撤销各种信息使用策略。例如,用户可以指示一个或多个第三方实体(即,数据使用者112)被允许以特定方式使用他或她的信息或被授权以接收他或她的信息的指定子集。然后,此指示将构成写入到块的事务。然后将块添加到类似块的链内的区块链分类账。下文更详细地描述此过程。

在此说明性情境中,客户端装置102可以收集关于用户104的信息,并且可以在步骤2处将所述信息传输到主机服务器。可以数种方式收集信息。在一些实施例中,用户104可以向用户装置102提供信息。例如,用户可以将文本或用户选择输入到客户端装置102中。在一些实施例中,客户端装置104可以包括收集关于用户104的信息的一个或多个输入传感器。在一些实施例中,信息可以包括与由用户执行的活动有关的跟踪信息。例如,信息可以包括用户在一天内行走的步数或用户已访问的网站的指示。在一些实施例中,本公开的实施方案可以仅涉及一种类型或类别的信息。在一些实施例中,本公开的实施方案可以涉及数种不同类型或类别的数据。提供到主机服务器106的信息可以被加密并存储在由所述主机服务器106维护的数据库中。

在主机服务器106已从客户端装置102接收到信息之后,所述主机服务器可以在步骤3处接收将所述信息从用户提供到一个或多个数据使用者112的请求。在一些实施例中,可以从一个或多个数据使用者接收请求。请求可以包括要对信息执行的某一函数118。在一些实施例中,请求还可以包括与数据使用者112中的每一个相关联的公钥。在接收到请求后,可以在安全执行环境(例如,专用包围区116)内处理请求,所述安全执行环境受保护而免于在主机服务器106上运行的其它应用程序。在执行此处理时,专用包围区可以将信息接收为加密的输入120。在步骤4处,由专用包围区116执行的处理可以涉及从区块链网络110获得策略信息。基于所述策略信息,专用包围区可以(根据特定函数)确定数据使用者112中的每一个是否有权接收已经请求的所处理信息。应注意,步骤4可由专用包围区116执行,或可由在主机服务器106上、在专用包围区116外部的应用程序执行(例如,在启动专用包围区上的处理之前)。

如果专用包围区116确定每个数据使用者112确实有权接收所请求的信息,则专用包围区116可接着对加密的输入120进行解密,对信息执行在请求中指示的一个或多个函数118,并在步骤5处生成一个或多个加密的输出。然后,专用包围区116可以向区块链记录报告所执行的函数118以记录所述函数118的事务。如果专用包围区116确定数据使用者112无权接收所请求的信息,则专用包围区可以用拒绝对请求作出响应,提出错误,仅为有权的数据使用者112提供加密的结果,或只是不进行任何动作。在一些实施例中,可以向区块链网络110报告数据使用者尝试访问所述信息以进行记录。

在步骤6处,可以向数据使用者112提供对信息的访问权。应注意,可以多种方式实现这一点。加密的输出122可以直接提供到数据使用者112,或可以存储在加密的输出的数据库(例如,输出数据库114)中,并且可以向数据使用者112提供对存储在所述数据库中的加密的输出122的参考(例如,地址或链接)。在一些实施例中,可以使用与每个数据使用者112相关联的公钥对加密的输出122进行加密。这使得每个数据使用者112能够使用与所述数据使用者112相关联的私钥对加密的输出进行解密以及访问来自加密的输出的信息。在一些实施例中,专用包围区可以维护用于生成加密的输出122的一组密码密钥对。在这些实施例中,可以使用从所述一组密码密钥对中(例如,随机)选择的密码密钥对加密的输出122进行加密。然后,可以将来自所选择的密码密钥对的对应密钥提供到数据使用者112以用于对加密的输出122进行解密。在一些实施例中,用于对加密的输出122进行加密的密码密钥可以是对称密码密钥(例如,其中使用相同的密码密钥对数据进行加密和解密)。在那些实施例中,可以向数据使用者112提供对称密码密钥。以此方式,每个数据使用者都能够访问所请求的信息,同时使维护所述数据的实体(可以是不可信方)无法访问所述数据。

在一些实施例中,输出数据库114可以是共享分类账,例如仅追加(append-only)分类账。当将数据与多个数据使用者112共享时,可以使用不同的密码密钥(例如,每个数据使用者112的公钥)多次(每个数据使用者112一次)将数据写入到输出数据库114。在一些实施例中,在(例如,通过链接、参考、直接提供加密的输出等)向每个数据使用者提供访问加密的输出的手段后,系统可以从所述数据使用者112接收已签名送达回执。相应的数据使用者可以使用与所述数据使用者112相关联的专用密码密钥对每个已签名送达回执进行签名。

在一些实施例中,在接收到完整的一组送达回执后,可以同时向所有数据使用者112授予对输出数据的访问权。例如,提供到每个数据使用者112的可据以访问输出数据的链接在提供到数据使用者112时可以处于非活动状态。在此实例中,在确定已经获得所有送达回执后,可以激活到输出数据的每个链接(即,启用以获得访问权)。在一些实施例中,来自每个数据使用者112的签名的聚合编码可以发布到输出数据库114或区块链网络110上的分类账。

在一些实施例中,可以将加密的输出数据和/或解密密钥提供到在由每个数据使用者112操作的计算装置上操作的专用包围区。在这些实施例中的至少一些中,在从专用包围区116接收到发布信号后,每个相应数据使用者112上的专用包围区可以向所述专用包围区的数据使用者发布输出数据或解密密钥。在这些实施例中,可以使用相同的密码密钥对提供到数据使用者中的每一个的输出数据进行加密。然后,可以将第二(例如,解密)密钥提供到专用包围区,使得在接收到应发布解密密钥的指示时,可以将所述第二密钥提供到数据使用者112。

图2描绘根据本公开的实施例的可被实施以实现可控制地访问专用数据的示例系统架构。在图2中,主机服务器202可以通过到网络208的连接与数个客户端装置204和数据使用者206通信。网络208可以包括能够在电子装置之间路由通信的互连电子装置的某一组合。网络208可以包括或提供区块链网络210(或其它合适的分散式网络)的入口/出口。在一些实施例中,主机服务器202可以是图1的示例主机服务器106。

在至少一些实施例中,主机服务器202可以包括至少一个存储器212和一个或多个处理单元(或处理器)214。处理器214可以酌情以硬件、计算机可执行指令、固件或其组合实施。处理器214的计算机可执行指令或固件实施例可包括以任何合适的编程语言编写的用于执行所描述的各种功能的计算机可执行或机器可执行指令。在一些实施例中,存储器212可以包括使用软件防护扩展(SGX)创建的安全执行环境,其在下文称为专用包围区216。

存储器212可存储可以在处理器214上加载和执行的程序指令,以及在执行这些程序期间生成的数据。取决于主机服务器202的配置和类型,存储器212可以是易失性的(例如,随机存取存储器(RAM))和/或非易失性的(例如,只读存储器(ROM)、闪存存储器等)。主机服务器202还可以包括额外存储装置218,例如可移动存储装置或不可移动存储装置,包括但不限于磁性存储装置、光盘和/或磁带存储装置。磁盘驱动器和其相关联的计算机可读介质可提供计算机可读指令、数据结构、程序模块和用于主机服务器202的其它数据的非易失性存储。在一些实施例中,存储器212可以包括多种不同类型的存储器,例如,静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)或ROM。

转向存储器212的内容的更多细节,存储器212可以包括操作系统和用于实施本文中所公开的特征的一个或多个应用程序或服务,所述特征至少包括用于检取信息使用数据并确定是否提供所请求的信息的模块(策略解释模块220)和用于处理接收到的请求的模块(请求处理模块222)。存储器212还可以包括输入和/或输出数据224,其提供向主机服务器202提供的数据和/或要分发到一个或多个数据使用者206的数据。另外,主机服务器202可以包括用于实现额外功能性的任何数量的模块,例如本文稍后描述的功能性。在专用包围区216内,主机服务器202可以包括对数据(计算模块226)以及一个或多个密码密钥228执行一个或多个所请求的计算的功能性。

在一些实施例中,策略解释模块220可与处理器214一起被配置成确定是否应向对信息的特定请求授权。为此,策略解释模块220可以检取与存储在区块链网络210上的信息使用策略有关的信息。这可以涉及标识与信息使用策略有关的数个事务以标识所述策略的当前状态。例如,策略解释模块220可以标识关于信息使用策略记录的策略添加、策略撤销和执行的函数。在一些实施例中,策略解释模块220可以关于讨论中的信息的特定类型和/或关于已请求所述信息的特定数据使用者206确定信息使用策略的当前状态。然后,策略解释模块220可以基于请求是否与信息使用策略的当前状态冲突而确定是否应对请求授权。作为响应,策略解释模块220可以提供关于请求是否被授权的指示。应注意,尽管策略解释模块220被描绘为在专用包围区216外部运行,但在一些实施例中,策略解释模块220可以在专用包围区216内部运行。

在一些实施例中,请求处理模块222可以与处理器214一起被配置成从数据使用者接收请求,启动专用包围区216上的计算模块226,并向请求的数据使用者206提供所得的加密的输出(或到所述加密的输出的链接)。请求处理模块222可以向专用包围区216提供在请求中接收到的一条或多条数据。例如,请求处理模块222可以向专用包围区216提供(例如,与数据使用者206相关联的)公用密码密钥、所请求的信息的类型、要对所请求的信息执行的函数的指示,或任何其它合适的数据(例如,作为方法调用中的参数)。在一些实施例中,请求处理模块222可以被配置成启动策略解释模块220,并且可以进一步被配置成在从策略解释模块220接收到请求被授权的指示后启动计算模块226。在一些实施例中,请求处理模块222可以被配置成将加密的输出存储到数据库记录或将加密的输出传输到从中接收到请求的数据使用者206。

在一些实施例中,计算模块226可以与处理器214一起被配置成以防止主机服务器202(或在主机服务器202上运行的其它应用程序)获得对所处理的信息的访问权的方式处理对信息的请求。如其它地方所指出,专用包围区216可以是在存储器212的一部分上实施的安全执行环境,所述部分与存储器212的其余部分分离,使得应用程序(甚至具有更高特权等级的那些应用程序)无法访问在专用包围区216上处理的信息。在(例如,通过策略解释模块220)确定请求被授权后,计算模块226可以被配置成对存储在主机服务器202上的所请求的信息进行解密。在一些实施例中,计算模块226可以被配置成对所请求的信息执行某一所请求的函数。例如,提交的请求可以针对与多个数据点相关联的平均值或均值。在此实例中,计算模块226可以对与多个数据点相关联的值进行解密并对所得值求平均值。计算模块226可以进一步被配置成对任何所得输出值进行加密。在一些实施例中,可以使用与已从中接收到请求的数据使用者206相关联的公钥对输出值进行加密。在一些实施例中,可以从在专用包围区上维护的一组可用密码密钥228中选择密码密钥。然后,可以使用所选择的密码密钥对输出值进行加密。然后可以向数据使用者206提供对应的密码密钥(或在对称密钥的情况下提供相同的密码密钥)。

主机服务器202还可包含使主机服务器202能够与存储的数据库、另一计算装置或服务器、一个或多个远程装置、其它应用程序服务器和/或任何其它合适的电子装置通信的通信接口230。在一些实施例中,通信接口228可以使主机服务器202能够与网络上(例如,专用网络上)的其它电子装置进行通信。主机服务器202还可包括输入/输出(I/O)装置和/或端口232,例如用于实现与键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等的连接。

客户端装置204可以是能够与其它电子装置通信的任何电子装置。例如,客户端装置204可以是能够(例如,通过网络208)与主机服务器202和/或数据使用者206无线通信的移动电话。在一些实施例中,客户端装置204可以是图1中描绘的客户端装置102的实例。客户端装置204上可安装有数个输入传感器234,所述输入传感器能够收集关于用户、用户参与的一个或多个活动、客户端装置204、客户端装置204所在的环境的信息,或任何其它合适的数据。在一些实施例中,客户端装置204上可安装有数个软件应用程序。安装在客户端装置204上的软件应用程序中的一个或多个可以使客户端装置204向主机服务器202传输由客户端装置204收集到的信息,以分发到数据使用者206。在一些实施例中,客户端装置204还可以使用户能够修改在区块链网络210上维护的信息使用策略。

在一些实施例中,数据使用者206可以是图1中描绘的数据使用者112的实例,所述数据使用者可以被配置成请求和消耗数据。数据使用者206可以是消耗数据以提供服务或产品的实体。数据使用者206可维护数个账户,其中至少一个账户可以是与用户和/或客户端装置204相关联的账户。在一些实施例中,数据使用者206可以为安装在客户端装置204上的移动应用程序提供后端支持。在一些实施例中,存储在区块链网络210上的至少一些信息使用策略可以与特定数据使用者206相关。在一些实施例中,数据使用者206可以存储可用于访问加密的输出数据的密码密钥236。在一些情况下,密码密钥236可以是与数据使用者206相关联的私钥。在一些情况下,密码密钥236可以是由专用包围区216提供的密码密钥(例如,密码密钥228中的一个)。

图3描绘了根据至少一些实施例的可响应于请求而提供对数据的访问权的过程的泳道图。在图3中,客户端装置102可以与区块链网络110(例如,分散式网络的实例)和/或具有专用包围区116的主机服务器106通信。主机服务器106又可以与数个数据使用者112通信。主机服务器106和数据使用者112可以访问数据存储装置114(例如,数据库)。在一些实施例中,数据存储装置114可以包括在主机服务器106的存储器中。在一些实施例中,主机服务器106可以维护与客户端装置102和/或客户端装置102的操作者相关联的账户。

在一些实施例中,过程可以在302处在客户端装置102的用户在区块链网络110内设置一个或多个信息使用策略时开始。在一些实施例中,设置一个或多个信息使用策略可以通过添加、撤销或以其它方式修改信息使用策略的一系列事务来实现。在304处,用户提交的各种事务可以在304处添加到区块链分类账。例如,对于某一信息共享策略p,用户可以出于任何目的提供向实体A-Z分发讨论中的信息的授权。然后,用户可以撤销使用信息来创建目标广告的授权。用户还可以撤销实体D和P使用其数据的授权。在此实例中,每个添加/撤销可以由单独的事务组成,所述事务被写入跨区块链网络110分发的区块链分类账。在评定信息共享策略p的当前状态后,可以根据上述事务确定用户已经授权将其信息分发到实体A-C、E-O和Q-Z,以用于创建目标广告以外的任何目的(这可通过代码标识)。因此,对关于符合这些要求的信息共享策略p的信息的任何请求应被授权。

在306处,客户端装置102可以将信息传输到主机服务器106。客户端装置102向主机服务器106传输的信息可以加密。在一些实施例中,主机服务器106可以代表不可信实体操作。在这些实施例中,客户端装置102可以使用与本文所描述的服务相关联的公钥对信息进行加密。这样,主机服务器106无法访问向其提供的信息。在一些实施例中,主机服务器106可以是可信实体。在这些实施例中的至少一些中,由主机服务器106从客户端装置102接收到的信息可以由主机服务器106加密。加密的接收到的信息可以存储在主机服务器106上或者主机服务器106可访问的位置中。应注意,虽然步骤306在图中描绘为在步骤302和304之后发生,但是步骤306可以相对于这些步骤在任何时间发生。例如,步骤306可以在步骤302之前、之后或同时发生。

在客户端装置102向主机服务器106提供信息之后,数据使用者112可以在步骤308处请求所提供的信息。在一些实施例中,数据使用者112可以直接向主机服务器106传输请求。在一些实施例中,数据使用者112可以向本文所公开的服务提供商提交请求,并且所述服务可以将请求路由到主机服务器106。请求可包括与请求相关的数个细节。在一些实施例中,请求可以包括用于对所请求的数据进行加密的密码密钥(例如,与数据使用者112相关联的公钥)。在一些实施例中,请求可以包括要对所请求的数据执行的一个或多个函数。在一些实施例中,请求可以包括要放置所请求的数据的地址或位置,和/或要用于提供所请求的数据的通信信道。

在接收到对数据的请求后,主机服务器106可以确定对数据的所述请求是否为被授权请求。为此,主机服务器106可以从与信息使用策略相关的区块链网络110检取区块链分类账或以其它方式访问所述区块链网络。在检取区块链分类账后,主机服务器106可以在312处确定与所请求的数据相关的信息策略的当前状态。这可涉及在区块链分类账内标识与所请求信息相关的已记录事务中的每一个,并基于那些事务评定哪些信息使用得到授权。在这种情况下,主机服务器106可以标识已经由用户授权的信息使用的类型。然后,主机服务器106可以将所请求的信息使用与用户已经授权的信息使用类型进行比较,以确定请求是否得到授权。

在确定请求是被授权请求后,主机服务器106可以通过访问所请求的信息,(在专用包围区内)对所述信息进行解密,对解密的信息执行任何相关函数或计算并使用密码密钥对输出的信息进行重新加密来遵从所述请求。应注意,可以使用不同于在步骤302处用来对信息进行加密的密钥的加密密钥对输出的信息进行加密。在一些实施例中,主机服务器106可以将加密的输出数据存储在数据存储装置114上,如314处所描绘。在一些实施例中,加密的输出数据可以直接提供到数据使用者112(或提供到服务提供商以转发到数据使用者112)。

在加密的输出存储在数据存储装置114中的实施例中,主机服务器106可以向数据使用者112提供密码密钥,所述密码密钥可以用来在316处访问存储在数据存储装置114上的加密的输出。应注意,密码密钥可以由主机服务器106内的专用包围区提供,使得在主机服务器106上运行的其它应用程序无法访问所述密码密钥。一旦数据使用者112接收到密码密钥,数据使用者112就可以在318处访问数据存储装置114中的加密的输出,并且可以在320处使用密码密钥对所述加密的输出进行解密。

图4描绘了可以根据本公开的实施例实施的示例区块链记录。在图4中,区块链记录402(也称为区块链分类账)可以包括跨分散式网络分发的一系列交互记录。如所描绘,记录可以包括区块链,其中与各种策略有关的数个事务在块404中进行处理,然后作为区块链记录402的一部分分发到分散式网络的数个节点。具体来说,区块链记录402描绘了可以存储、更改和以其它方式更新信息使用策略的记录的技术。

如上所述,数个块404可以附加到起源(genesis)块406。虽然可以针对区块链记录402生成起源块406,但在一些实施例中,可以忽略起源块的内容。在其它实施例中,起源块406可以包括一个或多个信息使用策略的初始状态的指示。在一些实施例中,起源块406可以代表本文所描述的服务的提供商由分散式网络节点生成。在一些实施例中,可以针对不同类型或类别的信息使用策略生成单独的起源块406和/或区块链记录402。在一些实施例中,可以针对每个账户生成单独的起源块406和/或区块链记录402。

由于用户通过计算装置408请求策略更新,因此可以针对每个请求生成事务。计算装置408可以是区块链网络的网络节点。与事务有关的信息又可以添加到块404中。每个块404可以包括标头410和事务数据412。标头410可以包括区块链记录402中的前一个块的散列以及临时值(nonce value)以及要用于验证块404的各种其它信息。每个块404可以针对某一预定数量的(N个)事务存储事务数据412。

在一些实施例中,包括在块404中的事务数据412可以包括有效负载数据414和数字签名416。有效负载数据414可以包括指示要更新的特定策略的策略标识符418,以及指示要关于策略记录的修改或其它事务的事务数据420。有效负载数据412还可以包括任何其它合适的信息。例如,在一些实施例中,策略数据412可以包括与关于策略数据412的数据使用者相关联的公钥。在一些实施例中,计算装置408可以使用与计算装置408相关联的密码密钥或与数据所有者(例如,用户)相关联的密码密钥对事务数据412进行签名,从而生成数字签名416。

区块链的每个块404可以通过使用给定临时值独立地生成前一个块的散列以及通过验证后一个块来独立地验证。另外,每个事务数据412都可通过验证数字签名来验证。可以针对与特定信息使用策略类型、特定用户、特定数据使用者相关或基于任何其它合适的因素的事务数据412而搜索块404。应注意,在区块链记录402中记录的事务可以包括由用户以外的实体进行的事务。例如,每当接收到访问特定信息的请求时,区块链记录402可以记录访问所述信息的尝试。因此,信息使用策略可包括访问限制,因为策略可以限制特定实体可以在某一时间段内访问信息的次数。

图5描绘了示出根据至少一些实施例的使用区块链来确定请求是否为被授权请求的技术的流程图。在一些实施例中,图5中描绘的过程500可以由主机服务器执行,所述主机服务器例如图1中描绘的主机服务器106。

在至少一些实施例中,过程500可以在502处在从数据使用者接收到对用户数据的请求时开始。在一些实施例中,请求可以是对由用户操作的客户端装置收集的数据的请求。

在一些实施例中,主机服务器可以在504处从区块链网络节点接收当前区块链状态。所描绘的区块链状态描绘了数个块504(A),其中每个块包括25个事务(描绘为更小的框504(B))。在当前区块链状态下,区块链记录器或分类账可能已记录与接收到的请求相关的数个事务(指示为块内的已填充框504(c))。

在506处,主机服务器可以验证用户是否已设置与请求有关的信息使用策略以及接收到的当前区块链状态是否真实。在一些实施例中,即使用户未设置与特定数据使用者有关的信息使用策略,也可以存在涵盖请求的默认数据策略。在一些实施例中,系统可能要求用户在接收到对所述用户数据的请求之前针对用户数据创建相关策略。在一些实施例中,验证接收到的当前区块链状态是否真实可以涉及与网络上的其它主机服务器联系,并且将接收到的当前区块链状态与由那些其它主机服务器存储的当前区块链状态进行比较。在一些实施例中,验证接收到的当前区块链状态是否真实可以涉及检查接收到的当前区块链状态内的数字签名和/或散列值。

在确定用户未设置相关的信息使用策略后(并且在默认策略不可用的情况下),或在确定无法验证接收到的当前区块链状态的真实性后,过程500可涉及在508处中止请求。在一些实施例中,主机服务器可以传回指示请求无法完成的通知。在一些实施例中,主机服务器可以仅提出错误,所述错误可以由数据使用者通过错误处理器来处理。

在验证用户已设置与请求有关的信息使用策略并且接收到的当前区块链状态是真实的后,过程500可涉及标识和编译与接收到的请求相关的数个事务记录。在一些实施例中,可以标识与请求相关的区块链记录内的每个事务。例如,可以针对与特定数据使用者、用户、函数、时间段或关于请求的任何其它因素有关的事务记录查询区块链记录。在510处,可以将每个标识的事务记录编译成一组相关事务记录。

在已编译与接收到的请求相关的事务记录后,过程500可涉及在512处生成当前策略状态。这可涉及解析所述一组相关事务记录中的每个事务记录,以确定已添加哪些策略,已撤销哪些策略,以及已向哪些数据使用者提供哪些信息。在一些实施例中,这还可以涉及确定策略中包括的数据使用是否存在任何限制以及满足那些限制的程度。例如,信息使用策略可以指示特定数据使用者每天只能请求五次请求中所指示的一条特定用户数据。在此实例中,系统可以标识数据使用者已请求这条特定用户数据的来自当前日期的事务记录的数量。在此实例中,如果来自当前日期的指示对数据的请求成功事务记录的数量超过五,则当前策略状态可反映数据使用者无法访问这条特定用户数据。

然后,过程500可以涉及在514处确定接收到的请求是否为被授权请求。在一些实施例中,这可以涉及确定接收到的请求是否符合生成的当前策略状态。在一些实施例中,如果所请求的信息被指示为可用于数据使用者,则请求可以被确定为符合生成的当前策略状态。在一些实施例中,如果所请求的信息未被指示为对数据使用者不可用,则请求可以被确定为符合生成的当前策略状态。如果请求被确定为被授权请求,则过程可以继续进行到516,并且可以处理请求。此步骤在别处更详细地描述。如果请求未被确定为被授权请求,则可在508处中止请求。

图6描绘了根据至少一些实施例的以公平方式向多个数据使用者提供所请求的信息的过程的流程图。在一些实施例中,图6中描绘的过程600可以由主机服务器执行,所述主机服务器例如图1中描绘的主机服务器106。在一些实施例中,过程600可以由计算装置(例如,主机服务器106)托管的包围区执行,其中包围区是受可信执行环境平台保护的隔离的存储器区,其与计算装置的其它存储器分离。在这些实施例中,输出数据无法用于在计算装置上、在包围区外部运行的其它应用程序。在一些实施例中,计算装置可以由多个数据使用者中的数据使用者操作。多个数据使用者中的每一个可以是不可信实体。

在一些实施例中,过程600可以在602处在接收对输出数据的分发指令时开始。在一些实施例中,可以根据用于生成输出数据的用于计算的规范标识多个数据使用者,所述规范是从公用分类账(例如,区块链分类账)检取的。

在604处,过程600可以涉及使用第一密码密钥对输出数据进行加密。在一些实施例中,可以使用对称密码方案对输出数据进行加密。换句话说,可以使用相同的密码密钥对输出数据进行加密和解密。在这些实施例中,提供到数据使用者的第二密码密钥可以与用于对输出数据进行加密的第一密码密钥相同。在一些实施例中,可以使用不对称密码方案对输出数据进行加密。换句话说,用于对数据进行加密的密码密钥可以不同于用于对输出数据进行解密的密码密钥。

在606处,过程600可以涉及向多个数据使用者提供对加密的输出数据的访问权。在一些实施例中,加密的输出数据被写入到存储单元,多个数据使用者中的每一个能够访问所述存储单元处的加密的输出数据。在一些实施例中,加密的输出数据被传输到多个数据使用者中的每一个。在至少一些实施例中,可以使用与数据使用者相关联的公钥进一步对加密的输出进行加密。例如,可以向多个数据使用者中的每一个提供对加密的输出数据的访问权,所述加密的输出数据使用其相应的公钥进一步加密。

在608处,过程600可以涉及确认已经由多个数据使用者中的每一个接收到加密的输出数据。这可涉及从多个数据使用者中的每一个接收所述数据使用者接收到对加密的输出数据的访问权的指示。在一些实施例中,数据使用者接收到对加密的输出数据的访问权的指示可以是来自所述数据使用者的已签名送达回执,所述送达回执已使用与数据使用者相关联的私钥进行签名。在一些实施例中,过程600还可以涉及生成接收到对加密的输出数据的访问权的指示中的每一个的聚合编码。例如,包围区可以聚合从每个数据使用者接收到的已签名回执,并且可以将所述聚合发布到分类账上。

在一些实施例中,过程600可以进一步涉及确认尚未向多个数据使用者中的每一个提供对加密的输出数据的访问权。在一些实施例中,在确认这一点后,过程600可以进一步涉及将指示已经向多个数据使用者提供对加密的输出数据的访问权的条目写入到分类账。

在610处,过程600可以涉及将信号传输到由相应的数据使用者托管的一个或多个包围区。在一些实施例中,如果在超时窗口内未从所有多个数据使用者接收到已接收到对加密的输出数据的访问权的指示,则不向包围区中的任一个发送信号(并且不向多个数据使用者中的任一个发布第二密码密钥)。换句话说,除非在超时窗口内从所有数据使用者接收到已签名回执,否则无法发送信号。如果不是,则可以中止和重新开始过程600。或者,所述过程可以从上述606重新开始。

在612处,过程600可以涉及使一个或多个包围区向其相应的数据使用者发布第二密码密钥。应注意,第一密码密钥和/或第二密码密钥(其可以是相同或不同的密钥)中的每一个可以存储在存储器中、在包围区外部,从而执行计算。为此,密码密钥可以被“密封”,或换句话说,使用只有处理器知晓的单独密码密钥进行加密。在614处,过程600可以涉及数据使用者使用所提供的第二密码密钥对加密的输出数据进行解密。

可以描述一些实施例的更具体描述。所述描述在上述实施例的上下文中。在此实例中,数据使用者可以提交计算某一条敏感数据的请求。在一些实施例中,数据使用者可以使用与所述数据使用者相关联的私钥对此请求(下文称为消息0)进行签名。消息0可以传输到分布式网络的节点,其中所述消息可以由所述节点处理,如下文所描述。

更具体地说,消息0可以包括以下数据元素:

msg0=调用、p、输入和签名

在接收到消息0后,节点可以如上所述调用安全包围区,以(在基于数据的策略而确定应向数据使用者授予所述数据后)执行计算,从而提供消息0和最新块(h)的散列作为自变量。节点还可以接收(上述)区块链的一部分,一直到最新块(h)。在一些实施例中,节点或包围区可以标识和检取与请求(p)相关的策略。在完成计算之后,包围区可以生成消息1,所述消息可以包括存储的数据的摘要。应注意,可对消息1进行加密和/或签名。在此情境中,存储的数据的摘要可以包括来自存储的原始数据的计算值。应注意,一些策略可以允许数据使用者访问某些摘要,而其它策略阻止同一数据使用者访问基础原始数据。

更具体地说,消息1可以包括以下数据元素:记录、p、临时值、输入、输出和签名

在创建消息1后,包围区可以将其创建记录在区块链内(以记录数据使用者访问数据的尝试)。为了将消息1记录到区块链中,可以将消息1传输到区块链网络中的每个节点。在区块链网络中,区块链网络中的挖掘程序或节点可以建议包含消息1的块。一旦已在区块链上接受消息1(具有可忽略的反转概率),包围区就可以显示对输出进行加密的密钥。

应注意,在一些实施例中,在可在区块链上接受所述块之前,挖掘程序执行一些检查。例如,在一些实施例中,节点包围区可以联系v个其它表决器包围区以收集关于最新块的散列有效性的v个投票。在此实例中,v个表决器包围区中的每个表决器利用消息2(其包括投票决策)对节点作出响应。可以或可以不对消息2进行签名。可以记录每个接收到的消息2的响应,以便确定至少某一阈值的(c个)表决器在生成块的有效性上达成一致。c或更多个表决器一致认为有效的生成块(块h')随后附加到区块链。在一些实施例中,在推断块h'有效之前,节点包围区首先查看所述h'是否比记录块(例如,消息1中的上述“h”)超前某一预定数量个块(例如,6个块)。应注意,一旦块已达到预定深度(例如,达到n个块),所述块就可以被视为具有可忽略的反转概率。

根据节点“i”,示例性消息2中的数据元素可以包括以下各项:msg_2i=签名

在替代方法中,可以包括数据生产者的系统可以指定实体以充当时间戳服务器,其向对最新会聚块标头的请求进行签名。例如,数据生产者广播块高度比所见的最长链小某一阈值数量的块的散列(块的散列可以是上述h')。与上文类似,在此方法中,节点包围区可以查看h'是否已经比记录块超前阈值数量的块。

在挖掘程序将块h'写入到区块链后,并且在节点包围区确定h'比记录块超前阈值数量个块后,节点包围区可以向数据使用者发布所请求的数据。为此,节点包围区可以生成包括密码密钥(例如,输出密钥)的消息3,所述密码密钥可以用来对所请求的数据进行解密(例如,其中所请求的数据以加密形式存储在可访问数据库条目中)。然后,可以将消息3传输到数据使用者。在一些实施例中,可以使用与数据使用者相关联的公钥对消息3进行加密。然后,数据使用者可以使用所提供的密码密钥来访问数据。然后,数据使用者可以使用其私钥对加密的计算值(例如22538步)进行解密,所述私钥对应于用于对计算机值进行加密的公钥。

消息3的实例可以如下所示:

msg_3=enc

如上所述,根据实施例的系统可以被配置成使用各种共识算法来解决与一个或多个块有关的有效性挑战。例如,系统可以采用投票共识模型(其中每个节点能够对其认为有效的块“投票”),或系统可以采用工作量证明(PoW)模型(其中节点通过执行大量计算来竞争“矿”块)。在一些实施例中,系统可以采用投票和PoW协议的某一组合。应注意,在一些实施例中,块可能需要比记录块超前某一预定数量的块,以便被视为有效。例如,当检取策略数据时,系统可以确保包括最新策略事务的块比在检取所述策略数据之前或提供所请求的数据之前的记录块超前至少6个块。

图7描绘了根据本公开的实施例的可由系统执行以确保分类账(即,区块链)中的块有效的各种检查的实例。如上所述,共识算法可用于验证分布式区块链平台的真实性,并且是在互相不可信的参与者的网络中建立协议的过程。虽然数个共识算法是可用的(例如,中本聪共识(Nakamoto Consensus)),但对于所公开的系统,可能需要进行额外检查以防止并发问题。例如,所公开的系统可以被配置成确保连续块到区块链的写入不会重叠。

关于图7,考虑情境702、704和705。在情境702中,h1可以是在计算包围区针对特定交互执行所请求计算(例如,计算用户在一周内的步数)时区块链中的最新块的散列。h1'可以是区块链网络中的节点,节点同意应记录计算和/或交互的块的散列。h2可以是在同一计算包围区针对第二交互的所请求计算开始时的块的散列,并且h2'可以是包括第二交互的块的散列(在节点在所述块上达成一致之后)。情境702示出由计算包围区处理的每个交互可以根据所请求计算的次序按顺序进行。

另一方面,情境704和706描绘了可能发现将块写入到区块链并不合适的情境。例如,在704和706中,h1可以是在计算包围区针对特定交互执行所请求计算(例如,计算用户在一周内的步数)时区块链中的最新块的散列。h1'可以是区块链网络中的节点,节点同意应记录计算和/或交互的块的散列。h2可以是在同一计算包围区针对第二交互的所请求计算开始时的块的散列,并且h2'可以是包括第二交互的块的散列(在节点在所述块上达成一致之后)。然而,在此实例中,在由安全包围区执行第二计算之后确定h1',因此在开始对另一交互的后续计算之前,安全包围区不完成对交互的所请求计算。这可以指示特定的安全包围区/节点是恶意的或未正常运行。在这种情况下,网络中的其它节点可以防止此类后续交互被写入到区块链。

图8描绘了根据至少一些实施例的使用包围区和共享分类账来完成符合策略的计算的技术的说明性实例。如图8中所描绘,所述技术可以涉及多个包围区,例如密钥管理器包围区802、策略检查器包围区804以及计算包围区806。包围区802-806中的每一个可以访问分类账808,所述分类账提供策略以及关于那些策略进行的数据事务的不可变记录。所述技术还可以利用一个或多个数据存储库,这些存储库可以在包围区外部实施。例如,所述技术可以使用存储密钥数据的永久性数据存储装置810、存储策略的当前状态的状态数据812、存储(加密的)使用者数据以用作到一个或多个计算的输入的输入数据814,以及存储计算输出以提供到一个或多个数据使用者818的输出数据816。

现在将借助于讨论图8所示的各种组件之间的交互来描述使用包围区和共享分类账完成符合策略的计算的技术。这些交互描述为过程800。

在过程800的步骤1处,用户820可以创建计算并且可以将用于所述计算的规范记录在分类账808中。任何用户820都可以创建要添加到分类账808的计算。在一些情况下,用户820可以是与数据使用者818相关联的用户。在一些情况下,用户820可以是数据被分发到数据使用者的输入提供商822。

作为说明性实例,可以在输入提供商822与至少一个数据使用者818之间达成一致,以使用以下计算:

计算{

id:525600,/*唯一id*/

输入:[("txs":vk_Alice),("db":vk_Acme)],

输出:[("rprt":[pk_Acme,pk_BankA,pk_BankB])],

策略:0xcoff..eeee/*8r 2 txs.新鲜(r)*/

函数:0x1337...c0de,/*聚合函数*/

}

在以上实例中,任一方都可以将此计算规范添加到共享分类账。“id”字段可以是唯一地标识系统中的此计算的值(例如,64位值)。“inp”字段可以列出一组命名的输入,以及输入提供商822(可以预期会对那些输入进行签名)的公钥。类似地,“输出”字段可以列出一组命名的输出,其中每个输出都有一个或多个接收方数据使用者818(所述输出可以在其相应的公钥下加密)。输入和输出数据结构可以属于数种类型中的一种,包括非结构化文件、列表、密钥值存储装置或任何其它合适的结构。“函数”字段可以唯一地标识函数f。在一些实施例中,可以使用实施函数f的机器代码程序的密码散列测量来进行此操作。在此实例中,可以针对输入“txs”和“db”评估f。在一些实施例中,历史相依防护可以包括在属性“策略”内。类似于函数f,可以通过实施所述策略的机器代码的密码散列测量来指定策略。

存储在分类账808中的用于计算的规范可以包括与所述计算相关联(例如,绑定到所述计算)的公钥。在一些实施例中,此公钥可以由密钥管理器包围区802生成。在这些实施例中,对应于与计算相关联的公钥的私钥可以被密封并存储在存储装置810中。然后,仅将密封的私钥提供到策略检查器包围区804和/或针对所述计算工作的计算包围区806。应注意,通过将密码密钥绑定到计算而不是原始输入数据,系统实现了跨越函数评估和跨越计算重复使用输入,而不必复制数据。应注意,永久性存储装置810可以存储私钥,即使所述私钥处于包围区外部也是如此,因为私钥是密封的。

在针对分类账808创建并记录计算后,输入提供商822可以将他/她自己绑定到所述计算。例如,计算可以提供与用户的每月支出有关的数据,以由数个数据使用者与其它用户开支数据聚合在一起。只要数据使用者仅接收整体总额(即无粒度),用户就可以决定他或她批准使用此数据。在此实例中,用户可以将他/她的输入绑定到所述计算。在过程800的步骤2处,输入提供商822可以联系密钥管理器包围区802以获得用于对要在计算中使用的输入数据进行加密的公钥。然后,可以使用与计算相关联的公钥对输入提供商822的输入进行加密并将所述输入存储在输入数据814中。另外,密钥管理器802可以生成用于保护所有未来函数评估中的计算状态的单独密钥,所述密钥可以密封并存储在永久性存储装置810中。

在过程800的步骤3处,可调用策略检查器包围区804以检查计算的执行是否符合所述计算的策略。策略检查器检取来自分类账808的计算的策略数据、来自输入数据814的输入数据、来自状态数据812的计算的先前状态,以及访问来自密钥管理器包围区802的数据所需的任何密码密钥。应注意,提供到策略检查器包围区804的密码密钥可以被密封,使得策略检查器包围区804能够借助于与用于包围区的处理器相关联的私钥来访问所述密码密钥。由于系统必须扩展到大数据,并且由于环境的物理内存有限,所以可以将加密的输入和状态放置在非包围区存储器中,并且在包围区的受保护的存储器内按需求对被访问的位进行认证、完整性检查和解密。

策略检查器包围区804可以通过检查两个事件来检查计算的执行是否符合所述计算的策略。首先,计算必须添加到分类账808中,并且任何一方稍后不会撤销计算。在创建本地副本时,策略检查器包围区804可以针对与计算有关的条目扫描分类账808,并仅编译、创建和撤销所述条目。然后,策略检查器对预测的有效性进行断言:

在上文中,生成一组内容,其表示已经关于某一分类账高度t创建并且未撤销的与计算相关联的策略。

其次,必须满足计算的策略的条件。在一些实施例中,策略检查器804可以创建分类账808的本地副本。假设策略检查器包围区确定计算的执行符合所述计算的策略,那么过程800可涉及继续执行计算。

[e|t

在上文中,e是用于计算的一系列分类账808条目中最后记录的元素(即,条目)。另外,t可以是分类账808的高度,并且σ可以是签名。作为实例,考虑输入中的所有事务记录必须由输入提供商822签名的策略属于同一月份并且是新鲜的。强制执行新鲜度的一种高效方法是传播计算状态(包含最新事务记录的时间戳),然后断言当前分类账808输入中的所有事务记录具有更晚的时间戳,因此归纳性地指示新鲜度。为此,可以写入函数f,使得所述函数记录输入记录中的最高时间戳作为计算的状态,并实施策略以检查前述一系列分类账条目[e|...]中的最后一个元素(此元素称为e)。为了评估策略,我们要求策略检查器包围区804的主机加载e的状态(可以产生在e中记录的摘要策略状态),并将控制转移到策略检查器804,所述策略检查器获取当前分类账808输入中的每个事务记录进行并将其时间戳与e的状态进行比较。或者,策略检查器804也可以加载来自所有先前计算的输入((即,所有[e|...]),并检查当前输入中的每个分类账808记录的成员资格。应注意,此过程会使得计算和存储开销大大增加。

在过程800的步骤4处,在从策略检查器包围区804获得批准后,可以调用计算包围区806以执行计算。计算包围区806可以检取来自输入数据814的输入数据、要对输入数据执行的函数的信息、数据使用者(和与那些数据使用者相关联的公钥)、分类账808的当前高度(在由策略检查器804检查时),以及在执行计算时使用的任何其它相关信息。然后,计算包围区806可以对输入数据执行函数以生成输出数据。在一些实施例中,可以使用一个或多个密码密钥(例如,与数据使用者相关联的公钥)对输出数据进行加密并将所述输出数据存储在输出数据816中。在一些实施例中,可以使用加密密钥对输出数据进行加密,其中要向其提供数据的数据使用者不具有对应的解密密钥。

在一些实施例中,在调用后,计算包围区806可以请求要用于执行计算的信息。例如,计算包围区806可以从策略检查器包围区804请求一个或多个密钥,如以下命令中所描绘:

ε

ε

其中

其中

在上文中,ε

在过程800的步骤5处,计算包围区806可以针对分类账808创建所执行计算的记录。未来的策略检查器包围区和/或计算包围区可以使用此记录来执行计算。例如,策略检查器包围区和/或计算包围区可以确定因为已经针对特定数据使用者执行了计算,所以第二次执行计算会违反策略。在分类账808是区块链的实施例中,此分类账提供不可变记录,这对于此系统是有利的,因为它还防止了窜改。在一些实施例中,在执行计算之后,但在将计算的记录写入到分类账808之前,计算包围区806可以执行可串行性检查。通过检查在用于执行计算的高度h之后发生的所有记录来执行可串行性检查以确保计算仍然处于活动状态,其中h是在策略检查器804检查策略数据时分类账808的高度(策略检查器804可以将高度h传递到计算包围区806)。如果可串行性检查失败(即,确定已经执行计算),则计算包围区806中止计算,并且可能不会将任何记录写入到分类账808。

此处,检查分类账L以确保计算c仍处于活动状态,并且在高度t与当前高度t'之间不执行其它函数评估(利用c.id)。如果检查失败,并且未在分类账L上记录条目,则计算被拒绝。包围区(例如,策略检查器804和/或计算包围区806)可以被配置成拒绝不满足可串行性检查的请求(即,所述包围区拒绝计算)。因此,预计分类账(更准确地说,分类账的参与者)会拒绝不满足可串行性的条目。然而,由于每个包围区在内部重复检查,所以所述分类账这样做并不可信。

在利用基于历史的策略的实施例中,系统可能需要记录所有计算步骤,使得计算包围区806必须在其可将输出显示给任何数据使用者818之前将函数f的评估记录在分类账808上。例如,计算包围区806可以执行“发布”命令,其中:

L.发布(HW.引用(ε

其中

应注意,在上文中,e表示要写入到分类账808以用于计算c的条目。如上所述,t表示分类账808的高度。条目E中还可包括输入值、输出值、状态和熵源r(其可以是伪随机位流)。

在过程800的步骤6处,系统可以实施用于将输出数据分发到多个数据使用者并同时确保所述输出数据分发的公平性的技术。下文关于图9更详细地描述这些技术。

图9描绘了根据至少一些实施例的用于将数据分发到多个数据使用者并同时确保所述数据分发的公平性的技术的说明性实例。虽然图9的所示实例描绘了分发到三个数据使用者(902(A-C))的数据,但应注意,可以实施系统以按所描述的方式将数据分发到任何数量的(n个)数据使用者。出于图9中所示的实例的目的,我们假设由数据使用者(902(B))中的一个托管的计算包围区904正在输出数据,所述数据使用者是不可信方。在实例中,未托管计算包围区的n-1个数据使用者中的每一个可以实施递送包围区(906(A)和906(C)),所述递送包围区被配置成执行本文所描述的功能的至少一部分。此外,每个数据使用者可以访问公用分类账908,所述公用分类账提供策略以及关于那些策略进行的数据事务的不可变记录。分类账908的实例可以是区块链,例如上述区块链210。在一些实施例中,由计算包围区904生成的输出可以写入到输出数据910,所述输出数据可以存储在计算包围区904的主机(例如,代表数据使用者902(b)操作的计算机)的存储器中。可以向数据使用者902(A-C)中的每一个授予访问权以从输出数据910检取数据。

现在将通过论述图9中所示的各种组件之间的交互来描述用于将数据分发到多个数据使用者并同时确保所述数据分发的公平性的技术。这些技术描述为过程900。应注意,过程900可以在上文关于图8所描述的过程800的步骤6内执行。

过程900的步骤1可以首先涉及对计算的输出进行加密以在新鲜随机密钥k

ε

ε

然后,计算包围区806将加密的输出Enc(k

在过程900的步骤3处,计算包围区904可以生成所有n个签名的聚合编码,并将包括所述聚合的记录π

在一些实施例中,发布到分类账908的记录可以与已执行的计算的分类账上(on-ledger)记录组合。

请注意,这可能要求计算包围区在可移到过程900的步骤3之前在过程900的步骤2处接收所有签名(即,已签名回执)。如将认识到,不诚实的数据使用者902可能会通过仅不提供已签名回执而在此时尝试停止所述过程。因此,在一些实施例中,系统可以包括涉及确保过程900继续进行的额外过程,这些过程在以下章节中描述。

为了确保过程900继续进行,计算包围区可以设置超时,随后所述计算包围区中止过程并重新开始,而不是在步骤2和3中执行阻止接收。应注意,步骤2或3中的中止不会损害公平性,因为所有接收方(数据使用者902)必须继续进行超过步骤3(并发送签名),以便将输出递送到那些接收方中的每一个。

在过程900的步骤4处,在看到记录在分类账908上的记录π

在过程900的步骤5处,数据使用者902中的任一个可以在分类账908上发布记录π

为了确保步骤4和5中的过程900继续进行,可以进行以下修改。首先,应注意,每个数据使用者通过重试失败的步骤直到发现所需的分类账条目(步骤4中的

首先,代替扫描整个分类账,可以对数据使用者902必须扫描的数个条目进行绑定,然后必须在所述限制内发布消息,以免方案被(所有数据使用者)视为已中止。为此,可以引入参数Δ

其次,我们让数据使用者902推进分类账,以防止永久等待(但在实践中,我们可能会发现并发、无关的计算可以自行推进分类账)。系统使数据使用者902在分类账上产生虚拟条目,其唯一目的是推进分类账。为了防止此机构充当其它输出接收方上用于拒绝服务攻击的车辆,可以强制要求在最后一个分类账条目(或至少由特定数据使用者902进行的最后一个分类账条目)后必须经过足够的时间(使用可信时钟源)。以此方式,虚拟条目可以充当时钟刻度(clock tick)。此外,为了防止(频繁发布到分类账的)其它计算使计算中止,可以在时钟刻度方面定义Δ

然后,在过程900的步骤6处,每个递送包围区906可以从其相应的数据使用者接收证明。作为响应,在过程900的步骤7处,在接收到证明σ

本公开的实施例提供优于常规系统的数个技术优势。例如,本公开的实施例使得用户能够以安全的方式指示如何分发和使用他或她的信息。以所描述的方式使用区块链可以使用户能够以安全、不可变且可验证的方式管理信息使用策略。这又使得能够在包括不一定可信的实体的分布式环境中执行可信事务。另外,系统的实施例能够维护所述用户的数据的实际使用方式的记录,从而使用户了解得更多。

此外,虽然所描述的系统的实施例实现了对敏感数据的高效计算,但所述实施例不需要在本地执行计算。实际上,所述系统甚至能够实现由不可信实体对敏感数据执行计算。以所描述的方式使用专用包围区来执行各种处理使不可信实体能够处理敏感数据,而无需实际获取对所述敏感数据的访问权。

另外,本文所描述的系统被配置成同时将敏感数据发布到不同的数据使用者。这可防止一个或多个数据使用者与计算数据的主机计算机之间进行共谋。当不同时分发数据时,共谋可能对使用者有害。例如,在数据使用者是使用者业务的竞争者的情境中,如果数据使用者在其它数据使用者之前接收用户数据(或者如果其它数据使用者根本未接收用户数据),则使用者可能被迫接受来自所述数据使用者的提议,即使所述提议不符合使用者的最大利益。所描述的系统通过确保用户数据的所有使用者同时接收所述数据或根本不接收所述数据来防止这种情况。

应理解,本发明的任何实施例都可以使用硬件(例如,专用集成电路或现场可编程门阵列)和/或使用计算机软件以控制逻辑的形式实施,其中通用可编程处理器是模块化的或集成的。如本文中所使用,处理器包括单核处理器、在同一集成芯片上的多核处理器,或在单个电路板上或网络化的多个处理单元。基于本公开和本文中所提供的教示,本领域的普通技术人员将知道并且理解使用硬件和硬件与软件的组合来实施本发明的实施例的其它方法和/或方法。

本申请中描述的任何软件组件或功能可实施为使用例如Java、C、C++、C#、Objective-C、Swift的任何合适的计算机语言或例如Perl或Python的脚本语言使用例如常规的或面向对象的技术由处理器执行的软件代码。软件代码可作为一系列指令或命令存储在计算机可读介质上以供存储和/或传输,合适的介质包括随机存取存储器(RAM)、只读存储器(ROM)、例如硬盘驱动器或软盘的磁性介质,或例如光盘(CD)或数字通用盘(DVD)的光学介质、闪存存储器等等。计算机可读介质可以是此类存储或传输装置的任何组合。

此类程序还可以使用适应于经由包括互联网的符合多种协议的有线、光学和/或无线网络进行传输的载波信号来编码和传输。因此,根据本发明的实施例的计算机可读介质可以使用以此类程序编码的数据信号来创建。以程序代码编码的计算机可读介质可与兼容装置一起封装或与其它装置分开提供(例如,经由互联网下载)。任何此类计算机可读介质可以驻存在单个计算机产品(例如,硬盘驱动器,CD或整个计算机系统)之上或其内部,并且可以存在于系统或网络内的不同计算机产品上或其内部。计算机系统可包括监视器、打印机,或用于向用户提供本文所提及的任何结果的其它合适的显示器。

以上描述是说明性的且不是限制性的。在本领域技术人员阅读了本公开之后,本发明的许多变体对于他们会变得显而易见。因此,本发明的范围不应该参考上面的描述来确定,而是应该参考待决的权利要求及其完整范围或等同物来确定。

在不脱离本发明的范围的情况下,任何实施例的一个或多个特征可与任何其它实施例的一个或多个特征组合。

除非明确指示有相反的意思,否则“一”或“所述”的叙述旨在表示“一个或多个”。

上文提及的所有专利、专利申请、公开案和描述都出于所有目的以全文引用的方式并入。并非承认它们是现有技术。

相关技术
  • 使用同时密钥发布来防止共谋的技术
  • 使用密钥基防止未经授权分发和使用电子密钥的方法
技术分类

06120113105113