摘要:区块链防止sybil攻击身份认证:区块链技术可以用来防止Sybil攻击,它可以确保参与者的身份是真实可靠的。通过对参与者进行身份认证,可以确保参与者的身份是真实...
区块链防止sybil攻击
身份认证:区块链技术可以用来防止Sybil攻击,它可以确保参与者的身份是真实可靠的。通过对参与者进行身份认证,可以确保参与者的身份是真实可靠的,从而防止Sybil攻击的发生。
去中心化:区块链的去中心化特性也可以有效防止Sybil攻击。去中心化的特性使得攻击者无法控制网络中的大部分节点,从而避免了Sybil攻击的发生。
数据加密:区块链技术还可以通过数据加密来防止Sybil攻击的发生。区块链技术可以使用加密技术来保护数据,使得攻击者无法获取数据,从而防止Sybil攻击的发生。
㈠ 区块链如何保证使用安全
区块链项目(尤其是公有链)的一个特点是开源。通过开放源代码,来提高项目的可信性,也使更多的人可以参与进来。但源代码的开放也使得攻击者对于区块链系统的攻击变得更加容易。近两年就发生多起黑客攻击事件,近日就有匿名币Verge(XVG)再次遭到攻击,攻击者锁定了XVG代码中的某个漏洞,该漏洞允许恶意矿工在区块上添加虚假的时间戳,随后快速挖出新块,短短的几个小时内谋取了近价值175万美元的数字货币。虽然随后攻击就被成功制止,然而没人能够保证未来攻击者是否会再次出击。
当然,区块链开发者们也可以采取一些措施
一是使用专业的代码审计服务,
二是了解安全编码规范,防患于未然。
密码算法的安全性
随着量子计算机的发展将会给现在使用的密码体系带来重大的安全威胁。区块链主要依赖椭圆曲线公钥加密算法生成数字签名来安全地交易,目前最常用的ECDSA、RSA、DSA 等在理论上都不能承受量子攻击,将会存在较大的风险,越来越多的研究人员开始关注能够抵抗量子攻击的密码算法。
当然,除了改变算法,还有一个方法可以提升一定的安全性:
参考比特币对于公钥地址的处理方式,降低公钥泄露所带来的潜在的风险。作为用户,尤其是比特币用户,每次交易后的余额都采用新的地址进行存储,确保有比特币资金存储的地址的公钥不外泄。
共识机制的安全性
当前的共识机制有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、授权权益证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。
PoW 面临51%攻击问题。由于PoW 依赖于算力,当攻击者具备算力优势时,找到新的区块的概率将会大于其他节点,这时其具备了撤销已经发生的交易的能力。需要说明的是,即便在这种情况下,攻击者也只能修改自己的交易而不能修改其他用户的交易(攻击者没有其他用户的私钥)。
在PoS 中,攻击者在持有超过51%的Token 量时才能够攻击成功,这相对于PoW 中的51%算力来说,更加困难。
在PBFT 中,恶意节点小于总节点的1/3 时系统是安全的。总的来说,任何共识机制都有其成立的条件,作为攻击者,还需要考虑的是,一旦攻击成功,将会造成该系统的价值归零,这时攻击者除了破坏之外,并没有得到其他有价值的回报。
对于区块链项目的设计者而言,应该了解清楚各个共识机制的优劣,从而选择出合适的共识机制或者根据场景需要,设计新的共识机制。
智能合约的安全性
智能合约具备运行成本低、人为干预风险小等优势,但如果智能合约的设计存在问题,将有可能带来较大的损失。2016 年6 月,以太坊最大众筹项目The DAO 被攻击,黑客获得超过350 万个以太币,后来导致以太坊分叉为ETH 和ETC。
对此提出的措施有两个方面:
一是对智能合约进行安全审计,
二是遵循智能合约安全开发原则。
智能合约的安全开发原则有:对可能的错误有所准备,确保代码能够正确的处理出现的bug 和漏洞;谨慎发布智能合约,做好功能测试与安全测试,充分考虑边界;保持智能合约的简洁;关注区块链威胁情报,并及时检查更新;清楚区块链的特性,如谨慎调用外部合约等。
数字钱包的安全性
数字钱包主要存在三方面的安全隐患:第一,设计缺陷。2014 年底,某签报因一个严重的随机数问题(R 值重复)造成用户丢失数百枚数字资产。第二,数字钱包中包含恶意代码。第三,电脑、手机丢失或损坏导致的丢失资产。
应对措施主要有四个方面:
一是确保私钥的随机性;
二是在软件安装前进行散列值校验,确保数字钱包软件没有被篡改过;
三是使用冷钱包;
四是对私钥进行备份。
㈡ 九种常见的攻击区块链的方式
九种常见的攻击区块链的方式,很多人都知道区块链这个东西,也都知道区块链是会被人攻击的,很多人不知道有哪链腊些可以攻击区块链的方式,下面跟着小编一起来看看吧,希望能帮到你。
九种常见的攻击区块链的方式
1、日蚀攻击-一个节点将选择“x”个节点作为访问区块链的基础,该节点从这“x”个节点获取区块链的数据。
如果攻击者可以使得此节点选择的“x”个节点都为攻击者可控制的节点,就可以使得被攻击节点处在一个“孤立”的状态。被攻击节点将从主网中被隔离出来,完全由攻击者控制。
2、女巫攻击-这里的“女巫”并不是指拥有魔法的女人,而是出自一部美国电影《Sybil》,剧中的主人公拥有16重人棚亮滑格,扮演着16个不键好同的角色。而女巫攻击就是指同一节点伪装成不同节点发起的一种攻击。
攻击者通过伪造的身份,使少量节点伪装成大量节点,进而影响整个网络。攻击者可能利用女巫攻击进行双花、实现51%攻击等,并且要实施日蚀攻击,一般都会先进行女巫攻击。
3、异形攻击-异形攻击又称为“地址污染”。
当不同公链使用兼容的握手协议时,我们称这些公链为同类链。攻击者将同类链的节点数据加入被攻击的公链节点中,当被攻击的公链节点进行通信并互换地址池时,就会污染其他正常节点的地址池,并持续污染整个公链网络,导致公链通信性能下降,最终造成节点阻塞等现象。
4、自私挖矿_区块链的共识机制决定着节点会认同最长链才是真实有效的。攻击者可以在当前最新区块上持续挖矿但不进行广播,从而隐藏自己挖出的区块。
当攻击者节点隐藏的区块长于已在链上的公布的最长区块时再进行广播,从而成为最长链,使得原先的最长链进行回滚,从而实现双花等攻击。
5、挖矿木马_攻击者通过上传恶意程序到公开网络或者制作蠕虫病毒等方式将挖矿程序传播到他人计算机上。
利用他人计算机资源和电力进行挖矿,获取挖矿利益。被攻击的计算机会消耗大量的资源,导致电脑卡顿,使用寿命减短。
6、51%算力攻击_51%算力攻击是区块链最著名的攻击方式之一。
在一个POW共识的区块链网络中,算力即是权力。当超过50%的算力都由一人控制时,此人就可以任意的撤销和阻止交易,进而实现双花。
7、时间劫持攻击_一个节点是通过其他节点时间的中位值来确定时间的。
如果攻击者将一个恶意的节点列表置入被攻击节点的对等节点列表中,就可以控制此节点的时间,例如通过日蚀攻击。
8、芬尼攻击_如果攻击者可以隐藏一个包含自己交易的区块,就可能实现一笔双花。
当一个交易所或其他机构接受0确认的交易时,攻击者可以向其进行转账,花费其隐藏区块中已经花费的资金,在新交易的区块广播前,将隐藏的区块广播。
因为所隐藏的区块时间更早,所以在后面进行的花费将被回滚,从而实现双花。
9、种族攻击_此类型攻击是“芬尼攻击”的分支,攻击者将同时进行两笔交易,花费同一笔资金,一笔转给支持0确认的商家进行提现;一笔转账给自己,并给予更高的gas。
节点会优先处理gas更高的交易,所以后一笔交易将不会被执行。通常攻击者会连入与被攻击商家较近的节点进行操作,使得商家优先收到最终不被执行的交易。
㈢ 拜占庭问题与共识算法
“拜占庭将军问题”(Byzantine Generals Problem)是一个经典难题,这个难题是这样描述的:拜占庭是东罗马帝国的首都,它的军队分成多个师,每个师都由一个将军统领。这些将军通过信使进行交流,来达成一个共同作战方案,有些将军可能是叛徒,想故意破坏这个过程,这会造成那些忠诚的将军也无法达成一个统一的作战计划。这个难题在于如何让那些忠诚的将军在这样的情况下达成统一作战方案,而避免那些叛徒对作战方案的误导。
在点对点、分布式的区块链中,常常用拜占庭问题来比喻节点如何达成共识的问题。将军即对应着一个个节点,达成统一作战方案即达成共识,正确的打包与验证区块数据,防止恶意节点(叛徒将军)破坏区块链的运行。
顾名思义,就是能够解决拜占庭问题,使各个节点达成共识,解决共识问题的各种机制也被称为共识算法。在各种各样的共识算法中,又一直存在一个「不可能三角」的难题,这三角是指“安全性”、“去中心化”和“速度”,也就是说难以同时保证速度、安全性和去中心化程度,三者之间往往会顾此失彼。
现在各种共识算法算起来有好几十种,计算机界也一直处于研究阶段,并没有说哪种算法已经完美。
下面盘点一下讲解pBET和POW两种算法,以及它们的“安全性”、“去中心化”和“速度”如何。
实用拜占庭容错是一种较早的共识算法。pBFT的一个原则,就是少数服从多数。节点通过在相互传递有关决策的消息,谁的决策赞同的人数多,就采用谁的。所以在这个系统中,安全性随着诚实节点的数量而增加。诚实节点同意正确的决策,拒绝恶意节点的错误决策,只要恶意节点的数量少于总数的1/3,就能保证达成共识。
达成共识可以简化为四步:
pBFT 使用投票机制以循环方式选举领导节点。
领导者发起决策并将其广播给辅助节点。
所有节点,包括领导节点和辅助节点,都发送响应。
当 ⅔ + 1 个节点发送相同的响应时,该响应被认为是有效的。
如果领导者有恶意行为,它可以被大多数节点删除。
按少数服从多数的原则。那按理来说,只要恶意节点的数量少于1/2就够了啊,那么为什么PBFT算法的容错数量要满足恶意节点的数量少于总数的1/3呢?
因为 PBFT 算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为 N,有问题的节点为 f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
(1)这f 个有问题节点既是故障节点,又是作恶节点,那么根据少数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识,即总节点数为f+(f+1)=n,也就是说这种情况支持的最大容错节点数量是 (n-1)/2。
(2)故障节点和作恶节点都是不同的节点。那么就会有 f 个作恶节点和 f 个故障节点,当发现节点是作恶节点后,会被集群排除在外,剩下 f 个故障节点,那么根据少数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是 f+1 个正常节点,f个故障节点和f个作恶节点,即 3f+1=n。
结合上述两种情况,因此PBFT算法支持的最大容错节点数量是(n-1)/3,即少于1/3。
pBFT的优缺点
pBFT 系统不需要高计算资源或大量能源来运行。pBFT 在节点少的时候可以快速达成共识,因为所有节点都在不断地相互通信。一旦节点就决策达成一致,交易就完成了。
然而,pBFT的缺点也很明显:频繁的通信使它只能在节点数量有限的网络中正常工作。随着每个新节点加入网络,通信开销呈指数增长,响应所需的时间也随之增加。
pBFT 网络也容易受到女巫(Sybil)攻击,女巫就是恶意黑客制造的不同节点,黑客可以控制多个节点,使其超过1/3,那系统将无法达成正确的共识。
从不可能三角的角度来看,由此可见pBFT在节点少的时候速度快,但安全性差,去中心化低;节点多了又会导致速度很慢。
中本聪设计了POW共识机制来解决上面pBFT这个经典共识的可扩展性问题。
上面说到,pBFT通过不断广播然后计算节点的消息数,时间花费过长。POW是怎么做的:我不要计算节点数是否超过2/3,我直接选一个节点,按它的决策,其他节点全部同步它的决策。这样就省去在全节点通信然后计算节点数的费时操作。
那么,对于哪个节点来打包区块,那就很重要,万一是恶意节点呢?必须对打包的节点进行要求,哪个节点有权力进行打包呢?那就是解决复杂的数学问题,俗称挖kuang。节点必须花费大量算力和电费来争取某次打包区块的权力。这样的成本就限制了黑客的女巫攻击。
如果打包区块的权力真的被黑客抢到了,那可能会有什么问题?
(1)窃取冰糖橙
黑客能够窃取属于另一个用户,不受她控制的地址里的冰糖橙吗?答案是否定的。即使这一轮是由黑客打包区块链上的下一个区块,她也不可能窃取别人的比特币。这么做的话,黑客需要发起一笔有效的交易来转移比特币到自己的地址。这就要求黑客伪造比特币拥有者的签名,然而如果数字签名机制是安全的,她是无法办到的。只要背后的密码学基础是牢靠的,她就无法轻易窃取比特币。
(2)拒绝服务攻击
让我们来考虑另一种攻击。假设黑客不喜欢叫鲍勃的某个用户,黑客可以决定她不把鲍勃发起的任何交易放进她所提议的区块里。换言之,她拒绝提供服务给鲍勃。尽管这是黑客可以开展的有效的攻击,但幸好这不过是个小问题。如果鲍勃的交易没有被放进黑客所打包的下一个区块,鲍勃只要等到下一个诚实节点发起区块的时候,他的交易记录就会被放进这个区块里。所以这其实也不算是一个有效的攻击。
也就是说,黑客花费重大成本取得的打包,但并不能起到有效的攻击。由于对恶意节点进行惩罚、对诚实节点进行奖励这样的机制下,共识就达成了。
尽管有所改进,POW也引入了其他问题。工作量证明需要所有节点解决复杂的数学问题,这会消耗大量的能源,就是大家所熟知的挖kuang耗费电力。并且解决复杂的数学问题的时间也要求不短,10分钟左右。
从不可能三角的角度来看,POW去中心化高,安全性高,但速度还是慢,但至少已经不会像pBFT那样由于节点多导致花费时间呈指数增长。
共识算法各式各样,冰糖橙的POW并不是真正去解决分布式共识问题,它不能完美的套用到其他场景。但它在货币系统的这个特定场景下解决了冰糖橙的共识问题。POW在冰糖橙里运行得非常好。
㈣ 区块链安全性主要通过什么来保证
区块链技术是一种分布式记录技术,它通过对数据进行加密和分布式存储,来保证数据的安全性和可靠性。
主要通过以下几种方式来保证区块链的安全性:
1.加密技术:区块链采用的是对称加密和非对称加密算法,可以有效保护数据的安全。
2.分布式存储:区块链的数据不是集中存储在单一节点上,而是分散存储在网络中的各个节点上,这有效防止了数据的篡改和丢失。
3.共识机制:区块链通常采用共识机制来确认交易的合法性,这有助于防止恶意交易的发生。
4.合约机制:区块链可以通过智能合约来自动执行交易,这有助于防止操纵交易的发生。
区块链技术在实现安全性的同时,也带来了一些挑战。例如,区块链的安全性可能受到漏洞的攻击,或者因为私钥泄露而导致资产被盗。因此,在使用区块链技术时,还需要注意身份认证、密码安全等方面的问题,以确保区块链的安全性。
此外,区块链技术的安全性也可能受到政策、法规等方面的影响。例如,在某些国家和地区,区块链技术可能会受到审查和限制,这也可能会对区块链的安全性产生影响。
总的来说,区块链技术的安全性主要通过加密技术、分布式存储、共识机制和合约机制等方式来保证,但是还需要注意其他方面的挑战和影响因素。
㈤ 共识机制评价标准
区块链上采用不同的共识机制,在满足一致性和有效性的同时会对系统整体性能产生不同影响。综合考虑各个共识机制的特点,从以下4个维度评价各共识机制的技术水平:
1)安全性。即是否可以防止二次支付、自私挖矿等攻击,是否有良好的容错能力。以金融交易为驱动的区块链系统在实现一游姿态致性的过程中,最主要的安全问题就是如何防止和检测二次支付行为。自私挖矿通过采用适当的策略发布自己产生的区块,获得更高的相对收益,是一种威胁比特币系统安全性和公平性的理论攻击方法。此外,Eclipse攻击控制目标对象的网络通信,形成网络分区,阻隔交易传播。Sybil攻击通过生产大量无意义的节点影响系统安全性。
2)神源扩展性。即是否支持网络节点扩展。扩展性是区块链设计要考虑的关键因素之一。根据对象不同,扩展性又分为系统成员册散数量的增加和待确认交易数量的增加两部分。扩展性主要考虑当系统成员数量、待确认交易数量增加时,随之带来的系统负载和网络通信量的变化,通常以网络吞吐量来衡量。
3)性能效率。即从交易达成共识被记录在区块链中至被最终确认的时间延迟,也可以理解为系统每秒可处理确认的交易数量。与传统第三方支持的交易平台不同,区块链技术通过共识机制达成一致,因此其性能效率问题一直是研究的关注点。比特币系统每秒最多处理7笔交易,远远无法支持现有的业务量。
4)资源消耗。即在达成共识的过程中,系统所要耗费的计算资源大小,包括CPU、内存等。区块链上的共识机制借助计算资源或者网络通信资源达成共识。以比特币系统为例,基于工作量证明机制的共识需要消耗大量计算资源进行挖矶提供信任证明完成共识。
㈥ 区块链的安全法则
区块链的安全法则,即第一法则:
存储即所有
一个人的财产归属及安全性,从根本上来说取决于财产的存储方式及定义权。在互联网世界里,海量的用户数据存储在平台方的服务器上,所以,这些数据的所有权至今都是个迷,一如你我的社交ID归谁,难有定论,但用户数据资产却推高了平台的市值,而作为用户,并未享受到市值红利。区块链世界使得存储介质和方式的变化,让资产的所有权交付给了个体。
拓展资料
区块链系统面临的风险不仅来自外部实体的攻击,也可能有来自内 部参与者的攻击,以及组件的失效,如软件故障。因此在实施之前,需 要制定风险模型,认清特殊的安全需求,以确保对风险和应对方案的准 确把握。
1. 区块链技术特有的安全特性
● (1) 写入数据的安全性
在共识机制的作用下,只有当全网大部分节点(或多个关键节点)都 同时认为这个记录正确时,记录的真实性才能得到全网认可,记录数据才 允许被写入区块中。
● (2) 读取数据的安全性
区块链没有固有的信息读取安全限制,但可以在一定程度上控制信 息读取,比如把区块链上某些元素加密,之后把密钥交给相关参与者。同时,复杂的共识协议确保系统中的任何人看到的账本都是一样的,这是防 止双重支付的重要手段。
● (3) 分布式拒绝服务(DDOS)
攻击抵抗 区块链的分布式架构赋予其点对点、多冗余特性,不存在单点失效的问题,因此其应对拒绝服务攻击的方式比中心化系统要灵活得多。即使一个节点失效,其他节点不受影响,与失效节点连接的用户无法连入系统, 除非有支持他们连入其他节点的机制。
2. 区块链技术面临的安全挑战与应对策略
● (1) 网络公开不设防
对公有链网络而言,所有数据都在公网上传输,所有加入网络的节点 可以无障碍地连接其他节点和接受其他节点的连接,在网络层没有做身份验证以及其他防护。针对该类风险的应对策略是要求更高的私密性并谨慎控制网络连接。对安全性较高的行业,如金融行业,宜采用专线接入区块链网络,对接入的连接进行身份验证,排除未经授权的节点接入以免数据泄漏,并通过协议栈级别的防火墙安全防护,防止网络攻击。
● (2) 隐私
公有链上交易数据全网可见,公众可以跟踪这些交易,任何人可以通过观察区块链得出关于某事的结论,不利于个人或机构的合法隐私保护。 针对该类风险的应对策略是:
第一,由认证机构代理用户在区块链上进行 交易,用户资料和个人行为不进入区块链。
第二,不采用全网广播方式, 而是将交易数据的传输限制在正在进行相关交易的节点之间。
第三,对用 户数据的访问采用权限控制,持有密钥的访问者才能解密和访问数据。
第四,采用例如“零知识证明”等隐私保护算法,规避隐私暴露。
● (3) 算力
使用工作量证明型的区块链解决方案,都面临51%算力攻击问题。随 着算力的逐渐集中,客观上确实存在有掌握超过50%算力的组织出现的可 能,在不经改进的情况下,不排除逐渐演变成弱肉强食的丛林法则。针对 该类风险的应对策略是采用算法和现实约束相结合的方式,例如用资产抵 押、法律和监管手段等进行联合管控。
㈦ 区块链科普指南:什么是51%攻击
在加密世界中,当一个人或一群人控制了50% + 1的网络单元时,就会发生51% 的攻击。没有人说50% + 1单位,所以简称为51%攻击。
当一个团队设法控制链接到一个特定区块链的网络的大部分,它被认为对它有绝对的权力控制整个区块链,这意味着交易的完整性和安全性不能再得到保证。
区块链如何抵御51% 的攻击?
加密货币有不同的方式可以保护自己免受51% 的攻击。毫无疑问,最为人所知的是,全球拥有庞大的矿商网络,其中包括数万甚至数十万人,这使得控制这一网络极为昂贵。
在这种情况下,区块链通常是自动保护的,因为接管加密货币所需的资源要重要得多,而且一旦网络得到控制,攻击不一定涵盖费用。
不需要太多的细节,我们只想说,可以添加额外的安全机制,目的是使这种攻击不可能发生。这可以通过使用一个具有多个控件的系统来实现,这有时会将这种攻击的需求从计算能力的51% 提高到75% 、90% ,有时甚至是99% 。
在其他情况下,一些区块链已经选择授权交易验证的有信誉的集中参与者,以避免这种攻击。然而,一些纯粹主义者不喜欢这个想法,因为它违背了区块链的宗旨,即分散交易。
我们真的应该担心51% 的攻击吗?
比特币自诞生以来从未遭受过51% 的攻击,也不太可能遭受这样的攻击。这个网络如此庞大,以至于做这件事的成本会高得惊人。
此外,当一个区块链正在经历一个51% 的攻击变得清晰时,几乎可以肯定的是,所有令牌持有者将决定立即出售他们的资产,这将导致资产的价值损失。所以,从数学上来说,一群人试图控制一种加密货币是没有多大意义的。
为了了解实施51% 攻击所需的资源,有一个不错的小网站叫做 Crypto51,它可以让你找出实施这种攻击所需的散列速率和每小时的美元成本。
对51%攻击的结论
我们希望您现在有一个更好的理解的概念,51% 的攻击和他们如何工作。正如你所看到的,他们需要巨大的资源,可能仍然不值得麻烦。
51% 的攻击,理论上,是工作证明(PoW)系统的一个主要问题。然而,在实践中,一旦一个区块链已经足够发达,风险接近于零。
对于新的或小盘数字货币,再一次,没有真正的利益为黑客进行这样的攻击,因为加密货币的价格可以下降到0非常快,防止该组收获经济利益。
㈧ 共识算法系列之一:私链的raft算法和联盟链的 pbft 算法
对数据顺序达成一致共识是很多共识算法要解决的本质问题
Fabic的pbft算法实现
现阶段的共识算法主要可以分成三大类:公链,联盟链和私链
私链,所有节点可信
联盟链,存在对等的不信任节点
私链:私链的共识算法即区块链这个概念还没普及时的传统分布式系统里的共识算法,比如 zookeeper 的 zab 协议,就是类 paxos 算法的一种。私链的适用环境一般是不考虑集群中存在作恶节点,只考虑因为系统或者网络原因导致的故障节点。
联盟链:联盟链中,经典的代表项目是 Hyperledger 组织下的 Fabric 项目, Fabric0.6 版本使用的就是 pbft 算法。联盟链的适用环境除了需要考虑集群中存在故障节点,还需要考虑集群中存在作恶节点。对于联盟链,每个新加入的节点都是需要验证和审核的。
公链:公链不仅需要考虑网络中存在故障节点,还需要考虑作恶节点,这一点和联盟链是类似的。和联盟链最大的区别就是,公链中的节点可以很自由的加入或者退出,不需要严格的验证和审核。
在公有链中用的最多的是pow算法和pos算法,这些算法都是参与者的利益直接相关,通过利益来制约节点诚实的工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机副本复制算法,通过节点间的多轮消息传递,网络内的所有诚实节点就可以达成一致的共识。
使用拜占庭容错算法不需要发行加密货币,但是只能用于私有链或者联盟链,需要对节点的加入进行权限控制;不能用于公有链,因为公有链中所有节点都可以随意加入退出,无法抵挡女巫攻击(sybil attack)
raft 算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。
raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft 算法支持最大的容错故障节点是(N-1)/2,其中 N 为 集群中总的节点数量。
国外有一个动画介绍raft算法介绍的很透彻,链接地址为: http://thesecretlivesofdata.com/raft/ 。这个动画主要包含三部分内容,第一部分介绍简单版的领导者选举和日志复制的过程,第二部分内容介绍详细版的领导者选举和日志复制的过程,第三部分内容介绍的是如果遇到网络分区(脑裂),raft 算法是如何恢复网络一致的。
pbft 算法的提出主要是为了解决拜占庭将军问题
要让这个问题有解,有一个 十分重要的前提 ,那就是 信道必须是可靠的 。如果信道不能保证可靠,那么拜占庭问题无解。关于信道可靠问题,会引出两军问题。两军问题的结论是,在一个不可靠的通信链路上试图通过通信以达成一致是基本不可能或者十分困难的。
拜占庭将军问题最早是由 Leslie Lamport 与另外两人在 1982 年发表的论文《The Byzantine Generals Problem 》提出的, 他证明了在将军总数大于 3f ,背叛者为f 或者更少时,忠诚的将军可以达成命令上的一致,即 3f+1<=n 。算法复杂度为 o(n^(f+1)) 。而 Miguel Castro (卡斯特罗)和 Barbara Liskov (利斯科夫)在1999年发表的论文《 Practical Byzantine Fault Tolerance 》中首次提出 pbft 算法,该算法容错数量也满足 3f+1<=n ,算法复杂度为 o(n^2)。
首先我们先来思考一个问题,为什么 pbft 算法的最大容错节点数量是(n-1)/3,而 raft 算法的最大容错节点数量是(n-1)/2 ?
对于raft算法,raft算法的的容错只支持容错故障节点,不支持容错作恶节点。什么是故障节点呢?就是节点因为系统繁忙、宕机或者网络问题等其它异常情况导致的无响应,出现这种情况的节点就是故障节点。那什么是作恶节点呢?作恶节点除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
raft 算法只支持容错故障节点,假设集群总节点数为n,故障节点为 f ,根据小数服从多数的原则,集群里正常节点只需要比 f 个节点再多一个节点,即 f+1 个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识。因此 raft 算法支持的最大容错节点数量是(n-1)/2。
对于 pbft 算法,因为 pbft 算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为 N,有问题的节点为 f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
第一种情况,f 个有问题节点既是故障节点,又是作恶节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。也就是说这种情况支持的最大容错节点数量是 (n-1)/2。
第二种情况,故障节点和作恶节点都是不同的节点。那么就会有 f 个问题节点和 f 个故障节点,当发现节点是问题节点后,会被集群排除在外,剩下 f 个故障节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是 f+1 个正确节点,f个故障节点和f个问题节点,即 3f+1=n。
结合上述两种情况,因此 pbft 算法支持的最大容错节点数量是(n-1)/3
pbft 算法的基本流程主要有以下四步:
客户端发送请求给主节点
主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
节点处理完三阶段流程后,返回消息给客户端。
客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。
为什么收到 f+1 个节点的相同消息后就代表共识已经正确完成?从上一小节的推导里可知,无论是最好的情况还是最坏的情况,如果客户端收到 f+1 个节点的相同消息,那么就代表有足够多的正确节点已全部达成共识并处理完毕了。
3.算法核心三阶段流程
算法的核心三个阶段分别是 pre-prepare 阶段(预准备阶段),prepare 阶段(准备阶段), commit 阶段(提交阶段)
流程的对比上,对于 leader 选举这块, raft 算法本质是谁快谁当选,而 pbft 算法是按编号依次轮流做主节点。对于共识过程和重选 leader 机制这块,为了更形象的描述这两个算法,接下来会把 raft 和 pbft 的共识过程比喻成一个团队是如何执行命令的过程,从这个角度去理解 raft 算法和 pbft 的区别。
一个团队一定会有一个老大和普通成员。对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行。那什么时候重新老大呢?只有当老大挂了才重选老大,不然生是老大的人,死是老大的鬼。
对于 pbft 算法,共识过程就是:老大向我发送命令时,当我认为老大的命令是有问题时,我会拒绝执行。就算我认为老大的命令是对的,我还会问下团队的其它成员老大的命令是否是对的,只有大多数人 (2f+1) 都认为老大的命令是对的时候,我才会去执行命令。那什么时候重选老大呢?老大挂了当然要重选,如果大多数人都认为老大不称职或者有问题时,我们也会重新选择老大。
四、结语
raft 算法和 pbft 算法是私链和联盟链中经典的共识算法,本文主要介绍了 raft 和 pbft 算法的流程和区别。 raft 和 pbft 算法有两点根本区别:
raft 算法从节点不会拒绝主节点的请求,而 pbft 算法从节点在某些情况下会拒绝主节点的请求 ;
raft 算法只能容错故障节点,并且最大容错节点数为 (n-1)/2 ,而 pbft 算法能容错故障节点和作恶节点,最大容错节点数为 (n-1)/3 。
pbft算法是通过投票来达成共识,可以很好的解决包括分叉等问题的同时提升效率。但仅仅比较适合于联盟链私有链,因为两两节点之间通信量是O(n^2)(通过优化可以减少通信量),一般来说不能应用于超过100个节点。
pbft有解的前提是 信道必须是可靠的 ,存在的问题是 可扩展性(scalability)差
部分来自: https://blog.csdn.net/kojhliang/article/details/80270223
区块链在设计上就是为了BFT
㈨ 区块链中女巫攻击问题
何为女巫攻击?
解释一: 大规模的p2p系统面临着有问题的和敌对的节点的威胁,为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制橘虚核系统的很大一部分,破坏了系统的冗余策略。我们把这种模仿多个身份的攻击定义为女巫攻击(Sybil Attack)。
解释二: 女巫攻击是在P2P网络中,因为节点随时加入退出等圆掘原因,为了维持网络稳定,同一份数据通常需要备份到多个分布式节点上,这就是 数据冗余机制 。 女巫攻击是攻击数据冗余机制的一种有效手段。誉锋 如果网络中存在一个恶意节点,那么同一个恶意节点可以具有多重身份,就如电影里的女主角都可以分裂出16个身份,那么恶意节点比它还能分。这样,原来需要备份到多个节点的数据被欺骗地备份到了同一个恶意节点(该恶意节点伪装成多重身份),这就是女巫攻击。
总而言之就是 分身诈骗术
如何解决这种攻击?
1.干活 你即便分身千千万,唯有真心能干活。分心是虚幻的,没有力气,pow证明。
2.发身份证 可靠第三方公安局给你发身份证,没有身份证都是分身妖怪(根据某一个可靠的第三方进行身份验证)
3.熟人社会 你迁户口到一个新的村子里,必须得到村子里,大部分人的认证,这就是中国传统社会的身份认证方法。群众的眼睛就是火眼金睛,照出一切妖魔鬼怪。(新加入的节点都需要获得当前网络中所有可靠节点的认证,这种方法采用了随机密钥分发验证的公钥体系的认证方式,需要获得网络中大多数节点的认证才能加入)
㈩ 在公链项目早期,为什么PoW是一个更好选择
在传统的互联网公司或金融机构中,如果一家公司,在一年之内,被委托的交易结算的总量为万亿美元的话,这家公司要么拥有可靠的技术和雄厚的资本,要么就是其它大公司及政府为其信用来做背书。而比特币却在没有政府或公司背书的情况下,在过去一年内支持了相当于一万亿美元的交易。这是因为比特币的工作量证明(PoW)机制确保了全世界的比特币矿工以点对点的方式去分布式地维护账本,且保证了其正确性和不可篡改性。
实际上,PoW 协议并不完美,它在运行过程中需要消耗大量的能量来计算哈希函数的结果,以保护区块链系统不被攻击。很多人认为这是一种“无用的能源消耗”。为了避免这种消耗,股权证明协议(PoS)便作为替代方案被提出。包括以太坊在内的几个著名的项目也开始探索股权证明协议(PoS), 甚至有人认为,PoS协议在未来将完全取代PoW协议。
但是,在对PoS 协议进行了深入的技术剖析之后,我们会发现:在一个公链项目的早期阶段,PoS 协议会带来很多问题,而这些问题在PoW协议下是可以避免。首先,使用PoS协议启动主网的公链项目,会不可避免地存在共识中心化的问题,因为主网上线的时候股权分布往往是相对集中的。此外,纯 PoS 协议还面临着远程攻击(Long Range attack)的威胁。最严重的远程攻击会导致新加入的节点必须信任一些中心化的网站给出的信息,而这会导致 PoS 公链成为一个本质上中心化的网络。去使用PoW协议启动主网的区块链则可以实现分散的共识,从而避免这些问题。当PoW公链经过一段时间的发展,股权分布相对分散以后,还可以选择PoW/PoS复合机制。
除此之外,还有一点值得注意的是,很多人误以为比特币的扩容问题是PoW机制的局限性造成的。我们经常在媒体网站或白皮书中看到这样的句子,“比特币因为使用了PoW机制,所以只能处理每秒3-7笔交易”。而事实上,经过适当的设计,例如,GHOST, Conflux 这样的PoW算法可以显著提高出块效率,达到每秒处理数千笔交易,且每笔交易都能得到全网节点的验证。
PoW v.s. PoS:如何确定投票权
关于PoW和PoS之间的主要区别,就是在于如何确定区块链共识中的投票权。 在PoW中,系统中的投票权与节点的计算能力成正比。每秒可以计算哈希函数次数越多,节点就越有可能赢得区块链中下一个区块的出块权。而在PoS中,系统的投票权与持有的股权比例成正比。节点拥有资金越多,能为确定的下一个区块投的票数就越多。
在公链早期阶段,股权中心化将导致共识中心化
对于一个公有链来说,其上线初期往往是股权最集中的时候。在主网上线伊始,创始块中分配的币绝大多数属于项目方和私募投资人,而这些人的数量往往非常有限。对于PoW共识机制,初始股权的集中不会带来安全性问题,因为它的出块和安全性不依赖于股权持有的分散,而是依赖于算力的分散。对于使用反 ASIC 矿机的挖矿算法的公有链来说,任何人只要拥有显卡和网络就可以成为矿工,这有助于促进更多人参与挖矿,实现早期算力的分散。只要超过50%的算力来自于诚实的矿工,区块链中的交易就是安全不可逆转的。
然而,在PoS共识机制下,股权集中会导致共识协议的参与者集中。区块链的出块权只能由少数在创世块中拥有股权的玩家决定。如果这些人合谋对区块链进行攻击,则完全可以成功的实现双花攻击(Double spending attack). 尽管开发者和投资人出于利益考虑不会进行这样的攻击来摧毁他们自己的公链,但PoS公链也无可避免的在主网上线后就被这些人垄断和支配。更糟的是,如果出块可以获得大量奖励和交易费用,这些垄断者就会将大量股权牢牢控制在自己的手里,使得PoS公链成为一个本质上由巨头控制的网络。
我们不要忘了,区块链的核心价值是什么?是去中心化的共识协议,保证了区块链系统中每笔交易的正确性、不可篡改性。如果共识协议无法保证参与者的分散,区块链就无法做到无需信任的安全性,那么区块链和传统的分布式系统相比就没有任何优势了,甚至传统的分布式系统能做得更经济更高效。因此,公链项目在早期使用PoW, 是避免共识中心化,保护区块链核心价值的明智选择。
“长程攻击”与“主观依赖”问题
在一个公有链中,一个攻击者如果拥有当下足够多的算力或股权,无疑是可以打破公有链安全性完成攻击的。但是在PoS 公链中,如果攻击者获得了一些账户的私钥,这些私钥在历史上某一时刻控制了超过51%的股权,也可以完成攻击,这种攻击的方式被称为长程攻击(Long Range Attack)。
在长程攻击中,攻击者首先获得一些私钥,只要这些私钥在历史上曾经获得了足够多的股权,便可以从这一时刻开始分叉进行51% 攻击,制造一条分叉链出来。而 PoS 的出块不需要进行工作量证明,攻击者可以短时间内让重写历史的分叉链追赶上原本的主链,从而造成PoS链的分叉和防篡改性被打破。
攻击者能够取得这些私钥不是天方夜谭。如果PoS公链的早期投资人在二级市场将持有的代币卖掉后,将账户私钥卖给攻击者,攻击者就可以从创世块进行长链攻击,从而可以打破一个链的安全性。如果一些投资者追求短期收益而非价值投资,攻击者从他们手里获得私钥就成为了一个可能的事情。
而为了应对长程攻击,则有各种各样的解决方案被提出:例如使用密钥演化算法更新密钥,以避免密钥被盗。但是如果早期投资者一开始就决定通过出售私钥获利,那么他完全可以保留密钥种子以绕开这一限制。还有一些解决方案基于这样一个事实:如果攻击者挖了一条完全不同的链,长期在系统中运行的节点或许有能力探测出这种异常。但是,这些方案依然存在如下问题:
PoS 长程攻击造成的分叉与 PoW 的分叉有所不同。PoW 的分叉链难以获得比特币全网算力,比特币矿工很容易从总算力中辨别谁是真正的比特币。鉴于PoS共识协议在实际运行时,绝大多数股权持有者只是区块链的使用者,并不会一直运行一台服务器。攻击者只要在一个历史节点拥有了相当与PoS实际参与者的股权比例,就可以制造出一条难以辨别的分叉链出来。配合女巫攻击(Sybil Attack),攻击者可以从区块历史和节点数量上都获得和被攻击主链接近的水平,令新加入的节点无法区分,只能通过人工指定的方式选择。这样新参与者必须咨询受信任节点来安全地加入系统,这一问题被称为“主观依赖”(Weak Subjectivity)
无利害攻击
无利害攻击(Nothing at Stake)是另一种PoS攻击方式。当一个 PoS 链因为网络延迟、长程攻击或其他原因出现分叉时,PoS 矿工可以选择在两个分叉的链上同时出块,以获取最大收益。而这违反了共识协议。
在PoW 链中,如果一个矿工想同时在多个分叉上挖矿,就必须将自己的算力分散在多个分叉上,所有分叉上分配的算力总和不会超过矿工拥有的总算力。对于多数矿工而言,将自己的全部算力投入到协议指定的链上是最优的选择。
然而,在PoS 多个分叉上同时出块所带来的额外成本可以忽略不计,而选择同时出块可以保证无论哪一条分叉链最终胜出都可获得收益。如果矿工遵守共识协议,只在协议指定的链上挖矿。一旦这个链被丢弃,矿工将会失去挖矿奖励。只追求挖矿收益最大化的矿工会在两边同时参与,不惜因此打破协议——这会导致链长时间维持分叉的状态。
与长程攻击不同,精巧的激励机制设计可以避免这一攻击。但无利害攻击依然表明让PoS链正确地运行是一件很困难的事情。
总结
虽然PoS 具有节省能源等优势,从而很多项目表示将采用PoS。但我们在分析区块链安全性假设后发现,避免了计算“无用的哈希”之后会引入很多攻击情形,而且目前没有很完美的解决方案。诚然PoS有能源效率的优势,但也带来了很多安全性威胁。在PoS很好地解决这些威胁之前,PoW消耗的能源,就像和平时期国家军队用掉的军费一样,阻挡了很多潜在的威胁。最重要的是,其中许多威胁在区块链项目早期显得尤其致命。这也是我们为什么相信新的公链项目应该从PoW开始。