比特币网络被誉为“信任机器”,其最核心的信任锚点并非矿机轰鸣,而是一套精巧的密码学协议——交易签名,理解比特币交易签名原理,才能真正明白“不是你的私钥,就不是你的币”这句话背后的技术底气,本文将用通俗语言拆解一次比特币转账在密码学层面到底发生了什么,并穿插解释椭圆曲线、哈希函数与脚本引擎如何协同完成“签名—验证”闭环。

私钥:数字世界的唯一钥匙
  在比特币里,私钥是一个 256 位的随机数,可视为一个极其巨大的密码,拥有私钥即拥有对应公钥及由其派生的所有地址资产控制权,私钥必须严格离线保存,因为任何泄露都会让攻击者直接构造合法签名,把币转走。

椭圆曲线密码学:从私钥到公钥
  比特币选用 secp256k1 椭圆曲线,通过“椭圆曲线乘法”把私钥 k 映射为公钥 K = k·G(G 是曲线固定基点),该运算正向容易、逆向困难,保证了“从公钥推不回私钥”的单向性,公钥可压缩为 33 字节,再经两次哈希(SHA-256 + RIPEMD-160)生成 20 字节的地址,对外公开收款。

交易结构:输入、输出与脚本
  一笔比特币交易由若干输入(Input)和输出(Output)组成,输入引用先前交易的某个输出(UTXO),并提供解锁脚本(ScriptSig);输出则定义新的 UTXO 与锁定脚本(ScriptPubKey),签名过程本质上就是证明“我能解锁这些 UTXO,并授权把它们花掉”。

签名流程:四步构建不可伪造的凭证

  1. 构造待签名消息
      客户端先把交易除 ScriptSig 外的字段序列化,再附加需要花费的 UTXO 的锁定脚本,最后附加哈希类型(SIGHASH_ALL 等),该消息经过两次 SHA-256 得到 32 字节哈希 z。
  2. 生成随机数 k
      使用密码学安全随机源生成临时私钥 k,确保每次签名都不同,防止“重用 k”导致私钥泄露。
  3. 计算 (r, s) 签名对
      在椭圆曲线上计算点 R = k·G,取 R 的 x 坐标为 r;再计算 s = k⁻¹(z + r·d) mod n,d 是用户私钥,n 是曲线阶数,DER 编码得到 71~72 字节的签名。
  4. 嵌入解锁脚本
      把签名与压缩公钥一起放入 ScriptSig,完成交易广播。

节点验证:脚本引擎的三步检查
  收到交易后,全节点执行以下脚本:
  1. 把 ScriptSig 压栈(签名 + 公钥);
  2. 把 ScriptPubKey 压栈(OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG);
  3. 执行 OP_CHECKSIG:节点用公钥解密签名,得到 r、s,再反向计算椭圆曲线点并比对哈希 z,若匹配则返回 True,交易进入内存池。

多重签名与隔离见证
  P2SH 多重签名把复杂脚本哈希化,简化地址长度;隔离见证(SegWit)把签名数据移到交易外部,既修复交易可塑性问题,又降低手续费,无论形式如何变化,底层依旧遵循“私钥签名—公钥验证”的比特币交易签名原理。

安全启示
  1. 私钥离线生成、永不触网;
  2. 硬件钱包内部完成签名,私钥不出芯片;
  3. 验证节点无需信任任何人,只需执行数学规则。

  从私钥到公钥,从签名到验证,比特币用纯数学构建了一套无需第三方背书的支付系统,理解比特币交易签名原理,不仅是对技术的尊重,更是对自己资产安全的负责。