Clarify bidirectional admission control (inbound + outbound)

- Add explanation of passive admission (inbound control)
- Add explanation of active admission (outbound control)
- Add bidirectional admission control diagram
- Add three scenarios demonstrating bidirectional verification
- Add security significance table for both directions

Co-Authored-By: mccoy <hbzgzr@gmail.com>
This commit is contained in:
Devin AI 2026-01-30 07:18:56 +00:00
parent ca90666d92
commit 9cff3fe39f

View file

@ -760,11 +760,56 @@ func (s *SGXConsensus) VerifyNetworkConsistency(peer *Peer) error {
### 6.1 节点连接准入控制
节点是否接受其他节点的连接和数据同步,取决于命令行配置的参数。只有满足以下条件的节点才能建立连接:
准入控制是**双向的**,同时控制入站和出站连接:
1. **被动准入(入站控制)**:控制允许谁连接到我 - 验证入站连接的度量值
2. **主动准入(出站控制)**:控制我只主动连接谁 - 验证出站连接的度量值
只有满足以下条件的节点才能建立连接:
1. **度量值匹配**:对方节点的 MRENCLAVE/MRSIGNER 必须在允许列表中
2. **Chain ID 匹配**:对方节点的 Chain ID 必须与本节点一致
**双向准入控制示意图:**
```
+------------------+ +------------------+
| 节点 A | | 节点 B |
| 白名单: [B, C] | | 白名单: [A, C] |
+------------------+ +------------------+
| |
| 主动连接 (出站) |
| A 验证 B 的度量值是否在 A 的白名单 |
|-------------------------------------->|
| |
| 被动接受 (入站) |
| B 验证 A 的度量值是否在 B 的白名单
| |
| 双向验证通过,连接建立 |
|<------------------------------------->|
| |
场景 1: A 主动连接 B
- A 检查 B 的 MRENCLAVE 是否在 A 的白名单中 (主动准入)
- B 检查 A 的 MRENCLAVE 是否在 B 的白名单中 (被动准入)
- 两者都通过才能建立连接
场景 2: 恶意节点 X 尝试连接 A
- X 的 MRENCLAVE 不在 A 的白名单中
- A 拒绝连接 (被动准入失败)
场景 3: A 尝试连接未知节点 Y
- Y 的 MRENCLAVE 不在 A 的白名单中
- A 主动放弃连接 (主动准入失败)
```
**双向准入的安全意义:**
| 控制方向 | 作用 | 防护场景 |
|----------|------|----------|
| 被动准入 | 防止恶意节点连接 | 阻止未授权节点接入网络 |
| 主动准入 | 防止连接到恶意节点 | 避免同步到被篡改的数据 |
#### 6.1.0 设计目的:支持硬分叉升级
准入控制的核心目的是**支持硬分叉升级**,类似于以太坊的 EIP 实现机制。当需要发布新版代码实现新特性时,通过更新 MRENCLAVE 白名单来控制网络升级。