跳至主要內容
Standards Track Final

BIP-324: v2 P2P 傳輸協議

為比特幣節點間通訊提供加密和認證,增強網路隱私性。

Dhruv Mehta, Tim Ruffing, Jonas Schnelli, Pieter Wuille 2019年3月8日
BIP 編號

324

類型

Standards Track

狀態

Final

創建日期

2019-03-08

摘要

BIP-324 定義了比特幣節點之間的新版本 P2P 傳輸協議(v2)。 與原始的明文協議相比,v2 提供了機會性加密(opportunistic encryption), 使網路流量更難被監控和干擾。

為什麼需要加密?

v1 協議的問題

原始的比特幣 P2P 協議是完全明文的。ISP、政府或其他網路觀察者可以:

  • • 識別比特幣節點流量
  • • 追蹤交易傳播路徑
  • • 進行流量分析攻擊
  • • 選擇性阻斷或延遲連接

注意: 加密並不能保證完全隱私。它只是增加了攻擊成本。 流量分析和時序攻擊仍然可能洩露一些資訊。

技術概述

加密方案

BIP-324 使用以下加密原語:

組件 算法 用途
密鑰交換 secp256k1 ECDH 建立共享密鑰
密鑰派生 HKDF-SHA256 從共享密鑰派生會話密鑰
對稱加密 ChaCha20-Poly1305 加密和認證消息
封包格式 Length + AEAD 可變長度加密封包

握手流程

v2 連接建立流程:

  1. 1. 發起者生成臨時 secp256k1 密鑰對
  2. 2. 發起者發送 64 字節公鑰(EllSwift 編碼)
  3. 3. 響應者生成自己的臨時密鑰對並回覆公鑰
  4. 4. 雙方使用 ECDH 計算共享密鑰
  5. 5. 使用 HKDF 派生加密密鑰
  6. 6. 後續通訊使用 ChaCha20-Poly1305 加密

EllSwift 編碼

BIP-324 使用 EllSwift 編碼傳輸公鑰。這種編碼產生看起來像隨機數據的 64 字節輸出, 使協議更難被識別。

封包格式

v2 使用新的高效封包格式:

v1 封包格式(舊):
┌─────────────┬─────────────┬──────────┬─────────┬─────────┐
│ magic (4B)  │ command(12B)│ size (4B)│ check(4B)│ payload │
└─────────────┴─────────────┴──────────┴─────────┴─────────┘
總 overhead: 24 字節

v2 封包格式(新):
┌───────────────┬────────────────────────────────────────┐
│ length (3B)   │ encrypted(1B command + payload + 16B tag) │
└───────────────┴────────────────────────────────────────┘
總 overhead: 4-20 字節(取決於命令長度)

安全特性

  • 機會性加密:自動加密,無需配置
  • 前向保密:每次連接使用臨時密鑰
  • 消息認證:防止篡改
  • 流量混淆:難以識別比特幣流量
  • 可選認證:支援節點身份驗證

v1 vs v2 比較

特性 v1 (舊) v2 (新)
加密 ChaCha20-Poly1305
認證 AEAD + 可選節點認證
流量識別 容易 困難
封包 overhead 24 字節 4-20 字節
向後相容 - 自動降級到 v1

使用方式

在 Bitcoin Core 26.0+ 中,v2 傳輸預設啟用。可以通過以下方式控制:

# bitcoin.conf

v2transport=1 # 啟用 v2 (預設)

v2transport=0 # 禁用 v2

限制

  • • 不防止中間人攻擊(除非使用可選的節點認證)
  • • 流量大小和時序仍可被分析
  • • 需要雙方都支援 v2 才能加密
  • • 初始連接建立時有少量延遲

相關 BIP

  • BIP-151:原始的 P2P 加密提案(已被 BIP-324 取代)
  • BIP-340:Schnorr 簽章(使用相同的 secp256k1 曲線)
已複製連結
已複製到剪貼簿