基于TrustZone的区块链智能合约隐私授权方法

2023-07-03 14:12陈璐瑀马小峰龚生智
计算机应用 2023年6期
关键词:加密分组区块

陈璐瑀,马小峰*,何 敬,龚生智,高 建

(1.同济大学 电子与信息工程学院,上海 201804;2.梧桐链数字科技研究院(苏州)有限公司,江苏 苏州 215100;3.云南省科学技术院 科技管理办公室,昆明 650100)

0 引言

当前,数据已经成为了现代企业和个人的重要资产之一,数据共享与融合能够创造巨大的经济和社会价值。从陆续颁布的文件和通过的与法律可见,数据的价值已经受到了广泛的认可,对于数据安全的保护也引起了极大的重视。

在计算机技术迅速普及与发展的情况下,一个大规模生产、分享和应用数据的时代正在开始,给国家治理、产业发展、个人生活带来了新的变化与机遇[1]。在数据开放、数据共享带来巨大红利的同时,数据安全和隐私成为了关键问题。用户在互联网上的各类行为(如购物喜好、社交范围、检索习惯等)都掌握在对应的互联网商家手中,极易暴露个人隐私[2]。当数据被定义为生产要素后,未经本人授权而利用个人隐私数据进行大数据分析的行为,也严重损害了数据所有人的经济利益;但是互联网应用的监管尚未形成一个完整的体系,难以有效管控此类行为。

区块链技术具有分布式存储、保证链上数据可信不被篡改的特点,在数据共享的场景中有着极高的适用性,同时真实可信的交易记录也能够为监管提供便利;但是区块链技术本身公开透明的特点使人们对于它在隐私保护方面的表现有所担忧。

现阶段解决数据安全问题的隐私计算方法主要有三个研究方向:一是基于密码学技术的多方安全计算;二是新兴的联邦学习技术;三是基于可信硬件的可信执行环境(Trusted Execution Environment,TEE)。其中TEE 成熟度较高,已具备工程落地的可能性;可信硬件也是近年来大力推动的信创产业重要的组成部分,飞腾、华为等国产芯片厂商也相继推出了自主研发的TEE 技术,对ARM TrustZone 架构有着良好的适配性。本文针对数据共享与隐私保护的矛盾,结合区块链与TrustZone 的TEE 技术,设计了一个通用的隐私数据保护方法,在满足数据共享需求的同时保护用户隐私。本文的主要工作如下:

1)提出了一种基于TrustZone 的区块链智能合约隐私保护方法,将隐私计算部分移至TrustZone 的安全环境内执行,解决区块链公开透明的特性与隐私保护之间的矛盾。

2)提出了基于字典树(Trie Tree)的小内存条件下的隐私求交算法,通过分组计算的方式,解决TrustZone 内存空间有所限制,难以满足全量数据同时进行隐私求交的问题。

1 背景与相关研究

近年来,数字化转型和数据共享是各行各业共同的发展趋势,打破数据孤岛、有效共享互用数据,海量数据才能发挥最大的效用。通过协同分析多方数据,能够创造更大的价值。

在数据共享背景下,数据已然成为一种具有一定价值的生产要素,也与数据所有者的隐私信息息息相关。本文所提出的利用区块链与TEE 相结合的系统架构,希望能够用技术手段保护用户数据免受未经授权的数据分析。

在数据共享方面,区块链利用加密链式区块结构验证与存储数据,利用分布式节点共识算法生成和更新数据,利用智能合约编程和操作数据,是一种去中心化基础架构与分布式计算范式[3],是一种不依赖第三方、通过自身分布式节点存储、验证、传递、交流数据的技术方案。

智能合约使区块链不再局限于虚拟货币场景,在区块链技术逐步普及到各行各业应用的过程中起到了关键作用。智能合约最早由Szabo[4]于1997 年提出,被定义为一段由事件驱动的、具有状态的、运行在一个复制的且分享的账本之上的、能够保管账本上资产的程序[5]。区块链的应用场景往往与数据、资金等重要资产的交易相关,而智能合约执行的全过程在区块链上完成,使用与产生的数据均存储于链上,能够被公开获取,因此需要特别关注智能合约的安全性和隐私保护性,并设计隐私数据的保护方法。

在区块链应用中,在兼顾数据可用性的基础上,提高隐私保护性能的方法主要分为两类。一是利用密码学技术应用加密后的数据,例如同态加密技术能够在不访问数据明文信息的情况下完成对数据的使用,即使用密文进行计算获得的结果与使用明文计算后再加密所获得的结果相同[6];零知识证明技术能够在不透露具体隐私信息的前提下向其他方证明某一事件的真实性,能够有效地解决区块链应用中过度分享与公开信息的问题[7];属性基加密技术针对隐私信息的访问控制问题,要求密文属性与私钥属性存在关联匹配性,才可以成功利用该私钥获取明文,从而将数据隐私的保护问题转归为属性与密钥的管理分发问题[8]。第二是将一些计算需求转至链外的安全环境,其中的典型代表是TEE。与纯粹的密码学方法不同,链外执行计算的方案能够缓解链上计算效率不足的性能问题,但是将区块链的所有模块加载到TEE 中目前难以实现[9],因此考虑将其中的一部分,如本文所提出的将智能合约执行过程中的隐私计算环节转移到TEE 中,是在当前的技术成熟度下较为合理的选择,从而将链上数据的隐私保护问题转变为使用的可信环境的安全性问题。

