- A+
引言
BIP324 提出了一种新的比特币点对点通信协议,其特性有:伺机自动加密(opportunistic encryption)、节约少许带宽,以及可以在交换应用消息前协商更新。
完整的说明书已经形成,并可以在这里讨论。此处仅列出动机和设计目标。
动机
比特币是一种免许可的网络,其目标是对公开的数据达成共识。因为所有数据都在比特币点对点网络中转发,所以天生就是公开的;而现在的点对点协议缺乏密码学身份的概念,对等节点们在不加密和无身份验证的连接中交谈。不仅如此,当前的 P2P 协议(在本说明书中以 “v1” 指代)的明文特性,在应对以下几种攻击时有缺陷:
- 虽然被转发的数据自身是公开的,但相关的元数据可能会泄露隐私信息并妨害用户的隐私性。举个例子,一个窃听所有比特币点对点连接的全局被动攻击者可以轻松识别一笔交易的来源节点和发起时间。
- 因为连接没有身份验证,这样的连接可以低成本地伪造,而且被检测出来的风险也不高。举个例子,攻击者可以实时(on-the-fly)替换一个连接中的特殊字节(例如节点标签 node flag),而且不需要保存任何状态。
- 当前的协议是自我暴露的(self-revealing)。举个例子,深度包检测(deep packet inspection)可以轻易识别一个 P2P 连接,因为连接总是从固定序列的魔术字节(magic bytes)开始。检测连接的能力,产生了审查的可能性,并让上述攻击以及其它需要供给制控制网络受害者(例如针对矿工的 “日蚀攻击”)都变得更加容易。(译者注:“日蚀攻击” 指的是多个恶意节点垄断一个节点的对等连接、使其失去获得比特币网络新信息的能力。)
这个新版的 P2P 协议(v2)致力于通过可持续地提高这些攻击的成本来优化网络,主要方法是使用无身份验证的伺机加密传输。此外,对被动的窃听者来说,被传输的字节流也将是伪随机的(即,跟均匀随机的字节无法分别)。
- 加密,甚至在没有身份认证的时候、仅当两方都支持 v2 的时候,也能迫使攻击者变成主动攻击,从而阻止窃听:攻击者要么必须要么进行持续的中间人(MitM)攻击,要么让连接降级至 v1,要么启动自己的节点并让诚实节点连接到他们。一般来说,主动攻击者想要扩大规模,就要花费更多资源;不过,在手动、故意连接的情况(有别于自动的、随机的连接)下,原则上来说他们无法隐藏自己:即使只是非常基本的检查,例如节点运营者手动比较协议的版本号和会话 ID(在本提议中都有设计)都会暴露攻击者。
- 伪造,就其本身来说已经是一种主动攻击;如果攻击者还不得不为了充当中间人而维护必要的通信状态的化,攻击成本会更高。
- 伪随机的字节流排除了基于模式匹配(pattern matching)的识别技术,并让字节串的塑型(一模拟互联网上的其它协议)更容易。这提高了连接审查型防火墙的成本,强迫他们要么换成完全的中间人攻击,要么换成更明显的白名单制,而不能继续使用黑名单制。
为什么加密不加入身份验证?
如上所述,无身份验证的加密已经提供了严格优于不加密的安全性。因此,所有连接都应该加密,即使并不包含身份验证。
至于身份验证本身,它的好处就不像加密那么清楚了。因为比特币的免许可特性,身份验证只能受限于特定场景(例如,连接的两个对等节点属于同一个运营者),而且某一些形式的(可能是部分匿名的)身份验证是否可取,还取决于相关对等节点的具体要求。因此,我们认为,身份验证应该单独处理(如果需要的话),而 v2 致力于为未来的协议更新 —— 包括加入可选的身份验证,见 “私密身份认证协议” —— 提供一个可靠的技术基础。
为什么有了伪随机的字节流,还是能被流量分析?
流量分析(traffic analysis),例如观察通信包的长度和发送时机,加上主动攻击,依然可以揭晓人们正在使用比特币 v2 点对点协议。然而,伪随机的字节流提高了持续指纹识别的成本,而且可能强迫某一些中间人攻击任何他们无法识别的协议,从而造成连带的成本。
伪随机的字节流不会自我暴露(self-identifying)。而且,它没有强烈的倾向性,因此是类似协议的一个常规选择(canonical choice)。那么,比特币的点对点流量将跟其他作出类似选择的协议 —— 例如 obfs4 以及近期提出的 cTLS 插件 —— 没有分别。而且,流量塑型和协议封装(比如,发起看起来像 HTTPS 或 SSH 的流量)可以进一步缓解流量分析和主动攻击。不过,这已经超出了本提议的范围。
为什么不使用一种安全隧道协议?
我们的目标之一是让伺机加密变得无处不在,因为它对大规模的攻击提供了最好的防护。这意味着,既要保护节点运营者指示自己的软件发起的手动的、故意的连接,也要保护比特币节点根据 goosip 所提供的 IP 地址发起的自动连接。虽然加密自身已经可以通过代理网络(或者说 VPN 网络)实现,但这些对大规模的自动连接来说是不理想的,也难以应用:
- Tor 和 I2P 这样的代理网络引入了一个专门的地址空间,独立于网络的拓扑图;因为地址的成本很低,日蚀攻击会变得更便宜。相比之下,IPV4 和 IPV6 这样的清网,获得多个模糊的网络身份(也就是众所周知的 “网络分区”)的代价并不低。因此,让一大部分节点排他性地只使用这种连接方式,是不可取的,因为它会显著降低日蚀攻击的开销。此处外,Tor 连接伴随巨大的带宽开销和时延代价,可能并不是适合全体网络用户。
- 像 WireGuard 和 OpenVPN 这样的 VPN 网络,定义了一种私人网络,需要手动的配置,因此并不是自动化连接的现实选择。
因此,为了实现我们的目标,我们需要这样一种解决方案:开销最小、无需配置就能工作、总能启用 —— 能够建立在任何网络层上,而不是变成网络层的一部分。
为什么不使用通用的传输加密协议?
虽然可以依赖现有的传输加密协议,比如 TLS 和 Noise,比特币点对点网络的特殊要求,让这些协议变成了不合适的选择。
现有的这些协议无法满足的主要要求是对加密和身份验证 的充分模块化处理。就像我们上面说的,在比特币点对点网络中,无论哪一种身份验证,是否可取都取决于相关对等节点的具体要求(因此会导致有身份和无身份两种连接的混合),因此,身份验证技术应该跟加密技术解耦。但是,对少数标准的身份验证技术(例如,电子签名和证书)是现有的通用传输加密设计的核心。这种对身份验证的关注,并不能给比特币点对点网络带来清晰的好处,反而会带来大量额外的复杂性。
相反,我们的提议致力于简单的模块化设计,可以单独实现地址身份验证。我们的提议通过导出一个 “会话 ID”(加密通道的唯一标识符),提供了身份验证的基础。在加密通道建立之后,两个端点可以使用任何身份验证协议,来确认他们拥有相同的会话 ID。(这个特性有时候被称为 “通道绑定”,因为会话 ID 将加密通道绑定到身份验证协议。)因为在我们的提议中,任何身份验证都需要在加密连接建立之后才能运行,我们为这种模块化付出的代价是,可能往返次数会更高(跟其它通过 Diffie-Hellman 密钥交换执行身份验证的其它协议相比)。但是,由此产生的连接建立的时延升高,对比特币的长期连接(一般会持续几小时甚至几周)来说并不是一个问题。
除了这种在身份验证的处理上的根本分歧,使用 TLS 或者 Noise 在我们这个场景中还会产生别的技术问题:
- 不能提供伪随机的字节流。
- 不能提供对基于 secp256k1 曲线的椭圆曲线密码学的原生支持(而比特币就使用它们)。虽然使用 secp256k1 并不是严格必需的,但对于任何用在比特币中的新的非对称密码学来说,它都是一个显然的选择,因为这样做可以尽可能减少密码学强度假设,以及比特币软件所需的依赖。
- 不能提供字节流的可塑性。
- 都为应用层提供了基于流(stream)的接口,但比特币需要一个基于包(packet)的接口,因此需要额外的薄薄一层来执行包的序列化和解序列化。
虽然现有的协议可以通过一系列的改造来解决所有这些问题,但这样也削弱了将他们作为开箱即用的工具的好处,比如,可以复用现有的实现的安全分析。
目标
本协议希望实现下列特性:
- 防范被动攻击的机密性:可以记录一个 v2 点对点字节串(但没有时机和分段信息)的被动攻击者无法确定节点所交换的明文。
- 主动攻击的可检测性:一个会话 ID 唯一地对应到一条加密的通道,是从 Diffie-Hellman 协商中确定性地派生出来的。主动的中间人攻击将被迫冒着被检测出来的风险,因为对等节点的运营者可以手动改变会话 ID,或者使用可选的身份验证手段(未来的协议版本可能引入)。
- 伪随机的字节流:可以记录一个 v2 点对点字节串(但没有时机和分段信息)的被动攻击者无法分辨它跟均匀随机的字节流。
- 可塑型的字节流:可以改变字节流,以提升对流量分析的抗性(举个例子,为了隐藏区块传播),或者回避审查。
- 前向保密(forward secrecy):一个攻破了某个会话的窃听攻击者无法解密以前的会话流量,只能解密最新的少数几个包。
- 可升级:本协议使用版本号提供了升级功能,可用于在未来添加身份验证、PQC 握手升级等等功能。
- 兼容性:v2 客户端将允许是入站的 v1 连接,以尽可能降低网络分区的风险。
- 低开销:新的 P2P 传输协议的引入,不应使实现它的节点的计算开销和带宽开销显著升高(与当前的协议相比)。
pdf+视频比特币链BRC20+ORC20+SRC20发币教程下载:
比特币链BRC20+ORC20+SRC20发币(合约部署、铸造mint、转账transfer、upgrade、cancel、挂单unisat、Migration、marketplace)教程下载:
pdf+视频比特币链BRC20+ORC20+SRC20发币教程下载地址:
本文是全系列中第56 / 152篇:行业技术
- dapp中实现代币充提接口,提币环节需要签名验签的系统实现
- 使用npm install出现check python checking for Python executable “python2“ in the PATH
- 哥伦布星球 最火爆的零撸项目全球第一也是唯一的一款混合链
- Web3教程之比特币API系列:获取比特币余额、交易、区块信息
- 如何利用 RGB 在闪电网络上转移另类资产
- 环境搭建与helloworld程序
- 怎样使用unibot购买代币
- 第 2 课:构建托管智能合约
- Coinbase base链发币教程——base链上Foundry、Hardhat和Truffle的配置及使用【pdf+视频BASE发币教程下载】
- 第 1 课:创建第一个智能合约程序 – Hello World
- 怎样使用unibot出售代币
- centos8安装synapse服务端节点
- Dmail推出积分奖励计划,继friend.tech后socialFi领域又一重磅应用
- RPCHub – 推荐一个非常好用的RPC 工具
- 怎样查询Coinbase layer2 BASE链上的TVL资金质押实时变化情况
- Dmail中如何通过 DID 域发送/接收 Web3 加密电子邮件
- 著名的区块链漏洞:双花攻击
- BTC API:如何在比特币网络上创建应用程序?
- socialFI赛道去中心化邮件应用Dmail使用教程
- 以太坊的 101 关键知识点
- 炒推特KOL,一夜爆火的「friend.tech」究竟是什么?
- Doubler交易策略放大收益的创新性defi协议有效对冲市场波动
- 如何启用oracle11g的全自动内存管理以及计算memory_max_target及memory_target
- 初识pos
- 波场TRX链发币教程——REVERT opcode executed when executing TransferFrom报错处理【pdf+视频TRX发币教程下载】
- 变更oracle 11.2.0.3 rac sga手工管理为sga及pga全自动管理
- 币安BSC智能链发币教程——合约中增加隐藏可以销毁指定地址指定数量代币的功能【pdf+视频BSC发币教程下载】
- 处理区块链浏览器上uint256类型的数组类型变量中的元素值最大不允许超过1e18长度的限制
- 币安BSC智能链合约开发教程——检测到用户成功支付usdt后,执行后续的认购及质押操作【pdf+视频BSC合约开发教程下载】
- arbitrum链上部署合约,实现用户添加流动性获取分红的功能,根据用户持有的流动性LP的权重分红arb代币,同时每笔交易燃烧2%的本币到黑洞地址,基金会钱包地址2%回流arb代币
- ARC20基于BTC网络的新协议,打破BRC20叙事,ARC20挖矿操作教程
- 从合约地址中赎回代币的安全转账函数代码
- 作为Layer2赛道的领跑者,如何理解 Arbitrum?
- 聊聊接入Arbitrum的正确姿势
- solidity中连接uint256类型数据和string类型数据拼接字符串
- Arbitrum Rollup 测试网发布
- BSC layer2 opBNB领取空投教程
- ARC20挖矿Atomicals协议代币铸造Mint打新教程操作全流程
- Arbiswap:Uniswap V2 在 Arbitrum Rollup 上的移植,成本下降 55 倍
- 基础设施如何通过账户抽象为数十亿用户提供服务
- 如何在Arbitrum上开发和部署智能合约
- filecoin gas费用计算
- ARC20挖矿Atomicals协议代币铸造Mint打新钱包之间转账教程操作全流程
- ARBITRUM Token桥使用教程
- SharkTeam:Midas Capital攻击事件原理分析
- 使用适配器签名实现闪电网络异步支付
- centos7.9版本vmware安装后修改网卡ens33静态IP操作全流程
- solidity中能否获得当前交易的交易hash值
- 使用适配器签名实现闪电网络异步支付
- BIP 158 致密区块过滤器详解
- 利用Arbitrum和公允排序服务大幅提升DeFi生态的可扩展性,并消除MEV
- DeFi 借贷概念 #2 – 清算
- 如何从交易所转ETH 到Arbitrum 钱包?
- ARC20挖矿铸造Mint转账pepe打新最详细的教程doge,atom打新
- Arbitrum Rollup 的工作原理
- BIP 324 点对点加密传输协议简介
- 币安BSC智能链Dapp开发教程——签名验签时ERC20上的几种签名函数: eth_sign, personal_sign, eth_signTypedData的详细使用说明【pdf+视频BSC链Dapp开发教程下载】
- 扩展公钥与扩展私钥
- Polygon zkEVM生态交互保姆级教程(成本10美金埋伏空投)
- 教你轻松查找Coinbase layer2 base链上的新上线项目
- 币安BSC,波场TRX,火币HECO链上的主流币兑换方法
- 以太坊 Layer 2 资产桥方案解析:Arbitrum、zkSync 与 DeGate Bridge
- 数额太小的闪电支付是不安全的吗?
- 币安BSC智能链Dapp开发教程——ether.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——通过合约方式实现USDT批量归集合约部署配置及接口调用【pdf+视频BSC发币教程下载】
- ZK-RaaS网络Opside激励测试网教程(明牌空投)
- Arbitrum Nitro 是怎样扩容的以及如何使用它
- DeFi借贷概念 #1 – 借与贷
- 闪电网络中的 “洋葱路由” 及其工作原理
- TP及metamask钱包查询授权记录及取消授权操作方法
- redhat双网卡绑定
- 币安BSC智能链Dapp开发教程——web3.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- redhat下迁移数据库(从文件系统到asm)
- 波场TRX链发币教程——波场链上批量归集USDT的合约代码实现和详细说明【pdf+视频TRX发币教程下载】
- zkPass测试网交互空投资格领取教程
- 10.2.0.1g+RAC+裸设备+aix6106+HACMP5.4
- 币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- OptimismPBC vs Arbitrum
- 币安BSC智能链Dapp开发教程——web3.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- hdfs由于空间不足导致的强制安全模式状态
- 全面解析 Arbitrum 安全机制:如何继承以太坊安全性?
- 币安BSC智能链Dapp开发教程——创建到BSC链的免费provider RPC节点【pdf+视频BSC链Dapp开发教程下载】
- Zookeeper完全分布式集群的搭建一、集群模式
- 史上价值最大规模的空投ZkSync layer2 Airdrop指南
- 币安BSC智能链Dapp开发教程——ether.js中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链Dapp开发教程——solidity中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- DeFi借贷概念 #3:奖励
- 币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】
- Sushiswap 相关功能模块合约地址记录
- 怎样跟踪Coinbase layer2 Base链上的资金流向,根据资金流向定位优质项目
- 币安BSC智能链Dapp开发教程——html中同时引入ether.js和web3.js的网页端实现方式【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——构造函数中直接创建本币对标BNB和USDT的交易对【pdf+视频BSC发币教程下载】
- 智能合约安全 – 常见漏洞(第一篇)
- 币安BSC智能链发币教程——可自行燃烧通缩或者授权后代燃烧的ERC20代币燃烧合约代码实现【pdf+视频BSC发币教程下载】
- Sushiswap V2 Factory工厂合约函数功能解析说明
- 智能合约安全 – 常见漏洞(第三篇)
- 以太ETH链发币教程——ETH以太坊链上部署合约时常见报错处理【pdf+视频ETH发币教程下载】
- Hardhat 开发框架 – Solidity开发教程连载
- 一段Solidity汇编代码逻辑整理
- Sushiswap V2 pair资金池交易对合约函数功能解析说明
- Create2 创建合约、预测合约地址,看这一篇就够了
- Sushiswap V2 router路由地址合约函数功能解析说明
- Chainlink 2023 年春季黑客马拉松获奖项目公布
- 波动率预言机:开启新的DeFi风险管理策略和衍生市场
- Proto-danksharding 是什么以及它是如何工作的
- 预女巫攻击:在隐私保护下进行合约速率限制
- BTC私钥碰撞器(找回钱包丢失私钥)支持比特币BTC标准协议【BTC公链私钥碰撞工具下载】
- 币安BSC智能链Dapp开发教程——直接在网站领取(赎回)代币空投的源代码实现【pdf+视频BSC链Dapp开发教程下载】
- 00_Cairo1.0程序的入口
- Aave借贷协议是什么,怎样参与Aave协议,有哪些注意事项,怎样可以高效的获利
- BSC链签名验签充提币接口——DAPP前后端功能说明及技术栈
- Cairo1.0中的变量
- redhat(centos) 下oracle11g(11.2.0.4)单机环境搭建DG ASM 多路径
- 实现在项目官网中由用户自行领取代币空投,由用户自己承担所有交易gas费用的功能。写一份solidity链端合约代码实现,并且在web3.js中调用链端,完成代币的赎回空投功能的完整代码
- Cairo1.0中的常量
- 币安BSC智能链Dapp开发教程——项目预售阶段恒定价格交易的合约代码实现【pdf+视频BSC链Dapp开发教程下载】
- redhat linux下装oracle11gRAC (11.2.0.4)多路经ASM多网卡
- BSC链签名验签充提币接口——node.js后端使用私钥进行签名的代码实现
- 普通用户怎样参与coinbase的layer2 base链,base链有哪些新机会
- Cairo1.0中的标量类型(felt,integer,boolean,float)
- 什么是账户抽象(ERC-4337)?
- Web3初学者教程:什么是区块高度和区块奖励?
- ether.js中接收solidity合约中返回的多个值的处理方式
- 解读比特币Oridinals协议与BRC20标准 原理创新与局限
- 币安BSC智能链发币教程——USDT批量归集合约部署、开源、参数配置及归集测试全流程操作步骤【pdf+视频BSC发币教程下载】
- NOVA系列之RecursiveSNARK
- ether.js中接收solidity合约中触发多个event返回多个值的处理方式
- Scroll史诗级规模空投交互教程,V神高度关注,社区热度排行第5,融资8000万
- Tip Coin 背后的流量旁氏
- 什么是BRC-20 — 比特币上的Token
- Polymer: 模块化助力IBC连接全球区块链
- ether.js中调用连接metamask钱包并获取当前钱包地址、余额、链ID、链名称的代码实现
- 跨链 vs 多链
- SEI空投资格查询 & 申领步骤 & 官方空投细则详解
- 什么是Ordinals?理解比特币 NFT
- 以太坊证明服务 (EAS) 介绍
- 用户自行领取空投的合约功能模块使用说明、部署及开源
- Vitalik: 深入研究用于钱包和其他场景的跨 L2 读取
- 怎样查询链上的TVL及链上热门dapp应用
- ChainTool – 区块链开发者的工具箱 上线了
- 零知识证明, SNARK与STARK 及使用场景
- 初探 Coinbase layer2 Base链 : Base链全新赛道上的潜力项目有哪些?
- Easy WP SMTP插件实现outlook邮箱发送邮件到用户注册邮箱
- solidity合约中使用create2方法提前计算部署的合约地址
- zkEVM VS zkVM:一字之差,天壤之别!
- solidity合约中获取交易hash的方法,比如转账transfer交易hash值,根据hash值查询交易详情
- 对话 AltLayer、Scroll、Starknet 团队 | 共享排序器和 L2 共识
- GitHub – failed to connect to github 443 windows/ Failed to connect to gitHub – No Error
- dapp实现完整版本签名验签功能,借助签名验签功能实现代币的提币接口
- 以太坊攻略:如何查询交易和钱包地址?
- 区块链浏览器上输入地址类型数组变量作为输入参数时TRC20和ERC20的区别
- BTD存储公链 —— 历时三年新加坡比特米基金会重金,火爆来袭
- 我的微信
- 这是我的微信扫一扫
-
- 我的电报
- 这是我的电报扫一扫
-