> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/blockchain_guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/blockchain_guide/05_crypto/attack_vectors.md).

# 常见攻击向量

除了智能合约代码层面的漏洞，区块链网络本身也面临多种攻击威胁。本节介绍几种最典型的攻击向量。

## 1. 51% 攻击 (51% Attack)

**定义**： 攻击者控制了网络中超过 50% 的算力（PoW）或权益（PoS），从而获得对账本的某些控制权。

**后果**：

* **双花 (Double Spending)**：攻击者可以构造一条包含“未花费交易”的私有链，在主链确认交易并获得商品/服务后，广播更长的私有链覆盖主链，导致之前的交易无效，实现同一笔资产花费两次。
* **拒绝服务**：攻击者可以拒绝打包特定地址的交易，或者阻止网络确认新块。
* **重写历史**：攻击者可以回滚最近的区块，但通常无法修改很久之前的区块（因为算力成本随深度指数级增加）。

**局限性**：

* 攻击者**无法**凭空创造资产。
* 攻击者**无法**盗取他人的私钥或转移他人资产。
* 对于大型公链（如比特币），发动 51% 攻击的成本极其高昂，但在小型山寨币网络中较常见。

## 2. 双花攻击 （Double Spending）

**定义**： 即“双重支付”，指同一笔数字货币被花掉了两次。

**实现方式**：

* **51% 攻击**：最彻底的双花方式。
* **Race Attack（竞态攻击）**：攻击者几乎同时向网络广播两笔冲突的交易（一笔发给商家，一笔发给自己）。如果商家在未等待足够确认数的情况下发货，可能最后网络确认的是发给攻击者自己的那笔。
* **Finney Attack（芬尼攻击）**：攻击者自己是矿工，预先挖掘了一个包含私自转账给自己的区块但不广播，然后向商家发起交易。一旦商家发货，攻击者广播预挖的区块，使商家的交易失效。

**防范**：

* **等待多重确认**：商家应等待足够多的区块确认（如比特币建议等待 6 个确认）再进行交付。

## 3. 重放攻击 （Replay Attack）

**定义**： 攻击者截获一条在一条链上有效的经过签名的交易，并在另一条链上（通常是硬分叉后的链）“通过重放”该交易，使其在另一条链上也被执行。

**场景**： 常见于硬分叉时期。例如，ETH 分叉出 ETC 时，如果没有重放保护，用户在 ETH 链上转账，可能导致 ETC 链上的同等资产也被转走。

**防范**：

* **链 ID (Chain ID)**：在交易签名数据中包含唯一的链标识符（如 EIP-155），使得交易只能在特定的链上有效。

## 4. 日蚀攻击 （Eclipse Attack）

**定义**： 攻击者控制了受害者节点的所有对外连接（对等节点），将受害者隔离在真实网络之外。

**后果**：

* 受害者只看到攻击者制造的虚假区块链视图。
* 攻击者可以诱骗受害者确认无效交易或双花交易。

**防范**：

* 节点维护多元化的对等节点列表。
* 在建立连接时引入随机性。

## 5. 女巫攻击 （Sybil Attack）

**定义**： 攻击者创建大量的伪造身份（节点），以控制网络影响或破坏信誉系统。

**防范**：

* **共识机制**：PoW（算力门槛）和 PoS（资金门槛）大大增加了创建有效节点的成本。
