2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

如何解决比特币 P2P 网络层的加密问题?

BIP 324 为加强比特币 P2P 层以抵抗恶意中间人攻击的大厦增加了一砖半瓦。

  • 2019-11-25
  • 本文字数:3594 字

    阅读完需:约 12 分钟

如何解决比特币P2P网络层的加密问题?


比特币诞生已经超过 10 年了,比特币开发者们依旧前路漫漫。2019 年 3 月创建的 BIP 324 协议(BIP 全程是 Bitcoin Improvement Proposals,即比特币改进协议)有可能是比特币开发者们前行路上的重要一步。


BIP 324 是由位于瑞士的比特币开发者兼Shift Cryptosecurity 联合创始人 Jonas Schnelli 发起的,其目的是解决比特币节点之间信息传输的问题。这一问题由来已久。


比特币白皮书的标题是《比特币:一种点对点的电子现金系统》。正如其标题所言,P2P 层是比特币网络的主要组成部分,但也有着效率明显低下问题和理论上存在的攻击路径问题。对于比特币的未来研究和升级的一大领域就是关于 P2P 网络的。这一领域最近的明显进展已经引起了不少注意,其中就包含像 Dandelion(BIP 156)和 Erlay 这样的协议。


那么,比特币 P2P 网络架构是怎样的?在比特币诞生之前,P2P 网络最成功的实践是文件共享服务的应用:最先是 Napster(因为有中央服务目录而部分中心化),然后是 BitTorrent。


在理想配置中,P2P 网路没有等级制度,所有节点都是平等的,所有节点均等地共享网络负载。这些相互连接的节点网络构成的基础层使得比特币可以抵抗所有中央权威。多国政府曾经下令在搜索引擎结果中屏蔽 P2P 种子网络的信息,却也只能在搜索引擎中屏蔽而已,想要彻底清除 P2P 种子网络是很难的——几乎是完全不可能的。P2P 网络的主要问题就变成了这个:使用 P2P 网络如何保护隐私?

比特币网络的 P2P 层现存的问题

比特币现有 P2P 实施的问题之一是在信息传输层缺少强制加密,这就使得比特币易受到中间人(man-in-the-middle,简称 MITM)攻击。这种攻击会秘密连接两个节点并延迟二者之间的通讯,二者都以为在直接和对方通信而实际上通讯是由攻击者控制的,这样就实现了中间人攻击。中间人攻击分为“被动”中间人攻击和“主动”中间人攻击,前者指的是攻击者仅仅观察网络状态,而后者指的是攻击者主动操控其网络流量。


按照比特币协议,节点之间的信息是用纯文本传输而并未加密的,这样整个协议就向攻击路径敞开了。ISP、WiFi 提供商和其他对手都可以执行中间人攻击,从而读取你所有的入站和出站连接,同时无需作为节点与你连接。理论上这可以用于截获甚至阻断特定数据的传递,比如与受制裁实体之间的收发交易。


比特币网络上信息加密的缺失导致了一个国家的 ISP 能够作为中间人探测到比特币交易信息,查看其获得的纯文本并继而进行阻止。他们可以攻击矿工并延迟其对于区块的验证。或者是像棱镜计划一样的监视项目可能会以中间人的身份来被动监视所有的比特币流量;一旦发现其不认可的交易,就可以截获或者进行阻止。对于比特币 P2P 网络的攻击甚至可以协调一致并将其在大洲或者国家层面进行分割,即“分区攻击”。


现行比特币网络的隐私性的关键在于:即便中间人攻击确实发生了,受影响的节点也无法进行确认。


但是,作为比特币社区,我们为什么不采用像是 VPN 或者 Tor 的工具对流量进行混淆或者加密呢?Tor 是加密的洋葱网络,隐藏了交易端点,所以理论上 ISP 是不可能跟踪相应行为的。然而采用 Tor 加密 P2P 网络也有不足,主要缺陷包括:和 HTTP(s) 相比对于 Tor 在不同层之间的集成的研究并不充分、理论攻击的可能性和对于比特币核心软件的依赖问题。后者可能会引入攻击路径

比特币网络的 P2P 层的可行解决方案

Schnelli 创建了一系列 BIP 来解决这个问题的原因正在于此。BIP 151 覆盖了节点之间流量的加密,而 BIP 150 阐述的是节点可选的认证,此认证是基于椭圆曲线数字签名算法的私钥/公钥加密算法。感兴趣的读者可以从 Aaron van Wirdum 的 BIP 151 读起,因为这是第一个提出的解决 P2P 层隐私性问题的协议。自 BIP 151 发布以来,不同团队已经开始将此方案补充到不同的比特币客户端实践中,而 Schnelli 决定推出一个更新的升级协议,即 BIP 324


