写点什么

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

评论

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

[SSM]SSM整合①(整合配置)

十八岁讨厌编程

Java 后端开发 9月月更

SSM整合(接口测试)

十八岁讨厌编程

Java SSM框架 后端开发 9月月更

ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)

矜辰所致

I2C I2C协议 ESP32-C3 9月月更

《简单记个笔记》之部分CSS选择器介绍

吉师职业混子

9月月更

Python教程之Python简介

芯动大师

编程语言 9月月更 Python简介

监控系统的阶段建设

穿过生命散发芬芳

监控系统 9月月更

开发者有话说|时间过得真快,我也是一个“奔三”的人了

武师叔

个人成长

《简单记个笔记》之表单标签加CSS选择器

吉师职业混子

9月月更

面对全新的编程语言,这些思路可以帮助你察觉漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞利用

面试突击85:为什么事务@Transactional会失效?

王磊

Java 面试

4 分钟优化 Fetch 函数写法~

掘金安东尼

前端 9月月更

Web3.0杂谈-#001(47/100)

hackstoic

Web3.0

开发者有话说|情分 or 本分

卷卷龙

个人成长 职场 PUA

概述构建应用智能运维系统的核心能力

阿泽🧸

智能运维 9月月更

史上最详细vue的入门基础

楠羽

Vue 笔记 9月月更

40 岁程序员会有哪些肺腑之言?这篇文章告诉你

宇宙之一粟

学习 程序员 读书感悟 9月月更

【数据结构】五分钟带你了解及自定义有向图

迷彩

数据结构 算法 无向图 9月月更 有向图

C++学习---cstdio的源码学习分析04-创建临时文件函数tmpfile

桑榆

c++ 源码阅读 9月月更

2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )

福大大架构师每日一题

golang 福大大 选择题

通过爬虫爬取一些图片

吉师职业混子

9月月更

数据平台发展史-从数据仓库数据湖到数据湖仓

明哥的IT随笔

hadoop spark 数据仓库 数据湖 湖仓一体

开发者有话说 | 一个普通人的前端职业成长之路

范文杰

个人成长

数字化转型新抓手:一看就懂的《企业应用现代化行动指南》(附下载)

York

容器 微服务 云原生 应用现代化

【云原生 | 从零开始学Kubernetes】一、kubernetes到底是个啥

泡泡

云计算 云原生 k8s 9月月更

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

福大大架构师每日一题

算法 rust 福大大

【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)

Albert Edison

C语言 9月月更 strlen strstr strtok

SSM整合(功能模块的开发)

十八岁讨厌编程

Java ssm 后端开发 9月月更

ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

矜辰所致

ESP32-C3 9月月更 UART

springboot搭建基于minio的高性能存储

CTO技术共享

跟着卷卷龙一起学Camera--CCM

卷卷龙

ISP 9月月更

RAID(独立冗余磁盘阵列)

阿柠xn

Linux 运维 操作系统 raid 9月月更

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