Sprout和Sapling的Transaction的数据结构详解

最近又重新看了看zcash的白皮书。话说,看zcash的白皮书需要一点耐心,144页的白皮书形式化太多,通篇就只有一张图(地址和key生成关系图)。
经过sprout和sapling两次升级,目前zcash中transaction中集成了三种交易:1/ 透明交易 2/ joinsplit(sprout)3/ spend/output (sapling)。
1. sprout
sprout使用joinsplit结构表示一笔交易。joinsplit中的vold和vnew实现了隐私和透明交易的交易金额的平衡。rt是note commit形成merkle树的树根。nf和cm分别是nullifier和note的commitment(在sprout都是使用的sha256算法)。note,note plaintext, 以及nullifier相对直白。
1.1 joinsplitsig
joinsplitsig对整个transaction数据使用私钥进行签名,保证transaction的数据不被篡改。签名的数据要被验证,必须提供“公钥”。在zcash的框架中,隐私考虑,转账双方的“公钥”都不能公开。为了能提供签名,就只能重新生成临时的“公钥”/“私钥”对(joinsplitpublickey, joinsplitprivatekey)。用joinsplitprivatekey对整个transaction的“sighash_all“的结果进行签名,生成joinsplitsig。
1.2 hsig 和 h
hsig是一个比较有意思的设计。试想,如果只有joinsplitsig机制,虽然保证了transaction数据的完整性,但并没有保证签名本身不能变。完全可以在transaction其他数据不变的情况下,重新生成joinsplitpublickey,从而生成新的joinsplitsig。hsig就是为了解决这个问题。hsig“绑定”所有的nf的数据和当前使用的joinsplitpublickey。并且,使用每个nf中对应的“私钥”,对hsig进行hash计算,生成h。也就是说,每个nf对应的私钥都“授权”使用当前的joinsplitpublickey。这样,joinsplitpublickey就不能随意修改,要做改动,必须知道每个nf对应的“私钥”。
1.3 cenc
sprout使用的是”in-band secret distribution“。简单的说,需要传输给转账对方的信息(note plaintext),加密后存储在链上。采用这种方式,转账对方不需要实时在线,任何时候都能同步链上数据确认交易。和joinsplitsig一样的思想,转账对方的信息不能直接作为加密密钥。先随机生成epk/esk,再和pkenc结合,生成加密密钥。
2. sapling
sapling是一个比较大的升级,零知识证明的性能提升了十几倍。sapling不用joinsplit结构表示交易,而是用spenddescription和outputdescription直接表示“花费”和“支出”。一个比较重要的设计是:valuebalance,spenddescription中的cv以及outputdescription中的cv都是value的同态commit。所谓的同态commit,就是value的计算后的commit和commit再计算的结果相等。
2.1 spendauthsig
spenddescription中的spendauthsig是对整个spenddescription进行签名。和sprout签名的思想类似。先随机出rsk和rk密钥对,再使用rsk进行签名,同时把rk放在spenddescription中。
2.2 cenc和cout
sapling同样使用的是”in-band secret distribution“。cenc是对note plaintext进行加密的结果。和sprout类似,加密的密钥由esk和pkd生成。sapling比sprout设计了更多的密钥“权限”。众多密钥中,有个ovk(outgoing viewing key),也就是拥有ovk,可以查看outgoing的交易。原理很简单,就是用ovk将esk和pkd加密,生成cout。
2.3 bindingsig
bindingsig也是整个transaction数据的签名。签名使用的公钥/私钥(bvk/bsk)是通过cv以及生成cv时采用随机数生成。因为同态commit的算法保证bvk=bsk*r (r是生成元),所以,bsk和bvk存在公钥/私钥关系。bingdingsig就是用bsk对整个tansaction签名的结果。
总结:
zcash的白皮书形式化描述比较多,看完整理需要耐心。zcash已经经过了三个阶段:overwinter,sprout和sapling。画图总结了sprout和sapling的交易数据结构,更直观理解zcash的隐私设计。

外置显卡Wolfe让你的MacBook秒变游戏本
教程:在ArkUI开发框架中实现马赛克处理功能
今天来介绍一下芯片ACPL
中红外光纤倏逝波传感原理
HC 2022丨大咖金句,干货满满
Sprout和Sapling的Transaction的数据结构详解
AI热潮不断蔓延 人才短缺问题一直是这一行业中的主旋律
GB/T6670-2008微电脑海绵回弹率测试仪上海徽涛自动化
商业智能BI在银行业的应用
苹果AirTags物品跟踪器目前已经被iOS系统证实
不同品牌的电容器可以一起使用吗?
2022年新能源汽车行业研究报告
什么是工业4.0_中国实现工业4.0的优劣势
光纤损耗怎样计算_光纤损耗计算公式
天奇股份与富奥股份签署备忘录,将合作开展动力电池材料再生利用业务
全自动化码头正成为港口业发展的新趋势,“中国制造”已经占有一席之地
为什么说运算放大器的两个输入端应该放上相等的阻抗
扬杰科技推出的TO-247 FRD产品,可应用于充电桩领域
iOS11正式版升级后有耗电bug,iOS11.0.1更新来了!解决耗电问题更流畅
造车新势力们的量产之路困难重重