Zcash——zk-SNARKs区块链隐私协议领导者

1. 引言

越来越多的个人和企业用户关注隐私、灵活 以及 性能,Zcash基于zk-SNARK构建的隐私协议,可提供相应的解决方案。

在数字时代,用户隐私经常受到黑客攻击、监视、分析等攻击。Zcash创建了一个区块链协议,旨在通过屏蔽用户敏感数据来提高隐私。为此,Zcash背后的团队开发了zk-SNARK加密证明技术,可以隐藏重要的区块链交易数据。zk-SNARK技术是区块链领域的一种创新技术,它影响了许多其他加密货币项目。然而,近年来,考虑到数据隐私的道德复杂性,Zcash和其他隐私保护区块链协议已经成为监管机构争论的话题。

2. Zcash历史

2014年,Zcash创始人 Zooko Wilcox 和 7个科学家一起,发起了一个实验性的基于区块链的生态系统——名为“Zerocash” (又称为“Zcash”),该区块链系统的代币为 名为ZEC 的原生加密货币。
该提案最终筹集了300万美元用于设计初始协议,2016年10月28日,Zcash网络上线。Zcash首次使用了zk-SNARK(零知识简洁非交互知识论证 zero-knowledge succinct non-interactive arguments of knowledge)——一种特殊类型的密码证明的区块链协议。通常,zk-SNARK用于privately验证交易,而不向公共网络参与者透露任何敏感数据。

自2016年诞生以来,Zcash经历了多次升级:

  • 2016~2018年,Zcash发布了名为“Sprout series”的一系列早期升级。同时,Zcash技术团队也开始开发了2个核心升级协议——Overwinter和Sapling。
    Sprout、Overwinter、Sapling旨在解决随着区块链网络成熟伴生的一些明显缺陷。
  • 2017年3月,由Zcash创始人捐赠了27.3万个ZEC(当时价值1700万美金)成立了Zcash基金会。
  • 2019年,Zcash母公司更名为Electric Coin Co.。
  • 银行界对zk-SNARK技术很感兴趣,通过与JP Morgan紧密合作,Zcash上线2年后——2018年10月29日,Zcash Sapling升级完成。
  • 2019年12月11日,Zcash的第三次大升级——Blossom 完成,主要改进了transacation settlement,可降低区块生成时间,提高整个网络的吞吐量,最终提高网络的可用性和市场潜力。
  • 2020年6月,第四次大升级——Heartwood,增加了 FlyClient——效率更高的light-client block-header verification 算法,从而提高对企业应用支持。在区块链系统中,轻节点是一种特殊的软件,可与全节点交互。可将轻节点看成是墙壁上砖块之间的灰泥——轻节点帮助将全节点连接在一起,使得全节点可更高效地广播信息以维护整个区块链网络运行。同时Heartwood也对Zcash共识机制进行了修改,支持Coinbase基金挖矿到shielded addresses。
  • 2020年11月,第五次大升级——Canopy。Canopy标志着用于未来4年的新的开发基金的成立。早期的Zcash开发基金是在Zcash网络上线之前成立的,将于2020年11月到期。新的开发基金中,Zcash网络矿工将获得80%的挖矿激励,而剩下的20%分成为:8%给新成立的Major Grants Fund,7%给Electric Coin Co.,5%给Zcash Foundation。
    2020年11月,Zcash减半,相应的区块奖励由6.25ZEC降为3.125ZEC。与Bitcoin类似,Zcash最大供应量为2100万个ZEC。

3. 零知识证明和zk-SNARK技术

3.1 what’s zk-SNARK?

zk-SNARKs借助密码学技术,使得一方(Prover)生成proof,另一方(Verifier)验证proof就可信任 specific information是真的。整个过程都是以密文的形式进行,从而可减少额外敏感数据的泄露。
A zero-knowledge proof is a cryptographic protocol that allows for information to be accurately verified without having to expose the underlying information itself to the entity doing the verifying.

3.2 Zcash的隐私特性

借助zk-SNARKs,Zcash设计了多个先进的功能,支持的地址类型有:【提供了 可供选择的隐私 opt for privacy】

  • z-addresses:为隐私地址,又名shielded address。实际分为两种:
    – 1) Legacy Sprout shielded address:以“zc”开头的地址,为Sprout addresses,通过shielding the wallet address,可为交易提供金融隐私保护,交易用时约为70~90秒。
    – 2)Sapling upgrade shielded address:以“zs”开头的地址,Sapling升级后保留了早期Sprout协议的所有隐私设置,但是相应的交易用时低于1秒。
  • t-addresses:为公开透明地址。t-address 不为交易提供任何隐私保护,与bitcoin交易类似。

基于以上地址类型,Zcash支持多种交易类型:

  • Private交易类型(从 z-address 到 z-address):由隐私地址到隐私地址,这种情况隐私性最强,交易方和接收方的地址都被掩盖了。
  • Deshielding交易类型(从 z-address 到 t-address):由公开地址到隐私地址,适于与需要一定隐私的交易方交易,可清晰知道资金来源,但资金去处被掩盖了。
  • Shielding交易类型(从 t-address 到 z-address):由隐私地址到公开地址,发送方为隐私的,而接收方对全网可见。
  • Public交易类型(从 t-address 到 t-addresss):由公开地址到公开地址,交易与bitcoin交易类似。为大多数Zcash钱包的默认设置。

