区块链隐私协议的实现方法.pdf

上传人:南*** 文档编号:10581400 上传时间:2021-06-24 格式:PDF 页数:17 大小:746.46KB
收藏 版权申诉 举报 下载
区块链隐私协议的实现方法.pdf_第1页
第1页 / 共17页
区块链隐私协议的实现方法.pdf_第2页
第2页 / 共17页
区块链隐私协议的实现方法.pdf_第3页
第3页 / 共17页
文档描述:

《区块链隐私协议的实现方法.pdf》由会员分享,可在线阅读,更多相关《区块链隐私协议的实现方法.pdf(17页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010086733.7 (22)申请日 2020.02.11 (71)申请人 上海宓猿信息技术有限公司 地址 200439 上海市宝山区高逸路112-118 号3幢7573室 (72)发明人 李星孙通成郑翊夏坤贤 张守恒钟文斌李琦 (74)专利代理机构 北京德恒律治知识产权代理 有限公司 11409 代理人 章社杲卢军峰 (51)Int.Cl. H04L 9/32(2006.01) H04L 29/06(2006.01) H04L 29/08(2006.01) G06F 2。

2、1/62(2013.01) G06F 21/60(2013.01) (54)发明名称 一种区块链隐私协议的实现方法 (57)摘要 本发明公开了一种区块链隐私协议的实现 方法, 包括: 将区块链上进行隐私交易的票据的 承诺存储在Shrubs默克尔树上, 其中, Shrubs默 克尔树的每层具有一个Shrub节点, 在Shrubs默 克尔树上添加一个新的叶节点以存储承诺, 当添 加新的叶节点时只需更新一个Shrub节点。 本发 明的上述技术方案, 可以对代币交易进行隐私保 护, 还可以高效地应用于智能合约。 权利要求书2页 说明书9页 附图5页 CN 111314086 A 2020.06.19 。

3、CN 111314086 A 1.一种区块链隐私协议的实现方法, 其特征在于, 包括: 将区块链上进行隐私交易的票据的承诺存储在Shrubs默克尔树上, 其中, 所述Shrubs 默克尔树的每层具有一个Shrub节点, 在所述Shrubs默克尔树上添加一个新的叶节点以存 储所述承诺, 当添加所述新的叶节点时只需更新一个Shrub节点。 2.根据权利要求1所述的区块链隐私协议的实现方法, 其特征在于, 添加所述新的叶节 点只需更新一个Shrub节点包括: 添加所述新的叶节点时, 将所述新的叶节点所在层切换到一个新的Shrub节点。 3.根据权利要求1所述的区块链隐私协议的实现方法, 其特征在于,。

4、 添加所述新的叶节 点只需更新一个Shrub节点还包括: 重新向上计算哈希值, 直到所述新的叶节点最近的子树根节点, 将所述子树根节点更 新为所述子树根节点所在层的Shrub节点。 4.根据权利要求1所述的区块链隐私协议的实现方法, 其特征在于, 每个所述Shrub节 点满足以下每个特征: 所述Shrubs默克尔树的每层只具有一个Shrub节点; Shrub节点是所述层的唯一一个节点, 或者, Shrub节点是所述Shrub节点所在层的最靠 右的完全子树的根; 所述Shrub节点为一个叶节点, 或者, 以所述Shrub节点为根节点的子树包含所有叶节 点中的部分或者全部叶节点。 5.根据权利要求。

5、1所述的区块链隐私协议的实现方法, 其特征在于, 还包括: 创建节点默克尔树, 所述节点默克尔树的叶节点为所述Shrubs默克尔树的所述Shrub 节点, 并且所述节点默克尔树包括多个子树; 其中, 当添加所述新的叶节点时, 只需修改所述节点默克尔树中与所述新的叶节点对 应的子树的根节点哈希值。 6.根据权利要求1所述的区块链隐私协议的实现方法, 其特征在于, 还包括传输所述数 字资产交易的票据, 传输所述数字资产交易的票据包括: 所述票据的发送方拥有第一密钥对, 所述第一密钥对由一对公私钥构成; 所述票据的接收方拥有第二密钥对, 所述第二密钥对由一对公私钥构成; 通过所述第一密钥对中的私钥和。

6、所述第二密钥对中的公钥生成共享加密密钥; 所述发送方使用所述共享加密密钥加密所述票据, 并将加密后的所述票据和所述第一 密钥对中的公钥发送到所述区块链上; 所述接收方基于所述第二密钥对中的私钥和所述区块链上的所述第一密钥对中的公 钥恢复所述共享加密密钥, 以解密所述票据。 7.根据权利要求1至6任一项所述的区块链隐私协议的实现方法, 其特征在于, 还包括: 当发行隐私资产时, 以所述票据的金额和所述承诺作为输入来生成证明, 将所述票据的所述金额、 所述承诺和所述证明发送至智能合约, 当成功验证所述证明时, 将所述承诺添加至所述Shrubs默克尔树上。 8.根据权利要求1至6任一项所述的区块链隐。

7、私协议的实现方法, 其特征在于, 还包括: 当将隐私资产从发送方转移至接收方时, 所述票据包括输入和输出, 所述发送方为所 述输入提供废弃符, 并为所述输出提供承诺; 权利要求书 1/2 页 2 CN 111314086 A 2 将生成的证明发送至智能合约; 当成功验证所述证明时, 将所述输出的承诺添加到所述Shrubs默克尔树上, 并且所述 智能合约记录所述废弃符。 9.根据权利要求1至6任一项所述的区块链隐私协议的实现方法, 其特征在于, 还包括: 当销毁隐私资产并获得与所述隐私资产等量的公开资产时, 为所述票据生成证明; 将生成的所述证明发送至智能合约; 当成功验证所述证明时, 所述智能。

8、合约记录所述废弃符。 权利要求书 2/2 页 3 CN 111314086 A 3 一种区块链隐私协议的实现方法 技术领域 0001 本发明涉及区块链技术领域, 具体来说, 涉及一种区块链隐私协议的实现方法。 背景技术 0002 区块链是公开的分布式交易账本, 链上的数据都是公开可见的, 包括交易的金额 和交易双方的地址信息等。 虽然一笔交易的发送方和接收方无法和现实生活中买卖双方进 行关联, 但是可以通过对链上的数据进行地址聚簇分析, 从而得出一些地址和身份的关联 信息。 可见尽管数据的公开透明保证了账本真实和不可篡改的特点, 但是这也使得很多需 要隐私的场景无法在区块链上进行运用。 000。

9、3 在此背景下, 区块链的隐私协议被提出。 通过使用密码学等技术手段将交易的发 送方、 接收方和交易金额进行隐藏, 而矿工(验证交易者)可以在不需要知道具体交易细节 的情况下对一笔交易的合法性进行验证。 如使用环签名达到隐私效果的门罗币, 使用零知 识证明zk-SNARK技术的Zcash, 和使用Mimble-Wimble协议的Grin和Beam。 0004 综合来看, 其中zk-SNARK是相对最好的技术。 zk-SNARK技术中文名为 “零知识的非 交互式知识的论证” , 这是一种非交互式的零知识证明技术, 隐私性强, 可以在交易双方不 进行任何沟通的情况下实现对交易地址和交易金额进行隐藏。

10、。 使用zk-SNARK技术的Zcash 安全性好, 至今没有被发现安全问题, 且作为业内领先的隐私技术, Zcash已经稳定运行多 年。 0005 但Zcash也有一些不足, 首先Zcash与门罗以及基于MimbleWimble协议的Grin和 Beam不同, Zcash不会在默认情况下启用隐私功能, 可选的隐私功能的缺点是当用户选择使 用加密交易信息时, 这一行为可能会被视为可疑行为。 另外, Zcash是一种纯加密货币, 像比 特币一样, 并不支持丰富的智能合约, 用户无法在Zcash上开发具有隐私功能的DApp(去中 心化应用)。 0006 随后, 基于zk-SNARK的可以应用在智能。

11、合约上提供隐私的解决方案被提出, 这类 隐私协议让用户可以在带有智能合约功能的区块链(例如以太坊和量子链)上开发隐私 DApp。 通过部署智能合约以实现zk-SNARK技术, 这使得隐私的应用范围大大增加。 0007 Quorum是一个联盟链方案, 由摩根大通开发的企业级分布式账本和智能合约平 台, 它是在以太坊(Ethereum)的基础上开发的, 提供私有智能合约执行方案, 并满足企业级 的性能要求。 适用于需要高速交易以及高吞吐量处理联盟间进行私有交易的应用场景, 主 要是为了解决区块链技术在金融及其他行业应用的特殊挑战而设计。 Quorum的ZSL(零知识 安全层)是一种协议, 该协议利。

12、用zk-SNARKs来使用智能合约进行数字资产的转移, 而无需 透露有关接收者, 发送者和金额的任何信息。 0008 2018年10月, 安永在布拉格的以太坊Devcon上介绍了Nightfall。 在2019年5月31 日, 安永发布了Nightfall, 可以在以太坊主网上使用zk-SNARK智能合约隐私地交易ERC-20 和ERC-721代币。 Nightfall目前的实现并不是传统意义上的链, 并没有修改以太坊的代码, 而在以太坊的基础上, 提供隐私交易的能力。 通过ZoKrates工具箱, 利用以太坊上的智能合 说明书 1/9 页 4 CN 111314086 A 4 约, 提供了以。

13、太坊上的比较完整的隐私交易的服务。 在以太坊智能合约中, 隐私交易的管理 类似Zcash。 0009 根据Quorum文档, 在Intel Xeon E3-1225 v2 3.2GHz处理器(4核)上, 一次 JoinSplit操作耗时42.6秒, 并且需要近3GB的RAM。 对于日常使用而言, 时间和资源的消耗 过大了。 0010 Nightfall使用深度为33的默克尔树的SHA256哈希函数。 ERC-20代币的交易需要 2,292,000个zk-SNARK约束, 并且消耗约2.7Mgas, 这相对较高, 因为以太坊中每个区块的 gas限制是8M。 0011 从上得知, 智能合约上现有的。

14、隐私协议不够实用。 用户必须等待40秒以上才能生 成交易, 并且gas的消耗也无法被接受。 发明内容 0012 针对相关技术中的上述问题, 本发明提出一种区块链隐私协议的实现方法。 0013 本发明的技术方案是这样实现的: 0014 根据本发明的一个方面, 提供了一种区块链隐私协议的实现方法, 包括: 将区块链 上进行隐私交易的票据的承诺存储在Shrubs默克尔树上, 其中, Shrubs默克尔树的每层具 有一个Shrub节点, 在Shrubs默克尔树上添加一个新的叶节点以存储承诺, 当添加新的叶节 点时只需更新一个Shrub节点。 0015 根据本发明的实施例, 添加新的叶节点只需更新一个S。

15、hrub节点包括: 添加新的叶 节点时, 将新的叶节点所在层切换到一个新的Shrub节点。 0016 根据本发明的实施例, 添加新的叶节点只需更新一个Shrub节点还包括: 重新向上 计算哈希值, 直到新的叶节点最近的子树根节点, 将子树根节点更新为子树根节点所在层 的Shrub节点 0017 根据本发明的实施例, 每个Shrub节点满足以下每个特征: Shrubs默克尔树的每层 只具有一个Shrub节点; Shrub节点是层的唯一一个节点, 或者, Shrub节点是Shrub节点所在 层的最靠右的完全子树的根; Shrub节点为一个叶节点, 或者, 以Shrub节点为根节点的子树 包含所有叶。

16、节点中的部分或者全部叶节点。 0018 根据本发明的实施例, 上述实现方法还包括: 创建节点默克尔树, 节点默克尔树的 叶节点为Shrubs默克尔树的Shrub节点, 并且节点默克尔树包括多个子树; 其中, 当添加新 的叶节点时, 只需修改Shrubs默克尔树中与新的叶节点对应的子树的根节点哈希值。 0019 根据本发明的实施例, 上述实现方法还包括传输数字资产交易的票据, 传输数字 资产交易的票据包括: 票据的发送方拥有第一密钥对, 第一密钥对由一对公私钥构成; 票据 的接收方拥有第二密钥对, 第二密钥对由一对公私钥构成; 通过第一密钥对中的私钥和第 二密钥对中的公钥生成共享加密密钥; 发送。

17、方使用共享加密密钥加密票据, 并将加密后的 票据和第一密钥对中的公钥发送到区块链上; 接收方基于第二密钥对中的私钥和区块链上 的第一密钥对中的公钥恢复共享加密密钥, 以解密票据。 0020 根据本发明的实施例, 上述实现方法还包括: 当发行隐私资产时, 以票据的金额和 承诺作为输入来生成证明, 将票据的金额、 承诺和证明发送至智能合约, 当成功验证证明 时, 将承诺添加至Shrubs默克尔树上。 说明书 2/9 页 5 CN 111314086 A 5 0021 根据本发明的实施例, 上述实现方法还包括: 当将隐私资产从发送方转移至接收 方时, 票据包括输入和输出, 发送方为输入提供废弃符, 。

18、并为输出提供承诺; 将生成的证明 发送至智能合约; 当成功验证证明时, 将输出的承诺添加到Shrubs默克尔树上, 并且智能合 约记录废弃符。 0022 根据本发明的实施例, 上述实现方法还包括: 当销毁隐私资产并获得与隐私资产 等量的公开资产时, 为票据生成证明; 将生成的证明发送至智能合约; 当成功验证证明时, 智能合约记录废弃符。 0023 本发明的上述技术方案, 考虑到添加叶节点时对整颗增量默克尔树更新的消耗, 从而引入Shrubs默克尔树来进行改进。 通过记录多个子树的根节点, 来达到 “添加一个节点 只需要更改最近的那个树根即可” 这样的效果。 0024 另外, 由于协议的核心步骤。

19、是通过zk-SNARK技术生成和验证零知识证明, 而输入 的大小会影响gas的消耗。 Shrubs默克尔树的使用虽然减少了更新数据的gas消耗, 但增加 了零知识证明输入的大小, 为了解决这个问题, 通过将Shrubs默克尔树中的子树根节点存 在Node默克尔树中, 在生成证明的时候, 不需要提供Shrub默克尔树中所有的根节点, 只需 要提供Node默克尔树中的一条路径即可, 由此减少了公开输入的大小。 0025 使用链上秘密分发技术, 发送者将交易信息通过密钥加密后上传到区块链上, 密 钥再通过密钥共享的方式传到链上。 接收者可以从链上通过密钥共享的方式恢复出密钥, 并从链上的加密交易数据。

20、恢复出原始交易数据。 通过链上秘密分发技术, 发送方只需要知 道接收方的相关公钥即可完成一次交易, 不需要再与接收方进行线下的交互, 提升了整体 的效率。 0026 与Zcash不同, 本发明的协议不仅对代币交易进行隐私保护, 还可以高效地应用于 智能合约, 为DApp赋予隐私的特性。 可见, 本协议具有高度的可用性和广泛的适应性。 附图说明 0027 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例中所 需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本发明的一些实施 例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根据这些附图获。

21、 得其他的附图。 0028 图1A和图1B是根据本发明实施例的Shrubs默克尔树的示意图; 0029 图2是根据本发明实施例的节点默克尔树的示意图。 0030 图3是根据本发明实施例的节点默克尔树的示意图。 0031 图4是根据本发明实施例的隐私协议的总体架构的示意图。 0032 图5是根据本发明实施例的隐私协议的使用的两个密钥对的示意图。 0033 图6是根据本发明实施例的链上秘密分发的流程示意图。 0034 图7是根据本发明实施例的MINT操作的流程示意图。 0035 图8是根据本发明实施例的TRANSFER操作的流程示意图。 0036 图9是根据本发明实施例的BURN操作的流程示意图。。

22、 说明书 3/9 页 6 CN 111314086 A 6 具体实施方式 0037 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是全部的实施例。 基于 本发明中的实施例, 本领域普通技术人员所获得的所有其他实施例, 都属于本发明保护的 范围。 0038 在区块链上进行隐私交易的单位是票据(Note)的承诺(Commitment)。 其中, 票据 是对数字资产数值的加密表示。 票据指定金额和接收方地址, 而且, 票据可以由对应于该接 收方地址的私钥来花费。 在其他方案中, 可以不使用 “票据” 这一。

23、术语而可能用其他术语, 但 只要表达的意思是 “数字资产数值的加密表示” , 本发明的方案就是适用的。 在本领域中, 国 际上通用的表达为Note(本文中翻译为票据)。 承诺是对Note的一种哈希的表示, 存在 Shrubs树上的数据结构。 废弃符(nullifier)也是国际通用的说法, 是为了花费一张票据所 存在的数据结构。 另外, 对于每一张票据, 都有一个相关的承诺, 该承诺可由一个陷门函数 来生成。 陷门函数还会生一个关联的废弃符(nullifier)。 对于每张票据, 只可能存在一个 有效的承诺和废弃符。 0039 本发明的基于隐私协议的实现方法将承诺存储在Shrubs默克尔树(M。

24、erkle Tree) 上。 应当理解, Shrubs默克尔树是增量默克尔树的一种变体。 增量默克尔树(Incremental Merkle tree)是仅可以进行添加的默克尔树, 仅支持数据块的插入, 固定深度的增量默克 尔树被用来存储票据承诺。 考虑到如果采用默克尔树, 那么在插入数据时对整个树更新所 造成的开销极大。 因此, 本发明使用Shrubs默克尔树进行改进。 0040 具体来说, Shrubs默克尔树不是由整颗树的根节点表示, 而是由整棵树的一系列 子树的根节点来表示。 假设有一颗高度为h的Shrubs默克尔树, 则需要h+1个节点来作为子 树根节点, 每层一个, 这些根节点称作。

25、Shrub节点, 所以Shrubs默克尔树的每层具有一个 Shrub节点。 这些Shrub节点都满足以下特征: (1)Shrubs默克尔树的每一层上只具有一个 Shrub节点; (2)Shrub节点是该层的唯一一个节点, 或者, Shrub节点是Shrub节点所在层的 最靠右的完全子树的根; (3)Shrub节点为一个叶节点, 或者, 以Shrub节点为根节点的子树 包含所有叶节点中的部分或者全部叶节点。 通过这种方式, 当在一个层中添加一个新的叶 节点(没有子节点的节点)时, 只需更新一个Shrub节点。 在一个实施例中, 添加新的叶节点 时, 将新的叶节点所在层切换到一个新的Shrub节点。

26、。 如图1A和图1B所示, 以一个高度为3的 Shrubs默克尔树为例。 当插入节点4时, Shrub节点为14、 12、 8、 4。 当插入节点5时, Shrub节点 变为14、 12、 10、 4, 这是因为节点10是13的左子树, 且是该层最靠右的完全子树的根。 也就是 说, 添加一个叶节点以存储承诺时, 只需要更改最近子树的节点。 在另一个实施例中, 可以 重新向上计算哈希值, 直到所述新的叶节点最近的子树根节点, 将所述子树根节点更新为 所述子树根节点所在层的Shrub节点, 这样就可以更新一个Shrub节点并且只有这一个 Shrub节点需要被更新。 0041 通过上述设计, 可以允。

27、许以(1)的时间复杂度插入一个叶节点(承诺), 因为添加 数据时, 只需要向上修改到该节点所在子树的根节点即可, 而不需要将修改一直向上传递, 因此大大降低了插入数据所需要。 因此, 数据块插入所消耗的gas(燃料)比原生增量默克尔 树小很多。 对于每个非叶节点的节点, 它的哈希值最多只会计算一次, 当所有叶节点都插入 之后, 整棵树一共需要计算(2h-1)次。 所以插入一个叶节点平均只需要进行一次哈希计 说明书 4/9 页 7 CN 111314086 A 7 算。 0042 zk-SNARK是零知识简洁非交互式知识论证的缩写。 为本发明的zk-SNARKs选择合 适的哈希算法时, 需要考虑。

28、两个因素:gas的消耗和生成证明的时间。 一般来说, 一个gas消 耗更少的哈希函数将导致一个更大尺寸的zk-SNARK电路(有更多约束), 也就意味着生成证 明的时间会更长。 考虑到在本发明的协议中, 哈希函数只会在链外进行使用, 所以只需关心 生成证明的时间这一因素。 0043 表1中列出了一些可供选择的哈希函数。 可以看到并没有同时具有低gas消耗且小 电路尺寸的哈希函数。 但是, 由于Shrubs默克尔树的使用, 本发明能以相对低的gas消耗建 立一棵默克尔树, 因此可以减少gas消耗这一因素的考虑。 优选的, 本发明采用Poseidon或 者MiMC哈希函数。 0044 表1哈希函数。

29、选择 0045 Hash函数Gas消耗zk-SNARK约束 SHA2566028k MiMCe7r918.9k646 Poseidont6f8p5758.4k317 0046 Shrubs默克尔树的使用, 使得本发明的协议能以较低的gas维护一棵默克尔树, 但 是这需要增加证明一个叶节点(承诺)在树中所消耗的gas。 为了证明一个叶节点在Shrubs 默克尔树上, 不仅要提供从该节点到所在子树的根节点路径, 还应该提供所有的Shrub节 点。 因此, 公开输入参数的大小由1增加到(h+1)(有h+1个Shrub节点)。 zk-SNARK中验证节点 隶属关系的gas消耗VerificationG。

30、as的计算公式如下: 0047 VerificationGasn*ScalarMulGas+PairingBaseGas+4*PairingPerPo intGas 0048 其中n是公开输入的大小, ScalarMulGas、 PairingBaseGas、 PairingPerPointGas 是三个椭圆曲线操作的gas消耗。 这些操作是通过以太坊虚拟机(EVM)中的预编译合约执行 的, 它们所消耗的gas如表2所示。 可以看到, 公开输入的代销每增加1, gas的消耗就会增加 40,000。 因此, Shrubs默克尔树比原生增量默克尔树需要多消耗40000*h的gas。 0049 表2。

31、 EVM上椭圆曲线操作的Gas消耗 0050 操作Gas消耗 ScalarMulGas40,000 PairingBaseGas100,000 PairingPerPointGas80,000 0051 为了解决这个问题, 本发明提出了一种全新的解决方案: Shrubs公开输入压缩 (Shrubs Public Input Packing), 用来减少公开输入的大小。 如图2所示, 为所有的Shrub 节点创建另外一个默克尔树, 称作节点默克尔树(Node Merkle Tree), 节点默克尔树的叶 节点是Shrubs默克尔树的Shrub节点。 0052 如图3所示。 一棵节点默克尔树会被分。

32、为几个子树, 并且这些子树的树根会被保存 下来。 当一个叶节点更新时, 只需修改节点默克尔树中与之对应的子树的根节点哈希值, 默 克尔树根随之更新。 也就是说, 每当将叶节点插入到Shrubs默克尔树中时, 都会更新节点默 克尔树, 因为Shrub节点已经更新。 如此, 我们可以使用节点默克尔树中的一条验证路径 (verification path), 而不是所有的Shrub节点, 来证明Shrub节点的有效性。 这样, 公开输 说明书 5/9 页 8 CN 111314086 A 8 入的大小将减小为1。 通过利用节点默克尔树, 减少了插入数据的过程会带来额外的gas消 耗。 此外, 选择M。

33、iMC哈希作为节点默克尔树的哈希函数, 可以平衡电路尺寸大小和gas消耗。 0053 Shrubs公开输入压缩能正常工作是因为所有的Shrub节点是公开的, 并且它们的 默克尔树根是固定的。 但对于其他的公开输入, 这种方法可能不再起作用。 这些公开的输入 必须受一个单独的电路约束。 我们使用一种方法:公开输入压缩(Public Input Packing), 来减少公开输入的大小。 假设一个电路可以由函数F(u,w)来表示, 其中u表示公开输入, w表 示隐私输入。 可以将此函数更改为F(H,f(u,w)H(u)的形式, 所有公开输入的大小变为1 (所有输入的哈希)。 我们的协议使用MiMC。

34、哈希用于公开输入压缩。 0054 另一方面, 本发明的协议提供两种资产: 公开资产和隐私资产。 公开资产例如是通 用ERC-20代币, 所有的交易信息在区块链上透明, 隐私资产的设计与Zcash类似, 资产的信 息是隐私的。 隐私资产也可被视为ERC-20代币的隐私表示。 本发明提供的协议可以使用户 轻松地转移他们的公开资产或隐私资产。 0055 图4说明了本发明的协议的总体架构。 区块链(block chain)需要部署几个智能合 约(Smart Contract), Monitor帮助监控这些合约的交易并将交易发送到区块链上。 Server (服务器)是核心组件, 它调用zk-SNARK引。

35、擎(Engine)生成证明并同步区块链的状态 (State)。 0056 本发明的协议使用两个密钥对, sk、 pk密钥对使用Poseidon哈希函数生成, 用于身 份识别, 其中skFr。 esk、 epk密钥对基于Curve25519哈希函数生成, 用于链上秘密分发的 加密。 其中, sk为用于身份识别的私钥, pk为用于身份识别的公钥, esk为用于秘密分发的私 钥, epk为用于秘密分发的公钥; Fr是实数域。 两个密钥对的关系如图5所示。 0057 使用与zk-SNARKs相同的UTXO模型。 所有的承诺都保存在Shrubs默克尔树上。 Shrubs默克尔树的高度被设置为31, 以总。

36、共支持231票据。 一张票据可以包含以下字段: (1)v:数值, 代表数字资产的金额; (2) :随机数据, Fr; (3)pk:票据的公钥, pkFr。 0058 票据本身对公众来说是隐藏的。 而承诺commitment会被记录在区块链上, 计算方 法如下:commitmentcommit_hash(pk,v, )。 0059 要花费一张票据, 应提供相应的废弃符并把它发送到区块链上。 废弃符nullifier 的计算方法如下: 0060 nullifiernf_hash(sk, )。 0061 链上秘密分发(In-band secret distribution)是用于以加密形式将票据的传。

37、输 部分存储在区块链上。 在zk-SNARKs中, 为了传输一张票据, 发送方需要通过点对点方式将 票据值发送给接收方, 并在区块链上将承诺发送给接收方。 本发明的协议使用链上秘密分 发技术, 这允许发送方也可以通过区块链秘密地共享票据给接收方。 这样, 整个过程都可以 在区块链上完成。 0062 链上秘密分发的流程如图6所示, 发送方首先生成临时密钥对, 以使得发送方拥有 第一密钥对(临时密钥对), 该第一密钥对由私钥tsk和公钥tpk构成。 并且, 票据的接收方拥 有第二密钥对, 第二密钥对由私钥esk和公钥epk构成。 然后通过发送方的第一密钥对中的 私钥tsk和第二密钥对中的公钥epk。

38、来生成 “共享加密密钥(shared encryption key)” 。 最 后, 发送方使用共享加密密钥加密票据, 并将加密的票据和第一密钥对中的公钥tpk发送到 区块链上。 接收方可以基于第二密钥对中的私钥esk和区块链上的第一密钥对中的公钥tpk 说明书 6/9 页 9 CN 111314086 A 9 恢复共享加密密钥, 最后, 用共享加密密钥在链上将加密的票据进行解密。 0063 进一步的, 本发明的协议还提供三种隐私操作, 三种隐私操作分别称为MINT、 TRANSFER和BURN。 0064 MINT操作用于通过将等量的公开资产(transparent asset)锁定在区块链。

39、智能合 约中, 以发行一定数量的隐私资产(private asset)。 如图7所示, MINT操作将为已发行资产 创建新的票据。 zk-SNARK引擎使用MINT电路(circuit), 以票据的金额和承诺作为输入, 来 帮助生成票据证明(proof)。 然后将它们发送到智能合约。 如果证明被成功验证 (verification), 则将承诺添加到Shrubs默克尔树中。 0065 如图8所示, TRANSFER操作被用来将隐私资产从发送方转移到接收方。 它将生成一 个包含四张票据的交易:两张作为输入, 两张作为输出。 在其他实施例中, 也可以生成其他 数量的票据来作为输入和输出。 发送方必。

40、须为输入提供两个废弃符, 为输出提供两个承诺。 zk-SNARK引擎使用TRANSFER电路为输出生成证明。 然后交易会被发送到智能合约。 如果被 成功验证, 智能合约将记录两个废弃符, 并将两个承诺追加到Shrubs默克尔树上。 0066 BURN操作可以销毁一定数量的隐私资产并获得等量的公开资产, 如图9所示。 首 先, 必须提供票据和其默克尔路径来证明对票据的所有权。 0067 zk-SNARK引擎使用BURN电路为票据生成证明。 数值、 票据废弃符、 Shrubs默克尔树 根、 账户是发送到智能合约的公开输入。 如果被成功验证, 票据的废弃符将记录在智能合约 中, 并且票据也不能被再使。

41、用。 0068 以下通过一个具体示例来对zk-SNARK电路进行说明。 在一个示例中, Alice铸造了 一定数量的隐私资产, 将其转移到Bob, 并由Bob进行销毁。 下标为A的符号表示其属于 Alice, B为Bob。 0069 MINT电路 0070 通过以下步骤, MINT电路被Alice用来发行隐私资产。 0071 1.随机生成一个盐值 。 0072 2.计算票据承诺cmcommit_hash(pkA,v, )。 0073 3.生成zk-SNARK证明 , 该证明断言票据承诺已被正确构建: 0074 (a)公开输入(v,cm), 0075 (b)隐私输入(pkA, ), 0076 (。

42、c)在隐私输入和公开输入上调用zk-SNARK证明程序, 这将输出一个证明 , 它将 检查cmcommit_hash(v,pkA, ), 并且确保v是一个64位无符号整数。 0077 4.生成临时密钥对tsk、 tpk, 并计算共享加密密钥EKBLAKE2b(Curve25519(tsk, epkA),epkA)。 0078 5.生成票据的加密信息ciphertextencryption(EK,( ,pkA)。 0079 6.将 、 (v,cm)、 ciphertext发送到智能合约。 0080 TRANSFER电路 0081 假设Alice想要转移金额为e的隐私资产给Bob。 Alice必须。

43、确保自己至少拥有金额 总数为e的隐私资产承诺。 为方便起见, 假设Alice已经铸造了两个值为c和d隐私资产的承 诺, 并且有c+de。 令f为平衡量, 因此c+de+f。 具体的转移步骤包括: 0082 1.随机生成两个盐值( e, f), 每个输出票据一个。 说明书 7/9 页 10 CN 111314086 A 10 0083 2.计算两张输出票据的承诺值: 0084 (a)output_cm0commit_hash(pkB,e, e), 0085 (b)output_cm1commit_hash(pkB,f, f)。 0086 3.计算两张输入票据的废弃符: 0087 (a)input。

44、_nf0nf_hash( c,skA), 0088 (b)input_nf1nf_hash( d,skA)。 0089 4.生成zk-SNARK的证明 , 该证明传输操作是有效的: 0090 (a)公开输入 0091 (input_nf0,input_nf1,output_cm0,output_cm1,shrubs) 0092 (b)隐私输入: 0093 i.旧的输入票据(pkA,c, c)和(pkB,d, d); 0094 ii.新的输出票据(pkB,e, e)和(pkB,f, f); 0095 iii.Alice的私钥sk; 0096 iv.对每一个输入票据的默克尔见证(Shrubs和节点。

45、默克尔树)。 0097 (c)在公开输入和隐私输入上调用zk-SNARK证明程序, 这将输出证明 , 以检查以 下约束是否成立: 0098 i.output_cmi被正确创建; 0099 ii.input_nfi被正确创建; 0100 iii.pkApk_hash(sk); 0101 iv.对每一个输出票据的默克尔见证(witness)是有效的; 0102 v.金额等式c+de+f成立。 0103 5.生成临时密钥对tsk、 tpk, 并计算加密密钥EKBLAKE2b(Curve25519(tsk, epkB),epkB)。 0104 6.生成票据文本的加密文本:cxteencrypt(EK,。

46、(e, e,pkB)。 0105 7.生成票据文本的加密文本:cxtfencrypt(EK,(f, f,pkB)。 0106 8.将 、 公开输入和两个输出票据的加密文本cxte,cxtf发送给智能合约。 0107 BURN电路 0108 Bob可以使用BURN操作将他的隐私资产进行销毁。 具体步骤包括: 0109 1.为输入票据计算废弃符nfnf_hash(e, e,skB)。 0110 2.生成zk-SNARK的证明 , 它证明焚烧操作有效。 0111 (a)公开输入:nf,e,account,shrubs。 0112 (b)隐私输入:输入票据, sk和它的默克尔见证(Shrubs和节点默。

47、克尔见证)。 0113 (c)在公开输入和隐私输入上调用SNARK证明程序, 这将输出证明, 该证明检查以 下约束是否成立: 0114 i.nf从输入票据中被正确创建。 0115 ii.默克尔见证对于输入票据是有效的。 0116 iii.输入票据的值是e。 0117 iv.zk-SNARK证明绑定到公共帐户account。 0118 3.将 和公开输入发送到智能合约。 说明书 8/9 页 11 CN 111314086 A 11 0119 本发明的协议能够高效地应用于智能合约, 具体表现为gas消耗低, 交易生成时间 短。 在以下条件下进行评估: 在装有Intel(R)Core(TM)i5-7。

48、500 CPU 3.40GHz处理器(4核) 和8GBRAM的计算机上进行评估。 使用Qtum v0.18.1启动了内置EVM的私有区块链, 然后将智 能合约部署到了其中。 MINT、 TRANSFER和BURN操作都执行了20次以测量证明生成时间的平 均值, 并且它们的gas消耗是从区块链上的数据中获得。 评估结果显示于表3。 我们可以看 到, TRANSFER操作的gas消耗约为1.1M, 证明生成时间为5.68s, 明显低于其他协议。 MINT和 BURN操作消耗的资源甚至少于TRANSFER。 总体而言, 与其他协议相比, 该协议在EVM上的执 行效率更高。 0120 表3协议性能 0。

49、121 0122 综上所述, 由于现有的区块链具有极弱的隐私性, 我们提出的协议是一种区块链 上的隐私协议。 0123 考虑到添加叶节点时对整颗增量默克尔树更新的消耗, 本发明引入Shrubs默克尔 树进行改进。 通过记录多个子树的根节点, 来达到 “添加一个节点只需要更改最近的那个树 根即可” 这样的效果。 0124 另外, 由于协议的核心步骤是通过zk-SNARK技术生成和验证零知识证明, 而输入 的大小会影响gas的消耗。 Shrubs默克尔树的使用虽然减少了更新数据的gas消耗, 但增加 了零知识证明输入的大小, 为了解决这个问题, 通过将Shrubs默克尔树中的子树根节点存 在Nod。

50、e默克尔树中, 在生成证明的时候, 不需要提供Shrub默克尔树中所有的根节点, 只需 要提供Node默克尔树中的一条路径即可, 由此减少了公开输入的大小。 0125 使用链上秘密分发技术, 发送者将交易信息通过密钥加密后上传到区块链上, 密 钥再通过密钥共享的方式传到链上。 接收者可以从链上通过密钥共享的方式恢复出密钥, 并从链上的加密交易数据恢复出原始交易数据。 通过链上秘密分发技术, 发送方只需要知 道接收方的相关公钥即可完成一次交易, 不需要再与接收方进行线下的交互, 提升了整体 的效率。 0126 与Zcash不同, 本发明的协议不仅对代币交易进行隐私保护, 还可以高效地应用于 智能。

展开阅读全文
内容关键字: 区块 隐私 协议 实现 方法
关于本文
本文标题:区块链隐私协议的实现方法.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/10581400.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1