从Zcash和Aleo的技术出发,理解隐私交易的设计原理

This article is not available in the current language yet. Showing the original version.
分析Zcash和Aleo的技术异同,理解隐私交易的设计原理。

引言

从论文的角度看,Aleo的可编程隐私设计所采用的的隐私设计和早期的Zcash的白皮书(zerocash)更为相近,类似的Key结构,类似的Note结构,类似的称呼(nf在zerocash里称为sn, serial number)。本文是基于Zcash最新的论文和Aleo的ZEXE做的比较,虽然在具体的细节上有所不同,比如Key结构,具体使用的密码学方法;但是在high-level的设计上大体相同。

除了前面所讲述的技术细节外,仍然存在一些其他的技术细节暂未涉及,比如delegate prover方案,零知识证明算法,递归/聚合方案等,有兴趣的同学可继续研究。

Zcash

1. 关于Zcash?

一个简短的视频了解Zcash,大概需要2分钟。

https://zcash.readthedocs.io/en/latest/rtd_pages/basics.html

 

特点:

• 匿名版的BTC,类UTXO模型

• 只能做支付场景,不具备可编程性

 

2. 主要概念

注意: Zcash经过多次协议升级,我们只关注最新版本。主要介绍Zcash里的各个核心概念。

 

2.1 Key components

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

• sk:支出密钥,统一生成

• ask:支出授权密钥

• ak:支出验证密钥

• nk:无效衍生密匙

• rivk:Commitivk 随机性

• dk:分散密匙

• ivk:KAOrchard 私人密钥 / 输入查看密匙

• ovk:输出查看密匙

• pkd:传输密匙

• 支出密钥:密钥

• 全面查看密匙:解密交易背景

• 输入查看密匙

• 输出查看密匙

• 屏蔽支付地址:每次都应不同

你可以在Zcash protocol specification: section 4.2.3, page 36了解这些Key的计算方式。

 

2.2 Note

note是 Zcash 协议中的基本单元,类似于BTC中的UTXO;在Zcash中,所有交易的输入和输出都是notes。当然,Zcash也支持非匿名的交易,这样和BTC的交易模式一样。

所以,要想更深入的了解Zcash,得先需要了解note的数据结构:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

• {d′pkd}:note所有者的地址信息

• v:note对应的金额

