主页 > 如何下载imtoken > 干货| 深入探究比特币的安全模型(下)

干货| 深入探究比特币的安全模型(下)

如何下载imtoken 2023-08-17 05:10:50

(续)安全模型错误

此外,每个区块链系统都将创世块硬编码到节点软件中。 您可能会将“共享历史”(即分类帐)视为一种社会契约——一旦一个区块足够旧,网络中的所有参与者都会达成共识,即该区块永远不会回滚。 当开发人员使用较早开采的区块并使用它来创建检查点时,它更像是一种可接受的健全性检查,而不是对历史的客观描述。

除了检查点之外,节点如何实现自引导也是一个问题。 目前,比特币节点的引导过程是检查该节点是否在本地存储了它之前从对等方那里学到的数据。 如果没有,节点将查询一组硬编码到软件中的“DNS 种子”。 这些种子负责维护连接良好的比特币节点列表,并将该列表返回给您的节点。

从代码中我们可以看出,Bitcoin Core 0.13 目前使用由 Pieter Wuille、Matt Corallo、Luke Dashjr、Christian Decker、Jeff Garzik 和 Jonas Schnelli 运​​行的 DNS 种子。 任何人都可以使用 Pieter Wuille 的比特币种子生成器软件或 Matt Corallo 的软件来运行 DNS 种子。 但是,他们必须说服全节点实施的开发人员将他们的 DNS 种子主机添加到对方的软件中。

新节点的引导过程仅依赖6个DNS种子,这似乎又是一个极度中心化的单点问题。 但是不要忘记,比特币的安全模型只需要你连接到一个诚实的对等节点,就足以抵御女巫攻击了。

因此,一个新节点只需要能够连接到一个未妥协的 DNS 种子,它返回诚实节点的 IP 地址。 但是,如果所有 DNS 节点由于某种原因变得无法访问,则有一个后备方案——一个受信任的节点 IP 地址列表,该列表被硬编码到软件中并随每个新版本更新。

在围绕这些初始化参数构建的安全模型下比特币协议与安全性,全节点运营商无需相信 X DNS 种子或 Y Bitcoin Core 软件开发者会为其提供真实数据,只需要相信 1/X DNS 节点没有遭受攻击, 或 1/Y 比特币核心软件开发人员诚实地审查硬编码对等更改的有效性。

没有绝对的安全

从更深层次来说,当你运行一个全节点时,你在一定程度上信任你所运行的硬件和软件。

有许多方法可以检查二进制文件的签名与 van der Laan 的签名以验证软件的真实性,但很少有人愿意这样做。 至于如何验证硬件的可靠性,这是一个棘手的问题。 如果您需要安全的硬件解决方案,最接近的选择是 ORWL。 如果有人试图篡改 ORWL,就会触发其“自毁”机制。

比特币协议端口_比特币协议与安全性_哪种比特币钱包安全

但是,由于 CPU、RAM 等重要硬件通常是专有的,您永远无法 100% 确定它们不会受到损害。

比特币的去中心化制衡

当你开始审视比特币系统中不同参与者之间的关系时,你会发现自己陷入了迷雾之中。

运行全节点的目的是保护您的财务主权。 这意味着一旦您安装并运行了特定版本的软件,您就与该软件以及所有其他网络参与者签订了协议——不仅您将遵守该软件的规则,而且其他网络参与者也必须遵守这些规则跟着。

因此,如果人们想要对软件规则进行向后不兼容的更改,您必须运行新版本的软件以表示您明确同意这些规则更改。 另一方面,如果它是向后兼容的规则更改,即使您不同意,也可以在网络中强制执行。

有人对比特币内部的去中心化制衡做了一个高层次的总结:

哪种比特币钱包安全_比特币协议与安全性_比特币协议端口

比特币治理的三个主要分支:

需要注意的是,全节点软件不会自动更新,这是设计使然。 自动更新将使权力的平衡向有利于开发人员的方向倾斜,允许开发人员在未经节点和矿工许可的情况下强制更改规则。 遗憾的是,虽然规则变更在技术层面上可能是向后兼容的,但多年的经验告诉我们,足够有创意的软分叉也可以实现违反旧版本规则的变更。 例如,Vitalik Buterin 曾经提到过这样一个想法:比特币的出块时间将通过软分叉从 10 分钟缩短到 2 分钟,这必然会加快比特币的发行速度。 面对不利的软分叉,全节点有一张王牌:用硬分叉与其他支持软分叉的矿工划清界限。 这(按设计)难以执行,并引发了许多关于如何衡量共识和找到具有高经济权重的节点的问题。 从技术上讲,这种硬分叉可以通过将挖掘算法从双 SHA256 更改为另一种哈希函数来实现。 一旦成功,所有 SHA256 ASIC 矿工将无法开采比特币。 因此,节点运营者应时刻警惕比特币生态的变化,提醒矿工如果越权可能被替换的风险。 许多博弈论都在讨论矿工运营及其对比特币安全的威胁,在我之前的帖子中,我推测了挖矿生态系统可能会发生怎样的变化。 虽然比特币挖矿不像它希望的那样集中,但到目前为止它运作良好。 这是因为比特币矿工投入了如此多的资金,他们不会冒着巨大损失的风险在一个人人注视的系统中作恶。

