区块链是一种数字账本,是由一个个区块按时序组成的一串链条。一个区块包含两个部分:区块头(BlockHeader)和交易信息部分。区块记录的所有交易通过默克尔树(MerkleTree)组织起来,默克尔树根(Root)的哈希值作为本区块里所有交易的信息被放入区块头。区块头还包含以下字段:前一个区块头的哈希值(或称哈希指针)、本区块的时间戳、高度(从第一个区块开始数,本区块是第几个块)以及其他信息。
在区块链系统开展的分布式协同作业,是众多互不相识的参与者一起对区块的账本信息进行验证、确认和达成共识,形成统一的交易账本。新的区块在经过系统共识验证后被添加到区块链上。由于任何输入端的细微变化都会对哈希函数的输出结果产生较大影响,再加上哈希指针的设计,区块链被认定为是难以篡改的。
比如,若有人尝试改写1号区块里的数据,那么存储在2号区块里的1号区块的哈希值将会产生巨大的变化,从而导致2号区块的哈希值随之发生变化,接着又影响存储在3号区块的2号区块的哈希值,以此类推,后续的所有区块数据都会发生变化。
所以说,想改动一个区块,必须同时改动该区块后面的所有区块。而对任何一个区块的改动,均须获得共识,这就使得更改一条记录的困难程度按时间的指数倍增加,时间越早的记录越难更改。因此,意图修改一整条已获得系统共识的区块链数据几乎不可能做到。
而攻击主要发生在对新增区块进行验证和共识的过程中,最典型的方式是攻击者从某个区块开始构造一条秘密的区块链,当秘密构造的区块链比当前公开的区块链更长时,将其公开,其他节点将会视其为“正确”的链条,在该链条上继续工作和延长它,使被攻击区块包含的交易被撤销,制造“双花攻击”,从而破坏系统参与者原来达成的共识。
如何在“无组织”的群体中形成共识即是经典的“拜占庭将军问题”:在一个一致意见具有绝对必要性的系统里,如何在缺乏信任机制的情况下,通过一个可信的方法,将一个一致意见同步给所有人?或者说,诚实者如何战胜破坏者,形成一个多数一致的、可信的意见?
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。