BIP 324 协议的设计可以让比特币节点确认自己是否在遭受中间人攻击。尽管恶意中间人依然可以连接到节点 A 并装作节点 B,也可以连接到节点 B 并装作节点 A,但真实的节点 A 和 B 可以知晓他们的会话标志是不同的,也能够知晓中间人正在截获他们的通讯信息。尽管这些节点也想要利用其它的认证机制,那已经不是 BIP 324 的研究范围了。


“在现行的信息传输非加密条件下,BGP 劫持、区块延迟攻击和信息篡改都是低成本并且可以暗中执行的(无法检测到中间人),”正如 BIP 摘要所述,“添加随机加密会给攻击者带来较高的被检测到的风险。各个节点可以比较加密的会话标志,或者利用其他形式的身份验证方案来确认攻击。”


最终,潜在的中间攻击人还是可以看到比特币区块链网络上的未加密数据,因为这些数据是公开的和去中心化的。所以在实际操作中,这个方案最可能用在保护那些不是节点的特定实体中,比如 ISP 和公开的 WiFi 提供商,他们可以过滤出特定的交易并截获或者阻断之。当然了,棱镜项目可以通过网络中一个节点的身份来监测比特币流量。尽管潜在攻击者监听未加密流量会更加简单,如果可以监视中间人攻击,那这些被动区块链监听者也必须在被抓的风险和监听 P2P 信息的收益之间做权衡。


当然了,BIP 324 只是为加强比特币 P2P 层以抵抗恶意中间人攻击的大厦增加了一砖半瓦。在实际开发中,确认中间人攻击对比特币是真的构成重大威胁,还是并非如此,就显得十分关键。然而如果没有像是 BIP 324 提供的类似工具,想要收集这些数据就十分困难。


BIP 324 主要目的是提供一套工具,这一工具可以缓和被动的中间人攻击,而与 BIP 150 协同起来就可以为防范主动中间人攻击提供些潜在的工具。

“握手”

BIP 324 中描述的第一个动作是“握手”。握手就是发布 P2P 层未来通讯协议的动作。如果双方之间尚未发送任何信息开启交易,则握手动作通过向对方发送公钥(通过短暂椭圆曲线 secp256k1 加密函数推导得出)来启动。正如这一秘钥对的名称(“短暂”椭圆曲线)所示的那样,秘钥对应当在每次握手成功执行后立即从 RAM 存储中清除。这样,攻击者就无法截获这些秘钥或者揭秘用于这一联系的历史传递信息。这个攻击路径要求受害者的 RAM 存储权限,所以这一问题在 P2P 加密和认证领域可以忽略不计。


共享的信息对于端到端加密是至关重要的,并且只能在攻击者同时得到私钥和对方的公钥的条件下才能计算得出。后者对于攻击者相当关键,但是根据设计,私钥是不会用于传输的,所以这一方法的私钥部分是攻击者无法得到的。


握手的最后一步是推导对称加密秘钥对——也就是用于加密信息的真正秘密——以及计算会话标志。

加密

从现在起,各方可以彼此发送信息而无需担心其内容被第三方知晓了。


所以,信息被加密时到底发生了什么?与 BIP 151 类似,BIP 324 协议提取了 ChaCha20 和 Poly1305 密码协议的精华部分。加密并非只有好处没有坏处。因为信息变得体积更大和更难计算,加密通常使得通信变慢。一种新型的信息结构甚至可以让加密信息体积更小和计算更快,仅仅因为采用了前述的恰当的密码协议,不过我们这里不讨论其细节。可以用来对比的例子是,未加密的比特币核心客户端现在用的是双 SHA-256 哈希(加密标准)对发送的信息(截断为 4 个字节)进行检验,这还是中本聪的最初的原始版本。


这一协议只是让比特币更加私密,更具替代能力的诸多作为中的沧海一粟。它对于比特币共识规则毫无影响,甚至假设了选择性加入行为。随着比特币核心的更新,一些节点可能无法响应握手。简言之,BIP 324 是后向兼容的,这在其缓和中间人攻击的能力方面可以算是一个减分项。


