BIP324 说明如何加密比特币节点之间交换的消息。节点是验证交易和区块、并与其他网络参与者通信的软件。网络参与者之间的这种直接连接称为 P2P,其加密版本称为 v2 transport。只是在旁监听连接的人,不应轻易读到通信内容。不过,加密本身并不能确认你实际连接的是哪个节点。公开的区块链和交易有效性规则都不会因此改变。
区块是加入比特币共同交易历史的一批交易。区块是公开的,但观察传播过程和阅读已经形成的链并不相同。监视未加密连接的人,还能看到消息顺序、请求,以及节点何时转发某笔交易。这些信息可能帮助把网络活动与具体的人联系起来。BIP324 限制的是被动观察者轻易读取这类内容的能力。 [1] [2] [7]
两个支持该协议的节点在连接时协商密钥,之后通过加密通信。它们无需预先知道对方身份,也不必持有中央机构颁发的证书。因此,加密不等于可信。对端节点当然能读取消息,而且仍可能属于攻击者。 [1]
连接开始时,双方进行称为 handshake 的握手过程,各自生成临时密钥。私钥是一个秘密数值,对应的公钥可以向他人公开。借助 ECDH,双方不必交换私钥,就能分别算出同一个共享秘密,再从中派生保护传输的密钥。ElligatorSwift 是一种公钥编码方式,使这部分交换看起来像随机数据,更难通过固定特征识别。这些密钥只属于网络连接,既不是用于花费比特币的私钥,也不是 seed——派生钱包密钥所用的秘密起始值。启用加密传输不需要向任何人提供钱包备份。 [1] [8]
设想有人在途中截获消息并修改内容。BIP324 使用 ChaCha20Poly1305,在加密之外,还检查消息是否与连接密钥匹配、是否被篡改。没有该密钥的攻击者不能简单改写数据后就得到有效消息。但这项检查并不能证明,你是在与预期的节点共享密钥。主动攻击的中间人可以在建立连接时,分别向双方冒充对端。这样他就有了两条独立的加密连接,可以在两者之间读取并转发消息。因此,保护消息与验证对端是两件不同的事。 [1]
通信过程中会更新密钥。如果旧秘密被正确擦除,后来获得当前密钥并不意味着可以自动解开之前的全部通信记录。这一性质称为 forward secrecy。 但它无法保护对端已经读过或保存的消息,也无法对抗持续控制电脑的攻击者;最近一组消息仍可能暴露。 [1]
为保持兼容,旧的 v1 transport 仍受支持。v2 连接失败时,软件可能尝试 v1。因此,主动攻击者可以阻断加密连接,试图迫使双方回退到未加密传输。BIP324 提高了被动监控的成本,但不保证普遍抵抗 downgrade,也不保证连接可用。 [1] [4]
BIP324 不隐藏 IP 地址,也不能隐藏流量的所有时间和规模特征。IP 地址是设备通过互联网通信时使用的网络地址。Tor 可以处理问题的另一部分,但结合使用也不会自动带来匿名性。消息无论如何传来,Full Node 都必须验证交易、签名和区块。单靠加密无法解决攻击者包围节点的 Eclipse Attack。 [1] [6]
Bitcoin Core 26.0 在 2023 年加入 v2 支持,当时默认关闭。27.0 版本将其默认开启。因此,本条目的年份指 Bitcoin Core 首次支持它,而不是提案起源。传输按每条连接分别协商;软件支持 v2,不代表所有相连的 peers 都使用 v2。 [3] [4]
Bitcoin Core 运营者可以用 bitcoin-cli getpeerinfo 读取连接状态。这是通过 RPC 进行的查询;RPC 是控制节点和获取信息的接口,这条命令不会向比特币网络广播交易,也不更改设置。结果逐条列出连接。在 transport_protocol_type 中,v2 表示加密传输,v1 表示旧式明文传输,detecting 表示尚未确定。session_id 字段包含 v2 连接的标识符,否则为空。仅有这个标识符不能验证对端。两个运营者可以通过另一个可信渠道比较彼此连接的标识符,以发现中间人;普通连接不会自动执行这项检查。结果只说明这一段连接的情况,不代表交易在整个网络中的传播路径。输出还包含网络信息,没有必要公开。 [5] [1]
BIP324 列出的作者是 Dhruv Mehta、Tim Ruffing、Jonas Schnelli 和 Pieter Wuille。编号于 2019 年分配;在 2026 年 10 月 17 日核查时,状态为 Deployed。采用它不需要 Soft Fork,也不改变比特币供应量。这是节点通信的渐进改进,效果取决于正确实现和实际使用的连接。 [1]
要获得更完整的理解,请将本词条与以下词条结合阅读: Full Node, Eclipse Attack, Bitcoin 隐私, Bitcoin Core. 反向关联还来自: Mix Network.