zuc算法介绍 zcash算法

鹏俊财经 98 0

本篇文章给大家谈谈zcash算法,以及zuc算法介绍对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

Zcash NU5 升级

Zcash 计划于 2021 年 10 月 1 日发布 迭代产品套件 Halo Arc,包括对 Zcashd (Zcash 共识节点)、ECC Reference Wallet 应用以及 ECC 钱包 SDK 的更新,并将涵盖 Zcash 即将进行的两项改进,包括 Zcash 网络升级 5 (NU5,预计激活日期也为 2021 年 10 月 1 日)和统一地址(unified addresses),其中,Zcash 网络升级 5 实现Orchard匿名协议,将 Zcash 从 zk-SNARKs 迁移到免除信任初始设置的 Halo 2证明系统中;统一地址是一项补充功能,引入了一种优先采取屏蔽模式(shielded adoption)的未来证明(future-proof)地址格式。

Orchard匿名协议用新的密钥和地址定义新的匿名池(shielded pool),方便实现未来的规模性提升。

Zcash目前存在两个匿名协议和匿名池。

但这个两个协议依然存在两个问题:

Orchard协议使用椭圆曲线对,采用Halo2证明系统实现递归,并且不需要可信设置。

曲线

Orchard协议使用 Pallas/Vesta 椭圆曲线对,代替 BLS12-381 和 Jubjub 曲线。 Pallas 为应用层曲线, Vesta 曲线为电路曲线,即 Vesta 标量域为 Pallas 基域。

将采用 simplified SWU 算法定义 GroupHash 实现,代替原先易错的 BLAKE2s 机制 。

证明系统

Orchard使用Halo 2证明系统,采用UPA(UltraPlonk)算术化过程,代替Groth16和R1CS。

Orchard协议尚未使用Halo 2递归证明,将在未来的协议升级中利用。

电路

Orchard使用一个电路实现所有的输入(spends)和输出 (outputs)。单个 action 包括一个花掉的note和一个新建的note。

一个Orchard交易可以打包多个 actions , 采用一个halo2 证明。

承诺

Orchard协议采用 UPA 高效的 Sinsemilla 代替原先的非同态承诺。

承诺树

Orchard采用和sapling类似的承诺树,只是采用 Sinsemilla 代替原先的 Pedersen hash 。

密钥和地址

密钥和地址和 Sapling 类似,有如下改动:

密钥和地址采用 Bech32 编码,主网上的地址带有前缀 zo (Sprout地址前缀为 zc , Sapling 地址前缀为 zs )。

Orchard密钥采用分层派生(HD)的方式。

Note

Note 结构为 , 用于生成nullifier, 和 由随机种子派生。

Nullifier

Nullifier 计算方式为:

采用Poseiden 哈希函数, 为固定的基点。

签名

Orchard使用 RedPallas 代替原先的 RedJubjub 方案。

统一地址(unified address, UA)是未来证明(future-proof)的地址格式,可以提升可用性,互操作性,默认支持匿名。

背景

由于Zcash协议一直在迭代升级,出现多种地址类型。采用UA可以提升用户体验,支持自动匿名化。

UA也可促进Zcash网络的迭代升级,推进Layer 2, Defi应用的互操作性。

UA

统一地址由多个Zcash地址类型生成( transparent , Sapling , Orchard ), 可以方便用户将资金移到最新的匿名池中,实现自动迁移和自动匿名。

统一地址兼容Zcash所有的资金池(transparent和shielded),当从透明地址转入的时候,能自动转入匿名池中。

小白如何秒懂区块链中的哈希计算

小白如何秒懂区块链中的哈希计算

当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。

那位说“拉稀”同学你给我出去!!

这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:

# 一、什么是哈希算法

## 1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。

从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。

如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。

如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。

呵呵,先别打我啊!这确实就只是一个函数的概念。

## 2、特点:

这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?

1)**确定性,算得快**:咋算结果都一样,算起来效率高。

2)**不可逆**:就是知道输出推不出输入的值。

3)**结果不可测**:就是输入变一点,结果天翻地覆毫无规律。

总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“b0baee9d279d34fa1dfd71aadb908c3f”,你说“11112”它给你弄成“afcb7a2f1c158286b48062cd885a9866”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。

# 二、哈希运算在区块链中的使用

## 1、数据加密

**交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头**。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。

1)、**识别区块数据是否被篡改**:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。

