零知识证明与ZCash

零知识证明与ZCash

零知识证明以及zk-SNARK

在密码学中,零知识证明是指证明者(通常是发送方)可以向验证者证明某个陈述是正确的,而无需透露关于这个陈述的具体信息。这意味着验证者可以获得关于陈述正确性的信任,却对陈述的内容一无所知。

zk-SNARK(零知识可扩展非交互式论证,Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)是一种密码学技术,用于证明某个陈述的正确性,同时不泄露该陈述的任何详细信息。

SNARK是一种可扩展非交互式论证,它意味着证明的生成和验证过程是高效的,并且不需要与证明者进行交互。这使得验证者能够在不需要大量计算资源和通信交互的情况下验证证明的有效性。

zk-SNARK技术的核心思想是使用数学算法和密码学技术,将陈述转换为一组证明,并生成一个小而高度压缩的证明,同时仍然能够验证陈述的正确性。这使得证明的验证过程高效且可验证。

在加密货币和区块链领域,zk-SNARK被广泛应用于实现隐私保护和匿名性,例如在Zcash中用于保护交易隐私。它还被用于构建其他隐私保护的区块链解决方案和去中心化应用。通过zk-SNARK技术,可以实现高度隐私和匿名性的验证,同时保护用户的数据和交易信息。

ZCash

Zcash是一种基于区块链技术的加密货币,跟比特币高度相似,本质上是比特币的一个分支

Zcash使用了零知识证明(zk-SNARKs)协议,这是一种强大的密码学技术,允许进行私密和匿名的交易。与比特币等其他加密货币不同,Zcash提供了可选的“隐私地址”,使交易的发送者、接收者和交易金额得以保密。

它有三个显著的特点:
1、零知识:证明过程不透露任何消息。
2、简洁:不涉及大量数据传输和验证。
3、无交互:不像网上的阿里巴巴等的例子,需要不断的进行交互问答。

与传统的比特币相比,ZCash是一种加密货币,在比特币中,每个人具有多少钱,每一笔交易的双方以及金额都是以明文的形式存在的,A给B转了1BTC时,其他人接受账单的时候只需要看自己账单中A所拥有的金额是否大于1BTC即可,而由于ZCash中的交易记录都是以秘文的形式存在的,因为都是被加密过了,所以其他人接受账本的时候想验证账本必须通过一种方法来验证A确实有至少1BTC,而A还不想让别人知道他具体有多少钱,这就利用到了零知识证明!

 

ZCash利用零知识证明进行交易的具体过程

在Zcashk中,一个交易的输入和输出都是若干个结构体,即note组成。

一个完整的 note 包含有如下的变量:

  • 持有者的公钥: apk,又称收款人地址
  • 面额: v,代表这笔 note 的代币数值
  • 随机数: rho, 是每一条 note 的唯一标识,当一条 note 被消费了之后,这个值会被放置到 nullifier 表中,代表这条 note 已经被消费了,再次进行消费同一条 note的时候,会触发双花错误,即交易双花防护机制。
  • 随机数: r

用向量组代表上面的 note,可以表示为:

这些note都是被持有者的公钥加密以后存在于网络中的

进行交易时:

假设A要给B转帐C个币

  1. 首先 A 找到自己的一条或多条没消费的 note,每条 note 中有对应的 value,这里我们假设A恰好就存在一条C个币的note。(如果一条 note 无法满足目标转出 value,就需要凑多条 note 作为输出)
  2. A 先用自己的私钥解密note1,得到该条note的随机数rho,用来后续消费(对于每个人,因为可以用私钥解出自己拥有的note,来获得对应的rho,才能进行消费,所以rho相当于一个消费凭证,同时它也是作为被销毁的凭证
  3. A新建一条note,apk使用B的公钥,value=C,生成一个随机数r2,使用哈希函数生成rho2 = HASH(r)
  4. 得到一个note2 = <B的apk, v = C, r2, rho2>
  5. 此时A需要将自己的note1的nf1(数值上等于rho1)发送公链的节点网络,其他节点在收到后nf1后会先去nullifier列表看是否存在,是的话,就判断note1被双花了,否则就将note1的nf1记录在nullifier列表
  6. A还需要使用B的公钥对note2进行加密,并将not2通过秘密通道发给B
  7. 同时将note2的hash值发送给链上的所有点,这些节点能够得到的只有被销毁的A的nf,以及被哈希过后的note2,对具体细节一概不知。
  8. 当节点校验完note的rho后,如何判断发送者A是真正对note拥有使用权?这个时候就可以用到零知识证明
  9. note 的拥有者在发布使用该 note 的时候还要向节点出示称为 Π 的零知识证明凭据,根据 Π ,节点们作为验证者,能够验证 note 的使用权的确属于A。ZCash 在这里应用到了零知识证明,它的代码是根据zk-SNARK 理论完成的,同时也参考了 Zerocash
博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