这些交易类型可让用户在Zcash区块链中发起交易时,自由选择是隐藏少量信息还是隐藏所有信息。如,特殊地址的所有者,借助payment disclosure和view-key技术,可选择向可信第三方——无论是基于合规还是审计原因,公开z-address和交易细节。而两个t-addressses之间的交易,与Bitcoin区块链上的交易类似,发送地址、接收地址、交易的数额等信息是对全网可见的。

零知识证明是密码学的一个创新特性,它可为用户在使用加密货币进行交易时提供更高级别的隐私。

3.3 零知识证明的未来

当前零知识证明的关注重点在保证金融交易隐私。然而,零知识证明可为在线活动的隐私保护方面发挥更大的作用。
数据挖掘和跟踪在线用户行为的程序的出现,越来越需要像类似零知识证明等解决方案来为线上活动提供隐私保护。

4. Zcash 区块链隐私

Zcash自2016年上线以来,已经取得了长足的进步,并继续通过其隐私保护功能,为区块链和加密用户提供对其交易数据可见性的控制。zk-SNARK加密证明为全球市场上基于区块链的用户案例建立了隐私标准。各种各样的个人和企业用户都要求提供Zcash协议类似的隐私性、灵活性和性能。自2014年立项以来,Zcash取得了举世瞩目的发展。随着开发基金的引入和Zcash在2020年末的减半,该项目未来10年的发展轨迹将有助于进一步将Zcash确立为区块链产业的基础性成员。

参考资料

[1] Zcash: History and Overview of the Iconic Privacy-Based Blockchain Protocol
[2] Zcash Leads the Way on Zero-Knowledge Proofs With zk-SNARKs

<think>好的,用户想了解zk-SNARKs的代码实现示例。首先,我需要回忆一下zk-SNARKs的基本概念,它属于零知识证明的一种,允许证明者在不透露信息的情况下验证某个声明的正确性。用户提到参考了几个引用,其中引用了libsnark库和GitHub上的代码,所以应该围绕这些资源展开。 接下来,用户的问题是关于代码实现的具体例子。我需要先确定哪些引用提到了具体的代码库。引用[1]提到Zcash使用了libsnark的一个分叉,并给出了GitHub链接。引用[2]提到了pequin项目,也是基于libsnark。引用[3]讨论了zkLedger的实现,但用户的问题可能更偏向zk-SNARKs本身,所以可能需要重点放在前两个引用上。 然后,我需要考虑如何组织回答。首先介绍libsnark作为主要的C++库,然后给出一个简单的示例,比如电路的定义和证明的生成。可能还需要提到Zcash和pequin项目的具体实现,以提供实际应用的例子。同时,需要确保代码示例符合用户提供的格式要求,比如使用正确的LaTeX格式,并且代码块用Python(如果可能的话)。不过注意到libsnark是C++库,所以可能需要用C++代码示例,但用户示例中的快速排序是Python,所以可能需要调整。不过根据引用中的信息,可能C++更合适。 另外,用户要求生成相关问题,我需要根据zk-SNARKs的实现细节、优化方法、应用场景等方面来提问,确保问题相关且有深度。同时,引用中的信息需要正确标注,比如引用[1]和[2]对应的内容。 还需要检查是否所有数学表达式都用$...$或$$...$$格式,比如电路中的约束条件可能需要用LaTeX表示。例如,一个简单的电路如$x^3 + x + 5 = 35$,需要用行内公式。同时,回答结构要清晰,分步骤说明如何实现,并确保引用正确。 最后,确认回答是否满足用户的所有要求,包括代码实现示例、相关引用标注、问题生成,以及使用中文回答等。如果有不确定的地方,比如具体的代码示例是否准确,可能需要参考提供的引用内容,确保信息正确无误。</think>关于zk-SNARKs的代码实现,以下是系统级的实现要点和示例: ### 1. 核心实现框架 zk-SNARKs的实现通常基于密码学库libsnark(C++),其核心包含三个组件: - **算术电路构建**:将待验证的计算转化为R1CS(Rank-1 Constraint System) $$ \langle A_i, z \rangle \cdot \langle B_i, z \rangle = \langle C_i, z \rangle \quad \forall i $$ - **可信设置阶段**:生成证明密钥(pk)和验证密钥(vk)[^1] - **证明生成/验证**:使用椭圆曲线配对实现零知识属性[^2] ### 2. 代码实现示例 ```cpp // 基于libsnark的简单电路实现 #include <libsnark/common/default_types/r1cs_gg_ppzksnark_pp.hpp> using namespace libsnark; protoboard<FieldT> pb; // 电路构建平台 // 定义电路变量 pb_variable<FieldT> x; x.allocate(pb, "x"); pb_variable<FieldT> y; y.allocate(pb, "y"); // 添加约束:x^3 + x + 5 == y pb.add_r1cs_constraint(r1cs_constraint<FieldT>(x, x, x)); // x^3 pb.add_r1cs_constraint(r1cs_constraint<FieldT>(x + 1, 1, y - 5)); // 生成密钥对 r1cs_gg_ppzksnark_keypair<default_r1cs_gg_ppzksnark_pp> keypair = r1cs_gg_ppzksnark_generator<default_r1cs_gg_ppzksnark_pp>(pb.get_constraint_system()); ``` ### 3. 实际应用案例 - Zcash使用改进版libsnark实现交易隐私保护[^1] - pepper-project实现可验证计算协议[^2] - zkLedger采用Go语言实现椭圆曲线运算和范围证明[^3] ### 4. 性能优化方向 - 椭圆曲线点压缩技术(如引用[3]所述) - 使用SHA256实例化随机预言机 - 并行化Groth16协议中的配对运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值