2)、**把各个区块串联成区块链**:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。

## 2、加密交易地址及哈希

在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?

首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。

这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。

这么哈希了半天,搞什么事情?有啥作用呢?

1)、**快速定位每笔交易**:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。

举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。

2)、**核实交易数据是否被篡改**:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。

## 3、挖矿

  在我们的区块头中有个参数叫**随机数Nonce,寻找这个随机数的过程就叫做“挖矿”**!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。

找这个数字是弄啥呢?做这个有什么作用呢?

1)、**公平的找到计算能力最强的计算机**:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。

2)、**动态调整难度**:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。

# 三、哈希运算有哪些?

说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。

从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。

需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。

**总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。

币圈术语大零是什么意思

是匿名性强的数字资产的意思。大零币指的是Zcash(ZEC),是一种采用零知识证明算法的透明和匿名性共存的新加密数字资产,采用EquiHash算法和PoW的方式构建适合普通电脑挖矿的分发机制。发行总量与比特币相同2100万。

区块链中现代密码学

1983年 - David Chaum描述的盲签

1997年 - Adam Back发明的HashCash(工作证明制度的一个例子)

2001年 - Ron Rivest,Adi Shamir和Yael Tauman向加密社区提出了环签名

2004年 - Patrick P. Tsang和Victor K.提出使用环签名系统进行投票和电子现金;

2008年 - 由Satoshi Nakamoto出版的Bitcoin白皮书

2011年 - 比特币系统中的匿名分析,Fergal Reid和Martin Harrigan

2012 - 目的地址比特币匿名(CryptoNote中的一次性地址)。

安全多方计算起源于1982年姚期智的百万富翁问题。后来Oded Goldreich有比较细致系统的论述。

姚氏百万富翁问题是由华裔计算机科学家、图灵奖获得者姚启智教授首先提出的。该问题表述为:两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方知道自己财富的任何信息。该问题有一些实际应用:假设Alice希望向Bob购买一些商品,但她愿意支付的最高金额为x元;Bob希望的最低卖出价为y元。Alice和Bob都非常希望知道x与y哪个大。如果xy,他们都可以开始讨价还价;如果zy,他们就不用浪费口舌。但他们都不想告诉对方自己的出价,以免自己在讨价还价中处于不利地位。

