阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

如何解决比特币 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:342120

评论

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

RadonDB MySQL on K8s 2.1.0 发布!

RadonDB

MySQL 数据库 Kubernetes

UI组件化--干掉shape终极一战,android模块化框架

android 程序员 移动开发

网盘数据要搬家?焱融 SaaS 数据服务平台教你这么干

焱融科技

云计算 分布式 高性能 文件存储 SaaS平台

[译] Android 的多摄像头支持,flutter登录

android 程序员 移动开发

Toolbar在Android中的使用,2021大厂面试合集

android 程序员 移动开发

Aeron中这么多空闲策略选哪个?

BUG侦探

Aeron 开发技能

WorkManager完全解析+重构轮询系统,大厂面试题汇总

android 程序员 移动开发

6.0反序列化漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

会议管理系统减少大中型企业的会议矛盾

低代码小观

企业管理 企业应用 管理系统 管理工具 会议管理

View 事件分发机制,看这一篇就够了,flutter登录注册

android 程序员 移动开发

Windows安装repo的真正解决方案,移动终端软件开发颜色演示

android 程序员 移动开发

WMRouter:美团外卖Android开源路由框架(1),看完老板哭着让我留下来

android 程序员 移动开发

[译][2,安卓应用开发项目

android 程序员 移动开发

ViewPager2重大更新,支持offscreenPageLimit,kotlin动态语言

android 程序员 移动开发

[译] Android 的 Java 9,10,11,作为程序员一定不要仅仅追求物质

android 程序员 移动开发

[译] Plaid 应用迁移到 AndroidX 的实践经历,安卓卡顿优化方法

android 程序员 移动开发

STM32~配置时钟频率[一文带你解决STM32主频配置],flutter跳转到系统设置

android 程序员 移动开发

[Android-Gradle]-搞定Groovy闭包这一篇就够了,小程序开发步骤

android 程序员 移动开发

Python代码阅读(第50篇):对列表间隔取元素

Felix

Python 编程 Code Programing 阅读代码

[译][2(1),android开发计算器源码

android 程序员 移动开发

可视化全埋点系列文章之元素标识篇

神策技术社区

可视化 全埋点

[译] 充分利用多摄像头 API,30分钟轻松入门flutter

android 程序员 移动开发

[译] 全新 Android 注入器 _ Dagger 2(三),android开发架构方案

android 程序员 移动开发

[译] 改善 Android Studio 的构建速度(1),美团移动端开发工程师

android 程序员 移动开发

TT语音线程优化,Android开发快速学习

android 程序员 移动开发

ViewPage实现一屏多页面显示(进阶版),简直无敌

android 程序员 移动开发

Xposed简介以及小米去桌面广告的简单实现,五步搞定Android开发环境部署

android 程序员 移动开发

[译] 改善 Android Studio 的构建速度,掌握这6大技能体系

android 程序员 移动开发

WebView开源库终极学习方案,android开发艺术探索pdf

android 程序员 移动开发

WMS-是如何拿到-Token-的?,flutter屏幕旋转监听

android 程序员 移动开发

zookeeper使用篇-Zookeeper Api实践,flutter下拉刷新上拉加载更多

android 程序员 移动开发

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