导航:首页 > 源码编译 > 非交互式交易验证算法

非交互式交易验证算法

发布时间:2023-05-21 01:14:42

① 虚拟货币和什么算法有关

Litecoin

Litecoin(LTC)发布于2011年10月7日,是目前市值最高的山寨币,约为 BTC 市值的2%。目前单价为2.31美元,总币值 3800 万美元。

这同样是一种分布式(去中心化)的数字货币。不同于比特币使用的 SHA256 挖矿算法,LTC 采用 scrypt 算法。独特的算法也是从山寨币中脱颖而出的关键,scrypt 算法使用 SHA256 作为其子程序,而 scrypt 自身需要大量的内存,每个散列作为输入的种子使用的,然后与需要大量的内存存储另一种子伪随机序列,共同生成序列的伪随机点而输出哈希值。在 BTC(Bitcoin)的开采依靠单纯的显卡挖矿已经力不从心(利用一般配置显卡挖到一个 BTC 大概需要十几到数十天),各种价格不菲挖矿机的出现提高了普通人通过挖矿获得 BTC 的门槛,而 LTC 在使用 PC 显卡挖矿上具有一定优势。(本段来源于知乎。)

Litecoin 对比 BTC 在技术上做了一点的改进,如果现在 BTC 是金,那 LTC 暂时是银。

Litecoin 的最大优点是能更快确认真伪,该虚拟货币由 Charles Lee 设计和维护。比特币的交易需要验证,验证的时间平均在10分钟以上,大多数交易网站验证需要1个小时。Litecoin 交易确认平均为2.5分钟,开发者声称缩短验证增加了虚拟货币的实用性。定制机器和 AMD GPU 的比特币采矿效率最高,令使用 CPU 采矿的矿工几乎无利可图。Litecoin 的采矿排除了 GPU 和定制处理器,因此不过于依赖少量专业矿工。

PPCoin

PPCoin(PPC) 发布于2012年8月19,在 BTC 原有技术上有所提升。使用 proof-of-stake,并加入 coin age 概念。

PPCoin 是 Bitcoin 的分叉项目,目标是实现能源效率,并尽可能保持原 Bitcoin 的最好性能。PPCoin 单价0.22美元,总币值 400 万美元。

PPCoin 没有一个固定的货币供应量上限,但这并不意味着 PPCoin 比 Bitcoin 有明显通胀。可以将 Bitcoin 比做黄金,黄金每年的通胀是1-3%左右,虽然黄金并没有已知的货币供应量上限,但我们仍知道它是可靠的稀缺品。

PPCoin 的铸造有两种类型,工作证明及股权证明。工作证明的铸币率受摩尔定律影响,这取决于我们的工作证明能力的成倍增长。而大家都知道的是摩尔定律最终会结束,到那时通胀的 PPCoin 可能已经接近黄金的水平。而股权证明铸造每年最多通胀 1%。与此同时,PPCoin 的交易费用被销毁以抗衡通胀。所以整体来说, PPCoin 的铸币设计仍是未来一个非常低的通胀设计,可以达到和 Bitcoin 相媲美的程度。

PPCoin 的奖励方式类似彩票,会根据矿工持有的 PPCoin 数量决定获胜几率,创始人之一的 Sunny King 说,他们的设计是基于长期能量效率的新概念。

Terracoin

Terracoin(TRC)发布于2012年10月26,总币量 4200 万。每块速度为2分钟,比 LTC 稍快一些。技术上没有太多特别之处,类似 BTC 每4年产量减半。

不过运营团队似乎有较强商业背景,可能会在流通上优于其他比特币。虚拟货币现在的发展越来越得到重视,现在一些有商业背景的团队进入,会加速虚拟货币的发展。

Namecoin

Namecoin 是一个基于比特币技术的分布式域名系统,其原理和 Bitcoin 一样, 这个开源软件首次发布的日期是2011年4月18日。

Namecoin 产生于一个不同于 Bitcoin 主交易区块的起源块, 使用一个新的区块链(blockchain),独立于 Bitcoin 的区块链之外,因为是基于 Bitcoin,域名的安全性, 分布性, 鲁棒性, 加密性, 迁移都有数学保证。可以用挖 Bitcoin 的方式,同时挖 Namecoin。

② 内蒙古将禁止比特币挖矿,这传达了什么信息

这可能会让矿业的整体格局经历某种形式的转变。

在内蒙古禁止采矿活动应该不会对网络哈希率产生重大影响,因为矿工只会为他们的矿机找到”新家“——要么在中国的另一个省份,要么在欧盟或北美。

这也意味着,由于内蒙古的矿工主要使用煤炭,因此在中国将有较大比例的采矿业会使用可再生能源。随着五月份雨季的开始,内蒙古的许多矿工都将在那个时候搬到四川。

矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖励,矿工们争相完成一种基于加密哈希算法的数学难题,也就是利用比特币挖矿机进行哈希算法的计算,这需要强大的计算能力,计算过程多少,计算结果好坏作为矿工的计算工作量的证明,被称为“工作量证明”。该算法的竞争机制以及获胜者有权在区块链上进行交易记录的机宴衫拍制,这二者保障了比特币的安全。

③ 区块链论文精读——Pixel: Multi-signatures for Consensus

论文主要提出了一种兆数茄针对共识机制PoS的多重签名算法Pixel。

所有基于PoS的区块链以及允许的区块链均具有通用结构,其中节点运行共识子协议,以就要添加到分类账的下一个区块达成共识。这样的共识协议通常要求节点检查阻止提议并通过对可接受提议进行数字签名来表达其同意。当一个节点从特定块上的其他节点看到足够多的签名时,会将其附加到其分类帐视图中。

由于共识协议通常涉及成千上万的节点,为了达成共识而共同努力,因此签名方案的效率至关重要。此外,为了使局外人能够有效地验证链的有效性,签名应紧凑以进行传输,并应快速进行验证。已发现多重签名对于此任务特别有用,因为它们使许多签名者可以在公共消息上创建紧凑而有效的可验证签名。

补充知识: 多重签名
是一种数字签名。在数字签名应用中,有时需要多个用户对同一个文件进行签名和认证。比如,一个公司发布的声明中涉及财务部、开发部、销售部、售后服务部等部门,需要得到这些部门签名认可,那么,就需要这些部门对这个声明文件进行签名。能够实现多个用户对同一文件进行签名的数字签名方案称作多重数字签名方案。
多重签名是数字签名的升级,它让区块链相关技术应用到各行各业成为可能。 在实际的操作过程中,一个多重签名地址可以关联n个私钥,在需要转账等操作时,只要其中的m个私钥签名就可以把资金转移了,其中m要小于等于n,也就是说m/n小于1,可以是2/3, 3/5等等,是要在建立这个多重签名地址的时候确定好的。

本文提出了Pixel签名方案,这是一种基于配对的前向安全多签名方案,可用于基于PoS的区块链,可大幅节省带宽和存储要求。为了支持总共T个时间段和一个大小为N的委员会,多重签名仅包含两个组元素,并且验证仅需要三对配对,一个乘幂和N -1个乘法。像素签名几乎与BLS多重签名一样有效,而且还满足前向安全性。此外,就像在BLS多签名中一样,任何人都可以非交互地将单个签名聚合到一个多签名中。

