Fidelius

来自典枢
YeezAdmin讨论 | 贡献2022年5月13日 (五) 02:20的版本 →‎典钥和枢钥
跳到导航 跳到搜索

Fidelius简介

Fielius是由熠智科技自主研发并完全开源的隐私计算中间件,基于机密计算和密态计算等技术,为数据要素的安全流通保驾护航。目前您可以在Github上查看源代码。 Fidelius具有如下特点:

  • 全流程隐私保护:原始数据不出域,支持模型参数、计算过程、计算结果弹性隐私保护,提供监管合规组件。
  • 企业级性能保证:自研高性能数据分析框架,支持大规模集群部署,满足工业场景性能需求。
  • 通用场景支持:不依赖第三方验证的跨平台私密数据传输和身份验证,支持WAN/LAN多网络环境部署;兼容TensorFlow、PyTorch等主流机器学习框架。

Fidelius遵从Apache License 2.0协议和GNU General Public License 3.0协议

Fidelius由来

Fidelius来自于《哈利波特》中的特殊而复杂的符咒:赤胆忠心咒(Fidelius Charm),其主要的用途是将一个秘密隐藏在“守密人”心中,除非守密人主动对他人泄露这个秘密,否则此秘密永远无法被人发现。

解决方案原理

下图描述了基于Fidelius实现数据合作的抽象流程。

基于Fidelius的数据合作流程.png

该方案最重要的核心是Fidelius中间件,通常来说Fidelius中间件会分别运行在数据提供方和数据使用方中(以Fidelius节点或者 Fidelius SDK的形式),需要注意的是,在大多数场景下,数据提供方和数据使用方之间没有直接的数据交换,即原始原始数据不会离开数据提供方的安全域,数据提供方仅公开元数据描述文件,这可以从根本上避免敏感数据的泄露问题。

同时,整个方案也结合了区块链技术,由于区块链本身具有去中心化、公开可验证等特性,其可以作为可信的传输通道和数据计算验证平台。

关于区块链和隐私计算结合的详细介绍,可以阅读 Fidelius和区块链

典型场景

Fidelius支持多种数据合作场景,我们按照输入数据、参数和模型的隐私保护需求划分为以下几个典型场景:

本地数据服务

数据提供方在本地部署并管理相关的存储、计算服务器,数据使用方使用算法提供方的算法请求数据提供方对数据进行计算,并获得计算结果。

可信要求

  • 原始数据不可篡改
  • 请求参数加密且不可篡改
  • 返回结果加密且不可篡改

由于原始数据存储在数据提供方本地,在数据提供方能够保证数据存储安全的情况下,可以不加密原始数据,以保证计算性能。

执行流程

  1. 数据注册:数据提供方传输原始数据至本地的Fidelius节点(此处简称 FP),后者自动生成相关元数据描述文件,同时元数据被发布至区块链网络;
  2. 任务发布:数据使用方所在的Fidelius节点或者 Fidelius SDK(此处简称 FC)通过区块链获取元数据描述文件后提交给数据使用方,后者根据数据描述信息提供相应的数据分析任务(通常为执行程序的二进制文件),FC将数据分析任务通过区块链网络转移到至FP;
  3. 数据计算:FP对任务进行检测后,基于原始数据和任务完成数据计算,生成计算结果和相应的证明,并将加密后的计算结果和证明发布至区块链网络;
  4. 结果返回:分析结果(加密)被保存在区块链网络中,区块链中的智能合约基于证明和结果进行验证,当计算结果通过验证后,FC将计算结果解密后返回给数据使用方。

托管数据服务

在很多情况下,数据提供方出于成本、管理等考虑,本地没有相关的存储、计算服务器,而是委托给第三方(云服务厂商)进行数据的存储和计算;数据使用方使用算法提供方的算法请求第三方(数据托管服务方)对数据进行计算,并获得计算结果。

可信要求

  • 数据对第三方不可见
  • 数据不可篡改
  • 数据使用请求需要经过数据提供方授权
  • 请求参数加密且不可篡改
  • 请求结果加密且不可篡改

执行流程

  1. 数据注册:数据提供方通过本地运行的 Fidelius SDK(此处简称FP)对数据进行加密,自动生成相关元数据描述文件和权限证明,同时元数据描述文件被发布至区块链网络,加密数据发送至第三方的Fidelius节点;
  2. 数据使用方所在的 Fidelius 节点或 Fidelius SDK(此处简称 FC)通过区块链获取元数据描述文件后提交给数据使用方,后者根据数据描述信息提供相应的数据分析任务(通常为执行程序的二进制文件),FC将数据分析任务通过区块链网络转移到至FP;
  3. 数据授权:数据提供方根据区块链网络中的请求,对该次任务进行数据使用授权,并将该授权提交到区块链网络中;
  4. 数据计算:第三方运行的Fidelius节点对任务进行检测后,基于加密数据、任务及数据授权完成数据计算,生成计算结果和相应的证明,并将加密后的计算结果和证明发布至区块链网络;