TEE 是一种基于硬件和操作系统的安全架构,通过时分复用的CPU 或者直接划分出部分内存空间作为安全环境,以构建出与外部隔离的安全计算环境,用于部署关键的计算逻辑,处理隐私数据。

TEE 的安全特性包括代码执行环境的隔离和保证执行文件、控制流的完整性,即便设备在受到物理控制攻击时,也能够保证隔离环境内数据和代码的完整性[10]。ARM TrustZone 是一种具有代表性的较为成熟的TEE 技术,且考虑到国产信创芯片厂商对于TrustZone 系统架构的支持,本文选用TrustZone 架构提供TEE 的技术支持。

TrustZone 在处理器层面划分了安全环境(Secure World)和非安全环境(Non-Secure World)两个部分,各自拥有独立的计算机架构,包含独立的操作系统、内存空间和寄存器等,在任意时刻处理器仅会在其中一个环境内运行。安全环境内进行与敏感数据相关的读写操作,非安全环境内运行正常的操作系统。两个环境的应用程序与操作系统拥有不同等级的权限,通过虚拟地址空间与物理地址空间映射关系的设计,安全环境可以正常访问非安全环境的资源,反之则会受到严格的限制,该功能通过额外的寻址线实现,即安全位,由TrustZone 地址空间控制器(TrustZone Address Space Controller,TZASC)执行的硬件检查确定资源访问行为是否有安全位的授权[11],因此即便恶意进程攻破或入侵了非安全环境,存储于安全环境内的隐私数据仍具备安全性。ARM 定义的TrustZone 架构如图1 所示。

目前ARM TrustZone 已广泛应用在生物识别、物联网、智能设备等多个领域。OP-TEE(Open Portable Trusted Execution Environment)是一个包含构建工具、测试工具等多个组件的安全框架,借助该工具可以方便地开发TrustZone应用[12]。OP-TEE 框架对Hikey、Juno、树莓派等硬件平台提供了适配,同时也支持如QEMU 等虚拟硬件平台,能够方便地研发与移植TrustZone 应用。

区块链技术本身具有公开、透明的特性,与隐私数据的保护存在一定的矛盾,将TEE 与区块链结合,利用技术互补性能够解决许多场景内的痛点问题。Enkhtaivan 等[13]提出了一个拍卖方案,利用可信硬件和区块链增强投标人的隐私和拍卖的正确性,在区块链中加入群签名算法以提供匿名性,利用基于硬件的可信计算环境的远程认证功确保投标获胜者的正确识别;Ayoade 等[14]基于区块链技术,设计了一种物联网设备的分布式数据管理系统,并提出使用TEE 存储原始数据,将哈希化的数据散列存储在区块链中;Liang 等[15]将区块链技术与TEE 相结合,实现群智感知(Crowdsensing)应用中数据提供者的奖励机制,并解决恶意请求者匿名难追踪的问题;Cheng 等[16]提出将轻量级移动客户端的关键数据存储在Intel SGX 环境下,提高客户端数据的安全性与隐私性;Enkhtaivan 等[17]提出利用TEE 技术在物联网系统与区块链系统之间调度数据,确保上链前物联网设备生成数据的完整性和机密性;Zhang 等[18]设计了一种基于以太坊的电子投票系统,并利用TEE 实现加密算法以减少智能合约中的复杂操作,节约系统的计算成本。

也有学者基于TEE 技术改进了区块链的系统架构,提升了区块链的性能,扩展了区块链的应用范围。Wang等[19]提出的Hybridchain 架构通过TEE 环境在链外扩展承担大量计算,解耦共识过程与智能合约,尽可能减小区块链上的计算负担;Fu 等[20]提出了Teegraph 算法,同时利用TEE 和有向无环图(Directed Acyclic Graph,DAG)技术,有效针对物联网区块链这一特定场景提高共识效率;Brandenburger 等[21]针对TEE 与区块链结合产生的回滚攻击问题提出了解决方案;Lind 等[22]设计了二层支付网络Teechain,通过可信硬件保护下的钱包在交易各方之间建立链外支付通道,大幅提高了区块链交易系统的吞吐量;Maddali 等[23]提出的VeriBlock 框架,利用TEE和可验证计算(Verifiable Computing,VC)方法减少智能合约的冗余执行,同时不损害区块链系统的安全性。