有益效果:
为了验证Pixel的设计,将Pixel的Rust实施的性能与以前的基于树的前向安全解决方案进行了比较。展示了如何将Pixel集成到任何PoS区块链中。接下来,在Algorand区块链上评估Pixel,表明它在存储,带宽和块验证时间方面产生了显着的节省。我们的实验结果表明,Pixel作为独立的原语并在区块链中使用是有效的。例如,与一组128位安全级别的N = 1500个基于树的前向安全签名(对于T = 232)相比,可以认证整个集合的单个Pixel签名要毕型小2667倍,并且可以被验证快40倍。像素签名将1500次事务的Algorand块的大小减少了约35%,并将块验证时间减少了约38%。

对比传统BLS多重签名方案最大的区别是BLS并不具备前向安全性。

对比基于树的前向安全签名,基于树的前向安全签名可满足安全性,但是其构造的签名太大,验证速度有待提升。 本文设计减小了签名大小、降低了验证时间。

补充知识: 前向安全性
是密码学中通讯协议的安全属性,指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。如果系统具有前向安全性,就可以保证在主密钥泄露时历史通讯的安全,即使系统遭到主动攻击也是如此。

构建基于分层身份的加密(HIBE)的前向安全签名,并增加了在同一消息上安全地聚合签名以及生成没有可信集的公共参数的能力。以实现:
1、生成与更新密钥
2、防止恶意密钥攻击的安全性
3、无效的信任设置

对于常见的后攻击有两种变体:
1、短程变体:对手试图在共识协议达成之前破坏委员会成员。解决:通过假设攻击延迟长于共识子协议的运行时间来应对短距离攻击。
2、远程变体:通过分叉选择规则解决。
前向安全签名为这两种攻击提供了一种干净的解决方案,而无需分叉选择规则或有关对手和客户的其他假设。(说明前向安全签名的优势)。

应用于许可的区块链共识协议(例如PBFT)也是许多许可链(例如Hyperledger)的核心,在这些区块链中,只有经过批准的方可以加入族察网络。我们的签名方案可以类似地应用于此设置, 以实现前向保密性,减少通信带宽并生成紧凑的块证书。

传统Bellare-Miner 模型,消息空间M的前向安全签名方案FS由以下算法组成:
1、Setup
pp ←Setup(T), pp为各方都同意的公共参数,Setup(T)表示在T时间段内对于固定参数的分布设置。

2、Key generation
(pk,sk1) ←Kg
签名者在输入的最大时间段T上运行密钥生成算法,以为第一时间段生成公共验证密钥pk和初始秘密签名密钥sk1。

3、Key update
skt+1←Upd(skt) 签名者使用密钥更新算法将时间段t的秘密密钥skt更新为下一个周期的skt + 1。该方案还可以为任何t0> t提供 “快速转发”更新算法 skt0←$ Upd0(skt,t0),该算法比重复应用Upd更有效。

4、Signing
σ ←Sign(skt,M),在输入当前签名密钥skt消息m∈M时,签名者使用此算法来计算签名σ。

5、Verification
b ← Vf(pk,t,M,σ)任何人都可以通过运行验证算法来验证消息M在公共密钥pk下的时间段t内的签名M的签名,该算法返回1表示签名有效,否则返回0。

1、依靠非对称双线性组来提高效率,我们的签名位于G2×G1中而不是G2 ^2中。这样,就足以给出公共参数到G1中(然后我们可以使用散列曲线实例化而无需信任设置),而不必生成“一致的”公共参数(hi,h0 i)=(gxi 1,gxi 2)∈G1× G2。

2、密钥生成算法,公钥pk更小,参数设置提升安全性。

除了第3节中的前向安全签名方案的算法外,密钥验证模型中的前向安全多重签名方案FMS还具有密钥生成,该密钥生成另外输出了公钥的证明π。
新增Key aggregation密钥汇总、Signature aggregation签名汇总、Aggregate verification汇总验证。满足前向安全的多重签名功能的前提下也证明了其正确性和安全性。

1、PoS在后继损坏中得到保护
后继损坏:后验证的节点对之前的共识验证状态进行攻击破坏。
在许多用户在同一条消息上传播许多签名(例如交易块)的情况下,可以将Pixel应用于所有这些区块链中,以防止遭受后继攻击并潜在地减少带宽,存储和计算成本。

2、Pixel整合
为了对区块B进行投票,子协议的每个成员使用具有当前区块编号的Pixel签署B。当我们看到N个委员会成员在同一块B上签名的集合时,就达成了共识,其中N是某个固定阈值。最后,我们将这N个签名聚合为单个多重签名Σ,而对(B,Σ)构成所谓的 区块证书 ,并将区块B附加到区块链上。

3、注册公共密钥
希望参与共识的每个用户都需要注册一个参与签名密钥。用户首先采样Pixel密钥对并生成相应的PoP。然后,用户发出特殊交易(在她的消费密钥下签名), 注册新的参与密钥 。交易包括PoP。选择在第r轮达成协议的PoS验证者,检查(a)特殊交易的有效性和(b)PoP的有效性。如果两项检查均通过,则 使用新的参与密钥更新用户的帐户 。从这一点来看,如果选中,则用户将使用Pixel登录块。
即不断更换自己的参与密钥,实现前向安全性。

4、传播和聚集签名
各个委员会的签名将通过网络传播,直到在同一块B上看到N个委员会成员的签名为止。请注意,Pixel支持非交互式和增量聚合:前者意味着签名可以在广播后由任何一方聚合,而无需与原始签名者,而后者意味着我们可以将新签名添加到多重签名中以获得新的多重签名。实际上,这意味着传播的节点可以对任意数量的委员会签名执行中间聚合并传播结果,直到形成块证书为止。或者,节点可以在将块写入磁盘之前聚合所有签名。也就是说,在收到足够的区块证明票后,节点可以将N个委员会成员的签名聚集到一个多重签名中,然后将区块和证书写入磁盘。

5、密钥更新
在区块链中使用Pixel时,时间对应于共识协议中的区块编号或子步骤。将时间与区块编号相关联时,意味着所有符合条件的委员会成员都应在每次形成新区块并更新轮回编号时更新其Pixel密钥。

在Algorand 项目上进行实验评估,与Algorand项目自带的防止后腐败攻击的解决方案BM-Ed25519以及BLS多签名解决方案做对比。

存储空间上:

节省带宽:
Algorand使用基于中继的传播模型,其中用户的节点连接到中继网络(具有更多资源的节点)。如果在传播过程中没有聚合,则中继和常规节点的带宽像素节省来自较小的签名大小。每个中继可以服务数十个或数百个节点,这取决于它提供的资源。

节省验证时间

④ CBOF非交互式随机数生成算法是指什么

非交互式随机数生成算法枯脊是指无需用户提供额外自定义信息参与随机数种子生没山渗成的算法。这在分布式存储应用各种可以起到隐私保护和公平唯衡的作用。

⑤ 知链区块链金融应用实践平台成绩怎么算

