【区块链】

文章详细介绍了区块链中的哈希函数,如何通过哈希确保数据不可篡改,以及马尔科夫树在数据验证中的作用。此外,还讨论了共识机制,如工作量证明(PoW)和权益证明(PoS),以及它们在确保区块链安全性中的角色。时间戳和Nonce也被提及作为防止篡改和重放攻击的手段。
摘要由CSDN通过智能技术生成

Hash:

每一个区块包括前一个区块的Hash,由此创建了区块链(彼此相关联,同时节省算力)

从理论上来说,每一个区块的哈希值已经包含了前面所有区块的Hash值

作用:防止篡改;

散列函数(或散列算法,又称哈希函数)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

所谓"哈希"就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。

如果一个Hash函数足够好,其输出值和随机数几乎没有任何区别。

举例来说,字符串123的哈希是(a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0)(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。

推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块

推论2:如果区块的内容变了,它的哈希一定会改变。

Hash运算一般是不可逆运算,只能由x映射到f(x),而不能逆推。

哈希是区块链技术和不可篡改和潜力的核心基础和最重要的方面。哈希维护了记录和查看数据的真实性,区块链的完整性也是这样的。

Markov思想:

马尔科夫树是区块链技术的基础,在该结构中,可以很容易地在大量数据中找出哪些数据发生了变化,整个数据验证的过程非常高效。比特币和以太坊中都使用了马尔科夫树。

有4个交易A、B、C、D。A和B哈希后会形成一个哈希值,C和D会形成另一个哈希值,AB的哈希结果和CD哈希结果会组合来形成一个新的哈希值——Root hash或Merkle RootABCD。

Root hash有所有交易的信息。马尔科夫树会重复计算节点对的哈希值,直到只剩下一个哈希值,就是Root hash。

所有交易数据会总结称一个Root hash,保存在区块头(block header)中。数据中有任何改变,整个哈希值就会变化,如果哈希值变化了,Merkle root就会发生变化。Merkle tree可以帮助维护数据的完整性。

共识机制:

如何让多个·节点提供一个被公允的结果:

共识机制非常重要,即如何把不同的节点结合起来,构成一个统一的答案。

我们将共识算法通过共识的实现分为两个大类,一类是“抽彩票中奖”共识算法,代表算法有POW, PoET, 这类算法好处在于特别能scale,因为达到共识只需要等待一个通过算法“抽中彩票”的节点出现就好了。同时这类算法也有fork的问题,也就是说如果多个节点同时抽中了“彩票”,会导致网络需要花时间来resolve fork,也就导致了用户需要等待确认,交易时间过长等问题。另外,抽彩票本身是要消耗资源的,而随着全网规模的提升,资源的消耗会越来越大。

另一类是“投票表决”共识算法,代表算法有PBFT, dPOS, Paxos等,这类算法的好处在于交易能被快速确认,但大多数算法因为需要网络中节点互相交换信息,会导致速度不够,扩展性不强等问题。具体来说,这类算法最终产生区块的只会有一个节点,所以一般不会出现fork的问题,与此对应的是,这类算法需要有机制来决定哪一个节点来产生区块。一般来说,每一次产生区块之后,下一次产生区块的节点都会不同。

除了根据共识的实现来分类,我们还可以通过对共识机制是否是拜占庭容错来进行分类。像最早的Paxos、Raft和以这两种机制为核心的Kafka等, 都不是拜占庭容错。而像PBFT,dPOS, Tendermint等,都是拜占庭容错。

一个计算机系统里除了能够容忍出现节点直接崩溃的问题,还能容忍一切其他问题(如被黑客入侵,故意不响应,电压波动导致信息错误等等),那我们就称这个系统为拜占庭容错系统。

工作量证明 && 权益证明:

用于保障区块链安全性的多种共识协议。

PoW即工作量证明,根据当时区块链网络算力得出的难易程度(前导零,所计算出来的hash开头有多少个0),将区块的属性使其拼凑成一个满足要求的hash值,(nonce值让其一直改变,从而才会计算出不同的hash),然后马上对全网进行广播打包区块,网络上的节点收到广播打包区块,会立即进行验证。网络中最快解密的区块,才会添加到帐本中,其他节点进行复制,这样就保证了整个账本的唯一性。假如节点有任何作弊行为,都会导致网络的节点验证不通过,直接丢弃打包的区块,这个区块就不会被记录到账本中,作弊的成本就白费了,因此在巨大的挖矿成本下,这样也就能是矿工自觉遵守区块链系统的共识协议,也就确保了整个系统的安全。

算力即为挖矿速度,就是计算机每秒产生hash碰撞的能力。简单说我们手里的矿机每秒能做多少次hash碰撞就是算力。

(去集中化,保证了信息的安全,但浪费了大量的算力)

PoS:权益证明。其设计理念是区块记账权的抉择是根据不同节点的股份和占有时间来进行随机选择的。它解决了比特币随着矿工积极性的下降从而使矿工人数的减少,造成的整个网络可能陷入瘫痪的问题,也增加了安全性,因为破环成本不光是51%的算例,而且还需要51%的持有量。

使用PoW执行分配记账权的方式,可以实现相对的公平,也就是说,你挖矿的有效贡献多少,决定着你获得到的币有多少。也就是如果节点有欺骗的意图,它所携带的信息量越大,也代表着其挖矿成本越大,这样会保证含有大信息量的区块节点被丢弃的概率大大降低,然而这种方式不利于去中心化,无法像PoS一样在短时间内让大量节点收获足够多的成本低的货币。

PoS比PoW的去中心化程度更好。

时间戳:

Df:一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间

一般来说,时间戳产生的过程为:用户首先将需要加时间的文件用Hash编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。

客户端在向服务端接口进行请求,如果请求信息进行了加密处理,被第三方截取到请求包,可以使用该请求包进行重复请求操作。如果服务端不进行防重放攻击,就会服务器压力增大,而使用时间戳的方式可以解决这一问题。

防篡改:

一般使用的方式就是把参数拼接,当前项目AppKey,双方约定的“密钥”,加入到Dictionary字典集中,按ABCD顺序进行排序,最后在MD5+加密.客户端将加密字符串和请求参数一起发送给服务器。服务器按照上述规则拼接加密后,与传入过来的加密字符串比较是否相等

Nonce:

Nonce是一个只被使用一次的任意或非重复的随机数值。

在摘要认证中服务器让客户选一个随机数(称作”nonce“),然后浏览器使用一个单向的加密函数生成一个消息摘要(message digest),该摘要是关于用户名、密码、给定的nonce值、HTTP方法,以及所请求的URL。

nonce的生成:

  • nonce 可以是一个时间相关变量,

  • nonce 可以是一个通过足够随机算法生成的足够长的 bits。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值