禅世界论坛

<- 社交账号登录。或禅世界会员登录【论坛使用帮助】
徐令予:比特币安全性初探
 
Notifications
Clear all

徐令予:比特币安全性初探

1
1 Users
0 Reactions
128 查看
Many
 Many
(@many)
Illustrious Member Admin Registered
已加入: 9 年 前
帖子: 12364
Topic starter  

徐令予:比特币安全性初探(上篇)基础架构与密码学原理

一周前,我撰写了《150 亿美元比特币被盗案的真相》,对比特币系统的安全性进行了简单介绍。文中指出,比特币所依赖的密码学算法与区块链结构在整体上是安全稳固的,所谓“150 亿美元比特币被盗”事件,并非源自密码学算法被攻破,而更可能是由低级技术错误或机构内部管理不善所引发。

该文发表后,一些读者反映,由于缺乏对比特币基本原理的了解,阅读时难免产生内容跳跃之感,对文中观点的理解与接受也造成困难。同时,亦有多位朋友建议,针对比特币的基础概念与安全设计,补充一篇更为系统且通俗易懂的科普文章,应该会受到更多读者的欢迎。

这正是撰写这篇文章的缘起。

事实上,尽管比特币已广为人知,却对它到底是什么、如何保存、如何交易、为何安全,仍然模糊不清。本篇将以尽量通俗的方式介绍比特币的基本概念,只要读完本文的上篇,你就具备了理解比特币的必备知识。

一、比特币不是“账户和余额”,它更像是“有序列号的纸币”

比特币资金不是存放在银行系统的账户余额,而是由一个个的数字化钱币“UTXO”组成,这是理解比特币的关键。

UTXO,即未花费交易输出(Unspent Transaction Output),指的是已收到但尚未花费的数字化纸币,它是区块链上记录的一条仍未被引用的交易输出。UTXO 很像数字钱包中的单张纸币,而您的比特币总余额则是您拥有的所有纸币(UTXO)面值的总和。

你可以把每个 UTXO 理解成一张纸币:

每个 UTXO 都有一个固定面额(例如 0.015 BTC);

每个 UTXO 都有一个地址,这个地址确定了 UTXO 的“归属权”。地址可以理解为纸币上印的序列号,你知道多少个地址,如同手中握有了多少张有确定序列号的纸币。

UTXO不可拆开使用,就像纸币不能撕掉一半花出去。当您发送加密货币时,必须交付一个或多个 UTXO ,系统会为收款人创建一个新的 UTXO,并为您收到的任何“找零”创建另一个新的 UTXO。

请注意,这是UTXO和纸币的最大区别:一张纸币本身可以用于多次交易(你花给别人、别人再花给别人),某个序列号的纸币在交易中可以反复使用,它可以归属于不同的主人。但一个 UTXO 在比特币里是“一次性用品”,花费后即彻底失效。每个UTXO 在交易结束后就被废弃,它从一而终,一仆不事两主。

二、比特币和区块链

区块链是一个巨大的、不可篡改的历史账本,记录所有过去发生过的所有交易,包括:

  • 哪张纸币被花掉

  • 新纸币(新 UTXO)发给了哪个地址

  • 金额是多少

  • 何时发生

区块链通过密码学哈希函数和分布式共识机制,将交易按区块链接起来,从而保证历史不可篡改。

基于历史账本数据,在系统的每个节点维护的是“当前未花费纸币清单”,也就是 UTXO 集合。

区块链就像是档案室,保存着全部流水记录。

UTXO 集合是最新余额表,存放着当前每一个有效的UTXO的面值和相对应的地址。

这两者一起构成比特币系统的核心结构。

区块链记录历史 → 节点扫描历史生成 UTXO集合 → 交易时节点只用 UTXO

三、钱包里存的是什么?不是比特币,而是“钥匙”

许多人以为自己的比特币保存在电脑或手机里。事实上,比特币的UTXO永远存在于区块链上,钱包并不保存比特币,而是保存能动用这些UTXO的钥匙。

钱包存放的核心内容包括:

  • 私钥:通过数字签名作为“钱的所有权”的唯一凭证,它必须得到严格保护;

  • 公钥:由私钥计算而来,用于验证签名;

  • 地址:由公钥的哈希计算而来(相当于纸币的序列号),收款时你只需要公布地址,而不是公钥本身。

钱包的本质是:比特币UTXO的地址记录,以及对这些钱币的所有权提供凭证。

四、A 给 B 支付比特币的完整过程

步骤 1:B 给 A 一个地址