多数据源数据服务

由于算法本身的复杂性或业务的要求,计算结果需要基于多个数据源得出,且需要多个数据源集中到同一个计算环境中。这一场景类似于前述的数据托管服务,不同的是存在多个数据源,且计算环境可能部署在某一个数据源。这一场景类似于前述的数据托管服务,不同的是存在多个数据源,且计算环境可能部署在某一数据源侧。

可信要求

  • 数据对第三方不可见
  • 数据不可篡改
  • 数据使用请求需要经过数据提供方授权
  • 请求参数加密且不可篡改
  • 请求结果加密且不可篡改

执行流程

  1. 数据注册:每个数据提供方传输原始数据至本地的Fidelius节点(此处简称FP),后者对数据进行加密,自动生成相关元数据描述文件和权限证明,同时元数据描述文件被发布至区块链网络,加密数据发送至第三方;
  2. 任务发布:数据使用方所在的Fidelius节点(此处简称FC)通过区块链获取元数据描述文件后提交给数据使用方,后者根据数据描述信息提供相应的数据分析任务(通常为执行程序的二进制文件),FC将数据分析任务通过区块链网络转移到至FP;
  3. 数据授权:每个数据提供方根据区块链网络中的请求,对该次任务进行数据使用授权,并将该授权提交到区块链网络中;
  4. 数据计算:第三方对任务进行检测后,基于加密数据、任务及所有数据授权完成数据计算,生成计算结果和相应的证明,并将加密后的计算结果和证明发布至区块链网络;
  5. 结果返回:分析结果(加密)被保存在区块链网络中,区块链中的智能合约基于证明和结果进行验证,当计算结果通过验证后,FC将计算结果解密后返回给数据使用方。

模型服务

算法本身包含了专业知识、或通过机器学习得到的训练参数,因此具有相当的商业价值,需要保护其中的关键参数。数据提供方与数据使用方为同一方,此处称为算法使用方,在算法提供方的许可下使用算法对数据进行处理。计算环境部署在算法使用方本地。

可信要求

  • 模型参数不可见、且不可篡改
  • 算法使用方需要在算法提供方的许可下使用

注意:此处计算结果不需要加密,数据也不需要机密性或不可篡改的检查。

执行流程

  1. 数据注册:每个算法提供方传输参数数据至本地的Fidelius节点(此处简称FP),后者对模型参数进行加密,自动生成相关元数据描述文件和权限证明,同时元数据描述文件被发布至区块链网络,加密数据发送至第三方;
  2. 任务发布:算法使用方所在的Fidelius节点(此处简称FC)通过区块链获取元数据描述文件后提交给数据使用方,后者根据算法描述信息及本地数据生成相应的数据分析请求;
  3. 模型授权:算法提供方根据区块链网络中的请求,对该次任务进行数据使用授权,并将该授权提交到区块链网络中;
  4. 数据计算:算法使用方对任务进行检测后,基于任务及模型授权完成数据计算,生成计算结果。

系统架构

下图简述了Fidelius系统各个模块及其之间的关系。

Architecture.png
  • 服务平台:为各个模块提供入口,并为上层应用提供接入方式。根据需要,服务平台的表现形式分为两部分,可供用户直接访问的网页和可用应用访问的 API。在服务平台内部,核心是隐私计算层及区块链,并且提供了其他组件,这些组件可以根据需求进行组合、定制。
    • 区块链:区块链提供了信息传输通道,保证了关键信息可溯源以及不可篡改。这些信息包括算法提供方发布的算法信息,数据提供方发布的数据信息,任务请求信息以及交付的结果信息。通过部署在区块链之上的智能合约,在提交任务的计算结果时,系统会对数据使用结果进行验证,保证数据、算法、参数以及结果四者的一致性,从根本上保证数据合作的可信性。Fidelius并不依赖于特定的区块链实现,因此能够部署在不同区块链系统上。当然,Fidelius的性能,如吞吐量、响应时间等,受到区块链系统的影响,我们推荐使用高性能的YeeZChain作为底层区块链平台。
    • 开发平台:为开发者提供了定制数据分析算法的工具,包括 1. 不同的数据分析框架,用于实现不同的业务场景;2. 开发工具,包括可信编译器、静态分析工具等,用于帮助开发者更便捷的完成开发任务;3. 部署、运维工具,用于帮助开发者将开发完成的算法提交到区块链上、监控算法的使用情况、以及对算法的使用进行授权。注意,受限于区块链的存储性能,算法本身并不需要存储在区块链上,而是将算法的关键信息存储在区块链上;算法本身可以使用额外的文件存储服务。在某些场景下,该解决方案用于完成企业之间确定的数据合作任务,这些任务所需的算法是确定的,或者变动不频繁的,在这种情况下,可以一次性的部署所需的算法,并不需要完整的开发平台。
    • 合规组件:得益于区块链不可篡改的特性,合规组件可以通过区块链中的的数据进行审计,包括对于发布的算法的审计、对于发布的数据的审计、对于数据使用方的审计等。额外的,还可以禁止不符合合规要求的算法、数据、使用请求等。
  • 隐私计算层:负责完成数据使用的交互过程,包括数据元文件的生成、更新,数据分析任务的生成、发布、执行,以及计算结果的交付。隐私计算层的核心是Fidelius隐私计算中间件,基于TEE可信执行环境,提供了数据的通用计算分析支持。
  • 工具层:在大多数场景下,隐私计算层是 “私有的”,即隐私计算层的相关信息是不愿与服务平台共享的,为此,我们为提供隐私计算的用户提供了相关的管理工具,这些工具包括对于隐私计算节点的用户管理、数据管理、资源管理及权限管理,还包括对于隐私计算节点中运行的任务的监控及统计。