1. 工作量证明(PoW)
中本聪在2009年提出的比特币(Bitcoin)是区块链技术最早的应用,其采用PoW作为共识算法,其核心思想是节点间通过哈希算力的竞争来获取记账权和比特币奖励。PoW中,不同节点根据特定信息竞争计算一个数学问题的解,这个数学问题很难求解,但却容易对结果进行验证,最先解决这个数学问题的节点可以创建下一个区块并获得一定数量的币奖励。中本聪在比特币中采用了HashCash[4]机制设计这一数学问题。本节将以比特币采用的PoW算法为例进行说明,PoW的共识步骤如下:
节点收集上一个区块产生后全网待确认的交易,将符合条件的交易记入交易内存池,然后更新并计算内存池中交易的Merkle根的值,并将其写入区块头部;
在区块头部填写如表1.1所示的区块版本号、前一区块的哈希值、时间戳、当前目标哈希值和随机数等信息;
表1.1 区块头部信息
随机数nonce在0到232之间取值,对区块头部信息进行哈希计算,当哈希值小于或等于目标值时,打包并广播该区块,待其他节点验证后完成记账;
一定时间内如果无法计算出符合要求的哈希值,则重复步骤2。如果计算过程中有其他节点完成了计算,则从步骤1重新开始。
比特币产生区块的平均时间为10分钟,想要维持这一速度,就需要根据当前全网的计算能力对目标值(难度)进行调整[5]。难度是对计算产生符合要求的区块困难程度的描述,在计算同一高度区块时,所有节点的难度都是相同的,这也保证了挖矿的公平性。难度与目标值的关系为:
难度值=最大目标值/当前目标值 (1.1)
其中最大目标值和当前目标值都是256位长度,最大目标值是难度为1时的目标值,即2224。假设当前难度为,算力为,当前目标值为,发现新区块的平均计算时间为,则
根据比特币的设计,每产生2016个区块后(约2周)系统会调整一次当前目标值。节点根据前2016个区块的实际生产时间,由公式(1.4)计算出调整后的难度值,如果实际时间生产小于2周,增大难度值;如果实际时间生产大于2周,则减小难度值。根据最长链原则,在不需要节点同步难度信息的情况下,所有节点在一定时间后会得到相同的难度值。
在使用PoW的区块链中,因为网络延迟等原因,当同一高度的两个区块产生的时间接近时,可能会产生分叉。即不同的矿工都计算出了符合要求的某一高度的区块,并得到与其相近节点的确认,全网节点会根据收到区块的时间,在先收到的区块基础上继续挖矿。这种情况下,哪个区块的后续区块先出现,其长度会变得更长,这个区块就被包括进主链,在非主链上挖矿的节点会切换到主链继续挖矿。
PoW共识算法以算力作为竞争记账权的基础,以工作量作为安全性的保障,所有矿工都遵循最长链原则。新产生的区块包含前一个区块的哈希值,现存的所有区块的形成了一条链,链的长度与工作量成正比,所有的节点均信任最长的区块链。如果当某一组织掌握了足够的算力,就可以针对比特币网络发起攻击。当攻击者拥有足够的算力时,能够最先计算出最新的区块,从而掌握最长链。此时比特币主链上的区块大部分由其生成,他可以故意拒绝某些交易的确认和进行双花攻击,这会对比特币网络的可信性造成影响,但历派这一行为同样会给攻击者带来损失。通过求解一维随机游走问题,可以获得恶意节点攻击成功的概率和算力之间的关系:
图1.1 攻击者算力与攻击成功概率
2. 权益证明(PoS)
随着参与比特币挖矿的人越来越多,PoW的许多问题逐渐显现,例如随着算力竞争迅速加剧,获取代币需要消耗的能源大量增加,记账权也逐渐向聚集了大量算力的“矿池”集中[6-9]。为此,研究者尝试采用新的机制取代工作量证明。PoS的概念在最早的比特币项目中曾被提及,但由于稳健性等原因没被使用。PoS最早的应用是点点币(肢肢贺PPCoin),PoS提出了币龄的概念,币龄是持有的代币与持有时间乘积的累加,计算如公式(1.4)所示。利用币龄竞争取代算力竞争,使区块链的证明不再仅仅依靠工作量,有效地解决了PoW的资源浪费问题。
其中持有时间为某个币距离最近一次在网络上交易的时间,每个节点持有的币龄越长,则其在网络中权益越多,同时币的持有人还会根据币龄来获得一定的收益。点点币的设计中,没有完全脱离工作量证明,PoS机制的记账权的获得同样需要进行简单的哈希计算:
其中proofhash是由权重因子、未饥逗消费的产出值和当前时间的模糊和得到的哈希值,同时对每个节点的算力进行了限制,可见币龄与计算的难度成反比。在PoS中,区块链的安全性随着区块链的价值增加而增加,对区块链的攻击需要攻击者积攒大量的币龄,也就是需要对大量数字货币持有足够长的时间,这也大大增加了攻击的难度。与PoW相比,采用PoS的区块链系统可能会面对长程攻击(Long Range Attack)和无利害攻击(Nothing at Stake)。
除了点点币,有许多币也使用了PoS,但在记账权的分配上有着不同的方法。例如,未来币(Nxt)和黑币(BlackCion)结合节点所拥有的权益,使用随机算法分配记账权。以太坊也在逐步采用PoS代替PoW。
3. 委托权益证明(DPoS)
比特币设计之初,希望所有挖矿的参与者使用CPU进行计算,算力与节点匹配,每一个节点都有足够的机会参与到区块链的决策当中。随着技术的发展,使用GPU、FPGA、ASIC等技术的矿机大量出现,算力集中于拥有大量矿机的参与者手中,而普通矿工参与的机会大大减小。
采用DPoS的区块链中,每一个节点都可以根据其拥有的股份权益投票选取代表,整个网络中参与竞选并获得选票最多的n个节点获得记账权,按照预先决定的顺序依次生产区块并因此获得一定的奖励。竞选成功的代表节点需要缴纳一定数量的保证金,而且必须保证在线的时间,如果某时刻应该产生区块的节点没有履行职责,他将会被取消代表资格,系统将继续投票选出一个新的代表来取代他。
DPoS中的所有节点都可以自主选择投票的对象,选举产生的代表按顺序记账,与PoW及PoS相比节省了计算资源,而且共识节点只有确定的有限个,效率也得到了提升。而且每个参与节点都拥有投票的权利,当网络中的节点足够多时,DPoS的安全性和去中心化也得到了保证。
4. 实用拜占庭容错算法(PBFT)
在PBFT算法中,所有节点都在相同的配置下运行,且有一个主节点,其他节点作为备份节点。主节点负责对客户端的请求进行排序,按顺序发送给备份节点。存在视图(View)的概念,在每个视图中,所有节点正常按照处理消息。但当备份节点检查到主节点出现异常,就会触发视图变换(View Change)机制更换下一编号的节点为主节点,进入新的视图。PBFT中客户端发出请求到收到答复的主要流程如图4.1所示[10] [11],服务器之间交换信息3次,整个过程包含以下五个阶段:
图4.1 PBFT执行流程
目前以PBFT为代表的拜占庭容错算法被许多区块链项目所使用。在联盟链中,PBFT算法最早是被Hyper ledger Fabric项目采用。Hyperledger Fabric在0.6版本中采用了PBFT共识算法,授权和背书的功能集成到了共识节点之中,所有节点都是共识节点,这样的设计导致了节点的负担过于沉重,对TPS和扩展性有很大的影响。1.0之后的版本都对节点的功能进行了分离,节点分成了三个背书节点(Endorser)、排序节点(Orderer)和出块节点(Committer),对节点的功能进行了分离,一定程度上提高了共识的效率。
Cosmos项目使用的Tendermint[12]算法结合了PBFT和PoS算法,通过代币抵押的方式选出部分共识节点进行BFT的共识,其减弱了异步假设并在PBFT的基础上融入了锁的概念,在部分同步的网络中共识节点能够通过两阶段通信达成共识。系统能够容忍1/3的故障节点,且不会产生分叉。在Tendermint的基础上,Hotstuff[13]将区块链的块链式结构和BFT的每一阶段融合,每阶段节点间对前一区块签名确认与新区块的构建同时进行,使算法在实现上更为简单,Hotstuff还使用了门限签名[14]降低算法的消息复杂度。
5. Paxos与Raft
共识算法是为了保障所存储信息的准确性与一致性而设计的一套机制。在传统的分布式系统中,最常使用的共识算法是基于Paxos的算法。在拜占庭将军问题[3]提出后,Lamport在1990年提出了Paxos算法用于解决特定条件下的系统一致性问题,Lamport于1998年重新整理并发表Paxos的论文[15]并于2001对Paxos进行了重新简述[16]。随后Paxos在一致性算法领域占据统治地位并被许多公司所采用,例如腾讯的Phxpaxos、阿里巴巴的X-Paxos、亚马逊的AWS的DynamoDB和谷歌MegaStore[17]等。这一类算法能够在节点数量有限且相对可信任的情况下,快速完成分布式系统的数据同步,同时能够容忍宕机错误(Crash Fault)。即在传统分布式系统不需要考虑参与节点恶意篡改数据等行为,只需要能够容忍部分节点发生宕机错误即可。但Paxos算法过于理论化,在理解和工程实现上都有着很大的难度。Ongaro等人在2013年发表论文提出Raft算法[18],Raft与Paxos同样的效果并且更便于工程实现。
Raft中领导者占据绝对主导地位,必须保证服务器节点的绝对安全性,领导者一旦被恶意控制将造成巨大损失。而且交易量受到节点最大吞吐量的限制。目前许多联盟链在不考虑拜占庭容错的情况下,会使用Raft算法来提高共识效率。
6. 结合VRF的共识算法
在现有联盟链共识算法中,如果参与共识的节点数量增加,节点间的通信也会增加,系统的性能也会受到影响。如果从众多候选节点中选取部分节点组成共识组进行共识,减少共识节点的数量,则可以提高系统的性能。但这会降低安全性,而且候选节点中恶意节点的比例越高,选出来的共识组无法正常运行的概率也越高。为了实现从候选节点选出能够正常运行的共识组,并保证系统的高可用性,一方面需要设计合适的随机选举算法,保证选择的随机性,防止恶意节点对系统的攻击。另一方面需要提高候选节点中的诚实节点的比例,增加诚实节点被选进共识组的概率。
当前在公有链往往基于PoS类算法,抵押代币增加共识节点的准入门槛,通过经济学博弈增加恶意节点的作恶成本,然后再在部分通过筛选的节点中通过随机选举算法,从符合条件的候选节点中随机选举部分节点进行共识。
Dodis等人于1999年提出了可验证随机函数(Verifiable Random Functions,VRF)[19]。可验证随机函数是零知识证明的一种应用,即在公私钥体系中,持有私钥的人可以使用私钥和一条已知信息按照特定的规则生成一个随机数,在不泄露私钥的前提下,持有私钥的人能够向其他人证明随机数生成的正确性。VRF可以使用RSA或者椭圆曲线构建,Dodis等人在2002年又提出了基于Diffie-Hellman 困难性问题的可验证随机函数构造方法[20],目前可验证随机函数在密钥传输领域和区块链领域都有了应用[21]。可验证随机函数的具体流程如下:
在公有链中,VRF已经在一些项目中得到应用,其中VRF多与PoS算法结合,所有想要参与共识的节点质押一定的代币成为候选节点,然后通过VRF从众多候选节点中随机选出部分共识节点。Zilliqa网络的新节点都必须先执行PoW,网络中的现有节点验证新节点的PoW并授权其加入网络。区块链项目Ontology设计的共识算法VBFT将VRF、PoS和BFT算法相结合,通过VRF在众多候选节点中随机选出共识节点并确定共识节点的排列顺序,可以降低恶意分叉对区块链系统的影响,保障了算法的公平性和随机性。图灵奖获得者Micali等人提出的Algorand[22]将PoS和VRF结合,节点可以采用代币质押的方式成为候选节点,然后通过非交互式的VRF算法选择部分节点组成共识委员会,然后由这部分节点执行类似PBFT共识算法,负责交易的快速验证,Algorand可以在节点为诚实节点的情况下保证系统正常运行。Kiayias等人提出的Ouroboros[23]在第二个版本Praos[24]引入了VRF代替伪随机数,进行分片中主节点的选择。以Algorand等算法使用的VRF算法为例,主要的流程如下:
公有链中设计使用的VRF中,节点被选为记账节点的概率往往和其持有的代币正相关。公有链的共识节点范围是无法预先确定的,所有满足代币持有条件的节点都可能成为共识节点,系统需要在数量和参与度都随机的节点中选择部分节点进行共识。而与公有链相比,联盟链参与共识的节点数量有限、节点已知,这种情况下联盟链节点之间可以通过已知的节点列表进行交互,这能有效防止公有链VRF设计时可能遇到的女巫攻击问题。
7. 结合分片技术的公式算法
分片技术是数据库中的一种技术,是将数据库中的数据切成多个部分,然后分别存储在多个服务器中。通过数据的分布式存储,提高服务器的搜索性能。区块链中,分片技术是将交易分配到多个由节点子集组成的共识组中进行确认,最后再将所有结果汇总确认的机制。分片技术在区块链中已经有一些应用,许多区块链设计了自己的分片方案。
Luu等人于2017年提出了Elastico协议,最先将分片技术应用于区块链中[25]。Elastico首先通过PoW算法竞争成为网络中的记账节点。然后按照预先确定的规则,这些节点被分配到不同的分片委员会中。每个分片委员会内部执行PBFT等传统拜占庭容错的共识算法,打包生成交易集合。在超过的节点对该交易集合进行了签名之后,交易集合被提交给共识委员会,共识委员会在验证签名后,最终将所有的交易集合打包成区块并记录在区块链上。
Elastico验证了分片技术在区块链中的可用性。在一定规模内,分片技术可以近乎线性地拓展吞吐量。但Elastico使用了PoW用于选举共识节点,这也导致随机数产生过程及PoW竞争共识节点的时间过长,使得交易延迟很高。而且每个分片内部采用的PBFT算法通讯复杂度较高。当单个分片中节点数量较多时,延迟也很高。
在Elastico的基础上,Kokoris-Kogias等人提出OmniLedger[26],用加密抽签协议替代了PoW选择验证者分组,然后通过RandHound协议[27]将验证者归入不同分片。OmniLedger。OmniLedger在分片中仍然采用基于PBFT的共识算法作为分片中的共识算法[28],并引入了Atomix协议处理跨分片的交易,共识过程中节点之间通信复杂度较高。当分片中节点数量增多、跨分片交易增多时,系统TPS会显着下降。
Wang等人在2019年提出了Monoxide[29]。在PoW区块链系统中引入了分片技术,提出了连弩挖矿算法(Chu ko-nu mining algorithm),解决了分片造成的算力分散分散问题,使得每个矿工可以同时在不同的分片进行分片,在不降低安全性的情况下提高了PoW的TPS。