• {ρ 'ψ}:计算nullifier的随机数

• rcm:用于计算 note commitment 的随机数

 

在Zcash的协议中,因为隐私的需求,note是不能公开的,因此,需要计算对应的commitment来代表这个note,计算方式如下:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

2.3 Action transfer

一笔交易里,可能包含多个action transfer,每个 action transfer 会花费老的note,生成新的note,其数据结构如下:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

• cvnet:用于action transfer的balance校验,通过binding signature实现,不包含在zk proof里

• rtOrchard:上一个区块对应的状态跟,用于校验花费的note的有效性

• nf:花费的note的标识,用于防止双花

• rk:用来验证spender具有花费的note的权利,通过spendAuthSig签名验签的形式

• cmx:生成新的note的承诺

• epk:临时公钥,用来解密新note得noteplaint信息

• Cenc,Cout:新note被加密后的密文

• enbaleSpends,enableOutputs:指示当前action transfer的类型

• π:zk proof

 

2.4 Action statement

公共输入是:

 {rtOrchard,cvnet,nfold,rk,cmx,enbaleSpends,

enableOutputs}

隐私输入是:

{path,pos,goldd,pkoldd,voldoldold,rcmold,cmold

α,akP,nk,rivk,

gnewd,pknewd,vnewnew,rcmnew,rcv} 

证明statement为:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

•  花费的note的完整性,和noteplaint唯一绑定

•  花费的note的有效性,cm tree的存在性证明

•  Value承诺的完整性,和rcv, old value, new value唯一绑定

•  Nullifier的完整性,防止double spend,维护一个花费的note set

•  花费的note的合法性

•  地址的完整性

•  新note的完整性

•  flag的合法性

 

2.5 交易结构和示例

2.5.1 交易结构

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

整个交易结构包含四个部分:

•  Public info (1 - 5)

•  Transparent transactions info (6 - 9)

•  Sapling transactions info (10 - 16)

•  Orchard transaction info (17 - 25)

 

2.5.2 从 transparent 到 shield

Orchard协议里包含两种地址, transparent address(TA) 和 shield address(SA)。一般,为了执行隐私交易,需要先从TA往SA转账,此时对应的交易结构应为:

• Public info (1 - 5)

• Transparent transactions info (6 - 9)

ⅰ. tx_in_*:实际值

ⅱ. tx_out_*:默认值

• Sapling transactions info (10 - 16)

ⅰ. All:默认值

• Orchard transaction info (17 - 25)

ⅰ.  All:实际值

 

2.5.3 从 shield 到 shield

Orchard协议里包含两种地址, transparent address(TA) 和 shield address(SA)。一般,为了执行隐私交易,需要先从TA往SA转账,此时对应的交易结构应为:

• Public info (1 - 5)

• Transparent transactions info (6 - 9)

ⅰ. All:默认值

• Sapling transactions info (10 - 16)

ⅰ. All:默认值

• Orchard transaction info (17 - 25)

ⅰ. All:实际值

 

2.5.4 从 shield 到 transparent

Orchard协议里包含两种地址,transparent address(TA) 和 shield address(SA)。一般,为了执行隐私交易,需要先从TA往SA转账,此时对应的交易结构应为:

• Public info (1 - 5)

• Transparent transactions info (6 - 9)

ⅰ. tx_in_*:默认值

ⅱ. tx_out_*:实际值

• Sapling transactions info (10 - 16)

ⅰ. All:默认值

• Orchard transaction info (17 - 25)

ⅰ. All:实际值

 

2.6 如何实现隐私?

• Unlinkable

生成的note用cm表示,花费的note用nf表示,nf和cm之间无任何联系,因此,任何人都无法通过这些信息去判断任何一个被生成的note是在哪一笔交易里被花费的。

• Private

ⅰ. Sender address:

交易信息里不包含sender地址且 spendAuthSig为一次性签名(每次都不一样,所以公钥不同,rk)。

ⅱ. Receiver address:

交易里不包含receiver的地址 且 新的Note plaint用的是recevier的公钥加密(接受者的隐私地址也是一次性的)。

. Value:

用pedersen commitment形式隐藏Note,且通过bindsig来保证交易的balance属性。

 

Aleo

1. 和Zcash的异同

Zcash只能执行基于OUTX模型的隐私交易,不具备可编程性;因此,Aleo和Zcash最主要的区别是隐私可编程性;相同点是都支持隐私属性(交易隐私,不只包含资产类)。

 

2. Aleo VS Zcash

2.1 Unit

和Zcash的note不同,Aleo里的基本操作单元是record(BTC里的是UTXO),下面让我们看一下两者的主要区别:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

 

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

 

虽然具体参数名称不相同,但是从功能角度来看,两者之间具有对应关系:

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

分别对应note拥有者的地址信息,承诺相关信息, nf/sn相关信息,value相关信息。

 

所以,两者结构基本类似;主要的区别在于record里的 birth predicate,death predicate。这是两个Boolean类型的函数,代表着,当一个record在birth(generate)和death(spend)阶段,分别需要满足的条件,这一块是支持user-defined,因此具有可编程性。

 

2.2 交易结构

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

和Zcash(2.5.1)的交易主要结构相比,仍然相似:

▪ 消费的record对应的序列号sn,在Zcash里用nf表示,都是具有全局唯一性。

▪ 新生成的record对应的承诺。

▪ 新生成record的plaint,包括拥有者信息,对应的birth/death predicate等。

 

2.3 Prover statement

从Zcash和Aleo的技术出发,理解隐私交易的设计原理

需要证明:

▪ Old record的有效性

▪ Old record的合法性(具备花费record的权利)

▪ New record的有效性

▪ Birth/Death predicate的有效性(类似于Zcash里的Balance校验)

 

3. 其他

3.1 为什么都是utox-based,不是account-based?

Remark2.3(Zexe protocol specification: section 2.3, page 11

 

参考

1. (Zcash)Zcash protocol specification(文中前6张图片来源):

https://zips.z.cash/protocol/protocol.pdf

 

2. (Aleo)Zexe protocol specification(Figure4/5/6,Remark2.3):

https://eprint.iacr.org/2018/962.pdf

 

3. 协议升级:https://z.cash/upgrade/

 

4. zerocash:https://eprint.iacr.org/2014/349.pdf

 

关于我们

Sin7Y成立于2021年,由顶尖的区块链开发者和密码学工程师组成。我们既是项目孵化器也是区块链技术研究团队,探索EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7Y

GitHub:Sin7Y

Twitter:@Sin7Y_Labs

Medium:Sin7Y

Mirror:Sin7Y

HackMD:Sin7Y

HackerNoon:Sin7Y

Email:contact@sin7y.org

Share to:

Author: Sin7Y

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: Sin7Y. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
Polish cryptocurrency exchange Zonda claims that the private keys to approximately 4,500 BTC cold wallets have not been transferred, causing withdrawal difficulties.
PANews Newsflash