在上述的研究与应用尝试中,区块链与TEE 是割裂的两个环境,在TEE 中执行隐私计算功能,区块链仅承担了为隐私计算的结果进行存证的任务,没有发挥区块链智能合约能够自动化执行的优势,而且存证内容的可信是基于上传TEE计算结果的节点本身具备的公信力,没有从根本上解决多方信任问题。本文将区块链与TEE 进行了更深层次的结合,TEE 中的隐私计算将成为智能合约执行步骤中的一部分,节点对于上链数据的信任基于对自身TEE 计算结果的信任,较之现有的研究具备更高的可信性。

2 系统与方法设计

2.1 系统架构

根据前文所阐述的各个关键技术的特点与亟须解决的痛点问题,本文提出的系统将解决以下需求。

1)隐私保护需求。由于区块链公开透明的特性,链上数据能够被系统中的所有用户获得,使用复杂的密码学手段进行保护虽然能够得到一定的安全性,但将增加计算成本,而且密钥的托管仍需要一定的保密手段。因此,要求隐私数据在链上始终处于加密状态,需要其明文信息的计算和明文信息的加密过程均在安全的链下TEE 中执行。

2)共识数据一致性需求。区块链的共识机制要求各分布式节点对同一问题的计算获得相同的结果,因此在设计智能合约时,所有数据输入应均来自公开的链上信息,或在各个节点的TEE 中内存放的共有信息;同时为了满足隐私数据的安全性需求,链上数据需要通过所有节点的TEE 中共同持有的私钥解密方可获得明文信息,以满足计算后的共识。

3)监管需求。针对实际应用的需求,系统中的监管节点拥有最高的权限,并且具备较高的可信度,因此对于未加密且不可公开的原始数据,由监管节点进行首次加密,并推进后续的上链存证流程;同时系统需要能够支持实现区块链应用的各类功能开发,如交易、存证等。

根据上述需求,本文设计如图2、3 所示的系统模型。

图2 系统模型Fig.2 System model

图3 节点模型Fig.3 Node model

本文系统包含两类节点:监管节点与普通业务节点。监管节点部署在具有公信力的机构或监管部门,负责个人用户身份信息的加密与上传,同时个人用户可以通过监管节点开放的接口进行隐私数据授权的操作;业务节点部署在参与实际应用的相关企业,与个人用户之间产生实际的交易活动。每个节点包含区块链与TEE 两个部分,区块链部分提供了加密数据存储、交易存证等功能;TEE 部分的非安全环境中部署与区块链之间交换数据的功能模块,以及进行对链上数据的初步处理,通过TrustZone 安全监视器将隐私计算需求与加密数据传入安全环境,在安全环境中利用密钥存储模块中的隐私信息,完成相应的计算需求并将结果加密后,再经原通道返回。

在本文方法中,数据需要在区块链、TrustZone 非安全环境和TrustZone 安全环境这3 个不同的运行环境中传输。一次完整的隐私计算过程如图4 所示。当各个区块链节点执行智能合约时,判断是否需要使用隐私数据,若需要,则令智能合约产生一个中断,将加密的数据与计算需求发送至对应的TrustZone 环境中,调用存储于安全环境的密钥依次完成解密、计算、再加密的过程,再将结果返回至智能合约。各个区块链节点在得到返回值后,对结果进行共识,若共识一致则继续执行智能合约,将结果上链存证。如此,共识的依据来自各个节点的TEE 自身计算的结果,使得共识对于各个节点都具有较强的可信性。

图4 隐私计算过程Fig.4 Privacy computing process

2.2 隐私授权方法

在本文方法中,隐私数据将以加密的形式记录在区块链上,并与用户的真实身份绑定,以唯一的数字身份码进行标识(如身份证号)。在业务节点需要使用隐私数据时,用户可以通过监管节点向业务节点授权,在此基础上,业务节点才能够获取明文信息。

以企业会员名单共享为例,详细介绍本文所述隐私授权方法。用户在各个企业注册时,将获得一个对应该企业的账号,与个人数字身份码绑定,企业间进行合作时,常需要共享会员名单,共享名单内的用户可以在两个企业享有优惠政策,但名单共享的前提应当是获得用户的授权,则该过程分为3 个步骤。

2.2.1 监管密钥分发

在本文方法中,保障隐私数据安全性的关键技术为基于TrustZone的隐私数据隔离运行环境和基于密码学算法的隐私信息非对称加密。其中,后者需要针对监管所需要密钥的分发作特殊设计,私钥提供给相关业务方,公钥由监管节点留存。根据2.1节所述的系统架构,构成系统的节点数最少为3个,在3个节点中配发相应的密钥,均存放于节点中TEE 部分的安全环境内,以保证密钥不被泄露。以图2所示的系统模型为例,在系统初始化阶段,为各个节点分发的密钥如表1所示。

表1 节点持有密钥Tab.1 Keys saved in nodes

对表格中的参数解释如下:

1)PK_P为监管公钥,仅监管节点持有,用于对用户隐私信息的加密。