⑥ 数字签名机制 - Schnorr 机制

Schnorr机制是一种基于离散对数难题的知识证明机制,由德国数学家和密码学家Claus-Peter Schnorr在1990年提出。这种知识证明机制具有实现简单,验证速度较快等优点。最开始是为Smart Card这样的资源受限设备而设计。

经过这些年的发展,在原始的Schnorr机制上实现了多种多样的改进与功能,实现了高性能的数字签名,以及包括环签名,门限签名等复杂签名机制。

在这里参考Schnorr的论文与其他的参考资料,分析Schnorr机制的原始机制与实现。并分析现在主流的EdDSA的实现ED25519,以及如何在Schnorr机制上建立的复杂签名机制。

原始的Schnorr机制是一个交互式的机制。允许在任何拥有相同生成元(指在离散对数问题中)的协议参与者双方,证明某一方拥有私钥 而不需要直接交换它。其中双方都拥有的生成元设为 ,证明者拥有私钥 。验证者从证明者处取得 ,其中 , 即公钥。

Original Schnorr Signature的协议流程如下:

因为离散对数问题是困难的,因此验证者不会知道 的值,验证者仅知道由 计算得到的 。但是验证者可以通过以下计算来验证 是正确的:

其中 是生成元,双方都可知, 验证者都知道,所以验证者可以轻松验证化简过的让汪公式。