将这一协议(连同 BIP 150)实施到比特币核心之后,我们可以预期到更少的中间人攻击,或者至少我们有了可以比较会话标志和确认攻击的工具。同样,值得一提的是,虽然 BIP 324 并未包含避免加密启动阶段的中间人攻击(被称为 Trust On First Use)的计划,BIP 150 确实是包含了的。


感谢 Schnelli 对于本文的有益点评。本文用到了以下参考文章,特此声明。


  1. https://youtu.be/DKOG0BQMmmg?t=3h5m3s

  2. https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-March/016806.html

  3. https://gist.github.com/jonasschnelli/c530ea8421b8d0e80c51486325587c52

  4. https://github.com/bitcoin/bips/blob/master/bip-0151.mediawiki

  5. https://bitcoinmagazine.com/articles/bip-the-end-to-end-encryption-bitcoin-never-had-but-soon-will-1465401187

  6. https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch08.asciidoc

  7. https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-September/016355.html

  8. https://diyhpl.us/wiki/transcripts/sf-bitcoin-meetup/2017-09-04-jonas-schenlli-bip150-bip151/

  9. https://bitcoinops.org/en/newsletters/2018/08/28/

  10. https://github.com/bitcoin/bitcoin/pull/14032

  11. https://gist.github.com/jonasschnelli/c530ea8421b8d0e80c51486325587c52


原文链接:


BIP 324: A Message Transport Protocol That Could Protect Bitcoin Peers


2019-11-25 17:342654

评论

发布
暂无评论
发现更多内容

Jenkins通过OpenSSH实现Windows下的CI/CD

运维研习社

jenkins CI/CD Windows Server 2012 R2

腾讯发布区块链产业加速器,生态共创助力新基建建设

CECBC

腾讯

2021 Flutter从零开始之全栈开发,后台到在线教育APP上线。

人生如梦

flutter dart

(28DW-S8-Day1) 定个魔幻的范围:在线教育+区块链

mtfelix

比特币 区块链 在线教育 28天写作 教育+区块链

翻译:《实用的Python编程》02_01_Datatypes

codists

Python 人工智能 数据结构与算法 字典 元组

28天瞎写的第二百三十九天:什么是正念冥想?

树上

冥想 28天写作 正念

在区块链的新浪潮中,为更多人争取“公平”

CECBC

区块链 新浪潮

微服务架构:网关概念与zuul

程序员架构进阶

服务化 API网关 七日更 28天写作 2月春节不断更

Dart 后台开发 Aqueduct @Column标记

人生如梦

Dart 后台开发 Aqueduct 插入数据 获取数据API

人生如梦

flutter dart

Hive底层原理:explain执行计划详解

五分钟学大数据

大数据 hive 二月春节不断更

程序员成长第十篇:从阅读代码开始

石云升

28天写作 2月春节不断更 阅读代码

互联网小拼,这一生的故事,你要看看吗《打工人的那些事》

谙忆

吉利汽车宣布进军区块链 多个龙头股企业早已低调精准布局区块链

CECBC

区块链

Dart 后台开发 Aqueduct ORM初始化数据库

人生如梦

Dart 后台开发 Aqueduct集成Swagger客户端

人生如梦

flutter dart

这才是打开“金三银四”Java面试的正确方式,2021“金三银四”看这个就对了

Java 架构 面试

计算机中的层次化存储是个什么鬼?

冰河

程序员 数据结构 算法 计算机 层次化存储

Flutter安卓项目第一次启动失败解决方案

人生如梦

flutter

最常见的10种Java异常问题!

Java架构师迁哥

MySQL 批量修改所有表字段字符集及排序规则

运维研习社

MySQ

Let's Encrypt签发工具CertBot-auto不再维护

运维研习社

让代码说话:如何把版本信息注入到代码中

zhujun

c++ Python git rust Go 语言

Nginx零成本、易操作实现网站视频加速

运维研习社

nginx 流媒体 网站优化

为什么ElasticSearch比MySQL更适合全文索引

程序员历小冰

数据库 lucene elasticsearch BitMap 跳表

干货 | Redis 实现发布订阅原理与实践

架构精进之路

redis 28天写作 发布订阅

Go1.16 发布

Rayjun

Go 语言

关于智商测试的一点闲话 Day1

道伟

科普 28天写作

心理学与游戏之现学现卖系列

Justin

心理学 28天写作 游戏设计

一起重新全面认识JWT-Json Web Token

谙忆

2020 年行摄回忆录(下)

穿过生命散发芬芳

生活 摄影

如何解决比特币P2P网络层的加密问题?_区块链_Tony Sanak_InfoQ精选文章