2)SK_P为监管私钥,所有节点均持有,在区块链系统进行共识时,需要利用监管私钥解密后的隐私数据验证结果的一致性。

3)PK_A、PK_B为业务节点的公钥,用于对需要传输给对应业务节点的隐私计算结果加密。

4)SK_A、SK_B为业务节点的私钥,解密获得的隐私计算结果。

需要特别说明的是,在本文方法中,为使各个节点能够共识监管节点加密后的信息,需要在各个节点对应的TEE 中解密密文,因此将监管私钥SK_P分发至各个节点,而监管公钥PK_P仅由监管节点持有,以达成加密的数字身份信息仅有监管节点能够生成,而所有节点都能够在安全的TEE 中解密使用。由于TrustZone 技术的特性,存放于安全环境内的数据仅有预设的进程能够调用,在本文方法中,监管私钥仅有由智能合约发起的隐私授权进程使用,其他进程包括非法利用私钥解密、利用私钥生成公钥等,则无法调用私钥。

2.2.2 数字身份信息生成

本文方法中,隐私数据的使用需要用户进行授权,在数字化世界,与物理世界的真实用户绑定的是其数字身份。为防止不同企业通过匹配身份信息直接获得对应数据,用户在不同企业注册获得的数字身份信息应当不同,且通过加密后再上链存储。

以用户1 在企业A(即业务节点A)注册账号为例,数字身份生成分为4 个阶段。

1)申请阶段。根据企业A的业务需求,提供个人的真实身份信息(如身份证等),记为user1。企业A为用户1 生成账号userA1,并将自身的企业代码orgA与user1、userA1 打包,生成申请消息(式(1)),通过身份管理应用发送至监管节点,申请上链存证。

2)生成阶段。监管节点获得申请消息(式(1)),将它发送至监管节点的安全环境内,根据安全环境开始处理该申请的时间timeA1,为消息添加时间戳,生成消息(式(2)):

用户的数字身份信息将以加密字符串的形式,在区块链上以键值对的数据格式存储。本文方法采用国密算法,根据SM2 椭圆曲线公钥密码算法中公钥加密算法的原理,由监管节点使用监管公钥对标识用户身份的键值对数据加密,加密后的键值对如式(3):

其中:SM2_enc(data,PK)代表利用公钥PK对数据data使用SM2 国密算法加密;双竖线代表将两个字符串直接相连。

同时使用监管公钥对生成的键值对进一步加密生成如式(4)所示的验证信息veri,供各个节点进行共识时,验证数据有效性使用。

3)共识阶段。各个节点调用数字身份上传智能合约,获取阶段2 中生成的键值对(式(3))与验证信息(式(4))后,转入节点对应的TrustZone 安全环境,使用监管私钥解密式(4)的验证信息,与式(3)的加密键值对进行比对,返回是否一致的信息。若区块链节点均获得“是”的信息,则证明信息有效,进入下一步骤;否则说明本次智能合约被非法调用,终止进程并报错。

4)存证阶段。当区块链系统中各个节点达成共识后,将用户身份以键值对形式在链上数据库存证,同时根据区块链的数据结构,每一条存证信息均会对应一个唯一的hash,以便后续的查询或调用。

2.2.3 隐私授权

经过2.2.2 节所述的数字身份信息生成过程,由监管节点上传大量用户数字身份后,区块链上将建立一个数字身份数据库,进一步结合应用场景,利用数字身份实现各类隐私授权解决方案,如黑白名单求交、交易流水查询等。

以用户1 授权企业A、B(即业务节点A、B)共享该用户在两个企业的会员信息为例。假设在链上数据库记录了如表2 所示的数字身份信息(键值对中存储的数据均使用监管公钥PK_P经过SM2 算法加密)。

表2 链上数字身份信息Tab.2 Digital identity information recorded on blockchain

此时经过下列步骤完成隐私授权。

1)用户1 通过由监管节点控制的身份管理应用,授权企业A、B之间可以互相验证该用户在对方企业的会员身份,向监管节点提交式(5)所述数据:

2)监管节点在安全环境内,使用监管公钥PK_P对式(5)中的数据加密,调用智能合约。当合约运行到需要解密隐私数据时产生一个中断,各个节点将加密后的数据与链上数据库中所有数字身份信息(记为BC_db)打包,生成式(6),通过传输控制协议(Transmission Control Protocol,TCP)服务发送至各节点对应的TrustZone 服务器的非安全环境部分。为方便叙述,下文中将使用SM2算法加密公钥、解密私钥分别记为PK()、SK()。

3)进一步地,TrustZone 建传输通道,非安全环境通过TrustZone 安全监视器将式(6)的数据发送给安全环境。

4)在TEE 内,调用系统初始化时存入的监管私钥对式(6)的数据解密,在BC_db中遍历,查询orgA与orgB的交集,获得表3 的数据。

表3 查询结果Tab.3 Results of query

