Zerocoin学习笔记

论文分析请看:Zerocoin: Anonymous Distributed E-Cash from Bitcoin

总体思路

Zerocoin是一个去中心的不依赖第三方信任的匿名比特币交易记录的系统。

但是本质上其实还只是类似\(laundry\)的服务,将比特币通过\(Mint\)变成\(Zerocoin\)再变成比特币才可以进行消费,\(Zerocoin\)之间不可以互相转账。

比特币有一个优点同时这个优点也是它的缺点,那就是它的交易数据是公开透明的,且使用UTXO模型来建模交易关系。这保证了人人都可以认证,但泄露了用户交易隐私。虽然用户使用一个地址来表示其在比特币中的身份,但是很多研究表明,能够通过保存在比特币上的交易数据挖掘和追踪用户信息,甚至能够将比特币上面的“身份”链接到现实真实身份。总结起来就是,比特币的匿名性还不够。

已经有一些方法被提出来解决这个匿名问题,比如中心化的mix,环签名。这些方法或多或少存在一些“严重”的问题。

为了解决这个问题,这篇论文提出了Zerocoin。下面简述Zerocoin的思路:
image
上图的上面部分表示在比特币中的交易记录,一个转账的转账者的地址和接收者的地址是能够被链接起来的。

下面部分表示的是Zerocoin的交易。它是基于Bitcoin的(也可以说前者是后者的代币),所以有一个Zerocoin Mint的步骤。也就是需要将一定量的Bitcoin转换成Zerocoin。在需要转账的时候,再将Zerocoin转换成Bitcoin。关键点在于图中的虚线部分,表示这两个交易不是链接在一起中,以这样的方式来匿名、防追踪。

不能通过zerocoin转账zerocoin。

站在高层的思维角度来看,我可以使用这样的方式来达到防追踪的效果:我把我的Zerocoin放到一个公共的Zerocoin集合中,在我想花费的时候再随机地从这个集合中选择一个等值的Zerocoin。这样的话就可以把我的钱洗掉了。

协议构造

image

证明的第一个东西主要是通过Accumulator累加器配合零知识证明来实现的,证明有效的同时保护了所要花费的具体硬币c的信息不被泄露。而第二个东西则是直接通过基于离散对数难题的Pedersen承诺方案来实现的(承诺方案的证明本质上也是零知识证明)。
本质上是两次零知识证明,一个证明硬币c属于合法硬币集合C,但不暴露硬币c的具体是哪个;另一个证明硬币c就是该用户之前作出的承诺,但不暴露秘密值r,这样就可以保证用户的匿名性。只不过用合取的方式合在一起证明了:image

Accumulator(累加器)

本论文使用到了密码学的累加器Accumulator,目的是以一种高效的方式来证明某一个个体属于或是不属于一个集合。

RSA累加器(RSA accumulators),可能就是这样的一剂良药,这是一种功能类似于默克尔树(Merkle tree)的数据结构。

可以参考视频:Scaling Bitcoin 2018 "Kaizen" Day 1 Part 3
或者这篇博客:RSA累加器,区块链瘦身神器?

Commitment(承诺) & ZKP(零知识证明)

密码学承诺可以参考:结合应用场景讲Schnorr 协议的零知识身份证明
零知识证明相关的协议主要是:Schnorr协议,具体可以参考:Schnorr协议:零知识身份证明和数字签名

一些细节

  • 细节一
    image
    这里提到的至少会被之后的五个块参考,是规定用来防止区块链51%计算量攻击的。

  • 细节二
    image
    这里文献里说的是随机选择\(S\),一般不会考虑\(S\)选择重复的问题。

  • 细节三
    image
    这里的高亮部分的 *,代表\(R\),是0和1组成的比特串,没有限制长度
    如果 * 改为n的话,就是由0和1组成的n位比特串。

  • 细节四
    image
    \(z\)\(\mathcal A_1\)\(c_0,c_1\)中选择的一个。\(\mathcal A_2\)根据\((z,π,S)\)判断\(z\)\(c_0\)\(c_1\)

posted @ 2021-11-24 15:05  Weisswire  阅读(458)  评论(0编辑  收藏  举报