这个过程是零知识的,因为验证者并不能得到私钥 的值,却可以通过计算与通讯的方式验证证明者确实拥有私钥 。

然而这样交互式的过程,会导致验证者通过"fork"的方式获得私钥 。验证者只需要简单的提供两个不同的随机值 ,并要求证明者计算 ,即可计算出 。这样一来,这个过程便无法公开的验证,因为一旦两个验证者相互串通,交换自己得到的值,便可以推出私钥 。

为了解决这个问题,后大滑春续将会通过对现有的协议进行Fiat–Shamir变换,使用Random oracles改造这个算法来使Schnorr原始的Schnorr Scheme变成可公开验证的非交互式算法。

上述原始Schnorr Scheme中存在的私钥泄露问题使得算法无法在公开的环境下使用。通过将原始的交互式协议转变为非交互式协议可以解决这个问题。

Fiat–Shamir变换是一种利用交互式零知识证明方案创建数字签名的方式。根据Fiat–Shamir变换,我们可以将原始方案中的证明者采用随机数预言机(Random oracle)来代替,利用这样的方式构造数字签名。

随机数预言机,即随机数函数,是一种针对任意输入得到的输出之间是项目独立切均匀分布的函数。理想的随机数预言机并不存在,在实现中,经常采用密码学哈希函数作为随机数预言机。

原本的设计中,Schnorr签滚耐名是一种交互式协议,需要一个实际存在的验证者与参与者,而根据Fiat-Shamir转换,可以将具体的验证者采用随机数预言机来代替。将验证者替换为随机数预言机后,外部的验证者便无法通过交换 来推出私钥 ,原本的 采用随机数预言机产生的随机数来表示。

⑦ HTTPS执行流程解析

使用来自wiki的解释:

超文本传输安全协议 (英语: H yper T ext T ransfer P rotocol S ecure,缩写: HTTPS ;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。

历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代末至2010年代初,HTTPS开始广泛使用,以确保各类型的网页真实,保护账户和保持用户通信,身份和网络浏览的私密性。

另外,还有一种安全超文本传输协议(S-HTTP)的HTTP安全传输实现,但是HTTPS的广泛应用而成为事实上的HTTP安全传输实现,S-HTTP并没有得到广泛支持。

ps:翻阅资料发现,S-HTTP的原理是对于每次数据的交互都进行 RSA非对称加密,对比HTTPS来说,S-HTTP加密单次事务的交互,而HTTPS则是对通信层进行加密,我想 效率和普适性 可能也是决定市场采用HTTPS而不是S-HTTP的一大因素。

传输层安全性协议 (英语: T ransport L ayer S ecurity,缩写: TLS )及其前身 安全套接层 (英语: S ecure S ockets L ayer,缩写: SSL )是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布TLS 1.0标准文件(RFC 2246)。随后又公布TLS 1.1(RFC 4346,2006年)、TLS 1.2(RFC 5246,2008年)和TLS 1.3(RFC 8446,2018年)。在浏览器、电子邮昌顷件、即时通信、VoIP、网络传真等应用程序中,广泛使用这个协议。许多网站,如Google、Facebook、Wikipedia等也以这个协议来创建安全连线,发送资料。目前已成为互联网上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。拥有者凭着此文件,可向电脑耐中陆系统或其他用户表明身份,从而培袭对方获得信任并授权访问或使用某些敏感的电脑服务。电脑系统或其他用户可以透过一定的程序核实证书上的内容,包括证书有否过期、数字签名是否有效,如果你信任签发的机构,就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。

简而言之,认证机构用自己的私钥对需要认证的人(或组织机构)的公钥施加数字签名并生成证书,即证书的本质就是对公钥施加数字签名。

人们透过信任数字证书认证机构的根证书、及其使用公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在TLS实现并在万维网的HTTPS、在电子邮件的SMTPS和STARTTLS广泛应用。业界现行的标准是国际电信联盟电信标准化部门制定的X.509[2],并由IETF发行的RFC 5280详细述明。

X.509 是密码学里公钥证书的格式标准。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

除了证书本身功能,X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

Hash算法也被称为散列算法,Hash算法虽然被称为算法,但实际上它更像是一种思想。Hash算法没有一个固定的公式,只要符合散列思想的算法都可以被称为是Hash算法。

特点: 无法反向破解,可以用来校验唯一性.

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密

常见: AES DES 3DES 特点: 效率高

一对密钥,公钥和私钥,公钥加密的数据只能通过私钥来解密,私钥加密的数据只能通过公钥解密. 保证非对称加密的安全性是极大整数的因数分解(数学实现基于互质,欧拉函数,欧拉定理,模反,具体不详细解释),wiki是这么说的:

常见: RSA 特点: 效率低,耗时长

使用http交互信息存在以下隐患:

个人来看,由于HTTP的不安全性,急需一个安全的协议做补充,而HTTPS就是在HTTP协议的基础上,添加了 传输层安全性协议(TLS/SSL) ,TLS/SSL是一个协议标准,而x.509则是这个协议标准的一个 实现 .而x.509就用到了加密相关的hash算法,对称加密算法,非对称加密算法.

1.ClientHello 首先https请求是基于http的,也就是基于tcp的,所以先得建立tcp三次握手,这个就不说了,然后tcp握手后是SSL层的握手,也就是图中的ClientHello消息,client发送本地最新的TLS版本、算法组合的一个集合和其他很多辅助的信息,并且生成一个随机数A。具体的内容可以看下图:

可以看到随机数( Random )是一个GMT UNIX时间加上一串随机字节,算法组合( Cipher Suite )有26种。

2.ServerHello Server收到这些信息后比对自己的TLS版本,选择其中低的一个作为返回,并且从算法组合的集合中选出一种合适的组合,然后同样也生成一个随机数B,一起打包到ServerHello中传回给Client。内容如图:

这里选出了一种CipherSuite算法组合。

3.Certificatie,ServerHelloDone 服务端在选出沟通策略之后将自己的证书信息告诉Client端( Certificate ),通知Client关于秘钥更新的信息( ServerkeyExchange ),接下去就看你的了,并且表示该发的都发给你了,我的Hello结束了( ServerHelloDone )。

4. Client收到2,3步的信息后先验证证书是不是合法的,包括它的颁发机构,域名匹配,有限期限等,这个具体的过程就不探究了,只要知道这些步骤就行了。

5. 证书验证通过之后,生成随机数C1,然后用证书内容中的公钥通过服务器选择的非对称加密算法加密,得出为C2。

6. 由之前的三个随机数A、B、C1通过一个伪随机函数再生成一个D, 注意!这个是最终http真正使用的加密秘钥!!!

7. 由D再次通过伪随机函数生成一个秘钥组,包含6个秘钥,假设为P1,P2,P3,P4,P5,P6。

8. ClientKeyExchange。通知Server秘钥相关的信息,发送第5步中算出的C2给Server端。

9. Client端发送ClientKeyExchange之后,计算之前所有与Server端交互消息的hash值,假设为client_hash1,用步骤7中得到的其中一个P1进行加密,结果为E。

10. Server端收到C2后用私钥结合非对称算法解密C2,得到C1。

11. 同样的Server端也根据A、B、C1由伪随机函数生成D( 最终的加密秘钥!!! ),再由D得出秘组钥(P1-P6),因为这里涉及到的算法都是一样的,所以得出的秘钥也是一样的。

12. Server端计算之前所有和Client端交互消息的hash值,假设为server_hash2,大家可能发现了,11、12跟Client端的6、7、9过程一致,只是少了9中的P1加密过程。

13. 这个时候Client端会发送ChangeCipherSpec消息和EncryptedHandshakeMessage消息,通知Server端接下去使用选定的加密策略来通信了,并且将第9步中的E传给了Server。(这里几个步骤的顺序只是为了好理解一点而这样排列,实际两条线是独立在处理信息的,所以先后顺序不能保证)

14. 这个时候Client会再次计算之前握手消息的hash值,得出结果client_hash2。

15. Server在收到EncryptedHandshakeMessage消息带过来的E之后,利用步骤11中的P1解密E,由于加密算法和P1都是相同的,所以这里还原出了client_hash1,然后与步骤12中的server_hash2比对,如果一样说明之前的几条协商秘钥的消息都被对方正确无误的理解了。

16. Server端再次对之前的消息做hash值,得出server_hash2,用P2进行加密结果为F,然后通过ChangeCipherSpec-EncryptedHandshakeMessage消息传给Client端。

17. Client收到Server的消息后根据P2解密F还原得出server_hash2,与client_hash2比对如果一致,则认为之前的交互过程都是正确无误且被对方理解的。至此,整个握手过程就结束了,之后的http数据报就会被之前确定的加密策略和加密秘钥D进行加密传输了。

总结:其实最终我们发现整个握手过程中并没有直接传输最终的加密秘钥D,而且交换了一些算法策略和生成D的一些参数,这样相对来说会更安全一点,直接传D的话这个过程就由Client端完成了,中间如果出什么差错Server会无感知无条件的信任Client传过来的D,就有可能出现问题了,所以采用只传策略和参数,并且由双方共同参与,这样安全性和正确性就会提高很多。贴一张整个过程的抓包图:

主要是为了防止 重放攻击(回放攻击) ,重放攻击是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。

浏览器客户端访问同一个https服务器,可以不必每次都进行完整的TLS Handshake,因为完整的TLS Handshake,涉及到 认证服务器的身份 (数字证书),需要做大量的非对称加密/解密运算,此外还需要做 伪随机函数PRF ,通过“ Pre-Master Key”、“Server Nonce”、“Client Nonce ”共同推导出 session key 非对称加密算法RSA/DSA非常耗费CPU资源。

为了克服这个困难,服务器维护一个以 session ID 为索引的结构体,用于临时存放session key,并在 TLS handshake 阶段分享给浏览器

当浏览器重新连接https 服务器时,TLS handshake 阶段,出示自己的session ID, 服务器获得session ID,以此为索引,可以获得和该浏览器共同拥有的session key,使用session key可以直接对用户流量做加密/解密动作。

这样避免了大量的幂、指数计算。

当然,如果服务器没有查找到session ID,双方的TLS安全参数协商按照正常流程走。

使用 charles 抓包进行分析 Session ID 的使用情况。假设有一次请求,服务端允许使用 Session ID,那么会有下面的流程:

1.客户端向服务器发起HTTPS请求

2.Charles拦截客户端的请求,伪装成客户端向服务器进行请求

3.服务器向“客户端”(实际上是Charles)返回服务器的CA证书

4.Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)

5.客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)

6.Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥

7.服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应

8.Charles拦截服务器的响应,替换成自己的证书后发送给客户端

至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。

(核心点:Charles生成了自己一套公钥,私钥,和自己的证书,因为自己的证书无法通过校验,所以需要客户端主动授权,客户端授权后,charles就可以完全代替客户端与服务端交互,与服务端交互用的是服务端的公钥加密,与客户端交互用的是charles自己的私钥解密)

⑧ 高中信息学奥赛主要搞些什么

信息学奥林匹克竞赛的考核方式是采用封闭式(连续3~4小时)上机编程解题的形式,不限编程语言,竞赛题量通常较大。程序完成后要通过严格的数据测试,这就对同学们编程能力有更高的要求:不但要能编程,编好的程序能运行,而且所设计的程序还要能通过在各种边界条件下和各种环境下设置的测试数据。

这种严格的数据测试方法,对于培养同学们的分析问题和解决问题的能力,无疑是很有帮助的。

参赛名额分配:

参赛名额分为基本名额和奖励名额,奖励名额与基本名额比例约为1:2。

1、基本名额:根据上一年竞赛成绩,分别定出各市参加决赛名额的基数。获团体总分前三名的市(A类市)6人,获团体总分第四至八名的市(B类市)4人,其余的市(C类市)1~2人(去年有参赛的市2人,去年无参赛的市1人)。

2、奖励名额:上一年竞赛每获一个高中或初中一等奖、女同学前三名、参赛队员全部获一、二等奖的市均给该市增加1个名额,C类市中成绩最好的2个市各增加1个名额。并规定获校团体前三名的学校各奖励1个名额给原学校。

3、根据91年国际信息学奥林匹克提出的“开展一个鼓励女孩参加信息学竞赛活动”的精神,全国赛从92年开始规定每个省队至少有1个女同学参加。

因此,我们在条例中也规定了A、B类市基本名额中包含有1个女同学名额,如不派女同学参加,则该名额取消。为了鼓励女同学多参赛,条例中也作了“女同学的奖励名额必须派女同学参加,否则该奖励名额无效”的规定。

