基于零知识证明的跨链隐私智能合约*

2024-03-20 01:16马晓旭罗茂玲王金宝
通信技术 2024年2期
关键词:哈希密文合约

马晓旭,罗茂玲,杨 帆,王金宝,肖 敏,唐 飞

(1.中国电子科技网络信息安全有限公司,四川 成都 610041;2.重庆邮电大学,重庆 400065)

0 引言

智能合约是指能自动执行部分功能的协议,并减少协议执行过程中的人工干预。例如,支付合约能自动计算合同当事人的待付金额,并在满足条件时自动执行这笔金额的支付过程。1994 年跨领域知名学者Nick Szabo 提出智能合约的概念,指出:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在合约环境中执行这些承诺的协议。”由于技术原因,智能合约出现后一直没有得到广泛应用。区块链为智能合约提供了一个非中心化、不可篡改和公开透明的执行环境,使得智能合约的应用越来越广泛。智能合约在区块链中的应用使得区块链从以比特币为代表的1.0 时代过渡到以以太坊为代表的2.0 时代。智能合约与区块链的结合被认为是区块链世界中的一次里程碑式升级[1]。

目前,代表性的智能合约应用平台主要为以太坊(Ethereum)和超级账本(Hyperledger Fabric)。以太坊是最早的智能合约平台,其中的智能合约是一串代码的合集,包括代码中各种函数及代码运行过程产生的各种状态[1]。以太坊支持利用多种高级编程语言编写智能合约,专门的编译器将合约编译成字节码后部署到区块链,随后智能合约作为一段程序被运行到网络中所有节点上,任何人无法修改已发布的合约。Fabric 智能合约(smart contact)也曾被称为链上代码(chaincode),其实质是在验证节点(validating node)上运行分布式交易程序,用以执行特定的业务规则,最终更新账本的状态,在具体实现中,可以采用虚拟机或者容器等技术,构造安全隔离运行环境。

智能合约公开部署在区块链上,其任何节点都可以运行智能合约的特性可能造成智能合约代码和数据中隐私信息的泄露。目前国内外学者针对隐私智能合约开展了大量的研究。Hawk 等人[2]和Arbitrum 等人[3]在区块链系统中引入代理人等可信管理器,减弱了区块链的非中心化特点,也增加了针对区块链系统的攻击面。ZEXE[4]、smartFHE[5]、zkay[6]和ZeeStar[7]通过利用包括零知识证明、递归证明合成等密码学知识,构建了开发隐私智能合约的通用框架,但智能合约的部署需要集成专门的插件,开发和部署代价高。

随着区块链应用的不断普及和深入[8-10],链与链之间的互联互通成为必要,因此,跨链技术应运而生。跨链技术能够实现不同区块链之间的跨链数据访问与传递、跨链资产互换与转移及跨链智能合约调用等[8]。智能合约的自动执行和不可篡改性,使得基于智能合约的跨链技术(如哈希时间锁定合约)具有不依赖第三方的完全非中心化优势。跨链互操作可能涉及用户的隐私信息,比如跨链资产互换和转移会暴露用户互换和转移的资产数量。本文针对跨链操作场景,提出了一个简单易执行的跨链隐私智能合约方案。该方案独立于具体的区块链平台,可以直接利用区块链本身的密码机制或根据实际场景需求灵活选择密码机制,实现安全和性能的平衡。该方案可在用户本地执行实现大部分的私密计算,尽可能减少耗费和对区块链性能的影响。

1 背景知识

1.1 跨链技术分析

跨链技术的目的是实现跨链互操作性并解决跨链交易原子性问题、跨链交易验证问题和跨链交易资产管理问题[11-12]。跨链互操作主要包括不同区块链之间的跨链数据访问与跨链数据传递、跨链资产互换与转移和跨链智能合约调用等。

目前,主要的跨链技术有公证人机制、侧链、中继、分布式私钥控制、哈希时间锁定等。公证人机制是通过引入可信第三方作为中介进行跨链的数据收集、交易确认和验证。侧链是一个独立于主链的区块链系统,跨链交易通过侧链与主链双向锚定实现。中继机制通过构造一个第三方公有链,利用跨链消息传递协议,实现各个区块链跨链数据的传输和追踪。分布式私钥控制是利用分布式密钥生成技术和门限密钥共享技术,将原链数字资产映射到新的中间链上,并将资产私钥份额共享给多个节点,达到多节点控制资产使用权的目的,通过锁定和解锁2 种操作进行跨链资产交换和价值转移。哈希时间锁定包括时间锁和哈希锁,让交易双方先利用智能合约锁定资产,如果双方都在规定的时间内输入正确哈希值的原像,即可完成交易。哈希时间锁定机制中交易参与方无须彼此信任,安全性较高,能够实现跨链资产的交换,目前已被应用于WeCross、闪电网络、Interledger、雷电网络、Sprites 通道等。

1.2 简洁非交互零知识证明

零知识证明由Goldwasser 等人[13]提出,它是运行在证明者和验证者之间的一种两方密码协议,可用于进行成员归属命题证明或知识证明。零知识证明具有如下3 个性质:

(1)完备性。用于描述协议本身的正确性。给定某个陈述的有效证据,如果证明者和验证者均诚实运行协议,那么证明者能使验证者相信该陈述的正确性。通俗地讲,如果陈述为真,则验证者总是接受证明。

(2)可靠性。可靠性用于保护诚实验证者的利益,使其免于遭受恶意证明者的欺骗。通俗地讲,如果陈述为假,则验证者总是拒绝提供证明。

(3)零知识性。零知识性是指证明者能向验证者证明某个陈述的正确性而不泄露除正确性以外的其他任何信息,即验证者无法从该证明过程中获取额外的信息。

零知识证明的3 个性质使其具备了信任建立和隐私保护的功能,具有良好的应用前景[11],与区块链的信任与隐私需求高度契合,比如区块链匿名密码货币(如Zcash、Monero)利用零知识证明可在不泄露用户地址及金额的同时证明某笔未支付资金的拥有权并实现转账;区块链扩容的系列zk rollup方案将链上的复杂计算转移到链下时,利用零知识证明保障计算过程中数据的有效性。但是,当区块链的存储容量限制和实时通信的高消费要求被用于区块链的零知识证明时,需要具有简洁性和非交互的特点,即简洁非交互零知识证明方案更适合区块链,其中简洁性是指证明的通信复杂度与陈述规模成亚线性关系,非交互是指证明者只需向验证者发送1 轮消息即可完成证明过程。

简洁非交互式零知识证明(Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge,zk-SNARKs)[14-15]是通用的非交互证明结构,其能支持任何算术电路并通过由可信第三方或者安全多方计算(Secure Multi-Party Computation,SMPC)生成公共参考串(Common Reference String,CRS)模型实现非交互过程,通信量为常数个群元素,验证复杂度可通过预处理达到常数次配对运算,因此具有恒定大小的证明验证代价。zk-SNARKs 被用于以太坊、Zcash、Monero 等区块链。

2 跨链隐私智能合约

2.1 哈希时间锁定合约

2.1.1 哈希时间锁定原理

哈希时间锁是基于哈希锁和时间锁来实现的。哈希锁是基于密码学中的Hash 函数的单向性和抗碰撞性进行设计的。Hash 函数利用算法把任意长度的输入变换成固定长度的输出,该输出就是Hash值或消息摘要(Message Digest)。

设H:X→Y是一个Hash 函数,X表示所有消息的集合(有限集或无限集),Y表示所有消息摘要构成的有限集合。对于Hash 函数的安全要求,通常采用下面的3 个问题来进行判断:

(1)已知y∈Y,寻找x∈X,使得H(x)=y。

