v0.0.1

Schnorr(EC-Schnorr)

Schnorr 签名的椭圆曲线实现,比 ECDSA 更简单、更高效。

Schnorr 签名算法本身 与具体的曲线无关 , 可以用于不同类型的椭圆曲线,并不限于椭圆曲线

支持 Ed25519, secp256k1, secp256r1...等椭圆曲线

不仅比传统的 ECDSA 更加简洁高效,而且支持 多重签名(例如,多个用户共同签署一份文件)。
可用于多重签名(MuSig, MuSig2),如 Bitcoin Taproot 采用 Schnorr 签名

签名和验签流程:

假设 A和B两个用户, A 签名信息 B验证信息

通信双方A和B, 已知信息有:

- 椭圆曲线
- 基点 G
- G 的阶 n
- 要签名的消息 m
A 签名:

1. A 生成自己的公钥私钥


(其中HA是 A的公钥是一个坐标点有xy, KA是A的私钥, G为基点)

2. 在

中选择另一个随机私钥k(nonce) (n为基点G的阶)
随机数可能是多签的hash...

3. 计算第2步的随机私钥对应的公钥,


(R为结果的坐标点, k为第2步的随机数, G为基点)

4. 计算哈希得到 e,


(Rx第3步的R坐标点的x坐标、公钥 HA、签名的消息 m, n为基点G的阶)
计算 e 时, 使用的哈希函数通常是 Sha256

5. 计算 "s",


(k为第2步的随机数, e为第4步的哈希值, KA是A的私钥, n为基点G的阶)
若 s=0, 则的回到第2步重新选择一个 k, 并 重新计算

6. 发送将 A 的公钥 HA, 消息 m, 签名数据(Rx, s) Rxs , 发送给 B

B 验证签名:

1. 计算哈希值 e,


(Rx签名数据的R坐标点的x坐标、公钥 HA、签名的消息 m, n为基点G的阶)

2. 验证签名

是否成立
(s签名数据的s, G基点 , Rx签名数据的R坐标点的x坐标, e为第1步的e, 公钥 HA )

Schnorr - Secp256k1 — 生成签名

使用私钥签名消息,使用公钥进行验证

详细查看

私钥:
公钥:

message(Hex):

message输入类型:
auxRand(辅助随机数)
0x
Signature

Schnorr - Secp256k1 — 验证签名

使用私钥签名消息,使用公钥进行验证

公钥:

message:

0x

Signature:

0x