4、为既保证各市组队的自主性而又保证尖子培养后继有人。条例作了“分配给各市名额,其高初中人数自定,但其差额不得大于1”的规定。

⑨ FileCoin: 有用的工作量证明

有用的工作量证明(Proof of Useful Work)是由着名的去中心化存储项目 FileCoin 在它的白皮书里提出来的一个概念。工作量证明,Proof of Work,POW 是实现区块链的一个重要共识方式,FileCoin 要实现一个基于区块链的存储平台。所以它也要做共识,它选择的就是工作量证明共识。

首先我们来解释一下常规的工作量证明。它是区块链实现共识的一种方式。是比特币采用的方式,所以,工作量证明就是俗称的“挖矿”。比特币做为一个去中心化的点对点交易系统,要在不同的节点上维护一个共同的完全相同的帐本,来记录所有的交易,而且确保交易不会重复,不会一笔钱多花,就需要一个维护这个账本一致性的规则。大家一起遵守这个规则,就是共识。区块链常用的方法是,把这个账本分成很多页,每个页就是一个区块。每个区块由一个节点来记账,然后分发给其他节点复制,这样所有节点上的账本都是一样的。但是每个区块都由哪个节点来记录,就需要一个大家都能遵守的规则。比特币采用的方法,是让所有的节点做一道简单的数学题,题目很简单,但是计算量很大,一般要10分钟左右才能做出答案来。得到答案虽然很费时间,但是验证答案是否正确很容易。然后所有的节点同时做题,第一个做出来的节点,就得到下一个区块的记账权。因为每个区块都只有唯一一个最早做出题的节点,所以,每个区块的记账权是唯一的,而且也是很容易被其他节点验证的。节点一旦验证到其他节点得到了区块记账权,就必须复制区块,加到本地区块链中,同时开始下一个区块记账权的竞争。通过这种方式,比特币就能确保所有节点的区块链是一致的。

节点通过大量计算竞争区块记账权的的过程,就是工作量证明。所以,工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由 Cynthia Dwork 和 Moni Naor 1993 年在学术论文中首次提出。而工作量证明(POW)这个名词,则是在 1999 年 Markus Jakobsson 和 Ari Juels 的文章中才被真正提出。

实现区块链共识的方式还有很多,如POS,DPOS,POA,PBFT等等,但是工作量证明是唯一被时间验证过(11年)的在公链上运行的区块链共识机制。

工作量证明存在一个什么样的问题呢?还是用比特币为例。比特币节点为了获取出块权做得那个数学题,叫哈希运算。计算量非常大,每一台参与比特币挖矿的矿机都要时刻进行这个计算,耗费大量的电力。这个计算不像其他的如大数据处理的计算,可以产生一些价值,它的唯一目的,就是竞争出一个节点,成为下一区块的出块者。目前比特币每年消耗电量约25.5亿瓦,这相当于全球电量的0.5%,是爱尔兰一年的耗电量。反对POW的人纷纷指责挖矿将电力资源浪费在虚无缥缈的数字货币上,还称之为自由主义的“泔水”。

但是,认为POW是浪费的电的人不知道,正是能源和算力打造了比特币安全不可攻破的体系。

一张100元的现金不只是你我认为他值100,而是整个社会群体都认为他值100,价值就是来自于共识。比特币是社区行为,来自不同国家的人聚集到社区,用互联网来建立秩序,它的意义也是来自于群体共识,只要大家都相信比特币有价值,只共识存在,那么他就有价值,和法币一模一样。所以产生价值认同并不一定需要国家来驱动,比特币改革了一种传递信任的载体和媒介,千百年来,人类社会通过多少流血战争建立的政权和共识,现在兵不血刃,只是耗费些电力就实现,岂不是更先进。

总结而言,要想设计一个去中心化而且安全的数字货币,能源和算力是必要的代价。工作量证明是以去中心化形式构建安全产权认证系统的唯一方案。所以认为POW是浪费的电的人不知道,正是能源和算力打造了比特币安全不可攻破的体系。现在比特币全网算力已经达到一个非常恐怖的地步,任何人想要发动51%算力攻击已经是不可能的事情了,POW算法使比特币系统牢不可破。

为缔造价值而产生的消耗不叫浪费。

但是,如此多的算力,是否可以用来创造更多的价值呢?用 FileCoin 的话说,工作量证明,还有没有其他用途呢?

FileCoin 是分布式存储行业的明星项目。他的开发团队 Protocol Lab 就是开发 IPFS 协议的团队,以至于很多人都分不清FileCoin 和 IPFS 的区别。可以说是2017年 FileCoin 的1CO,把这个行业推向巅峰,也引出了一系列的同类型项目。本文无意于赞誉或者贬低这个项目,只想结合自己从事这个行业的经验,表达一些自己的观点,尽量做到客观公正。希望对从事这个行业的人有一些启发。

FileCoin 在白皮书中提出要实现一个有用的工作量证明,实际上就是认可了,要打造一个安全不可攻破的区块链,就必须消耗工作量。但是,他们不希望为这个工作量做出的计算完全被浪费,所以想把这个工作量利用起来。所以,他们想到的方法是,在工作量证明里加入存储空间的使用率。这样,所有的节点为了形成共识,就必须提供存储空间来存文件。这个存储空间就可以存用户数据,就是有用的。

那我们来看一下FileCoin是怎样实现这种有用的工作量证明共识的。

Filecoin采用的共识机制并不是简单的工作量证明,而是一种叫做预期共识(Expected Consensus,简称 EC)的机制。和其他主流共识机制目标一样,让矿工争夺某一个高度唯一的出块权而获得奖励。这个获得出块权的矿工叫做 Leader。在每一轮的出块争夺中,为了保证账本的可靠性,都有一个唯一的 leader 来进行记账。

也就是说,共识的核心就是选择谁来当 Leader。选 Leader 的方式一般有两种,交互式或者非交互式。交互式是要矿工之间互相投票的。比如 PBFT 就是交互式的,几个参与选举的人通过互发信息,得到多数票( 超过 2/3 )的人就是 Leader。预期共识采用了非交互式的方式来选举 Leader。参与的各方根本不给彼此发消息,而是每个节点各自独立私下进行运算。最后某个节点说,我赢得了选举,然后提供一个证明,其他人可以很容易就验证,他确实赢得了选举。这个验证方法就是零知识证明。

预期共识机制会为区块链网络预设一个出块的期望值。比如每1个纪元(epoch)生成1个区块(block),但也有一个纪元可能出现空块或多个区块的情况。所以在 Filecoin 中,每个高度不是一个区块,而是一个区块集,叫做 TipSet,这个 TipSet 中可能包含了多个区块。所以实际上 Filecoin 是 TipSet 链。预期共识无法保证每一轮只选举出一个 Leader,所以会出现一轮中有多个 Leader 的可能,这样链式结构就变成了DAG的网状结构。所以 FileCoin 还会对 block 赋权重,实现有效收敛。

