R-Puzzle基本原理
长话短说
普通的ECDSA签名校验是校验整个签名与预期是否一致,而R-Puzzle仅校验ECDSA签名中的r是否与预期的一样。
ECDSA签名
ECDSA签名需要用到的信息:
-
基点:G
-
G的阶:n
-
签名者的私钥:d,从私钥可计算出公钥Q = d * G
-
待签名的信息:m
签名过程:
- 生成一个新的随机私钥k,从私钥可计算出其公钥R = k * G。R的横坐标标记为xR,纵坐标标记为yR。
- 令 r = xR mod n
- 计算 H = Hash(m)
- 按照数据类型转换规则,将H转化为一个大端的整数e
- 计算 s = k^-1(e + r*d) mod n
- 签名 = (r, s)
最终,签名包含r和s两部分。其中r就是R-Puzzles中的R。
通过上述签名计算过程可以知道,r只需要通过随机私钥k就可以生成,并不需要签名者的私钥d。这是R-Puzzle的关键技术原理。
P2RPH脚本模板
P2RPH是Pay to R-Puzzle Hash脚本模板的缩写,这个输出脚本是这样的:
OP_OVER OP_3 OP_SPLIT OP_