时间戳是一份完整的可验证的时间数据证明,它能够证明一份数据存在或发生于哪个时间点。
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。
时间戳是一份完整的可验证的时间数据证明,它能够证明一份数据存在或发生于哪个时间点。
1、自建时间戳
此类时间戳是通过时间接收设备(如GPS,CDMA,北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。
注意:
此种时间戳可用来企业内部责任认定,在法庭认证是并不具备法律效力。因其在通过时间接收设备接收时间存在被篡改的可能,故此不能作为法律依据。
2、可信时间戳
它是由我国中科院国家授时中心与北京联合信任技术服务有限公司负责建设的我国第三方可信时间戳认证服务。由国家授时中心负责时间的授时与守时检测,因其守时监测功能而保障时间戳证书中的时间的正确性和不被篡改。可以作为法律依据。
《时间戳规范》的标准中规定了时间戳的保存、时间戳的备份、时间戳的检索、时间戳的删除和销毁、时间戳的查看和验证。
包括在TSA (时间戳机构)方的保存和在用户方的保存。
TSA中:
在TSA方的保存涉及到时间戳数据库的管理和时间戳。记录应当包含的信息项,一般最少应包括入库时间、序列号、完整编码等。
用户方:
一般由用户自行保存。
在标准中规定了一系列要求,如定期备份、备份介质等。
在标准中规定了至少三种检索方式,包括分别按照入库时间、序列号、完整编码检索
当TSA系统由于内部错误或者外部攻击导致产生错误的时间戳时,标准规定了删除时应遵循的要求。
在标准中规定了TSA应该给用户提供一个方便安全的方法查看其颁发的时间戳,例如提供一个查看软件等。TSA还应该给用户提供一个方便安全的方法对其颁发的时间戳进行验证,例如提供一个验证软件或者通过互联网验证等。
由于时间戳在电子取证中的重要作用及其法律地位,时间戳系统必须拥有极高的安全级别,安全保护应包括物理环境安全和软件安全。
包括机房安全、设备安全和记录介质安全
包括运行环境、可信时间源、签名系统、时间戳数据库和审计。
这里指的是可信时间戳的生成:
1、提取用户电子数据摘要(Hash);
2、用户题出时间戳请求。Hash值被传递给时间戳服务器;
3、时间戳服务器采用权威时间源,由国家授时中心负责授时与守时;
4、由可信第三方时间戳服务机构对电子数据摘要和权威时间记录进行数字签名生成时间戳;
1、我们有了真正可以信任的历史数据;
2、这些数据因为可信变得更有价值,可以在应用之外被其他应用或者分析工具使用;
3、我们可以基于这些可信的历史记录生成信用;
4、我们真正进入一个信用社会
在区块链系统中,每一个新区块生成时,都会被打上时间戳,最终依照区块生成时间的先后顺序相连成区块链,每个独立节点又通过P2P网络建立联系,这样就为信息数据的记录形成了一个去中心化的分布式时间戳服务系统。
注意:
时间戳的这种设计,使得更改一条记录的困难程度按时间的指数倍增加,越老的记录越难更改,区块链运行时间越久,篡改难度越高。
介绍了POW工作量证明机制的概念、原理、POW共识机制的流程、如何记账等核心问题进行了详细的分析。并对POW共识机制的优缺点作为了解性质的部分也做了阐述。
目前主要的共识机制有POW和POS。
工作量证明机制,通过评估你的工作量来评估你获得记账权的机率。比特币挖矿采用的就是工作量证明机制,矿工获得记账权的几率取决于矿工工作量占全网的比例。
POW(Proof-of-work),工作量证明最早是一个经济学名词,它是指系统为达到某一目标而设置的度量方法。简单理解就是一份证明,用来确认你做过一定量的工作。
①工作者需要完成的工作必须有一定的量,这个量由工作验证者给出
②验证者可以迅速的检验工作量是否达标
③工作者无法自己"创造工作",必须由验证者发布工作
④工作者无法找到很快完成工作的办法。
注意:
哈希运算是一种最常见的工作量证明机制,它是亚当·贝克(Adam Back)在1997年发明的,用于抵抗邮件的拒绝服务攻击及垃圾邮件网关滥用。
比特币网络上通过POW机制竞争记账权,由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的比特币,因此就出现大家争相记账,大家一起记账就会出现记账不一致的问题。
POW机制解决这个问题的规则如下:
一段时间内(10分钟左右,具体时间会与密码学难题难度相互影响)只有一人可以记账成功,通过解决密码学难题(即工作量证明)竞争获得唯一记账权,其他节点复制记账结果。
白话说就是谁能先解决密码学难题,谁就获得记账权,然后其他人保存其结果即可。
一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash
a.收集广播中还没有被记录账本的原始交易信息
b.检查每个交易信息中付款地址有没有足够的余额
c.验证交易是否有正确的签名
d.把验证通过的交易信息进行打包记录
e.添加一个奖励交易:给自己的地址增加比特币
如果节点争夺记账权成功的话,就可以得到比特币奖励。
POW机制为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量。
改变Hash的原始信息的任何一部分,Hash值也会随之不断的变化,因此在运算Hash时,不断的改变随机数的值,总可以找的一个随机数使的Hash的结果以若干个0开头(把这个过程称为猜谜),率先找到随机数的节点就获得此次记账的唯一记账权。
生成Merkle根哈希,即节点自己生成一笔筹币交易,并且与其他所有即将打包的交易通过Merkle树算法生成Merkle根哈希,所以为什么说区块是工作量证明的三要素之一
区块头将被作为计算出工作量证明输出的一个输入参数,因此第一步计算出来的Merkle根哈希和区块头的其他组成部分组装成区块头。
在比特币平台中,中本聪就是运用的POW工作量证明来使全网节点达到51%及以上的共识记账,以下将介绍整个比特币网络中pow工作量证明共识是如何记账的?
1、客户端产生新的交易,向全网广播
2、每个节点收到请求,将交易纳入区块中
3、每个节点通过第三章中描述的pow工作量证明
4、当某个节点找到了证明,向全网广播
5、当且仅当该区块的交易是有效的且在之前中未存在的,其他节点才认同该区块的有效性
6、接受该区块且在该区块的末尾制造新的区块
1、在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。
2、如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。网络中只有最快解谜的区块,才会添加的账本中,其他的节点进行复制,这样就保证了整个账本的唯一性。
3、假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。
1、比特币
2、以太坊的前三个阶段(Frontier前沿、Homestead家园、Metropolis大都会)
1、安全性高:
破坏系统需要投入极大的成本,如果想作弊,要有压倒大多数人的算力(51%攻击)。
2、去中心化:
将记账权公平的分派到其他节点。你能够获得的币的数量,取决于你挖矿贡献的有效工作。
1、资源浪费严重
目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全。
2、网络性能低:
需要等待多个确认,容易产生分叉,区块的确认共识达成的周期较长(10分钟),现在每秒交易量上限是7笔。
3、PoW共识算法算力集中化:
偏离了原来的去中心化轨道。从比特币扩容之争可以看到,算力高的大型矿池是主人,而持币的人没有参与决定的权利,比特币分叉出很多儿子,即将失去“去中心化”的标签。
PoW的前提是,节点和算力是均匀分布的,随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC 矿机挖矿,节点数和算力值也渐渐失配。并且POW对资源的浪费过于浪费,于是一种新的证明方法出现了——权益证明(Proof of Stake,PoS)。权益证明要求用户证明拥有某些数量的货币(即对货币的权益)。
点点币(Peercoin)是首先采用权益证明的货币,尽管它依然使用工作量证明挖矿。
点点币在SHA256的哈希运算的难度方面引入了币龄的概念,使得难度与交易输入的币龄成反比。在点点币中,币龄被定义为币的数量与币所拥有的天数的乘积,这使得币龄能够反映交易时刻用户所拥有的货币数量。点点币的权益证明机制结合了随机化与币龄的概念,未使用至少30天的币可以参与竞争下一区块,越久和越大的币集有更大的可能去签名下一区块。然而,一旦币的权益被用于签名一个区块,则币龄将清为零,这样必须等待至少30日才能签署另一区块。同时,为防止非常老或非常大的权益控制区块链,寻找下一区块的最大概率在90天后达到最大值,这一过程保护了网络,并随着时间逐渐生成新的币而无需消耗大量的计算能力。
hash(block_header) =
coinage表示币龄,这将意味着,币龄越大,越容易得到答案。而其中币龄的计算是通过挖矿者拥有的币乘以每个币的剩下使用时间得到,这也将意味着拥有的币越多,也越容易得到答案。这样,pos解决了pow中浪费资源的问题,同时挖矿者不可能拥有全网51%的币,所以也解决了51%攻击的问题。
PoS协议的基本框架是按所有的参与者的持币量,去分配打包权和投票权。在PoS的系统里边打包和投票两件事是分开的,PoW系统里这两个其实是一回事儿。分配完打包权以后,拿到打包权的人就有资格出一个候选区块。这个区块里面包含要处理的交易,并且有他自己的签名。候选区块并不意味着就会被加入共识,在广播候选区块以后还需要由那些有投票权的人去投票。
1、按照参与者持有的币的数量分配打包权和投票权
2、有打包权的参与者可以打包交易成候选块并广播
3、拥有投票权的参与者可以对候选块投票
4、获得多数投票支持的候选块被加入链上
5、去中心化机制:1、选举和轮换委员会的机制
2、检测和惩罚违规行为,例如一票多投、有票不投等。
我们再从pos的实现算法公式去看,币龄的计算公式中,假如一开始挖矿,只有创始区块中有币,也就是说其他矿机是没法参与挖矿的,因为币的个数这个值对他们来说永远是零,这也就是pos机制的缺陷之一币无法发行的问题。
同样是从pos的实现算法公式可以分析到,币龄其实就是时间,一旦挖矿者囤积一定的币,很久很久之后发起攻击,这样他也将很容易拿到记账权,所以我们得给每个币设计一个时间上限。
从公式中仍然看到还会面临一个问题,也就是币的数量这个因素还是会影响我们拿到记账权,很多挖矿者还会囤积代币,给代币造成流通上的缺陷。目前有些平台引入币龄按时间衰弱的方案来解决这一缺陷(例如:瑞迪币)。
接下来让我们来看看pos共识机制还有哪方面的不足,即使上面的各种缺陷都多少有些解决方案,但例如挖矿者挖一段时间后离线。此时,时间将不纳入币龄减弱计算,这样,挖矿者通过离线时间长来囤积挖矿,同样面临灾难。
由于pos存在以上四大缺陷,所以pos的发展历程经历了三个版本,即pos1.0、pos2.0以及pos3.0,其中pos2.0在算法公式中使用的是币的数量,这样,上述缺陷二到四就不再是问题,可这样以后却导致了pos共识机制面临了无成本利益的问题。
如果你是一个验证者,你可以简单地把钱投到红蓝两条链上,完全无需担心间接的不良后果。不管发生什么事,你都总是可以赢,不会失去任何东西,不管你的行为有多恶意。这就是所谓的“无成本利益关系(Nothing at Stake)”问题,也是以太坊必须解决的问题。他们需要一种协议,可以实行权益证明,同时减少“无成本利益关系”问题。
①验证者押下一定比例的他们拥有的以太币作为保证金。
②然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。
③如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。
④但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉
PoW与PoS最大的区别在于,PoW在算法复杂度足够高的前提下,基本不需要太多的节点间互相通讯和确认,对代码的实现要求极低。而PoS对于多节点间一致性验证、防伪等要求较高,
优点:
1、不需要耗费能源和硬件设备。
2、缩短了区块的产生时间和确认时间,提高了系统效率。
缺点:
1、实现规则复杂,参杂了很多人为因素,容易产生安全漏洞;
2、与POW共识机制一样,随着确认次数的增加,达成共识的可能性也呈指数级增长。
3、POS共识机制的致命弱点在于币龄依赖问题,攻击者在积累长时间币龄后,挖矿的难度大大降低,容易对系统发起双花攻击。
PoW机制和PoS机制虽然都能有效地解决记账行为的一致性共识问题,但是现有的比特币PoW机制纯粹依赖算力,导致专业从事挖矿的矿工群体似乎已和比特币社区完全分隔,某些矿池的巨大算力俨然成为另一个中心,这与比特币的去中心化思想相冲突。股份授权证明机制(Delegated Proof of Stake,DPoS)的出现解决了这些问题。
比特股引入了见证人这个概念,见证人可以生成区块,每一个持有比特股的人都可以投票选举见证人。得到总同意票数中的前N个(N通常定义为101)候选者可以当选为见证人,当选见证人的个数(N)需满足:至少一半的参与投票者相信N已经充分地去中心化。
见证人的候选名单每个维护周期(1天)更新一次。见证人然后随机排列,每个见证人按序有2秒的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。DPoS的这种设计使得区块的生成更为快速,也更加节能。
DPoS充分利用了持股人的投票,以公平民主的方式达成共识,他们投票选出的N个见证人,可以视为N个矿池,而这N个矿池彼此的权利是完全相等的。持股人可以随时通过投票更换这些见证人(矿池),只要他们提供的算力不稳定,计算机宕机,或者试图利用手中的权力作恶
选出的代表拥有提出改变网络参数的特权,包括交易费用、区块大小、见证人费用和区块区间。若大多数代表同意所提出的改变,持股人有两周的审查期,这期间可以罢免代表并废止所提出的改变。这一设计确保代表技术上没有直接修改参数的权利以及所有的网络参数的改变最终需得到持股人的同意。
在正常操作下,块生产者轮流每3秒产生一个块。假设没有人错过他们,那么这将产生最长的链条。块生产者在任何其他时间段生成块都是无效的。
高达1/3的节点可能是恶意或故障,并创建一个少数叉。在这种情况下,少数叉将只产生一个块每9秒,而大多数叉将产生2块每9秒(周期为9s)。再次,诚实的2/3多数将比少数人长。
少数人可以尝试生产无限数量的分支,但是他们的所有分支都将比主要连锁链短,因为少数人的生产环节比大多数人慢。
在某种情况下,网络完全有可能被分割很多个碎片,而没有大部分区块生产者。在这种情况下,最长的链将会成为最大的少数。当网络连接恢复后,较小的少数节点将自然地切换到最长的链,并且明确的共识将被恢复。
有可能有3个分支其中2个最长的分支是相同的长度。在这种情况下,在第三条最短链上的生产者会放弃原有链,重新加入两条最长链之一的网络。生产商的数量是奇数的,所以不可能长期保持相同。之后,我们将覆盖生产者洗牌,这将随机化生产顺序,以确保即使两个分支具有相同数量的生产者,分支将以不同速度增长。
在这种情况下,少数B在他们的时隙产生了两个或更多个备选块。下一个计划生产者(C),可以选择从B产生的任何一个区块中建立。当这发生时,它将成为最长链,并且选择B1的所有节点将切换。
在网络碎片的情况下,多个分支可以在长时间内继续增长。从长远来看,最长的链将获胜,但观察者需要一种手段来确定何时的块,绝对是增长最快的链的一部分。这可以通过看到2/3 + 1的块生产商的确认来确定。
B块已经被C和A所证实,A代表2/3+1确认,因此我们可以推断,如果我们2/3的生产者诚实的话,没有其他的链可能更长。“规则”类似于Bitcoin的6个区块确认“规则”。
如果不存在明确的生产者法定人数,则少数人有可能继续生产区块。在这些块中,利益相关者可以包括改变他们投票的交易。然后,这些投票可以选择一组新的生产者,并恢复块生产参与到100%。一旦这种情况发生,少数派链最终将超过所有其他链而不需要100%的参与。
在这个过程中,所有观察者都会知道网络状态在不断变化,直到一个链出现67%的参与。那些选择在这些条件下交易的人承担的风险与那些选择接受少于6个确认的人相似。
如果大多数生产者变得腐败,那么他们可以生产无限数量的分支,每个分支似乎都会以2/3的多数确认推进。在这种情况下,最后的不可逆块算法会恢复到最长链算法。最长的链将是最大多数人批准的链,这将由少数剩余的诚实节点决定。这种行为不会持续很长时间,因为利益相关者最终会投票替换这些生产者。
当用户签署交易时,他们会根据对区块链状态的特定假设进行交易。这个假设是基于他们对近期区块的看法。如果最长链上的共识发生变化,那么它可能会使签署者同意交易时的假设无效。因为对于TaPoS,所有事务都包含最近一个块的散列,并且如果该块不存在于链历史中,则被视为无效。任何在孤立分叉处签署交易的人都会发现交易无效并且无法迁移到主分叉
在所有的例子中,我们展示了块生产商的循环调度。实际上,块生产商在每一个n个块中洗牌,其中n是生产者的数量。这种随机化确保块生产商B不总是忽略块生产者A,并且在任何时候有多个分支相同生产者数(联盟)的关系最终被打破。
DPOS共识机制背后的逻辑在DPoS共识算法中,选举的根本目的,是通过每个人的投票选举出社区里对项目发展和运行最有利的101个用户,这101个用户的服务器节点既可以高效维护系统的运转,而他们也会贡献自己的能力促进区块链项目的发展,这有点类似于我国的‘人民代表’制度(但是周期更短、效率更高)。通过这种方式,既达到了去中心化的选举共识,又保证了整个系统的运行效率和减少能源浪费
区块链的正常运转依赖于见证人机制(witness),这些见证人是完全等价的。见证人的职责主要有:
1、提供一台服务器节点,保证节点的正常运行;
2、节点服务器收集网络里的交易;
3、节点验证交易,把交易打包到区块;
4、节点广播区块,其他节点验证后把区块添加到自己的数据库;
5、带领并促进区块链项目的发展;
优点:
①不需要耗费能源和硬件设备;
②缩短了区块的产生时间和确认时间,提高了系统效率。
③DPOS不需要挖矿,也不需要全节点验证,而是由有限数量的见证节点进行验证,因此简单、高效。
缺点:
①DPOS被普遍质疑过于中心化;
②代理记账节点选举过程中存在巨大的人为操作空间
在系统中有一个节点会被当做主节点,而其他节点都是子节点。系统内的所有节点都会相互通信,最终目标是大家能以少数服从多数的原则达成数据的共识。
①客户端发一个请求给主节点去执行某个操作;
②主节点通信给各个子节点;
③所有节点通过算法并把结果返回给客户端;
④当客户端「收到结果」后,过程结束;
⑤收到结果时的最大容错节点数最大的容错节点数:
- 假设n 是总节点数,f 为有问题的节点,
- 问题包括两种,一种是故障节点f,一种是作恶节点f。
- 故障节点收到通信后不会返回结果,作恶节点收到通信后会返回错误的结果。在统计返回节点数时,有问题的节点f 会被排除在外,所以只要正确通信数大于作恶节点数f 即可保证本次通信正常,即f + 1 个正确节点。
- 也就是说总节点数n 包括f + 1 个正确节点,f 个作恶节点和f 个故障节点,即3f + 1 = n。
- 因此pBFT算法支持的最大容错节点数是f = (n-1)/3,
- 也就是超过1/3 的节点数即可
1、raft算法的的容错只支持容错故障节点,不支持容错作恶节点,所以容错率高,过半节点正常即可
2、PBFT算法可以容忍小于1/3个无效或者恶意节点作恶节点:
除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
角色Primary节点和普通节点,PBFT系统的Primary是轮流当选的,这和zab、raft不一样主节点p = v mod |R|
•p:主节点编号
•v:视图编号
•|R|:节点个数
作用:
1、正常工作时,接收客户端的事务请求,验证request身份后,为该请求设置编号,广播pre-prepare消息
2、新Primary当选时,根据自己收集的View-Change消息,发送View-New信息,让其它节点同步数据
3、Primary与所有的其它节点维系心跳
①如果Primary宕机,会因为心跳超时,而触发重新选举,保证系统运行稳定
②如果Primary恶意发送错误编号的消息,那么会在后续的操作中,被follower察觉,因为prepare和commit阶段都是会进行广播的,一旦不一致,view-change
③如果Primary不发送接收到的request,client在超时未回复时,会重发request到所有的replica,小弟们发现primary竟然私藏消息,view-change
④如果Primary节点篡改消息,因为有Request里面有data和client的签名,所以primary无法篡改消息,其它replica会先验证消息的合法性,否则丢弃,view-change
1、C代表客户端
2、0,1,2,3 代表节点的编号
3、打叉的3代表故障节点或者是问题节点,这里表现为故障节点
4、0 是主节点
①pre-prepare预准备,由于主节点不会发布两条内容不同的通信,则如果收到节点编号相同而内容不同的通信,子节点会选择拒绝请求。(这里是子节点通过互相通信引起的)
②prepare 准备,由于同时有n个节点接受请求进行通信,所以在一定时间范围内,如果收到超过2f 个不同节点的prepare 消息,就代表prepare 阶段已经完成。
③commit提交,和prepare同理,当收到2f+1 个commit 消息后(包括自己),代表大多数节点已经进入commit 阶段,这一阶段已经达成共识,于是节点就会执行请求,写入数据。
客户端发起请求–>转发请求到primary–>primary生成proposal–>primary广播proposal–>所有节点复制proposal并广播–>复制过半节点完成–>广播commit节点–>commit过半节点完成–>应用状态机–>反馈客户端–>客户端统计f+1个反馈消息–>交易完成。
1、Raft系统中leader拥有最高权限,follower如果和leader数据不一致,那么必须删除自己的数据,保持和leader一致。
2、PBFT中,Primary向我发送命令时,当我认为老大的命令是有问题时,我会拒绝执行。并且很有可能会触发view-change。就算我认为老大的命令是对的,我还会问下团队的其它成员老大的命令是否是对的,只有大多数人(2f+1)都认为老大的命令是对的时候,我才会去执行命令。
客户端事务请求的严格有序性
request里面包含了时间戳,request在服务端执行的时候,按照时间戳进行排序执行。而zab协议、raft协议都是按照先到先执行的有序性(服务端),但是PBFT却能按照Client的有序性。即使网络问题,先发起的请求晚于后发起的请求抵达服务端,服务端也不会打乱执行的顺序,PBFT是更严格的操作有序性。这也提高了系统的复杂度。
性能尚可
PBFT 算法通信复杂度o(n^2),因为系统在尝试达成状态共识时,涉及到N个几点都需要广播N-1个其它节点。而在没有作恶节点的zab、raft系统中,通信复杂度O(N)
区块链关键技术更新完结,下一部分是区块链的核心代表。
知链科技区块链教育。