FileCoin 采用的 EC 共识有一个好处。对于传统的 POS 共识机制来说,有一个重大问题就是无法控制分叉。也就是说,由于挖矿成本低,参与者可以同时挖多个链获取利益。而预期共识对这一点做了设计,那就是通过权重和抵押机制来促使矿工选择一条最好的链,对同时挖多个链的矿工进行惩罚,这样可以非常快速地促进收敛。这说明 POW 和 POS 共同使用会是一种好的方式。

每一个矿工获得出块的可能与其当前有效存储量占全网总存储量正相关。这种期望共识机制其实是更像是 POS 权益证明,只是它将POS里边的权益(Staking)换成了有效存储占比。但是矿工的有效存储从何而来呢?是通过存储用户数据得来。如何证明矿工存储了用户的数据,FileCoin 创造出一个新的证明机制叫 POST 时空复制证明。这个 POST 就是 FileCoin 的工作量了。把耗电的算力换成存储有用数据的存储空间,无意义的军备竞争变成了存储服务市场竞争。这确实是 FileCoin 的进步之处。只不过,为了成功的出块,矿工通过预期共识被选为出块节点后,必须在一个块的时间里(现在是45秒)做个 POST 证明,成功提交,才能出块。否则就失去机会。所以,为了确保矿工能在指定时间内出块,最终官方还是决定要使用 GPU。虽然这 GPU 不是像工作量证明那样一直不停的工作,但是在整个实现共识的过程中还是出现了跟有用的工作量证明思想相违背的耗能计算。

还有,谈到预期共识的时候,我们说到每一个纪元出块都不是一个块,而是一组块,那么纪元这个概念就很重要了。怎么控制纪元呢?每个矿工在参与选举前,需要先生成一个 Ticket,这个 Ticket 实际上是一个随机数,他需要走一个 VDF 和 VRF 的流程,这个 VDF 全称 Verifiable Delay Function,可验证的延时函数。他的计算流程是串行的,需要花费一定的时间,并且这个时间无法通过多核并行的方式进行缩减。这保证了每个矿工产生 Ticket 时必须要消耗的时间,没有人可以通过优化硬件的方式来获得加速。听上去这函数很完美,可是,这个 VDF 根本还不存在!现在 FileCoin 测试网直接使用了一个等待函数 sleep,这是 UDF,Unverifiable Delay Function。现在最接近的 VDF 解决方案,也是需要消耗大量计算资源的。说白了,还是要耗电,还是不环保。

所以,有用的工作量证明,依然只是一个美好的愿望,理想很丰满,但现实很骨感。被誉为下一个比特币的 FIL,还要继续为实现这个颠覆性的共识而努力。

总结一下FileCoin存储矿工获取激励的流程:用户存储数据,支付FIL费用 -> 矿工存储数据 -> 生成复制证明 -> 完成时空证明 -> 经过EC共识,选出出块Leader -> 获取打包权 -> 矿工获取FIL奖励

在这个流程图上,可以看到,矿工可以在两个地方获取奖励。一个是存储用户文件的时候可以得到用户的FIL奖励。一个是在获取区块打包权后获得FIL。而得到区块打包权的一个前提就是存有足够多的用户数据。所以,在存储需求不够大的情况下,矿工会从用户那里收取很低廉的费用。在用户不够的情况下,甚至会倒贴钱自己付FIL存数据,只为能够存足够多的数据,在 EC 共识中被选成 Leader 得到打包奖励。这样产生的效果是,FileCoin 对用户非常友好,存储费用非常低。所以,一定会吸引很多的应用来这个平台上做开发。但是缺点也很明显,如果存储量不够大,矿工根本没法跟其他人争夺出块权,所以得不到奖励。最后整个平台会朝着大矿工,大矿池的方向发展,这跟 FileCoin 想把所有闲散服务器利用起来实现分布式存储的初衷是违背的。或者说,一定要等到这个行业具有一定规模,技术更成熟,才有小矿机挖矿的机会。

我们先来简单的讲一讲中心化存储和去中心化存储各自的利弊。中心化存储设备统一管理,可靠性好,性能高,去中心化存储数据天然分散,易于流通,容灾性好,但是可靠性低。从经济角度来说,中心化存储是重资产投入,成本高。去中心化存储通过区块链激励层,用户自行加入,轻资产,可降低存储总成本。未来应用数据的存储和处理还会是以中心化存储为主,而去中心化存储因为是分布式网络,主要可用于热门数据流量分发。同时,因为没有中心化所有权,可以成为去中心化应用的首选。

市场上有一种说法是,去中心化网络适合冷数据的备份,其实这并不是去中心化存储的优点,实在是因为把热数据放到去中心化网络上太不可靠,处理性能也跟不上。所以,如果去中心化存储能实现一定的规模效应,大大降低存储成本,把冷数据备份当作核心业务,并把目标定位在今天因为成本太高没被企业存储的冷数据,会是一个很好的发展方向。

如此说来,从技术上讲,去中心化存储并不一定比中心化存储有优势。如果能推行一种新的模式,把去中心化的经济激励和中心化的存储合在一起,就能吸收两者的长处。真正实现有用的工作量。FileCoin 未来可能促成的大矿场模式的数据中心,可能更有市场。

在11年后的今天,比特币并没有实现它成为一个点对点的电子支付货币的初衷,但阻止不了人类前赴后继的去买它,拥有它。同样,我相信 FileCoin 已经得到足够大的社群,矿工和开发者的支持,即使在可预见的未来,它不会促成分布式存储应用的全面落地(也许这从来不是 FileCoin 的目标),但我还是相信会有很多人会因为它的共识去购买它,持有它。上升到哲学层面,人类在为真理买单。

那么在实际生活中,何为有用,或者说,我们到底是在用存储做共识还是用共识做存储?FileCoin 是前者。FileCoin 想要基于存储工作量实现的去中心化的共识,理论上是完美的,追求完美,人类是要付出代价的。这也是为什么在这个项目上我们等待了这么长的时间。但是一旦实现,它可能会为人类带来巨大价值,对市场带来无穷大的号召力。

只不过去中心化不是万物的灵药。中心化的一个最大优势是它的效率非常高。像dPOS或者联盟链这样的弱中心化共识兼顾两者优势,能更快速的把应用推向市场,提前启动分布式存储行业,推进分布式存储应用落地。所以,我们既追求用存储做共识,也追求用共识做存储,根据实际需求来做出我们的选择。在这个过程中,相信区块链也会进一步发展,逐步优化,变得越来越有用。

阅读全文

与非交互式交易验证算法相关的资料

热点内容
oppp手机信任app在哪里设置 浏览:183
java地址重定向 浏览:268
一年级下册摘苹果的算法是怎样的 浏览:448
程序员出轨电视剧 浏览:88
服务器系统地址怎么查 浏览:54
解压游戏发行官 浏览:601
国外小伙解压实验 浏览:336
顶级大学开设加密货币 浏览:437
java重载与多态 浏览:528
腾讯应届程序员 浏览:942
一键编译程序 浏览:129
语音加密包哪个好 浏览:339
有什么学习高中语文的app 浏览:282
安卓手机的表格里怎么打勾 浏览:409
阿里云服务器有网络安全服务吗 浏览:968
超解压兔子视频 浏览:24
单片机怎么测负脉冲 浏览:174
魅族备份的app在哪里 浏览:740
java倒三角打印 浏览:115
通达信回封板主图源码 浏览:46