椭圆曲线与比特币签名
看懂 ECDSA 的数学骨架:椭圆曲线上的点加法和标量乘法,如何变成比特币里私钥、公钥、地址与签名验签之间的安全纽带。
A complete interactive classroom, not just a preview.
Start when you are ready to enter this Stage's 12 scenes and explore, respond, and learn as you go.
为什么比特币转账时,签名能用一串椭圆曲线上的点来证明“币是你的”?
- curve-equation
- 椭圆曲线方程 y² = x³ + ax + b,以及它并不是椭圆。
- point-addition
- 椭圆曲线上的点加法 P+Q=R,以及无穷远点 O 作为单位元。
- scalar-multiplication
- 标量乘法 kP = P + P + ... + P,是从私钥到公钥的核心运算。
- dlog-hardness
- 给定 G 和 Q=kG,无法高效反推出 k,这是椭圆曲线离散对数难题。
- ecdsa-sign
- ECDSA 用私钥 d、随机临时密钥 k 与消息哈希 z 生成签名 (r, s)。
- ecdsa-verify
- 验签用公钥 Q 计算 u₁G + u₂Q,并检查其 x 坐标是否等于 r。
- secp256k1
- Bitcoin 实际使用的曲线参数:y² = x³ + 7,基点 G,阶 n。
- bitcoin-address
- 比特币地址是公钥经过 HASH160 和 Base58Check/bech32 编码后的结果。
1 more
椭圆曲线就是画一个椭圆形
展示 y²=x³+ax+b 的曲线形态,说明它是三次曲线,与椭圆无关。
私钥可以直接从公钥/地址反推出来
说明标量乘法是单向门,依赖椭圆曲线离散对数难题。
ECDSA签名就是加密消息
强调签名是使用私钥生成可公开验证的证明,不是加密,验签也不需要解密。
比特币地址就是公钥
展示公钥到地址需要经过哈希和编码,二者并不相同。
- 基本模运算概念
- 了解哈希函数例如 SHA-256 是什么
- 愿意接触少量数学公式
- 有限域算术的完整细节
- 其他椭圆曲线(如 Ed25519)
- Schnorr 签名与 Taproot 升级
- 能用自己的话解释为什么 kG 不可逆
- 能列出 ECDSA 签发和验签的主要步骤
- 能区分私钥、公钥、地址和签名在比特币里的用途
- 遇到其他椭圆曲线算法(如 Ed25519、Schnorr)时,能认出共用的点加法与标量乘法骨架。
面向对比特币或密码学好奇、有基本编程经验的学习者;不需要高等数学背景,但愿意接触少量公式。
- 01一个签名问题slideOrientationObserve
抛出核心问题:比特币交易中的签名,为什么和椭圆曲线有关?
- 比特币交易需要签名证明所有权
- ECDSA 是比特币使用的数字签名算法
- 签名的背后隐藏着椭圆曲线的点运算
- 02椭圆曲线上的“加法”interactiveModel buildingConstruct
拖动曲线上的点,直观看到三点共线得到的和:P+Q=R。
- 观察 P+Q 的几何构造
- 无穷远点 O 相当于零元
- 它不是椭圆,而是三次曲线
- 03加密用的是有限域上的“离散”曲线slideModel buildingObserve
真实签名使用的并不是连续曲线,而是在模 p 的有限域上离散分布的点集。
- 模 p 后的曲线变成离散点阵
- 运算规则仍沿用切线和弦
- 点的数量有限,适合密码学
- 04先猜一猜:为什么不能反推?quizPredictionPredict
在解释之前,先让学生选择私钥无法从公钥反推的根本原因。
- 做一次独立判断
- 区分“不可逆”来自哪里
- 05从私钥到公钥:标量乘法slideMisconception repairExplain
解释 Q = dG 的标量乘法为什么是单向的,以及私钥与公钥的关系。
- 私钥 d 是一个随机大整数
- 公钥 Q = d × G,即把 G 自己加自己 d 次
- 离散对数难题让反推不可行
- 06ECDSA 签名:r 和 s 从哪里来?slideModel buildingObserve
给出 ECDSA 签名的核心计算:r 来自 kG 的 x 坐标,s 用私钥合成。
- 随机临时密钥 k
- R = kG,r = R.x mod n
- s = k⁻¹(z + r·d) mod n
- 07ECDSA 验签:只用公钥,不靠解密slideApplicationApply
验签把公钥重新组合到一条等式里,能对上是真签名;它不是解密消息。
- u₁ = z/s,u₂ = r/s
- 验证 u₁G + u₂Q 的 x 坐标是否等于 r
- 验签不需要私钥,也不需要解密
- 08Bitcoin 选用 secp256k1slideApplicationApply
把通用 ECDSA 落到比特币实际使用的曲线上:secp256k1。
- 曲线方程 y² = x³ + 7
- 有限域 p = 2²⁵⁶ − 2³² − 977
- 基点 G 和阶 n 是公开参数
- 09公钥不等于地址slideMisconception repairExplain
比特币地址是公钥哈希后再编码的结果,所以不是直接展示公钥。
- 公钥先做 SHA-256 再做 RIPEMD-160
- Base58Check / bech32 编码
- 地址比公钥更短,且未花费时不暴露完整公钥
- 10签名在比特币交易里长什么样?slideApplicationApply
介绍比特币交易中的 ECDSA 签名如何编码,以及 low-s 等规则。
- 签名 (r,s) 以 DER 格式放入 scriptSig/witness
- 要求 low-s 防止交易延展性
- 验证者用公钥重算椭圆曲线等式
- 11最终检查:你能否串起全链路?quizAssessmentApply
用 3 道题检查私钥→公钥→地址、签名与验签的整体理解。
- 椭圆曲线运算与离散对数
- 签名与验证流程
- 比特币地址与签名编码
- 12全链路回顾slideSynthesisExplain
把私钥生成、公钥派生、地址、签名与验签串成一条完整链路。
- 随机私钥 d → 公钥 Q = dG → 地址
- 签名消息使用 kG 得到 r,用私钥合成 s
- 验签时用公钥重算 R′ 并与 r 比对
Discussion threads for a Stage aren't available yet.