5)在步骤4)的基础上,进一步筛选如表4 所示的获得用户授权的数据,即包含user1 的条目,记为pick_data。

表4 筛选结果Tab.4 Results of filtering

6)分别使用两个业务节点的公钥对筛选结果加密,得到PK_A(pick_data)、PK_B(pick_data),将结果返回给非安全环境。

7)非安全环境将得到的数据通过TCP 服务返回智能合约,智能合约恢复之前的中断。各个节点根据区块链系统的共识规则,对返回的结果进行共识,若一致,则将PK_A(pick_data)、PK_B(pick_data)上链存证。

8)两个企业分别通过持有的SK_A与SK_B对上链数据进行解密,即可得到用户1是否同时为企业A与企业B的结果。

本文方法能够达成企业A与企业B获取授权用户信息的目的,同时保护了未授权用户的隐私(例如示例中的用户2 的信息不会被获悉)。同时,因为区块链的特性,每次调用智能合约会留下一条不可篡改的记录,监管部门能够获得真实可信的查询记录,解决了互联网应用难以监控的问题。通过修改非安全环境中的执行程序,能够实现各类其他场景下的隐私计算需求。

3 小内存条件下的隐私求交算法

本文方法需要从区块链通过智能合约向TrustZone 发送大量数据,进行加解密和匹配求交运算。如上文所述,本文使用键值对的格式存储数字身份信息,例如个人身份证号码,存在较多前缀相同的数据,使用字典树(Trie Tree)的数据结构能够更加高效地完成运算。字典树的优势是在存储字符串数据时,能够最大限度地减少一些无谓、重复的比较,以此提高查询效率,代价是需要消耗更多的存储空间,通过“以空间换时间”的方式提高效率。但TEE 的内存空间有限,且每一条密文数据需要在TEE 中经历解密、运算和再加密的过程,需要使用大量的内存空间,因此不支持将大量数据同时传入TEE 内处理。

基于上述情况,为应对使用TrustZone 时内存大小不充足的情况,本文设计了小内存条件下的隐私求交算法。算法的基本思想是通过数据分组的方法,依次处理各个分组的数据。进行隐私求交运算的两个数据集合分别作为基准集合、匹配集合,算法将对基准集合分组传入TEE 构建字典树,匹配集合分组在字典树中查询,以获得两个数据集合的交集。出于隐私保护的需求,本文方法中TEE 外的数据均以密文形式存在,因此数据传入TEE 后首先需要进行SM2 国密算法解密,数据传出TEE 前需要进行SM2 加密,在下文的算法描述中将省略加解密步骤的叙述。

3.1 基准集合分组边界划定

本文算法中,当传入基准集合数据构建字典树用于匹配集合的查询求交运算时,由于TEE 的内存容量限制,无法将全量数据同时传入TEE,需要分组构建多个字典树。为了减少数据匹配时的运算次数,在进行基准集合的分组时,要求分组之间具有顺序关系,靠后的分组中存放的数据在比较时均大于分组靠前的数据。

对于分组边界的划定,本质上是一个递归求解的过程,递归求解的关键要素如下。

输入参数:{Set_A{},M,Nmin,Nmax,C},详见下文S1。

返回值:Boun[b0,b1,…,bC-2],详见下文S2.3。

终止条件:Rmax-Rmin≤Vmax,详见下文S2.4。

算法过程如下。

S1:

记基准集合Set_A{}中所包含的数据总量为M,数据取值范围为[Nmin,Nmax],TEE 能够支持同时处理的数据量为V。由于本算法不需要严格要求每个分组的数量相同,相较于严格寻找到使每个分组数据数量均为V的分组边界,适当增加少量分组使各个分组的数据量在小于等于V的一个数量范围内,能够大幅提高计算效率,因此设各个分组的容量范围为[Vmin,Vmax],且Vmin<Vmax≤V,则最小分组数量为C=

每次递归的输入参数为{Set_A{},M,Nmin,Nmax,C}。

S2.1:

根据数据的取值范围[Nmin,Nmax]与最小分组数量C,将基准集合预划分为C个分组,存在C-1 个分组边界,记录在数组x=[x0,x1,…,xC-2]中,取值如式(7),划分的结果如图5 所示。

图5 基准集合分组预划分示意图Fig.5 Schematic diagram of benchmark set grouping pre-division

S2.2:

生成一个记录各个分组数据数量的数组count=[count0,count1,…,countC-1],将基准集合中的数据按每组数量V分组传入TEE,依次对所有数据判断它属于哪一个分组,并累计求出每个分组中包含的数据数量。当进行判断的数据k满足不同的条件时,将该数据标记所属的分组号在数组group_A[]中记录,并将对应的count数组中项的值加1,如式(8)所示:

S2.3:

基准集合中所有数据完成S2.2 后,将得到一个标记了所有数据分组情况的数组group_A[];同时,将划分后的每个分组中的数据数量记录在数组count[],进一步判断序号最小与最大的分组是否满足容量范围[Vmin,Vmax]。若满足则说明该分组满足要求,记录对应的分组边界,将数据库剩余部分的数据取值范围更新为[Rmin,Rmax],并继续判断新的序号最小与最大的分组是否满足容量范围[Vmin,Vmax]。如图6 所示,count1、count2、countC满足分组容量范围,则x1、x2、xC-1将被记录,且Rmin=x2、Rmax=xC-1,group_A[]中对应分组序号为0、1、C-1 的数据即确定了所在的分组,无需参与后续的步骤。标记此时排序最小与最大分组的序号分别为L与R(如图6的示例中,L=2,R=C-2)。

图6 取值范围更新示例Fig.6 Example of value range update

确定的分组边界将记录在数组Boun[b0,b1,…,bC-2]中,经过递归后,数组中的C-1 个边界值均能够确定,作为递归的返回值。如在图6 的示例中,Boun[]数组中的3 个值已经确定,即Boun[0]=x1,Boun[1]=x2,Boun[C-2]=xC-1,而数组中其余值则需要进入递归进一步求解。

S2.4:

在S2.3 的基础上,判断更新的数据取值范围[Rmin,Rmax]是否满足式(9),若满足,代表剩余未分组的数据已经可以存入同一个分组时,则递归结束。

若不满足式(9),将剩余的取值范围分割为两个部分,分别进入递归。分割的规则如下。

计算剩余部分前i组中包含的所有数据量,与分组平均容量的理论值(Vmax+Vmin)/2 相除,得到前i组能够划分出组数的理论值,记为pi;同理,计算后j组能够划分出组数的理论值,记为qj。如式(10)(11):

取p_si与q_sj中的最大值,即其中数值大小最接近整数的一项,在对应的边界xi/xj处进行划分,所获得的其中一个部分所包含的数据量将最大概率能够恰好划分为满足容量范围[Vmin,Vmax]的多个分组。

如图7 所示,两块灰色部分为需要进一步处理的数据。设划分边界为xi,则两个部分进行递归的输入参数分别为:

图7 递归初始数据更新示意图Fig.7 Schematic diagram of recursive initial data update

根据更新的输入参数,将进入S2.1~S2.4 的递归过程。

经过基准集合的分组边界划定,能够获得基准集合各个分组的边界值Boun[b0,b1,…,bC-2],同时在执行递归的过程中,将在数组group_A[]中记录每条数据所属的分组。

3.2 匹配集合分组标定与查询

在完成对基准集合的分组后,同样需要对匹配集合分组,再将相同分组的两个库同时传入TEE 进行求交运算。

1)根据TEE 环境的内存限制条件,将同时能够处理的数据数量上限记为V。将匹配集合的数据每V项一组传入TEE,并依次对每项数据进行分组标定记录在数组group_B[]中。

2)在基准集合中,取出group_A[] 分组标记为i(0 ≤i<C)的所有数据,传入TEE 内构建字典树。

以身份证号码为例,构建的字典树除叶子节点外,每个节点都有10 个子节点(最后一层有11 个子节点),除根节点外,共有18 层,每层记录身份证的一位数据,如图8 所示。

图8 字典树示意图Fig.8 Schematic diagram of trie tree

3)在匹配集合中,取出group_B[]分组标记为i(0 ≤i<C)的所有数据,按照每V项一组传入TEE 内,依次在S2.2 中构建的字典树中进行查询,将其中能够查询到匹配项的数据输出。在C个分组均完成查询后,即可获得两个数据库的全部交集。

4 实验与结果分析

实验环境如下:使用CPU 为11thGen Intel Core i7-11700,GPU 为NVIDIA GeForce GTX 1660 Ti,在Ubuntu18.04 系统中完成实验。区块链系统使用梧桐链基础版,ARM 硬件由QEMU 虚拟机进行模拟,TrustZone 环境的搭建使用OP-TEE工具。

梧桐链是国产自主可控的、主要针对企业和机构的区块链应用场景开发的联盟链区块链系统平台,具有完备的联盟链功能和便捷的智能合约开发工具。

OP-TEE 是非营利性质的开源代码软件工程公司Linaro发布的,根据GlobalPlatform(GP)提出的TEE 标准、基于TrustZone 技术的TEE 开发工具,能够实现可信任应用程序的隔离,便于移植到多类硬件环境与操作系统,占用空间较小。

OP-TEE 工具支持多种不同的平台,在测试系统中,为了方便调试与观察测试结果,采用了QEMU 平台,能够通过虚拟机的形式在Linux 系统中模拟ARM 硬件运行OP-TEE。

在测试用例中,进行{10 万}:{10 万}的身份证信息的隐私求交即占用了超过100 MB 的内存,在实际的应用场景中,可能包含更大的数据量,且通常待处理数据除了身份信息还包括其他业务数据。而TrustZone 架构将硬件空间划分为安全环境与非安全环境两个部分,还需满足硬件正常运行的其他功能,因此可用内存十分有限。在实验中,当设定每个身份信息携带8 KB 的数据包时,进行{10 万}:{10 万}的隐私求交任务,即无法一次性传入TEE 中计算,进一步说明了分组计算的必要性。