Fidelius隐私计算中间件

计算模型

典钥和枢钥

不同于其他机密计算,Fidelius引入了典钥和枢钥两个重要概念。

在 Fidelius 中,EKeyMgr 通过典钥提供了信任根,典钥是一对椭圆曲线下的公私钥对,在 EkeyMgr 中生成,并在生成之后使用 TEE 内的密钥加密典私钥后存储在不可信环境中,因此典私钥只有 EKeyMgr 可见,可以认为典私钥绑定了对应的EKeyMgr 或隐私计算节点。一个隐私计算节点存在至少一个典私钥。典公钥的原文公开、验证后,上传至区块链。尽管公开的典公钥可以用于任意的加密操作,EKeyMgr在典私钥上提供的操作是有限的,EKeyMgr 不提供任意的解密操作,即使用典公钥加密的数据是不能解密并公开个不可信环境的。枢钥是一对椭圆曲线下的公私钥对,与典钥不同的是,枢钥不在 TEE 环境中生成,而是在一般的环境下生成,例如浏览器、客户端、移动端等。枢钥与数据、算法模型、请求等业务相关,用户需要妥善保存自己的枢私钥,以免造成隐私泄露。

参考Fidelius部署教程#典钥及枢钥了解如何生成典钥及枢钥。

许可

算法抽象

安装

目前,Fidelius仅支持Ubuntu系统。

我们提供了从源安装的方式。您也可以从源代码编译安装,但是请注意,由于Intel SGX的限制,一个Enclave在构建时需要使用RSA 3072的私钥进行签名,自行编译安装时使用的私钥与通过源安装的版本所使用的私钥并不相同,因此,自行编译安装的Fidelius可能与从源安装版本不兼容。

目前Fidelius稳定版为v1.0release版,新版本即将推出,您可以切换到patterns分支查看,注意该版本目前并未提供相关技术支持。

更详细的内容参见Fidelius部署教程

使用Fidelius

作为一个中间件,Fidelius更多是被上层服务,例如典枢来使用,而不是单独使用。此处,我们提供Fidelius示例教程,用于说明Fidelius的工作流程。

Fidelius SDK

Fidelius和区块链

Fidelius的设计哲学中,我们并没有将Fidelius设计成与区块链紧耦合的关系,这是因为:

  • Fidelius 的初衷是为了解决数据合作的隐私保护问题,而不仅仅局限于区块链上的数据隐匿;
  • 我们发现当前大部分企业很难实现业务全部上链,这一方面是由于区块链作为底层基础设施仍然存在许多缺陷尚待解决,另一方面企业往往已经有成熟的数据存储平台(数据中心或者云存储),没有必要再基于区块链进行数据存储。

尽管如此,Fidelius中也使用了区块链技术,这里区块链主要起到了如下作用:

  • 可信第三方:如图所示,数据提供方和数据使用方之间基于区块链实现了交互,由于共识机制本身的去中心化特性,实际上区块链扮演了可信第三方的作用。具体来说,区块链能够 1) 存储数据,且数据不会被篡改,2) 传输数据,且不依赖于中心化的证书机制(例如HTTPS所依赖的证书),3) 验证数据,即对数据使用情况及分析结果的验证。
  • 抵抗作弊:由于区块链的特点,被区块链记录的数据合作行为是公开、且不可篡改的,这对于试图通过“刷单”等来影响数据合作的作弊行为有非常好的抵抗作用。虽然不同于在中心化的数据合作平台上处理作弊行为的“黑盒子”,公开的、不可篡改的数据合作记录可以被不断更新的自动化算法或人力检查,是一种有效的抵抗作弊的手段。