Zcash确实是个值得关注的项目。
案例4:zkSNARKs + 以太坊
在以太坊一次协议升级中(Metropolis),开发人员能在链上对zkSNARKs进行验证。
对于一个zkSNARKs + 以太坊,我们可以做什么呢?一些合同变量可以成功转化为私有变量。不再需要把隐私信息存储在链上,只需要用户用SNARKs来证明自己遵守合同的规则,就可以由用户自己存储信息。
在以太坊上,SNARKs不能实现的是独立于用户之外的、完全自主的隐私权。由于以太坊上的SNARKs需要用户保存链下信息,那么如果那个用户缺席,就无法找到对应的信息。
案例5:zkSTARKs
zkSNARKs有一个新出生的表亲:zkSTARKs。其中“T”指的是“transparent(透明的)”。
zkSTARKs解决了zkSNARKS的主要弱点之一:依赖用户来进行存储。zkSTARKs更简单,因为完全依赖哈希和信息理论,并且,由于不再使用椭圆曲线(elliptic curves)或指数假设(exponent assumptions),因而对量子计算机更安全。
总的来说,尽管在保护隐私方面取得了惊人的进步,但仍有许多工作要做。零知识证明库需要进行大量的研究和摸索,才能成熟;zkSNARK和zkSTARK需要在各种公链上进行试验。Zcash需要在现实场景中,进行大规模地证明和使用。这一切都还有很长的路要走。
代码混淆(Code Obfuscation)
另一种隐私机制是代码混淆。其目的是找到一种混淆程序P的方法,使混淆器能够产生第二个程序O(P)=Q,这样,如果给定相同的输入,P和Q返回相同的输出,但是Q没有揭示P的内部信息,这允许我们将隐藏的私有数据保存在Q的内部,例如密码、身份证号码等,但在程序中仍然使用它。
虽然研究人员称,将混淆做到完全不透明的不可能的,但是有一个较弱的混淆概念,被称为不可区分的混淆,这是可能实现的。不可区分混淆器O的定义是,如果采用两个等价的程序A和B(即A或B的相同输入产生相同的输出),并计算O(A)=P和O(B)=Q,则对于没有访问A或B的人来说,不能判断P来自A还是B。
最近,Craig Gentry,Amit Sahai,等人完成了不可区分的代码混淆。然而,该算法需要较高的成本。
如果这个架构能够得到改善,其潜在好处是巨大的。在数字世界里最有意思的一个特点是,要在公开的链上合约中保存隐私信息。
比如说,保存了用户Coinbase密码的以太坊智能合约。然后,我们可以编写一个程序,这样如果合同的某些条件得到满足,合同将使用某个中间节点启动一个带有Coinbase的HTTPS会话,使用用户的密码登录,并进行交易。由于合同中的信息将被混淆,因此中间节点或区块链中的任何其他参与者将无法修改正在传输的请求或确定用户的密码。
预言者(Oracles)
在区块链空中,Oracles可以在智能合约和外部数据源之间传递信息,这就相当于一个数据载体。因此,保持信息隐私性的一种方法就是使用Oracles从外部数据源获取私有信息。
可信执行环境(Trusted Execution Environments)
可信环境(TEE)是主处理器的一个安全区域。它保证内部加载的代码和数据的机密性和完整性。这个受信任的环境与面向用户的操作系统并行运行,但其目的是要比面向用户的操作系统更加私有和安全。
早期的研究和开发正在进行中,以确定讲解利用它们来实现区块链上的隐私。我个人非常高兴有如此多的人正在解决这些问题。当然,我们也希望更多专家能够参与进来。
对智能合约的核查仍然是一个尚未解决的巨大问题。首先,在谈“正式验证”(formally verify)之前,让我们先来理解一下“正式证明”(formal proof)是什么。数学中的“正式证明”是指由计算机使用数学的基本公理和原始推理规则,来进行检验的数学证明。
更广泛地说,与软件程序有关的正式验证,是确定程序是否按照规范运行的方法。通常,这是用一种具体的规范语言来完成的,用于描述函数的输入和输出应该讲解关联。换句话说,我们首先声明一个关于程序的不变量,然后我们必须证明这个陈述。
比如说Isabelle就是一个证明助手,允许用正式语言表达数学公式,并提供了在逻辑微积分中证明这些公式的工具。另一种规范语言是Coq,它是一种编写数学定义、可执行算法和定理的形式语言。
那么,为什么要对智能合约中的程序进行正式验证呢?
首先,智能合约是不可变的,这意味着一旦它们被放到以太坊主网,就不能再进行更新或修复。因此,我们需要事先确保所有程序运行正常。此外,智能合约和里面的存储内容是公开的,任何人都可以查看;任何人也可以调用智能合约的公共算法。虽然这提供了公开性和透明度,但它也使智能合同成为黑客的目标。
事实上,无论您采取了多少预防措施,都很难使智能合约完美无缺。以以太坊为例,由于使用到EVM指令,使得验证EVM代码极其困难。这使得为以太坊构建正式的验证解决方案变得更加困难。无论讲解,正式验证是减少错误和攻击的有力方法。它确保了比传统方法(如测试、同行评审等)更高的更高的安全性。我们迫切需要更好的解决方案。
正式核查的解决方案
目前解决方案很少,我仅知道一个非常早期的例子,由以太坊基金会的正式验证工程师Yuichi Hirai完成的。他能够核实几个智能合约,包括一份小的“契约”,产生一些结果。虽然很小,但这是我再这种定理证明环境中的第一个“真实”契约。
正如 Yoichi自己说的…
“验证结果远非完美,我仍能发现很多问题。我之所以将其公之于众,是因为这个项目很好地说明了,使用机器辅助逻辑推理,来验证智能合约所需的工作量(和详细程度)。在这一点上,如果执行一份10万美元上面这些的智能合约,并且能控制时间表,我会考虑从事这种研发(另一种选择是先尝试价值较小的合同)。”
还有一些像Tezos这样的团队,它们完全放弃使用Solity语言,放弃使用EVM作为VM,而是构建自己的智能合约编程语言和VM,以便于正式验证。
无论是对EVM进行全面改革,使正式验证变得更容易,还是构建一种天生更容易验证的全新语言,我们都需要在这项工作中投入更多的工作。我们需要更多的研究人员参与。我们需要各种可能的编程语言的正式验证库和标准。
建在公链上的大多数应用程序,都需要某种存储解决方案。(用户身份、财务信息等)。
但是,在公链数据库中存储信息,意味着数据是:
1)由网络中的每个全节点存储。2)无限期存储,因为区块链数据库是只能增加、不可撤销的。
因此,数据存储给分布式网络带来了巨大的负荷,每个全节点都必须将越来越多的数据存储起来。因此,对于去中心化应用程序来说,存储仍然是一个很大的问题。
存储解决方案
有几个项目正在试图将数据进行分片,并以分布式方式在节点(即分布式存储)中存储。这里的基本前提是,不是每个节点存储所有东西,而是有一组节点在它们之间拆分或“分发”数据。一些项目的例子包括:
1.Swarm:Swarm是一种点对点文件共享协议,它允许用户将代码和数据存储在Swarm节点中,这些节点连接到以太坊上。之后可以在区块链上对此数据进行交换。
2.Storj: 其中的文件和数据被分割、加密,分发到多个节点,这样每个节点只存储一小部分数据:因此,形成“分布式存储”。然后,Storj Coin(SCJX)用于支付存储费用,并对存储用户部分文件 / 数据的节点进行激励。
3.IPFS: 另一种P2P超媒体协议,它提供高吞吐量、内容地址块存储模型和内容地址超链接。本质上,它允许文件的分布式存储,同时提供文件历史信息,并可以删除重复文件。
4.Decent:Decent是一个去中心化的内容共享平台,允许用户上传、分享他们的视频、音乐、电子书等,去除对第三方的依赖。用户可以跳过这些第三方,来以一种更实惠的方式访问内容,相应地,承载这些内容的节点则会获得奖励。
区块链是“无需信任的”。用户不必在交易中信任任何人,不需要任何第三方提供信任背书。
共识机制(consensus protocol)可以协调节点共同工作,使系统免受攻击。共识机制不是比特币和区块链首创的。在1992年,Dwork和Naor创建了“工作证明机制”(POW)。在这种系统中,用户可以在不需要信任的情况下,生成算力证明,并获得资源。这个系统本来是用来对付垃圾邮件的。AdamBack后来在1997年创建了一个类似的系统,名为Hashcash。然后在2003年,Vishnumurthy等人第一次使用POW来确保货币的安全,但这时,token不是作为一种通用货币,而是用来维护文件交易系统。
五年后,中本聪(Nakamoto)拿工作证明机制来确保比特币安全。这一共识机制使比特币成为第一个全球通用的去中心化分类账。
工作证明机制
工作证明机制中,节点需要去解决一些计算困难、验证简单的问题。矿工要进行算力竞争来获得奖励,但是这种计算的成本很高。矿工拥有的算力越多,他们在机制中的“权重”就越大,获得的奖励也就越多。
工作证明使比特币成为第一种真正被广泛接受的去中心化数字货币。再不需要任何信任第三方的情况下,它解决了“双重支出问题”(double-spend problem)。然而,工作证明并不完美,要建立一个更可行的共识机制,仍然需要大量的研究和开发。
工作证明存在哪些问题?
1.硬件越专业,越有优势
工作证明的一个缺点是需要专业的挖矿硬件。2013年,被称为“专用集成电路”(ASIC)的设备被设计成专门用于比特币的矿机,因为它可以提高10至50倍算力。从那以后,使用普通计算机的CPU和GPU进行挖矿已经没有优势了。挖矿的唯一方法就是自己制造ASIC,或从ASIC制造商那里购买。这与区块链“去中心化”的本意背道而驰,因为每个人挖矿的成功几率变得不平等。
为了缓解这一问题,以太坊选择了将其PoW算法(Ethhash)顺序记忆困难。这意味着该算法是经过设计的,因此计算当前值需要大量的内存和带宽。大内存需求和高带宽要求,使得即使是超级快的计算机也很难同时发现多个非连续变量。这降低了集中化的风险,并为节点创造了更公平的竞争环境。
当然,这并不是说在未来不会有一个以太坊的ASIC。对于PoW算法来说,专用硬件仍然是一个巨大的风险。
2.矿池集中化
矿池背后的概念是,不再是单个矿工挖掘单个区块,而是挖掘一个池。然后,这个池就会给他们一个相称的、一致的奖励。矿池的问题是,由于它们在网络中有更多的“权重”,所以大矿池的回报比单个用户的差异要小。随着时间的推移,一些池开始控制大部分网络,集中的一组池也将继续获得更多的权重。例如,目前排名前五的矿池拥有近70%的总哈希算力。这是很可怕的。
3.能源浪费
矿工们花费大量的算力,但算力本身没有实际价值。根据Digiconomist的比特币能源消耗指数,比特币目前的年用电量大约为29.05TWh,占全球总用电量的0.13%。也就是说,比特币挖矿需要的电力,比159个国家使用的电力还要多。
随着使用工作证明的比特币等公链不断增加,越来越多的能源将被浪费。如果目标是让公链扩大到数百万用户和交易,那么能源浪费和计算成本将会是很大的阻碍。
共识机制解决方案
有用的工作证明
解决能源浪费问题,有一种方法是使算力变得有用。例如,矿工们正在花费他们的算力来解决困难的人工智能算法,而不是解决工作证明所要求的随机SHA 256问题。
权益证明机制(Proof-of-stake)
解决挖矿中心化问题,另一种方法是完全取消挖矿,转而采用其他机制来计算共识机制中每个节点的权重。这就是权益证明机制的目的所在。
他们没有投入计算能力,而是投入了金钱。正如Vitalik所指出的那样,现在起到关键作用的,不再是CPU功率而是一张“选票”。
权益证明机制去除了对硬件的需求,因此不受上面提到的硬件中心化问题的影响。此外,由于矿工不需要花费大量算力,因此,权益证明本质上是更节能的。
然而,世上没有免费的午餐。权益证明有其自身的挑战。更具体而言,这些挑战包括:
1)Nothing-at-Stake problem:权益证明机制中,当公链出现分叉,无论分叉是偶然的还是恶意的,节点最好的选择是在每条链上同时挖矿。因为节点挖矿无需花费算力,只需要投票就行了。这也就意味着,最终无论哪条链赢了,矿工都可以获得回报。(即:“没什么风险”问题要防止矿工在分叉链上挖矿。)
2)远程攻击(Long-range attacks):当POW公链出现分叉时,矿工会在分叉链区块头之后生成一些区块。矿工在分叉链上生成的区块的越多,就越难赶上主链。因为它需要集合网络一半上面这些的算力,才能对主链构成威胁。然而,在权益证明中,参与者可以尝试获取过去参与者的密钥,然后在一个新的链上生成数百万个块,这使得用户很难知道哪个区块链是“正确的”。
3)Cartel formation:在一个由经济激励的去中心化系统中,真正的风险是寡头垄断。正如弗拉德·赞菲尔(Vlad Zamfir)所指出的,“加密货币非常中心化。挖矿业也是如此。寡头垄断竞争是许多“现实生活”市场的常态。少数相对富裕的节点之间的协作,要比大量相对贫穷的节点之间的协作容易得多。在这种背景下,Cartel formation完全在意料之中。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.longfuchaju.com//kuaixun/5332.html