B 打开钱包,生成一个新的地址,通过电邮或其它网络社交软件发给 A。

步骤 2:A 在钱包中填写金额并发起支付

A 输入金额,例如 0.01 BTC。钱包自动选择属于A 的某个 UTXO,例如一个0.02 BTC 的 UTXO(就像在真实钱包中拿出一张纸币)。

步骤 3:构造交易

钱包自动构造交易:

  • 将 0.02 BTC 的地址输入并写进交易

  • 将 0.01 BTC 输出给 B 提供的地址

  • 将剩余金额找零到 A 的新地址

  • 公布与0.02 BTC 的地址相对应的公钥

  • 使用0.02 BTC 的地址相对应的私钥对交易进行数字签名

步骤 4:广播交易

交易被发送到比特币网络。各节点检查签名是否有效、UTXO 是否存在。

步骤 5:矿工更新区块链

矿工将这笔有效交易写入新的区块。当区块被确认后:

A 拥有的旧 0.02 BTC UTXO 作废

B 获得新的 0.01 BTC 的 UTXO

A 的找零地址获得新的 UTXO

钱包更新余额,交易完成。

五、本篇总结

  • 比特币是由 UTXO 组成的系统,而不是“账户余额”系统

  • 每个 UTXO 像一张纸币,地址像序列号

  • 钱包不存比特币,钱包存的是私钥

  • 私钥通过椭圆曲线算法生成公钥,公钥哈希生成地址

  • A 到 B 的支付流程

以上这些内容是理解比特币系统运作的基础。

下篇将对比特币的安全问题作更深入的探讨,内容包括:

  • HD 钱包的分层结构和私钥保护

  • 为什么地址是公钥的哈希?公钥为何推迟公布

  • 签名时随机数 K 的意义

徐令予 作于南加州 (2025年11月23日)

作者投稿


徐令予:比特币安全性初探(下篇)魔鬼藏在细节之中

本文的上篇指出:比特币是由 UTXO 组成的系统,而不是“账户余额”系统。每个 UTXO 像一张纸币,它的地址就像纸币上的序列号。钱包不存比特币,钱包存的是私钥。并且又解释了地址、公钥、私钥之间的关系,最后还展现了比特币从 A 转到 B 的整个支付流程。这些内容是理解比特币系统运作的必备知识。

然而,上篇刻意略过了几个关键细节:为什么地址不是公钥本身?为什么比特币地址只用一次?为什么数字签名时还需要一个随机数?数字钱包如何管理无数个地址?但正是这些技术细节为比特币的长治久安提供了坚实的保障。

这些“细节”并非技术爱好者的专属话题,而是构成比特币长期安全的根基,理解它们才能真正看懂为何比特币在协议层面从未被攻破。

下面将围绕这几个核心问题作出较为深入的分析。

第一部分:公钥为何不能直接作为地址?公钥为何延迟公布?

在上篇中我们提到:地址不是公钥,而是公钥的哈希值。从用户角度看,这让地址变成了一串更短、更方便使用的字符串;但真正的原因并不是为了节省空间,而是为了安全。理解这一点可从两个角度入手。

第一点:如果直接用公钥当地址,公钥会一直暴露。

比特币的公钥密码基于椭圆曲线,其安全性依赖于:从公钥推导私钥几乎不可能。在目前的算力资源环境下,这种算法是足够安全的。然而,将来的量子计算机或者GPU集群可能会削弱椭圆曲线的算法安全。公钥暴露次数越多、暴露越早,潜在风险就越大。

因此,比特币采取了一种策略:收款时只公布公钥的哈希值(地址),公钥未暴露。花费时才公布该地址的公钥,而且仅公布一次。

这种做法称为延迟公钥暴露。它的意义在于:公钥仅在必要时短暂暴露,暴露越少、时间越短,对未来攻击的抵抗能力越好。而UTXO一旦花费就立即淘汰,相应的公钥不再被使用。

第二点:为什么地址只用一次?

钱包每次找零都会生成新的地址,而不是复用旧的。这带来三个好处:

  • 公钥暴露次数减少,安全性更高

  • 隐私性增强,难以将多笔交易关联起来

  • 攻击面缩小,公钥哈希比公钥本身更难分析

因此,一次性地址并不是麻烦,而是为获得安全与隐私的双赢设计。

第二部分:私钥签名中的随机数 K:为什么 K 如果出问题,钱有可能被偷走?

这是有关比特币的最难解释,但却是必须认真对待的安全隐患。一些交易所、私人钱包,都是因为随机数 K 出问题而造成不可挽回的比特币资产损失。

