凡 航 徐 葳 王倩雯 王云河
1(清华大学五道口金融学院 北京 100083)
2(清华大学交叉信息研究院 北京 100084)
3(华控清交信息科技(北京)有限公司 北京 100084)
(fanhang@tsinghua.edu.cn)
数据是国家新兴基础性战略资源,党的十九届四中全会正式把数据列为一种生产要素,培育一个符合中国国情的数据要素市场引发各界高度关注.数据作为生产要素在流通中产生巨大价值的同时,我们也应注意到不当的数据使用和流通会产生负外部性,对他人、社会甚至国家造成负面后果.负外部性是指在无管制的状态下,个人或企业不必完全承担其行为带来的社会成本.例如:化工企业把污水排放到河流中、黑工厂雇佣童工等等[1-2].国家需要对数据使用和流通的负外部性进行有效监管和防控,保障数据要素市场的健康发展和社会福祉不因此受损.
解决数据流通中的数据滥用问题,保证数据使用安全可控,需要建立牢固的“信任基础”.在现实生活中常见的信任基础有:对合作伙伴的信任、对管理体制的信任、对法律体系的信任、对监管机构的信任、对某些去中心化技术(如区块链)的信任等.这些信任基础在不同的应用场景中会表现出不同的牢固性,同时存在不同的安全风险.如目前很多的数据共享应用建立在“一纸合同”的基础上,即相信数据使用方不会违反合同(其中包括对人、管理体制以及法律的信任).实际上,通过一纸合同或者管理措施控制数据的使用方式存在一定的风险和漏洞:数据使用方(企业实体或者其中的某些个体)在利益的驱使下,很可能会违反合同,对数据进行2次传播或用作他途.这种“信任基础”导致的数据滥用事件在事后很难举证:一是因为数据传播链条可能已经多次延伸;二是非法的数据使用痕迹在事后已被销毁.举证难导致法律无法在此发挥作用.
本文从数据流通安全可控的角度出发,基于对“多方互为监督、法律制度以及授信第三方”等的信任,着重解决数据流通中的以下关键问题:
1) 如何保证数据使用过程不泄露敏感信息;
2) 如何防止数据不会被用作他途或超次数使用;
3) 如何保证数据使用的真实性;
4) 如何保证数据使用全流程可追溯等.
从具体技术方法来看,本文参照以上信任基础,通过多方安全计算技术实现数据“可用不可见”,防止数据隐私泄露;并通过进一步融入智能合约、区块链存证等技术控制数据用途用量,保证数据流通使用的真实性和可追溯性,为法律举证提供有力支撑.
由于数据具有复制成本极低、数据副本难以管控、传播速度极快等特点,因此数据若以“可见”形式(明文数据)进行流通,在技术上将难以控制数据的具体使用目的和方式,容易产生数据滥用现象.因此,数据“可用不可见”能够为数据安全可控流通提供必要的前提条件.在产业界有一类相应的技术被称为“隐私计算”,是指在保证数据提供方不泄露原始数据的前提下,对数据进行分析计算的一系列信息技术,保障数据在流通与融合过程中的“可用不可见”[3].
隐私计算技术种类庞杂,如多方安全计算、同态加密、可信执行环境、联邦学习、差分隐私等都属于这一范畴.对隐私计算主流的技术类型基于“安全信任基础”进行分析,结果如表1所示[4]:
表1 主流隐私计算技术的信任基础
本文从理论发展完备性、技术成熟度、严谨性等角度考虑,选用多方安全计算技术实现数据流通过程中的“可用不可见”.
1.1.1 MPC计算协议的信任基础
图1 MPC应用系统结构与参与方框架
多方安全计算(secure multi-party computation, MPC)创始于姚期智院士提出的百万富翁问题[5],基于的前提假设是“无可信第三方”.也就是说,MPC不以任何中心化的第三方为信任基础,而是在一个约定的协议下,各参与方各自的隐私数据在计算函数F的作用下执行动作,保证执行过程中各自的隐私数据不泄露给其他方,并且最终的计算结果与各方数据明文汇聚计算的结果保持一致[6].MPC计算协议的参与方之间存在着互相制约、互相监督的关系,这种关系是其安全性成立的信任基础.MPC理论自20世纪80年代提出之后,经众多学者的原始创新工作,40年多来已逐渐发展成为现代密码学的一个重要分支.
1.1.2 MPC应用系统中的信任基础
一个典型的MPC应用系统结构图如图1所示[7].
MPC应用共包含6个参与方角色:任务发起方、算法提供方、结果使用方、数据提供方、调度方、计算方,在实际应用中一个实体可同时承担多个角色.参与实体的身份信任问题由一个授信的CA(或一个认证体系下的CA链)来解决.参与实体在进行MPC应用前需要首先进行注册,注册时明确其参与MPC计算可能承担的角色类型,并获得该CA颁发的数字证书.CA在证书中的数字签名使得恶意参与者或者外部攻击者都不能伪造和篡改证书内容.之后各参与方基于数字证书完成彼此间的身份互信,协作完成MPC计算任务.在任务执行过程中各参与方只能按照约定的角色完成相应的动作.
MPC应用系统包含3个主模块:任务调度管理模块、数据服务模块、计算引擎.这些模块为不同参与方提供了数据接口和操作接口,协作完成一个多方安全计算任务.数据服务模块能够将数据提供方的原始数据转换为计算因子(如常见的一种转化方式是基于随机数进行拆分).计算因子基于随机数生成,依托多方互为监督的信任基础保证无法反向推出原始数据,因此实现了密码学安全上的“数据可用不可见”,解决了数据流通中的敏感信息泄露问题.
智能合约是多个参与方达成共识并签名确认后一致执行的通信交互协议.与MPC技术相似,智能合约的执行也不以中心化的第三方为信任基础,其安全性建立在密码技术的共识协议上.
1.2.1 智能合约的提出和基本特征
1995年Nick Szabo[8]首次创造性地提出“智能合约就是执行合约条款的可计算交易协议”,即以信息化方式传播、验证或执行合同的计算机协议.智能合约允许在没有第三方的情况下进行可信交易.合约基于计算机代码执行,因此具有严密清晰的逻辑结构,当合约中设定的条件一旦满足时便会自动执行,执行过程不可逆、不可修改,并且执行的内容和过程都是透明可监管可验证,违约的难度和成本高.
1.2.2 基于区块链的智能合约
图2 计算合约的信任体系
传统智能合约产生时缺少防篡改能力,直到区块链的出现,让智能合约大放异彩.2013年出现区块链智能合约[9],能够保证计算过程数据无法删除、修改,只能新增.计算过程全流程上链,从而保证了执行记录的可追溯性,有效遏制了作恶行为.具体地,将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行,整个过程透明可跟踪、不可篡改.同时,由区块链的共识算法构建出一套状态机系统,使得智能合约能够高效地运行.基于此,近年来智能合约在物联网[10]和信息安全[11]等众多领域得到了广泛应用.
多方安全计算的安全性基于多方互为监督的机制,也就是参与方不会串通,或者串通的数量不会超过MPC协议的不诚实门限[12].如不能超过1/3或半数的参与方串通,否则隐私信息将会存在泄露的风险.在一个安全强度高的由N个参与方组成的秘密分享协议中,可以允许N-1方进行串通,协议仍然能够保证不会出现数据泄露现象.
区块链中用于分布式记账的节点,其安全性基于相信不能有超过半数的参与者串通[13],那么区块链可溯源防篡改的特性是能够保证的.当结合MPC和区块链2种技术使用时,需要注意两者的参与方节点可能存在重叠.因此在实际应用中需要考虑这些重叠情况能够同时满足2种技术的安全假设.以MPC系统使用区块链进行存证为例,如果MPC协议允许N-1方进行串通,而这N-1方加入区块链后造成恶意节点数超出总节点数的一半,那么存证信息就存在造假的可能[14].
多方安全计算实现“数据可用不可见”,进一步将智能合约技术融入到多方安全计算应用系统中,产生“计算合约”,并结合数字签名、区块链存证等技术,可以实现数据流通全过程“可控可计量”.图2是计算合约的信任体系.
除了第1节提到的MPC和区块链技术(这两者都基于多方互为监督的信任机制),还有很多其他技术,所有这些技术类型都依托3类信任基础:多方互为监督、律法体系以及授信的第三方(如专家组、第三方评估机构等).存证的真实性建立在多方互为监督的基础之上,也就是说,只有多方互为印证才能证明存证信息的真实性.存证和审计的有效性依托法律上的认可,同时存证为法律纠纷提供举证能力,审计方一般需要一定的资质或公信力才能得到使用者的认可.数字签名技术的信任基础一般是授信第三方颁发的数字证书.算法的安全问题一般通过授信的专家组或评估机构进行审核后确认(比如形成授信的白名单).
存证至少可以用来规避2方面的风险:首先,数据提供方可能提供假数据为其他参与方获取报酬,而数据使用方无法举证;其次,数据使用方也可能在数据使用之后认为数据有问题拒绝支付报酬,数据提供方无法举证.为了更好地实现数据使用流程的可追溯,以及在发生争议时方便举证,需要在不暴露隐私数据的情况下将数据流通使用的痕迹记录下来,这个过程叫作数据存证.数据存证需要满足以下需求:1)数据提供方在数据加密后发送时,存证数据的生成和数据的加密是原子操作,保证不可能用真实数据生成存证数据而将假数据加密后发给计算方;2)数据接收方解密数据时,存证数据的生成和结果的解密同样需要是原子操作,保证不可能解密得到真实数据而用假数据存证;3)存证信息需要是公开的,但是存证对应的数据是加密的,而且无法利用存证信息反推原始结果;4)存证信息的校验需要通过公开可用的工具进行,使得存证校验的过程具有透明性.
在计算合约中可以采用本地存证和外部存证同时进行的方式.本地存证由可信计算环境加密后保存在本地,外部存证(如输出数据和计算结果的哈希值)可以存储在区块链,外部存证用于快速解决争议,本地存证可完成最终的数据溯源.
任务开始时,部署在数据提供方上的可信计算环境与计算方之间建立SSL连接,并传送随机数给密文计算节点.可信执行环境在生成随机数后与原始数据一起处理,从而得到一份混淆后的密文信息,用于后续的验证.计算方收到的只有来自可信执行环境的信息,因此计算方无法伪造出与发送方不同的输入数据.最后得到的存证信息又可分2部分:经过混淆后的数据信息以及原始数据的密文.混淆后的数据信息是可以且必须公开的,而且也需要能支持公开的验证,而原始数据的密文只有当存在争议时才需要把当时发送的原始数据解密.使用可信计算处理这个问题可以满足存证数据要求中的前2条,因为可信计算环境可确保存证数据的生成,但前提是成功建立SSL连接,且每次生成的随机数可确保每次建立的SSL连接唯一地对应1份存证数据.而存证数据要求中的后2条则可通过区块链的方法进行,存证数据的生成则借助了对称密钥和哈希算法.
计算合约的实际使用中,参与各方尤其是数据提供方会多次执行某种签名,例如数据使用授权,而数据提供方又往往是终端用户,这会给系统的使用体验带来负面影响.为减少实际操作次数,数据提供方可委托平台(往往是调度方)进行代理签名.
代理签名方案[13-15]一般有系统初始化、代理授权、授权验证、代理签名、代理签名验证等过程,具体如下:
1) 系统初始化.假定数据提供方和调度方已在CA注册并获得数字证书.系统具有一个公开参数params.
2) 代理授权.数据提供方在指定数域随机选取参量k,通过k,params并借助私钥计算授权信息w,并将k和w经加密信道发送给调度方.
3) 授权验证.调度方收到k和w后,由数据提供方的公钥、公开参数params验证是否为数据提供方的委托授权.
4) 代理签名.调度方对消息m进行代理签名,选取签名参量j,由系统公开参数params、参量k和j,公开签名函数Σ(不可逆),生成代理签名σ=Σ(k,j,m,params).
5) 代理签名验证.代理签名的验证者可以通过函数Σ特性及数据提供方公钥验证签名σ有效性.
以上是一个弱代理签名过程,验证者能够验证数据提供方授权信息的有效性,但不能鉴别调度方的身份.可以对上述过程进行强化,从而达到对调度方身份的可鉴别性:在第4步生成签名信息σ时加入调度方的私钥,在第5步验证时使用调度方的公钥.
计算合约的工作流程可以抽象为3个阶段:
第1阶段.计算合约生成阶段.
该阶段的主要目的是由利益相关方共同确认合约的内容,并签名确认.首先,需要保证算法逻辑的安全性、可解释性等,一般由授信专家组或评估机构进行确认,或者直接采用已有的成熟算法逻辑(如白名单).对于价值高、成熟度高的算法逻辑可以组装为合约模板供他人使用.其次,数据提供方需要对数据的流通使用进行授权(或通过代理签名技术委托其他方授权),包括对执行数据的算法逻辑、数据的使用次数和期限等进行确认.最终,各方对计算所需的数据源、计算结果的指向等信息进行确认.计算合约内容的确认采用数字签名技术,防止伪造和篡改,一旦签署则意味着合约正式生效.计算合约生效后可以进行存证,起到后期防抵赖、可追溯的作用.因此,计算合约的生效是由多个参与方共同确认完成的,任意单方都无法让合约生效及执行.
第2阶段.计算合约执行阶段.
该阶段与MPC任务执行过程高度契合,也就是包括数据输入、协议计算和结果输出几个子过程.其中,数据提供方在输入数据时需要核验自身的签名信息以及所提供的数据源是否在合约中,对于非自己授权或者超出约定范围的数据源,数据提供方可以拒绝数据输入.在协议计算阶段,计算方同样核验相关信息,其中最主要的是核验所执行的算法逻辑是否被确认过,这样可以保证授权范围之外的算法逻辑不被执行,核验成功后按照MPC协议进行交互计算;最后,只能是合约指定的结果方才能从计算方处获得计算结果,该信息同样通过合约控制.在数据输入、协议计算、结果输出环节各参与方都可以对发送或接收的数据进行存证.
第3阶段.计算合约结算阶段.
计算合约执行完毕后,可以根据事先约定的结算方法进行任务结算、统计计费和收益分配等.最终的结算结果可以存证.
鉴于区块链上的存证信息能够回溯整个数据使用过程,因此在发生纠纷时可对区块链上的存证信息进行审计,为法律判决提供依据.
基于上述讨论,总结计算合约主要内容字段至少包括参与实体及对应的角色、算法逻辑、数据用量控制、各方对合约内容的确认信息等.考虑到数据交易等应用场景,计算合约可进一步包含收益分配等内容.
结合了计算合约的MPC应用系统设计如图3所示.
在原系统组件(如任务调度管理、数据服务、计算引擎)的基础上添加计算合约API模块以及其他安全辅助技术.各参与方可以通过该API接口操作区块链上的合约区块,改变合约的执行状态.这些触发合约操作的事件可参考2.3节的计算合约工作流程,如算法逻辑确认后形成一个合约模板,在区块链上生成一个对应的模板区块.工作流程中的存证环节也会在区块链上生成相应的区块.从数据提供方的视角来看,计算合约在执行过程中的流程如图4所示.
图3 MPC应用系统设计
图4 数据提供方视角的计算合约执行流程
在合约审核阶段,数据提供方对合约内容(包括算法逻辑、数据使用次数等)审核通过合约API生成合约区块写入区块链;在MPC数据输入节点,在传递数据密文的同时对数据输出进行存证,产生存证信息并通过API写入区块链.
值得注意的是,该系统中的区块链可以是联盟链,也可以是公链,本文的演示选择联盟链方式.
依据本文设计实现的MPC框架下的计算合约,在北京国际大数据交易所(简称北数所)进行了落地应用[15].下面以某银行测算业主可贷款额度为例,演示计算合约在数据交易中的作用.
北京大数据中心作为数据提供方提供贷款用户的资产信息;另外一个数据提供方是某银行,提供资产所在区域的资产价格.该银行同时是算法提供方,提供贷款用户可申请的贷款额度的判断逻辑算法.此外,北京国际大数据交易所作为算力提供方,提供贷款额度算法所需的算力资源.
在该应用场景中,平台创建了一个在线估房的计算合约,简要过程如下:
第1步,生成计算合约.银行提供合约模板,平台确认算法逻辑,银行、大数据中心、大数据交易所方共同确认合约的内容,北京大数据中心和某银行授权所需数据,而后各方确认数据源、结果指向等,计算合约生效.合约涉及的多方如图5所示:
图5 合约涉及的多方
第2步,执行计算合约.银行提起合约执行请求,大数据中心、交易所核验合约内容和自己的签名信息,确认后进行MPC计算,最终银行获得计算结果.最后是计算合约结算.根据合约约定的结算方法,银行支付此次合约执行的费用,收益分配按合约内容支付给参与计算的大数据交易所、大数据中心这两方.在以上各个环节银行、大数据中心、大数据交易所等各方都可对发送或接收的数据进行存证.
计算过程中全部调用密文形式的数据,不会出现用户数据原文,不会被其他参与方获取或推知,算法公开可验证保证计算结果可信.合约的执行过程被区块链有效记录,执行次数和数据用量被有效控制,可清晰查验.在本次实验中,合约用量与结果展示如图6所示:
图6 合约用量统计与结果展示
本文针对“数据可用不可见,使用可控可计量”的数据流通要求,从“信任基础”的角度出发提出解决这一问题的技术方法.在无可信第三方的情况下,基于多方互为监督的思想,通过结合多方安全计算技术与智能合约技术,设计了适应多方安全计算系统的计算合约模型.该模型进一步结合区块链存证、代理签名等技术能对数据的用途用量进行有效控制,保证数据流通全生命周期的可追溯性,为后期审查追溯甚至是解决法律纠纷提供了技术保障.本文最后以某银行测算业主可贷款额度为例,给出了在北京国际大数据交易所进行落地应用的MPC框架下的计算合约实例,演示了全周期的计算合约的执行过程,理论的应用成果落地得以实现.下一步,我们希望计算合约技术的应用场景进一步拓宽,推动多源数据的流通融合以及数字经济的进一步发展.