区块链安全—详谈共识攻击(一)
字数 1930 2025-08-22 18:37:15

区块链共识算法及其安全分析

前言

区块链作为一种去中心化的分布式公共数据库,通过分布式节点共同利用密码学协议维护系统,而不依赖中央管理机构。节点间通过底层共识协议保证账本一致性。区块链可分为公有链和许可链,不同应用场景使用不同的共识算法,其安全性也有所区别。

一、共识安全模型分析

区块链本质是分布式系统,不同共识模型在不同环境下能容忍的错误类型与数量不同。

1. 同步模型

  • 要求发送方与接收方类似面对面应答
  • 消息延迟时间Δt是确定的
  • 算法执行时间也是确定的
  • 现实中不存在,仅作为理论假设
  • 如果在同步模型下无解,异步模型下更无解

2. 异步模型

  • 消息延迟时间Δt不确定,可以是任意长时间
  • 程序可能因等待消息而阻塞
  • 无法区分消息延迟与节点宕机
  • 保证安全性但牺牲系统灵活性

3. 半同步/半异步模型

  • 结合同步和异步模型的优点
  • 设计最长超时限制tmax
  • 超过tmax未收到消息则判定节点宕机

二、PoW共识算法

工作量证明(Proof of Work)机制由Nakamoto提出,作为比特币系统的共识机制,通过计算能力寻找特定数字使区块满足要求。

PoW工作原理

  1. 每个节点需要完整本地账本
  2. 节点通过算力竞争记账权
  3. 比特币约每10分钟一轮算力竞赛
  4. 胜者获得记账权并同步新增账本

PoW示例

给定字符串"blockchain",连接nonce随机数(32位)后进行SHA256哈希运算,要求结果以若干0开头:

blockchain1 → 4bfb943cba9fb9926df93f33c17d64b378d56714e8a29c6ba8bdc9690cea8e27
blockchain2 → 01181212a283e760929f6b1628d903127c65e6fb5a9ad7fe94b790e699269221
...
blockchain515 → 0074448bea8027bebd6333d3aa12fd11641e051911c5bab661a9b849b83958a7
blockchain2688 → 0009b257eb8cf9eba179ab2be74d446fa1c59f0adfa8814260f52ae0016dd50f
blockchain48851 → 00000b3d96b4db1a976d3a69829aabef8bafa35ab5871e084211a16d3a4f385c
blockchain6200969 → 000000db7fa334aef754b51792cff6c880cd286c5f490d5cf73f658d9576d424

PoW算法流程

区块表示为三元组B=(h',tx,nonce),其中:

  • h':前一个区块哈希
  • tx:交易记录
  • nonce:32位整数

系统设定难度值D,定义哈希值前导0数量:

系统输入: tx、nonce、D
PoW过程:
1: nonce = 1(初值)
2: while(H(nonce,tx,h') >= D):
3:   nonce++
4: Broadcast(<nonce,tx,h'>) //广播计算的值
5: end

三、PoW攻击详解

1. 双花攻击(Double Spending)

同一货币被花费多次。

传统解决方案

  • 银行作为第三方按顺序处理交易
  • 第一笔处理后,第二笔自然失败

区块链解决方案

  1. 交易广播与验证:
    • 交易信息哈希加密并用私钥签名
    • 其他用户用公钥验证
  2. 记账权竞争机制使攻击代价巨大
  3. 交易确认时间长导致可能实现双花

区块链防御措施

  • 检查比特币状态,已花费则拒绝交易
  • 交易确认前发起矛盾交易会被矿工拒绝

2. 51%攻击

PoW允许存在多条分叉链,最长链被认为是主链。

攻击过程

  1. 攻击者向一半网络广播交易A,另一半广播交易B
  2. 两边矿工几乎同时取得记账权,导致分叉
  3. 攻击者在A分支确认后争取连续记账权使B分支变长
  4. A分支被舍弃,交易无效但已获得商品

攻击概率

  • 掌握1%算力:连续两次记账概率10^-4
  • 6次确认后交付商品可大幅降低风险
  • 掌握51%算力:成功6区块攻击概率约0.018

3. 自私挖矿(Selfish Mining)

矿工维护公开和私密两条链:

  1. 挖到区块后不广播,添加到私密链
  2. 提前计算下一个区块
  3. 即使当前区块被他人发布,也可公布自己的区块
  4. 诚实矿工可能选择支持攻击者分叉

特点:

  • 仅对PoW有效
  • 利用网络传播时延

四、PoS与DPoS共识算法

1. PoS(股权证明)算法

用股权代替计算资源选举领导人,避免算力竞争。

Peercoin实现

  • 币龄(coins * age)影响挖矿难度
  • 计算公式:success = <coins * age * target>
  • proofHash < success时挖矿成功

算法流程:

系统输入: tx、nonce、D
PoS过程:
1: nonce = 1(初值)
2: coins ← accountBalance
3: age ← currentTime - lastTransactionTime //币龄
4: while(H(nonce,tx,h') >= coins * age * D):
5:   nonce++
6: Broadcast(<nonce,tx,h'>) //广播计算的值
7: end

问题

  • 长期持有大量资产导致"贫富不均"
  • 仍需哈希计算,浪费资源

2. DPoS(委托股权证明)算法

由Bitshares提出,用户分为:

  • 见证人(witnesses):处理交易,维护区块链
  • 代表(delegates):发起更新请求(无报酬)
  • 工人(workers):提出项目想法(投票支持可获得收益)

见证人选举

  • 只有永久节点可被选举
  • 前N名见证人需获50%以上票数
  • 定期重新选举

见证人出块

  • 每生产一个块获得报酬
  • 未生产区块则无收入,可能失去身份
  • 每2秒生产一个区块,超时则转交权利
  • 用户监控区块链,选择最长链追加

五、确定性共识算法攻击

1. 重放攻击(Replay Attacks)

一条链上的交易在另一条链上也合法。

原因

  • 硬分叉后两条链地址、私钥算法和交易格式相同
  • 导致交易可被重放确认

防御措施

  • UTXO模型:检查交易Hash是否存在
  • Balance模型:使用随机数NONCE防止重放
  • 传统方法:
    • 添加时间戳
    • 挑战响应机制

2. 权利压迫攻击

攻击者利用记账权使系统随机数产生偏移,增加下次获得记账权的概率。

方式

  1. 通过参数组合增加被选概率
  2. 利用当前区块控制力影响下一区块

防御措施

  • 要求验证者抵押资产
  • 避免使用易操控信息产生随机数

六、参考资料

  1. 共识算法基础介绍
  2. PoW与PoS比较分析
  3. 区块链安全攻击类型
  4. 数字货币共识机制发展
区块链共识算法及其安全分析 前言 区块链作为一种去中心化的分布式公共数据库,通过分布式节点共同利用密码学协议维护系统,而不依赖中央管理机构。节点间通过底层共识协议保证账本一致性。区块链可分为公有链和许可链,不同应用场景使用不同的共识算法,其安全性也有所区别。 一、共识安全模型分析 区块链本质是分布式系统,不同共识模型在不同环境下能容忍的错误类型与数量不同。 1. 同步模型 要求发送方与接收方类似面对面应答 消息延迟时间Δt是确定的 算法执行时间也是确定的 现实中不存在,仅作为理论假设 如果在同步模型下无解,异步模型下更无解 2. 异步模型 消息延迟时间Δt不确定,可以是任意长时间 程序可能因等待消息而阻塞 无法区分消息延迟与节点宕机 保证安全性但牺牲系统灵活性 3. 半同步/半异步模型 结合同步和异步模型的优点 设计最长超时限制tmax 超过tmax未收到消息则判定节点宕机 二、PoW共识算法 工作量证明(Proof of Work)机制由Nakamoto提出,作为比特币系统的共识机制,通过计算能力寻找特定数字使区块满足要求。 PoW工作原理 每个节点需要完整本地账本 节点通过算力竞争记账权 比特币约每10分钟一轮算力竞赛 胜者获得记账权并同步新增账本 PoW示例 给定字符串"blockchain",连接nonce随机数(32位)后进行SHA256哈希运算,要求结果以若干0开头: PoW算法流程 区块表示为三元组B=(h',tx,nonce),其中: h':前一个区块哈希 tx:交易记录 nonce:32位整数 系统设定难度值D,定义哈希值前导0数量: 三、PoW攻击详解 1. 双花攻击(Double Spending) 同一货币被花费多次。 传统解决方案 银行作为第三方按顺序处理交易 第一笔处理后,第二笔自然失败 区块链解决方案 交易广播与验证: 交易信息哈希加密并用私钥签名 其他用户用公钥验证 记账权竞争机制使攻击代价巨大 交易确认时间长导致可能实现双花 区块链防御措施 检查比特币状态,已花费则拒绝交易 交易确认前发起矛盾交易会被矿工拒绝 2. 51%攻击 PoW允许存在多条分叉链,最长链被认为是主链。 攻击过程 攻击者向一半网络广播交易A,另一半广播交易B 两边矿工几乎同时取得记账权,导致分叉 攻击者在A分支确认后争取连续记账权使B分支变长 A分支被舍弃,交易无效但已获得商品 攻击概率 掌握1%算力:连续两次记账概率10^-4 6次确认后交付商品可大幅降低风险 掌握51%算力:成功6区块攻击概率约0.018 3. 自私挖矿(Selfish Mining) 矿工维护公开和私密两条链: 挖到区块后不广播,添加到私密链 提前计算下一个区块 即使当前区块被他人发布,也可公布自己的区块 诚实矿工可能选择支持攻击者分叉 特点: 仅对PoW有效 利用网络传播时延 四、PoS与DPoS共识算法 1. PoS(股权证明)算法 用股权代替计算资源选举领导人,避免算力竞争。 Peercoin实现 币龄(coins * age)影响挖矿难度 计算公式:success = <coins * age * target> proofHash < success时挖矿成功 算法流程: 问题 长期持有大量资产导致"贫富不均" 仍需哈希计算,浪费资源 2. DPoS(委托股权证明)算法 由Bitshares提出,用户分为: 见证人(witnesses):处理交易,维护区块链 代表(delegates):发起更新请求(无报酬) 工人(workers):提出项目想法(投票支持可获得收益) 见证人选举 只有永久节点可被选举 前N名见证人需获50%以上票数 定期重新选举 见证人出块 每生产一个块获得报酬 未生产区块则无收入,可能失去身份 每2秒生产一个区块,超时则转交权利 用户监控区块链,选择最长链追加 五、确定性共识算法攻击 1. 重放攻击(Replay Attacks) 一条链上的交易在另一条链上也合法。 原因 硬分叉后两条链地址、私钥算法和交易格式相同 导致交易可被重放确认 防御措施 UTXO模型:检查交易Hash是否存在 Balance模型:使用随机数NONCE防止重放 传统方法: 添加时间戳 挑战响应机制 2. 权利压迫攻击 攻击者利用记账权使系统随机数产生偏移,增加下次获得记账权的概率。 方式 通过参数组合增加被选概率 利用当前区块控制力影响下一区块 防御措施 要求验证者抵押资产 避免使用易操控信息产生随机数 六、参考资料 共识算法基础介绍 PoW与PoS比较分析 区块链安全攻击类型 数字货币共识机制发展