首先必须理解:数字签名不是直接用私钥对交易内容作运算。实际上,比特币使用的 ECDSA 签名需要一个额外参数:K (一次性随机数)。

签名过程大致是:私钥、随机数 K、交易哈希三者经过数学运算,得到数字签名。

为什么 K 一旦重复或可预测,私钥就会暴露?这是 ECDSA 数学结构决定的。如果攻击者发现两次签名使用了相同的 K,就可以直接计算出私钥。历史上真实案例包括一些比特币库的随机数不安全、某些硬件钱包的硬件泄露、开发者使用固定 K 等等,引发过巨额损失。

k 的随机性对比特币系统特别重要。在传统封闭系统(如银行后台或操作系统内部)中,即使某次签名的 k 出错,也不一定会被攻击者看到,因为数据并不会公开。

但比特币系统却完全不同。比特币的每个签名都会永久公开在区块链上,任何人都能看到你的所有历史签名。攻击者可以无限次分析这些公开数据,只要出现一次 k 弱随机或重复,就能立即利用数学关系推算你的私钥。用户自己生成签名,没有中心化专业机构支持,随机数质量完全取决于用户设备和软件,这会构成安全隐患。一旦私钥泄露,与该私钥相关的所有比特币会立即失去控制权。

另一个常见误解是:既然地址只用一次,私钥泄露又能怎样?其实私钥在签名后并不会立即失效。在交易确认之前,私钥仍然代表着该 UTXO 的所有权。如果攻击者在你签名后短时间内推算出私钥,他可以抢先构造另一笔交易,支付更高手续费,矿工就会优先打包他的交易,你的钱会被直接转走。

因此,使用一次性地址并不表示可以降低随机数 K 的安全要求。K 的随机性保护的是当下的安全,而一次性地址保护的是未来的安全,他们防范的是两种不相同的安全威胁。

第三部分:HD 钱包的分层结构:为什么只需要一组助记词就能管理无数个比特币的地址和相关的私钥?

上篇提过:钱包内部会自动生成新的地址,但没有解释它是如何做到的。这依赖于 HD 钱包的设计。

在早期比特币钱包系统中,一个地址对应一个独立私钥。如果用户有成百上千个地址,就需要保存成百上千个私钥,这既不方便也不安全。

HD 钱包的出现解决了这些问题,HD 钱包的英文全名是 Hierarchical Deterministic Wallet,直译为“分层确定性钱包”。

Hierarchical(分层的):

  私钥、公钥、地址按照树状层级结构推导,可以生成无限子密钥。

Deterministic(确定性的):

  所有子私钥、公钥和地址都是由一个主种子按规则确定生成的,完全可重复。

Wallet(钱包):

  能管理密钥、地址、签名交易的工具。

因此,用户只需保存一组助记词,就可以恢复过去所有的地址,不会遗漏任何一枚比特币。因此,只要保存好助记词,换手机、换钱包软件、甚至去其他国家,都能找回所有比特币。这在安全性上有显著优势:

  • 用户不再需要管理大量私钥文件;

  • 找零可以无限生成新地址,隐私和安全性都更高;

  • 钱包结构简单,恢复成本低。

第四部分:比特币系统为何安全?又为何仍然有人被盗走上百亿美元?

通过上、下两篇文章可以得出明确结论:

  • 区块链的共识机制是可靠的;

  • 比特币协议是安全的;

  • 密码算法也是安全的。

但为什么仍然会发生交易所巨额失窃?原因十分简单,真正造成用户资产被盗的是各种非算法因素,它们包括:

  • 电脑被入侵控制

  • 电脑或手机被植入木马程序

  • 钱包随机数生成器不合格

  • 助记词存放不当

  • 托管机构存在管理漏洞

最后的结论是:比特币协议没有问题,问题出在系统之外。数字货币的最大威胁来自设备和人,而不是数学算法。换句话说,比特币系统真正的弱点不在链上,而在链外!这也与我之前撰写的《150 亿美元比特币被盗案的真相》一文中的观点完全一致。

徐令予 作于南加州 (2025年 11月23日)

作者投稿



   
引用
Share:

【声明】:禅世界论坛尊重言论自由,任何人可讨论佛法、政经、生活和科技等话题。言论发表前请根据常识和法规自审。论坛管理员和版主有权删除任何不当内容。使用本论坛即表示接受【禅世界论坛规则】【论坛使用帮助】。 【禅世界免责声明】


【Chanworld.org】2017.06.06-2021.04.30-2025.04.10-MG-RM