上周我们公布了云象区块链研究中心在隐私保护和零知识证明技术方面的最新研究成果《BlockMaze: An Effificient Privacy-Preserving Account-Model Blockchain Based on zk-SNARKs》,该论文针对账户模型区块链提出了一种基于zk-SNARKs零知识证明的高效隐私保护方案BlockMaze,获得网络与信息安全领域CCF A类顶级期刊TDSC录用。本文就该方案具体研究内容进行详解。
一、核心原理
BlockMaze是全球首个全面保护交易隐私的账户模型区块链原生方案。目前既能隐藏交易双方关系,也能隐藏交易金额,具备完善隐私保护功能的区块链方案大致可以分为三类:第一类包括Zerocash、Monero等,主要针对UTXO模型区块链设计;第二类包括ZETH、Zether等方案,它们在智能合约层实现隐私保护,属于非原生账户模型方案;BlockMaze属于第三类,它构建在区块链的底层,是原生账户模型区块链隐私保护方案。
在BlockMaze方案里面,我们采用的是一种特殊的零知识证明算法zk-SNARKs。零知识证明作为一种密码学技术,起源于最小泄漏证明,证明者能够在不向验证者泄露任何交易相具体信息的情况下,使验证者相信某个论断是正确的。zk-SNARKs是一种非交互式零知识证明算法,能够在不进行任何人工交互,且不泄露任何交易信息的情况下,完成链上交易正确性的验证。同时zk-SNARKs具有简洁性,即证明非常短,不管你要证明的东西有多复杂,最后这个证明是固定大小,而且只有300字节不到,非常适用于区块链。
基于zk-SNARKs零知识证明的账户模型隐私保护方法,将零知识证明和区块链账户模型结合,可以隐藏在区块链网络里发送方跟接收方之间转账关系和转账金额,有效保证数据不被泄漏,实现了交易数据的隐私保护。
二、关键技术
BlockMaze方案之所以能完善地隐藏账户余额、转账金额和转账双方的对应关系,其中在于我们创新提出两个关键技术:双余额模型和两步转账机制。
1.双余额模型:为了隐藏账户余额,我们将账户余额由单余额模型扩展为双余额模型,分别为明文余额和零知识余额,零知识余额即余额的哈希值或余额承诺。
如图1所示,每一个账户(A,B,C,D,E,F…)都包含两个余额,一个是明文余额(pt_balance),另一个是零知识余额(cmt)。其中cmt是真实余额的哈希值。
2.两步转账机制:发送者先发送资金至区块链,接收者再从区块链存入资金,以达到保护收发双方的关联关系。
如图2所示,发送方在转账时,转出金额以零知识金额(注意与零知识余额的区别)的形式放在一颗Merkle树上;接收方从其中将相应的零知识金额存入自己的账户。发送和接收过程均由零知识证明zk-SNARK确保其安全和隐私。区块链验证者通过验证零知识证明执行转账操作,但是无法得知转账金额或者收发双方关系。
我们来展示一个具体的转账过程。以图3为例,初始状态时,发送方A的明文余额为1000,零知识余额为0。A首先将部分明文余额转化为零知识余额,因此明文余额变为500,零知识余额变为500。接下来,A从自己的零知识余额中转出300,得到零知识金额,并将其存放于区块链;B选择多笔转账零知识金额,并将其中的300存入其零知识余额。
通过BlockMaze方案,明文的数据交易将会被隐藏,虽然知道双方进行了某笔无标记的交易,但是当同时进行许多笔交易时,就会产生许多个发送方与接收方,这样每笔特定交易的双方就被掩盖起来了,无法将交易双方对应起来,并且交易金额完全保密。
三、具体设计
为了更好保护上述转账过程中隐私安全,我们在BlockMaze中设计了两个非交互式承诺对交易进行护航,分别为余额承诺和资金转移承诺:
余额承诺可以将账户余额隐藏起来,我们将账户A的余额承诺表示为,是A的账户地址,是对应于的金额,是关联的序列号,是用于保护的随机数,通过该承诺,账户A中值为的余额转换为(是公开的,但是其他人不知道它具体对应的金额);资金转移承诺则在隐藏金额的同时生成一笔无明确收款方的资金,A向B转账的资金转移承诺表示为,是发送方A的账户地址,是转账金额,是收款方B的公钥,是用于保护的随机数,是关联发送方A的的序列号,A通过该承诺将值为的转账金额转换为(会被转账方公开,但是其他人不知道它具体对应的金额,也不知道收款方)。
为了隐藏账户余额,我们将账户余额由单余额模型扩展为双余额模型,分别为明文余额和零知识余额。明文余额的金额是公开的,而零知识余额对应的金额被隐藏了起来。零知识余额通过余额承诺来实现,A的零知识余额在本地记录为,其中是只有A知道的秘密数据,而会和明文余额一起存储到MPT(Merkle Patricia Tree)上,在区块链的记录中,A的零知识余额表现为(下面我们用代指零知识余额)。我们新增了Mint交易和Redeem交易用于同一账户余额转换,其中Mint交易将明文余额转换为零知识余额,Redeem交易将零知识余额转换为明文余额。
为了隐藏交易金额和交易双方的对应关系,我们设计了一个两步转账过程,转账方通过Send交易发布资金转移承诺,收款方通过Deposit交易将存入零知识余额中。由于发布的资金转移承诺没有明确收款方,因此无法通过Send交易找到收款方,而收款方发送Deposit交易时并不会暴露使用哪个,则通过Deposit交易无法找到转账方。转账的金额是从转账方零知识余额扣除,然后被存储到收款方的零知识余额中,在整个转账过程中转账金额的真实值是完全保密的。
BlockMaze满足账本不可区分性、交易不可链接性、交易不可延展性和平衡性。账本不可区分性指的是除了公开的信息,什么也没有泄露;交易不可链接性指敌手不能从Send交易找到收款方,不能从Deposit交易找到转账方;交易不可延展性指敌手不能用相同的公开数据产生与以往交易不同的新交易;平衡性指敌手不可能花费比他自己账户余额更多的钱。与同样使用zk-SNARKs的Zerocash相比,BlockMaze在时间和存储方面有明显优势。
隐私保护是区块链金融落地的难点,也是金融机构和监管部门关注的重点之一。基于BlockMaze方案,可以追溯并验证每一笔区块链交易,而无需知晓交易详情,并基于此可以实现交易数据访问控制,无论从企业还是监管角度来看,都有利于隐私数据的有序及范式管理;同时能够极大地避免隐私数据的非法窃取,帮助金融机构提升区块链应用的安全性。