(2)已知x∈X,寻找x'∈X,使得x'≠x,并且H(x')=H(x)。

(3)寻找x,x'∈X,使得x'≠x,并且H(x')=H(x)。其中,消息x和x'称为碰撞消息。

如果一个Hash 函数对上述3 个问题不可解,则认为它是安全的。第(1)个问题不可解,则称哈希函数具有单向性;第(1)个和第(2)个问题不可解,则称哈希函数具有抗弱碰撞性;第(1)个和第(3)个问题不可解,则称哈希函数具有抗强碰撞性。

哈希锁是基于Hash 函数的安全性,将Hash 值看成一把锁,而哈希原像则是唯一可以解开这把锁的钥匙,即只有知道哈希原像才能解锁,但利用哈希值直接求解哈希原像在计算过程上是不可行的。

时间锁则是给出一个时间期限,交易双方各自锁定想要交换的资产,并约定在这个时间期限内进行解锁以实现资产交换,超时则交易失败,此时交易双方能拿回自己的资金,避免因欺诈或交易失败造成的损失。哈希时间锁定原理如图1 所示。

图1 哈希时间锁定原理

由图1 可知:假如有2 条区块链ChainA 和ChainB,2 个用户Alice 与Bob 分别拥有ChainA 和ChainB 的原生资产assetA 和assetB,他们利用哈希时间锁定交换资产。具体步骤如下:

(1)Alice 选取一个秘密随机数R,计算哈希值H(R),发送H(R)给Bob;然后Alice 指定一个时间点T1,在ChainA 上创建资产锁定合约,合约执行以下步骤:使用H(R)将自己在ChainA 上的assetA 加上哈希锁;使用时间点T1将自己在ChainA 上的assetA 加上时间锁。

只有获得R并且在时间点T1之前才能将资产assetA 转移走,如果到时间点T1后仍未解锁,则允许撤销锁定,assetA 退回给Alice,即不会发生资产转移。

(2)Bob 基于收到的H(R)和一个小于T1的时间点T2,在ChainB 上创建资产锁定合约,合约执行以下步骤:使用H(R)将自己在ChainB 上的assetB 加上哈希锁;使用时间点T2将自己在ChainB上的assetB 加上时间锁。

只有拥有R并且在时间点T2之前才能转移资产assetB,如果到时间点T2后仍未解锁,则资产assetB 超时锁定,被退回给Bob。

(3)Alice 使用R在时间点T2前调用ChainB上的智能合约解锁assetB,并将资产转移给自己。

(4)因为Alice 解锁了assetB,所以Bob 也获得R的值,Bob 使用R在时间点T1前解锁assetA,并将资产转移给自己。

2.1.2 哈希时间锁定智能合约

哈希时间锁定智能合约主要有资产锁定、提取资产、退回资产及查询锁定信息4 个功能。以资产锁定部分说明隐私保护方案。资产交换双方首先都需要在各自的链上创建智能合约实现自己资产的锁定。设双方各自将资产锁定到一个中间账户地址,简化的哈希时间锁定智能合约的资产锁定的例子如图2 所示。

图2 简化的哈希时间锁定合约:资产锁定

资产锁定需要发送者地址sender、接收者地址receiver、转账数额amount、时间锁timeLock、哈希值hashValue和中间账户地址midAddress等作为输入信息,主要是完成资产从发送者账户到中间账户的转移,并利用哈希值和时间锁进行资产锁定。资产接收者需要在时间锁timeLock代表的时间之前,提供正确的哈希原像PreImage才可以提取锁定的资产并发送给接收者账户。资产锁定阶段PreImage的值为空。合约的正确执行过程首先要判断发送者余额是否充足,即require语句“require(amount≤balance[sender])”的条件是否满足。在条件满足及其他的校验均通过时,发送者账户余额blance[sender]会自动减去转账的数额amount,此时将成为中间账户balance[midAddress]的余额增加数额amount,从而实现从发送者账产到中间账产的转账。最后需要返回哈希时间锁定交易标识htlcId,用于后续操作进行识别,该标识由哈希时间锁定交易的发送者sender、接收者receiver、中间账户地址midAddress、锁定资产的数量amount、哈希值hashValue、时间锁timeLock等参数进行计算得到。

在区块链上,合约被公开存储和调用,合约代码和数据都是公开的,显然会泄露用户的隐私。比如哈希时间锁定合约中双方交换的资产数量amount和账户余额balance等隐私信息都是以明文的形式公开的。

2.2 跨链隐私智能合约规则

隐私保护是区块链领域近年来的研究热点[16],本文关注跨链场景下智能合约的隐私保护机制。哈希时间锁定隐私智能合约如图3 所示,以图3 为例说明跨链隐私智能合约的设计规则。隐私智能合约以保护合约代码和合约数据的隐私性为目的,具体设计规则如下:

图3 简化的哈希时间锁定隐私合约:资产锁定

(1)一个隐私智能合约包括一个公开的合约和若干零知识证明电路。公开的合约部分对隐私变量及其相关表达式进行了隐藏,不会泄露隐私,而零知识证明电路执行隐私部分的零知识证明,以保证合约执行的正确性,合约中的每一个函数对应一个零知识证明电路。图3 给出了与图2 所示哈希时间锁定智能合约对应的隐私版本,其中的隐私变量为双方交换的资产数额amount和各参与方账户的余额balance。

(2)支持隐私智能合约的区块链账本中的余额为账户持有者的公钥密文。加密算法具有加法同态特性,便于根据交易在账户余额密文上进行加、减操作。

(3)公开合约中出现的隐私变量值都以密文形式出现,由合约调用者用自己或者其他交易参与方的地址公钥进行加密。比如图3 所示的隐私合约中公开部分的amount*,是用交易参与方的地址公钥PKmidAddress对资产数额明文amount加密后得到的密文,这个加密操作由合约调用者完成,便于后续账户余额的密文计算。

(4)公开合约中出现的含有隐私变量的表达式可以整体用一个保密或密文变量替代。如图2 中的表达式amount≤balance[sender],balance[sender]-amount,balance[midaddress]+amount在 图3(a)的隐私合约中分别用P,代替,其中P取值为0或1,“0”表示require指定的条件amount≤balance[sender]不满足,合约不会执行,“1”表示条件满足,合约执行,P完全隐藏了隐私变量amount和balance[sender]的 值;[sender]old-amount,PKsender,ri)是资产交换发起者锁定资产到中间账户地址后,将发起者的账户余额用发送者公钥PKsender进行加密,ri是加密时所取的随机数;

amount*是资产交换发起者锁定资产到中间账户地址之后中间账户地址的余额密文,是中间账户之前的余额密文和交换资产数额密文amount*之和。

(5)在隐私合约中出现的需要隐私保护的数据或密文变量,由合约调用者在本地进行私密计算,将密文结果作为合约中函数的参数输入。例如,相比图2中函数assetLockHTLC 的输入参数,图3(a)的隐私合约privacyHTLC 中函数assetLockHTLC*的参数增加了binaryamount*,bool P,和binary proof,这 些参数的值由合约调用者在本地进行私密计算,其中proof是合约调用者对这些本地私密计算生成的零知识证明,用于验证本地计算的正确性。

(6)将合约中的本地私密计算过程作为zk-SNARKs 零知识证明的约束构建证明电路,合约调用者生成相应的本地私密计算的零知识证明,由区块链验证节点执行合约和验证。图3(b)显示4 个电路约束:①SKsender和PKsender是一对合法的公私钥对;②P=1,即require 的条件必须满足;③balance即合约调用者用自己账户余额和交换资产数额明文计算新的账户余额,并用自己的公钥进行加密得到新的余额密文;约束④显示中间账户余额更新方法⊕amount*。由于合约调用者可能不是中间账户地址的拥有者,不能解密存储在区块链账本中的中间账户余额密文,根据规则1,这个密文是用中间账户地址对应的公钥PKmidAddress加密,所以合约调用者需要先利用公钥PKmidAddress对amount进行加密得到密文amount*,然后利用加密算法的加法同态性,直接在密文上进行加法运算,对中间账户地址余额进行更新。另外,密文、公钥和调用者生成的证明作为零知识证明电路的公开输入,调用者的私钥和调用者加密所取的随机数作为零知识证明电路的私密输入。

图3 中各个变量代表的含义解释如下:

①PKsender和PKmidAddress分别为资产交换发起者地址和中间账户地址对应的公钥;

②amount和amount*分别为交换资产数额明文和用PKmidAddress加密的密文;

③P取值为0 或1,“0”表示require指定的条件不满足,合约不会执行,“1”表示require指定的条件满足,合约执行;

④balance[sender]old和分别为资产交换发起者锁定资产到中间账户地址之前发起者的账户余额明文和用PKsender加密的密文;

⑤balance[sender]new和分别为资产交换发起者锁定资产到中间账户地址后发起者的账户余额明文和PKsender加密的密文;

⑥balance[midAddress]old和分别为资产交换发起者锁定资产到中间账户地址之前中间账户地址的余额明文和用PKmidAddress加密的密文;

⑦balance[midAddress]new和分别为资产交换发起者锁定资产到中间账户地址后的中间账户地址的余额明文和用PKmidAddress加密的密文;

⑧proof为资产交换发起者对输入的隐私数据的零知识证明;

⑨SKsender为资产交换发起者地址和中间账户地址对应的私钥;

⑩{…,ri,…}为加密时所取的随机数。

3 分 析

3.1 安全分析

规则3 和规则4 确保智能合约的数据和代码隐私都受到保护,规则5 和规则6 保证所有的私密计算都在本地执行,同时能够对执行结果进行零知识验证,本地执行私密计算确保隐私不会泄露,零知识证明的验证实现在不泄露隐私的前提下保证合约的正确执行。

跨链隐私智能合约的具体执行可以利用区块链支持的椭圆曲线密码机制实现,包括基于椭圆曲线的加密和zk-SNARKs 等。在不同的应用场景下,也可以选择其他更为轻量级的密码方案。本文方案没有与具体的密码方案进行绑定,具有很好的灵活性和适应性。同态加密算法主要用于跨链资产转移或互换中对账号余额的更新,所以只需要轻量级的加法同态加密算法。对于标量数乘运算,可以转换为加法运算。

3.2 性能分析

在性能方面,从合约部署和执行2 个过程对隐私智能合约和普通智能合约进行对比。合约部署方面,隐私合约的部署成本要高于普通合约,零知识证明电路的部署增加了存储成本,但是此成本是一次性花费的,与之后的执行无关。在合约执行期间,所有的私密计算部分包括零知识证明的生成都由合约调用者在本地进行计算,该操作是离链的,不会影响区块链的吞吐量。与普通智能合约相比,隐私智能合约的执行多了链上零知识证明的验证操作,对于选定的zk-SNARKs 方案,验证成本基本上是固定的。因此,隐私合约的部署和执行成本都在可接受的范围之内。

4 结语

本文设计了一个区块链跨链隐私智能合约方案,该方案利用加密算法和零知识证明实现对合约代码和数据中隐私信息的保护,实现跨链操作中用户的资产信息和私密数据的有效保护。该方案没有与具体的区块链平台和密码方案进行绑定,给出了一个具有通用性的隐私智能合约设计方案。在实际应用中可以根据具体的情景选择密码机制、灵活选取需要保护的隐私信息,平衡安全和性能2 个方面的需求。

猜你喜欢
哈希密文合约
一种针对格基后量子密码的能量侧信道分析框架
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
基于OpenCV与均值哈希算法的人脸相似识别系统
基于维度分解的哈希多维快速流分类算法
云存储中支持词频和用户喜好的密文模糊检索
基于同态哈希函数的云数据完整性验证算法
一种基于Bigram二级哈希的中文索引结构
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望