该方案用于对两个数进行比较,以确定哪一个较大。Alice知道一个整数i;Bob知道一个整数j, Alice与B0b希望知道究竟i=j还是ji,但都不想让对方知道自己的数。为简单起见,假设j与i的范围为[1,100】。Bob有一个公开密钥Eb和私有密钥Db。

安全多方计算(Secure Multi-Party Computation)的研究主要是针对无可信第三方的情况下, 如何安全地计算一个约定函数的问题. 安全多方计算在电子选举、电子投票、电子拍卖、秘密共享、门限签名等场景中有着重要的作用。

同态加密(Homomorphic Encryption)是很久以前密码学界就提出来的一个Open Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos就以银行为应用背景提出了这个概念[RAD78]。对,你没有看错,Ron Rivest和Leonard Adleman分别就是著名的RSA算法中的R和A。

什么是同态加密?提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的直观定义最好:A way to delegate processing of your data, without giving away access to it.

这是什么意思呢?一般的加密方案关注的都是数据存储安全。即,我要给其他人发个加密的东西,或者要在计算机或者其他服务器上存一个东西,我要对数据进行加密后在发送或者存储。没有密钥的用户,不可能从加密结果中得到有关原始数据的任何信息。只有拥有密钥的用户才能够正确解密,得到原始的内容。我们注意到,这个过程中用户是不能对加密结果做任何操作的,只能进行存储、传输。对加密结果做任何操作,都将会导致错误的解密,甚至解密失败。

同态加密方案最有趣的地方在于,其关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。也就是说,其他人可以对加密数据进行处理,但是处理过程不会泄露任何原始内容。同时,拥有密钥的用户对处理过的数据进行解密后,得到的正好是处理后的结果。

有点抽象?我们举个实际生活中的例子。有个叫Alice的用户买到了一大块金子,她想让工人把这块金子打造成一个项链。但是工人在打造的过程中有可能会偷金子啊,毕竟就是一克金子也值很多钱的说… 因此能不能有一种方法,让工人可以对金块进行加工(delegate processing of your data),但是不能得到任何金子(without giving away access to it)?当然有办法啦,Alice可以这么做:Alice将金子锁在一个密闭的盒子里面,这个盒子安装了一个手套。工人可以带着这个手套,对盒子内部的金子进行处理。但是盒子是锁着的,所以工人不仅拿不到金块,连处理过程中掉下的任何金子都拿不到。加工完成后。Alice拿回这个盒子,把锁打开,就得到了金子。

这里面的对应关系是:盒子:加密算法盒子上的锁:用户密钥将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理开锁:对结果进行解密,直接得到处理后的结果同态加密哪里能用?这几年不是提了个云计算的概念嘛。同态加密几乎就是为云计算而量身打造的!我们考虑下面的情景:一个用户想要处理一个数据,但是他的计算机计算能力较弱。这个用户可以使用云计算的概念,让云来帮助他进行处理而得到结果。但是如果直接将数据交给云,无法保证安全性啊!于是,他可以使用同态加密,然后让云来对加密数据进行直接处理,并将处理结果返回给他。这样一来:用户向云服务商付款,得到了处理的结果;云服务商挣到了费用,并在不知道用户数据的前提下正确处理了数据;

聚合签名由Boneh等人提出,主要是通过聚合多个签名为一个签名,来提高签名与验证的效率。要对多个用户的数据进行签名,聚合签名能够极大地降低签名计算复杂度。CL就是聚合签名。

零知识证明过程有两个参与方,一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄漏这个秘密给验证者。

双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,证明者是或不掌握这个秘密。

对于比特币的例子,一笔转帐交易合法与否,其实只要证明三件事:

发送的钱属于发送交易的人

发送者发送的金额等于接收者收到金额

发送者的钱确实被销毁了

整个证明过程中,矿工其实并不关心具体花掉了多少钱,发送者具体是谁,接受者具体是谁。矿工只关心系统的钱是不是守恒的。

zcash 就是用这个思路实现了隐私交易。

零知识证明的三条性质对应:

(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。

(2)合理性。没有人能够假冒证明方,使这个证明成功。

(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。

只有环成员,没有管理者,不需要环成员之间的合作,签名者利用自己的私钥和集合中其他成员的公钥就能独立的进行签名,不需要其他人的帮助,集合中的其他成员可能不知道自己被包含在了其中。

环签名可以被用作成一种泄露秘密的方式,例如,可以使用环形签名来提供来自“白宫高级官员”的匿名签名,而不会透露哪个官员签署了该消息。 环签名适用于此应用程序,因为环签名的匿名性不能被撤销,并且因为用于环签名的组可以被即兴创建。

1)密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)

2)签名。签名者用自己的私钥和任意n个环成员的公钥为消息m生成签名a

3)签名验证。签名者根据环签名和消息m,验证签名是否是环中成员所签。如果有效就接收,如果无效就丢弃。

群签名的一般流程

盲数字签名(Blind Signature)简称盲签名——是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。1982年大卫·乔姆首先提出了盲签名的概念。盲签名因为具有盲性这一特点,可以有效保护所签署消息的具体内容,所以在电子商务和电子选举等领域有着广泛的应用。

类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。

所谓盲签名,就是先将隐蔽的文件放进信封里,而除去盲因子的过程就是打开这个信封,当文件在一个信封中时,任何人不能读它。对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。

一般来说,一个好的盲签名应该具有以下的性质:

不可伪造性。除了签名者本人外,任何人都不能以他的名义生成有效的盲签名。这是一条最基本的性质。

不可抵赖性。签名者一旦签署了某个消息,他无法否认自己对消息的签名。

盲性。签名者虽然对某个消息进行了签名,但他不可能得到消息的具体内容。

不可跟踪性。一旦消息的签名公开后,签名者不能确定自己何时签署的这条消息。

满足上面几条性质的盲签名,被认为是安全的。这四条性质既是我们设计盲签名所应遵循的标准,又是我们判断盲签名性能优劣的根据。

另外,方案的可操作性和实现的效率也是我们设计盲签名时必须考虑的重要

因素。一个盲签名的可操作性和实现速度取决于以下几个方面:

1,密钥的长度;

2,盲签名的长度;

3,盲签名的算法和验证算法。

盲签名具体步骤

1,接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。

2,经签名者签名后再发给接收者。

3,接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。

4,这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。

关于zcash算法和zuc算法介绍的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签: #zcash算法

  • 评论列表

留言评论