4.1 隐私求交算法性能测试与分析

4.1.1 测试数据生成

为验证算法可行性与执行效率,每次测试需要两个存放大量字符串的数据集,且两个数据集存在部分交集。根据本文方法的应用背景,测试使用身份证号码作为隐私求交运算的数据,采用生成18 位随机数的方式构建数据集(不验证身份证合法性,且假设最后一位均不为X)。数据集的生成过程如下:

在[0,1019)范围内,随机抽取180 万个不同的值,并转化为字符串,打乱顺序存入数据集N;

在数据集N中随机抽取20 万条数据,存入数据集X,剩余160 万条数据,平均分为80 万条一组,分别存入数据集Y0、Y1;

将数据集Y0、Y1分别以随机抽取数据的方式,平均分为10 组,并存入{A0,A1,…,A9}、{B0,B1,…,B9},则得到的20 组数据各存有8 万条;

将数据集X平均分为10 组,分别存入{X0,X1,…,X9},每组2 万条。将对应编号的Xi数据集中存放的数据,分别加入Ai、Bi,则得到的20 组数据{A0,A1,…,A9}、{B0,B1,…,B9},将各存有10 万条数据,且任意相同序号的Ai、Bi数据集都有2 万条交集数据。

4.1.2 算法性能测试与分析

对所有数据分别使用SM2 国密算法加密,得到20 组未排序的加密数据{A0,A1,…,A9}、{B0,B1,…,B9}。在此数据集基础上,能够进行最小{10 万}:{10 万}、最大{100 万}:{100 万}的隐私求交测试。通过改变初始抽取数据数量的大小,还能够获得不同量级的数据集。

首先将数据集写入区块链中进行存证;其次,调用智能合约,设定隐私计算方法为求两个数据集合的交集,将数据集发送至TrustZone 环境,调用隐私求交算法,记录算法的时间消耗,以及单组数据进入TEE进行求交运算时的内存消耗。

1)算法稳定性测试。

取20 组基准库与匹配库数据量大小均为10 万的未排序数据集进行隐私求交运算,测试结果如表5 所示,在数据集已排序的情况下,对隐私求交算法的测试结果如表6 所示,两种情况下算法时空消耗的平均数与方差计算如表7。

表5 算法稳定性测试结果Tab.5 Results of algorithm stability test

表6 算法稳定性测试结果(数据集已排序)Tab.6 Results of algorithm stability test(datasets are sorted)

表7 算法测试结果对比Tab.7 Algorithm test results comparison

从测试结果可以看出,整个运算过程消耗的时间较长,主要原因是在确定基准库分组时,由于收到的是乱序的数据集合,在划定分组边界时,需要在递归中多次在TrustZone 环境内进行安全环境与非安全环境之间的数据传输、数据解密;若TrustZone 获得的数据集是已排序的,则在分组过程中,能够直接按照分组容量依次在数据集中取相应数量的数据进入TEE,并确定分组的上下边界。

从表7 中可以看出,算法对空间的消耗较为稳定,且数据集是否排序基本不影响运算过程中占用TEE的最大容量。进一步地,改变测试数据集的大小进行测试,由于TEE内的运算是分组进行的,占用内存取决于设定的分组大小,与数据总量无关;在时间维度上,算法的消耗同样较为稳定,而排序数据集相较于未排序而言,在运行速度上有显著提升,如表8所示。

表8 不同数量级大小情况下的算法时间消耗对比 单位:sTab.8 Comparison of algorithm time consumption under different dataset magnitudes unit:s

表8 中分别展示了当数据集大小分别在105、5 × 105、106、2 × 106、5 × 106、107、2 × 107时,在数据集未排序与已排序情况下算法的时间消耗对比,经过排序后耗时分别缩短了18.43%、30.69%、40.61%、44.80%、48.38%、52.09%、56.32%。可以看出,数据集在经过排序后,能够大幅缩减算法的运行时间,且随着数据集数量级的增大,时间缩减的效果越好。基于此测试结果,能够得出改进本算法的一个方向是要求智能合约在将数据集发送至TEE 前,事先将数据集进行排序;或是在使用区块链对隐私数据进行存储时,提供一种能够便于排序的编码方式。

2)不同数量级条件下的算法性能测试。

在部分应用场景中,用户数量能够达到百万级、千万级,如银行等大型金融机构能够达到上亿的用户体量。因此设计在不同数量级条件下对本文算法的性能测试。

取不同数量大小的乱序数据集各15 组,分别对算法进行测试,取各组的平均值,结果记录如表9 所示。

表9 不同数量条件下的算法测试结果Tab.9 Algorithm test results under different quantitative conditions

根据对算法的时间复杂度分析,基准集合分组边界划定的时间复杂度为O(nlogn),字典树的建立与查询求交的时间复杂度为O(n),基于时间复杂度的分析,将测试结果拟合成曲线,如图9 所示。

图9 不同数量条件下本文算法的时间消耗对比Fig.9 Comparison of time consumption for the proposed algorithm under different quantitative conditions

由测试结果可以看出,在数据集的数量级逐渐增大时,时间消耗是可预期的,说明本文算法能够适用于监管场景下处理海量用户数据的情况。若需要进一步提高效率,则需要信创硬件厂商提升硬件性能,尤其TEE 容量的扩充。此外,测试使用的是表示用户身份证号码的18 位字符串,若能够提出一种新的编码方式,缩短标识用户身份的字符串长度,则运行效率也能够得到大幅提升。

4.2 隐私安全分析

在区块链的应用中,针对隐私安全的一个关键问题是去匿名化攻击,即通过分析交易数据挖掘用户隐藏在虚拟账号后的真实身份。在最早使用的公有链系统中,由于交易方式是点对点交易,往往一个节点参与的交易只与同一个用户相关,虽然用户可以在区块链系统中使用假名和随机地址进行交易,但通过监控未加密的网络,基于一些行为分析策略如反洗钱(Anti-Money Laundering,AML)、了解你的客户(Know Your Customer,KYC),将可能分析使用区块链进行交易的用户身份和交易的具体行为[24]。区块链的事务记录了参与者的地址、时间戳、签名等信息,基于区块链网络的公共性质,可以通过跟踪交易流,分析节点的交易偏好,进而有可能挖掘节点对应的真实物理身份。在本文方法所提出的联盟链架构中,所有交易的发起均来自监管节点,因此个人用户的真实身份与节点并无绑定关系,通过交易流的分析无法确定实际的交易参与方的身份。

由于使用了区块链技术作为数据存储的载体,所记录的数据可以被公开获取。本文方法采用了联盟链的底层架构,拥有准入机制的控制权限,即节点加入与退出需要系统的准许,与公有链架构的自由进出不同。能够获取链上数据的,只有系统认可的节点,首先避免了恶意节点的干扰;其次记录在区块链上的所有数据均经过了SM2 加密算法处理,具备指数级的破译难度,已获得国家与国际机构的应用认可,任一节点只能够获取使用对应公钥加密后的数据。

在TEE 的安全性方面,面临的主要问题是侧信道攻击[25],即在TEE 的运行过程中,通过一定的信道获取运行产生的一些副作用信息,如功耗情况、运行时间和电磁辐射量等,进而推测硬件环境内存储的机密信息和进程执行情况[26]。侧信道攻击主要包含的3 种类型是软件攻击、电路板级物理攻击和芯片级物理攻击。目前的TEE 技术尚未对芯片进行特殊设计的物理防护,因此对于芯片级物理攻击的抵抗能力有限;电路板级物理攻击指的是通过在硬件设备上挂载窃听或攻击设备,以非法获取计算机的信息;软件攻击则最为常见,即通过各类纯软件的攻击程序尝试攻破硬件设备的安全防护,在本文方法中,隐私数据的明文仅出现在TrustZone 技术架构中的TEE 部分,而由于技术本身的架构设计,每次隐私计算的执行只会响应特定的非安全环境中的进程,且由于安全环境与非安全环境同时只能有其中之一处在运行状态,在TEE 中执行隐私计算功能时,非安全环境中的进程会自动进入中断状态。且本文方法中,TEE 内的隐私计算完成后即释放中间数据的物理空间,因此能够抵抗非芯片级的攻击。

5 结语

区块链由于天然具备去中心化、数据真实可信、防篡改等技术特性,为许多应用场景提供了新的解决思路,尤其在数字化时代,能够为数据共享提供便利,但同时可能产生的隐私数据泄露使得在应用区块链时有所顾忌。本文在此背景下,探索性地研究了区块链智能合约的隐私保护问题,提出使用TEE 技术补充区块链架构,以实现区块链技术在功能性与隐私保护性上的共存。由于在设计TEE 时,通常只能够分配较小的内存空间,而数字化应用常面对海量数据的处理,且在隐私保护的要求下,数据还需要加解密处理,对内存空间有更大的需求;因此,本文设计了基于分组与递归思想的隐私求交算法,能够解决海量数据集合之间的隐私求交问题。本文方法仍有进一步研究的空间:一是可以结合密码学技术,如同态加密、零知识证明和属性基加密等,进一步提升隐私保护性能,完善方案;二是可以研究加密数据的排序方式,在使用本文算法前对数据集排序,以提升算法的效率。

猜你喜欢
加密分组区块
区块链:一个改变未来的幽灵
区块链:主要角色和衍生应用
一种基于熵的混沌加密小波变换水印算法
分组搭配
怎么分组
区块链+媒体业的N种可能
读懂区块链
分组
认证加密的研究进展
基于ECC加密的电子商务系统