比特币钱包与交易:从密钥到UTXO的五步拆解

·

关键词:比特币钱包、私钥公钥、UTXO、数字签名、交易验证、SHA256、非对称加密、比特币交易

比特币钱包到底是“装”什么?

在比特币网络里,你看到的“钱包”(wallet)不是装比特币的“口袋”,而是一串或多串私钥的容器。私钥决定了你对链上 UTXO(未花费交易输出)的支配权,进而决定你能花多少比特币。想用简单一句话记住?“没有私钥,就没有比特币。”


一、底层密码学:三道锁守护安全

1. 单向散列函数——SHA256

2. 非对称加密——椭圆曲线 SECP256K1

3. 同态加密(扩展阅读)

在链外场景中,同态加密让你把加密后的数据交给第三方运算,结果解密后与直接运算明文同效,不透露敏感成分。

👉 想知道如何提高加密货币私钥管理的安全阈值?


二、密钥、地址与钱包:三步生成你的收币名片

  1. 随机数 → 私钥
    256 bit 熵的随机数即为私钥,必须离线备份,绝不上传云端。
  2. 私钥 → 公钥
    SECP256K1 椭圆曲线函数单向推出公钥,“逆向几乎不可能”。
  3. 公钥 → 地址

    SHA256(RIPEMD160(公钥)) → 得到 20 字节的 PubKeyHash  
    加入版本号和校验码 → BASE58 编码 → 最终地址  

    典型示例:1A1zP1eP5QGefi2DMPTfTL5TTmv7DivfNa,正是中本聪挖出创世区块后留下的首笔 50 BTC 收款地址。

实际上,你钱包里存的是一串助记词(Mnemonic)或多把私钥,对应 N 个地址。只要私钥在手,几十、上百个地址的资金都可一键接管。


三、比特币交易:一条没有账户的链

比特币交易的本质就是 把旧的 UTXO 拆开 → 形成新的 UTXO。所谓“余额”仅为未被消费的 UTXO 总和。

一笔典型转账

  1. 输入(Input)
    引用上一笔交易的某个 UTXO,附上签名 ScriptSig(证明你拥有它)。
  2. 输出(Output)
    给新地址设定脚本 ScriptPubKey,以后持私钥的人才能解锁。
  3. 矿工费(Fee)
    输入总额 – 输出总额 = Fee,矿工才能打包交易。

UTXO 优势

👉 想实时追踪未花费输出的流向并计算可用余额?


四、重头戏:交易验证脚本

比特币使用基于栈的虚拟机,验证过程通俗拆解如下(以 P2PKH 为例):

步骤指令说明
1把签名和公钥压栈
2OP_DUP复制栈顶的公钥
3OP_HASH160对公钥再跑一次 Hash160
4将期望的 PubKeyHash 压栈
5OP_EQUALVERIFY对比两次 Hash160 的结果
6OP_CHECKSIG用栈顶公钥验证签名是否正确

如果每一步骤都通过,网络节点即认为交易有效并可将 Output 标记为已花费,同时生成新的 UTXO。整个过程耗时毫秒级,无需第三方背书。


五、扩展知识:图灵非完备性

比特币脚本故意不图灵完备,没有循环与递归,以防恶意脚本踢爆 Gas。安全性、可预测性和简洁性优先,复杂逻辑留给第二层解决方案。


总结清单

  1. 你真正拥有的并不是“币”,而是对特定 UTXO 的解锁权力。
  2. 钱包=私钥库,地址=公钥的 HASH,彼此之间存在单向不可逆关系。
  3. 交易=花费输入+创建新输出+矿工费,依赖 SHA256 + SECP256K1 组合进行身份验证与数据完整性检测。
  4. P2PKH、P2SH、SegWit 等脚本形式不断丰富,核心原则始终是“只有私钥匹配的公钥才能花钱”。

FAQ:新手最容易问的 6 个问题

Q1:助记词与私钥是什么关系?
A1:12(或24)个单词的助记词经 BIP39 解码派生种子,再经 BIP32/BIP44 派生出无数私钥。记住助记词等于备份全部钱包。

Q2:比特币地址可以重复使用吗?
A2:技术上可以,但重复使用会降低隐私,建议“每次收款生成新地址”。

Q3:为什么说“找不到私钥就彻底丢币”?
A3:链上不可修改不可逆,任何找回途径都得依靠密钥本身。去中心化意味着没有客服可申诉。

Q4:公钥可以公开吗?
A4:可以。从公钥到地址的过程也会暴露占用地址,加密意义仅在于无法从公钥反推私钥。

Q5:如果我 CD 机时代硬抄的地址打错了一个字母,比特币去哪了?
A5:Base58Check 加入了强校验码,绝大多数随机误写会被钱包直接拒绝,基本不会造成资金损失。

Q6:黑客能算出 SHA256 碰撞吗?
A6:目前全球计算资源的综合实验表明确属资源量级不足。SHA256 在比特币使用场景下仍是安全护城河。