SPV 安全

许多比特币用户使用轻量级客户端而不是完整节点访问网络,因为它们消耗的资源少得多,同时仍提供强大的安全性。 使用简单支付验证 (SPV) 的客户下载整个链上所有区块的区块头的完整副本。 这意味着自比特币诞生以来,下载和存储需求随着时间的推移呈线性增长。 有关详细信息,请参阅比特币白皮书的第 8 节。

哪种比特币钱包安全_比特币协议与安全性_比特币协议端口

中本聪在白皮书中写道,SPV 客户端“无法验证交易本身,但通过将交易与区块链关联起来,可以看到网络中的节点已经接受了交易。随着越来越多的区如果区块被在链上,它进一步确认网络已经接受了交易。” SPV 假设在 X 块确认后伪造交易的成本非常高。 SPV 看起来和全节点一样安全,但它引入了一个额外的假设:只要一个区块头和工作量证明有效,它包含的所有交易也是有效的。 由于 SPV 客户端并不验证本文第 1 节中提到的所有共识规则,它们假设响应交易查询请求的节点已经验证了共识规则。 另一个较小的安全差异是同行可能会隐瞒您的信息。 如果你运行一个完整的节点,节点可以对你隐藏未确认的交易和区块。 但是一旦你从你的同行那里得到一个区块,没有人可以向你隐藏该区块中的任何交易。 另一方面,如果你运行的是 SPV 客户端,节点可能会为你提供区块头,然后在相应的区块中保留交易。 SPV 客户端可以查询一个地址的关联交易。 尽管节点用虚假交易来欺骗 SPV 客户端的代价很高(需要用足够的 PoW 挖出一个区块),但他们可以谎称 SPV 客户端用来查询交易的布隆过滤器(bloom filter)没有结果。 另一点需要注意的是,由于 Bloom 过滤器的缺陷比特币协议与安全性,SPV 遭受严重的隐私泄露。 BitcoinJ 有一篇关于 SPV 安全模型的优秀文章。 对于未确认的交易,他们指出:在SPV模式下,只要你连接的节点向你转发了一笔交易,你就只能相信这笔交易是有效的。 如果攻击者可以确保你连接的节点都是他的,他们可以向你发送一个完全无效的交易(花不存在的钱),你会接受交易是有效的。 对于普通用户来说,SPV的安全性已经“够高”了。 尽管如此,我们可以通过 SPV 欺诈证明来改进它。 虽然已经有一些关于欺诈证明的讨论,但关于如何将它们构建到比特币协议中的建议尚未实现。

比特币网络没有 127.0.0.1

如果你没有运行一个完整的节点(并实际使用它来验证交易),你至少在某种程度上信任第三方,这在安全模型中有所不同。 请注意,这并不要求所有用户和企业直接在比特币核心的 RPC API 之上构建他们的软件。 一些可供选择的基础设施配置包括但不限于: 1) 使用移动钱包配置,例如 Bitcoin Wallet for Android、GreenAddress 或 Stash,仅查询您自己的全节点钱包。

哪种比特币钱包安全_比特币协议端口_比特币协议与安全性

2)在SPV节点库(如BitcoinJ)上构建应用,并设置这些应用只连接自己的全节点。 在 BitcoinJ 中,这可以通过定义您自己的 SeedPeer 并在初始化期间将其传递给您的 PeerGroup 来实现。 使用 libbitcoin,您可以使用此示例来定义到特定节点的网络连接。 3) 构建与比特币核心的 JSON-RPC API 兼容的代理服务器。 这个API不仅会向第三方服务发送一些调用,还会通过调用本地全节点自动校验第三方服务返回的数据。 BitGo 的 BitGoD 软件就是一个例子。 这种混合模式提供了两全其美的优势:您可以使用第三方提供的高级功能,同时保留您自己的财务主权。

全节点:为了自由

显然,运行自己的全节点是最安全的选择,需要最少的假设。 构建一台能够运行可靠的全节点的计算机只需要几百美元。 您不妨计算一下,然后决定是否值得为保护您的财务主权而付出代价。 感谢 Kristov Atlas、Eric Martindale、Andrew Miller 和 Kiara Roble 对本文的审阅和反馈。

(结束)

(本文链接较多,可点击左下方“阅读原文”从EthFans网站获取)

原文链接: