Cryptology Academy · 课时

比特币脚本与 UTXO 签名验证

跟踪支付到公钥哈希(P2PKH)脚本和 ECDSA 签名

第 4 / 4 课13 个步骤

比特币脚本与 UTXO 签名验证 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

UTXO 模型

比特币使用未花费交易输出(UTXO)。每个 UTXO 都是一枚带有锁定脚本(scriptPubKey)的币。要花费它,花费方必须提供满足该锁定脚本的解锁脚本(scriptSig)。UTXO 具有原子性——要么已花费,要么未花费,绝不会只花费一部分。

比特币脚本

比特币脚本是一种基于栈且非图灵完备的语言。脚本通过压入数据并执行操作码来运行。没有循环,也没有递归——脚本始终会终止。这种有意的限制可以防止拒绝服务攻击,并使脚本验证的复杂度相对于脚本长度为 O(n)。

P2PKH:支付到公钥哈希

最常见的输出类型。scriptPubKey:OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG。scriptSig: 。执行过程:压入签名和公钥,复制公钥,执行 hash160,将结果与内嵌哈希比较,验证 ECDSA 签名。全部通过后,该币即可花费。

P2PKH 执行跟踪

P2PKH 的栈跟踪:压入 ;压入 ;OP_DUP → 压入副本;OP_HASH160 → 对栈顶执行 hash160;压入 ;OP_EQUALVERIFY → 弹出两个元素,不相等则失败;OP_CHECKSIG → 弹出签名和公钥,验证 ECDSA 签名,压入 TRUE/FALSE。结果为 TRUE 时脚本成功。

比特币中的 ECDSA

比特币在 secp256k1 上使用 ECDSA(科布利兹曲线,y^2 = x^3 + 7 mod p)。私钥 d ∈ [1, n-1]。公钥 Q = d*G。Sign(m):k 为随机数;r = (k*G).x mod n;s = k^{-1}(H(m)+r*d) mod n。签名 = (r, s),并在 scriptSig 中使用 DER 编码。

SIGHASH 类型

比特币签名会对交易的特定部分作出承诺:SIGHASH_ALL(默认):签署所有输入和输出。SIGHASH_SINGLE:仅签署对应的输出。SIGHASH_NONE:不签署任何输出(有风险)。SIGHASH_ANYONECANPAY:仅签署自己的输入,从而支持协作交易。

P2SH:支付到脚本哈希

P2SH 允许将复杂的花费条件隐藏在哈希之后。scriptPubKey:OP_HASH160 OP_EQUAL。scriptSig: 。执行过程:验证 hash(redeemScript) == scriptHash,然后执行 redeemScript。这样无需在花费之前公开条件即可实现多重签名。

多重签名(2-of-3)

redeemScript:OP_2 OP_3 OP_CHECKMULTISIG。scriptSig:OP_0 。OP_0 用于绕过 OP_CHECKMULTISIG 中的一个漏洞,该漏洞会额外弹出一个栈元素。2-of-3 多重签名要求 3 个签名中的任意 2 个。

SegWit 与 P2WPKH

隔离见证(SegWit,BIP-141)将签名从 scriptSig 移到单独的见证字段中。它修复了交易延展性问题(如果 scriptSig 改变,ID 也会改变)。P2WPKH 的 scriptPubKey:OP_0 <20-byte pubKeyHash>。见证字段:[ ]。

Taproot(P2TR)

Taproot(BIP-340/341/342)使用 Schnorr 签名和默克尔化抽象语法树(MAST)。默认花费方式是单个 Schnorr 签名(与密钥路径花费无法区分)。复杂条件隐藏在默克尔树中,仅在使用时公开。这样兼顾了隐私性和效率。

代码中的脚本验证

Bitcoin Core 在栈解释器中验证脚本。CheckSig 调用 VerifyScript,后者运行合并后的 scriptSig+scriptPubKey。对于每个 CHECKSIG 操作码,它都会调用 CheckECDSASignature,使用 secp256k1 根据交易哈希验证 DER 编码的 (r,s)。

快速检查

OP_CHECKSIG 在 P2PKH 脚本中验证什么?

回顾

UTXO 使用基于栈的比特币脚本。P2PKH 是最常见的花费模式:先对公钥进行哈希验证,再检查 ECDSA 签名。SegWit 修复了延展性问题;Taproot 增加了 Schnorr 和 MAST。下一节:差分密码分析。

免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「比特币脚本与 UTXO 签名验证」课时是免费的吗?

是的 — 「比特币脚本与 UTXO 签名验证」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「比特币脚本与 UTXO 签名验证」这节课中我会学到什么?

跟踪支付到公钥哈希(P2PKH)脚本和 ECDSA 签名 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「比特币脚本与 UTXO 签名验证」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 哈希链与区块链接
  2. Merkle 树:大规模交易完整性
  3. 工作量证明:挖矿与难度调整
  4. 比特币脚本与 UTXO 签名验证
← 返回 Cryptology Academy