椭圆曲线密码学中的签名与验证及序列化
1. 椭圆曲线签名基础
在交易中,签名的最终用途是证明秘密的合法所有者正在花费比特币。这里使用的签名算法是椭圆曲线数字签名算法(ECDSA)。
1.1 目标设定
我们有一个秘密值 $e$,满足 $eG = P$,其中 $P$ 是公钥,$e$ 是私钥。目标是一个随机的 256 位数字 $k$,通过计算 $kG = R$,我们将 $R$ 的 $x$ 坐标记为 $r$。
1.2 离散对数问题
方程 $uG + vP = kG$ 等价于离散对数问题。若知道 $e$,则 $e = (k - u)/v$。这意味着任何满足该方程的 $(u, v)$ 组合都可以。若不知道 $e$,就需要不断尝试 $(u, v)$ 直到满足等式。由于离散对数问题被认为是困难的,所以能提供正确 $u$ 和 $v$ 的人被认为知道秘密 $e$。
1.3 签名哈希
我们还需要考虑签名的目的,这在签名/验证术语中称为签名哈希,用 $z$ 表示。它是一个将任意数据转换为固定大小数据的确定性函数,是包含签名者意图的消息指纹。将其纳入 $uG + vP$ 计算中,有 $u = z/s$,$v = r/s$,其中 $s = (z + re)/k$。签名由 $r$ 和 $s$ 两个数字组成。
1.4 为何不透露 $k$
如果透露 $k$,根据 $uG + vP = R$ 等等式推导,会得出 $(k - u)/v = e$,从而泄露秘密 $e$,这违背了签名的初衷。所以可以透露 $R$,但不能透露 $k$。同时,必须使用真正随机的 $k$,因为意外泄露已知签名的
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



