v0.0.1

EdDSA(Edwards-curve Digital Signature Algorithm)

EdDSA是一种基于 Twisted Edwards曲线数字签名算法

Twisted Edwards曲线是椭圆曲线的一种, 对应公式:

EdDSA的具体实现有Ed25519 (基于Curve25519的Edwards形式), Ed448...

EdDSA不像ECDSA需要随机数nonce, 签名流程中使用了 sha512


Ed25519签名流程中公钥私钥生成是基于Curve25519 (Ed25519 并不直接使用 Curve25519 的 Montgomery 形式,而是使用它的 Edwards 变体)

Ed25519签名和验签流程:

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

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

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

1. A 生成自己的公钥私钥, 随机生成 KA,然后


其中 h 是 64 字节: 前32字节(scalar)用于计算公钥, 后32字节(prefix)用于后续生成签名使用
...
经过计算得到A的公钥 HA

2. 计算随机数“r”,

, 哈希后转小端字节序再模n
prefix为私钥hash后32位, m签名的消息, n 为G 的阶

3. 计算“R”坐标,

,
G为基点, r为第2步计算的结果

4. 计算“k”

, 哈希后转小端字节序再模n
R为第3步计算的结果, HA为A的公钥, m签名的消息, n 为G 的阶

5. 计算 "S",


r为第2步计算的结果, k为第4步的结果, s为 scalar私钥hash后的前32字节, n 为G 的阶

6. 生成最后的signature = R + littleEndian(S)

1. 解析签名得到 R和S,

R = sign的前32个字节

s = littleEndian(sign的后32个字节), 此时S是小端字节序转回 正常序

2. 计算SB


(s第1步得到, G为基点)

3. 计算k


其中R为第1步中前32个字节, HA为 A的公钥, m签名的消息

4. 计算RKA


其中R为第1步中前32个字节, HA为 A的公钥, k为第3步的结果

5. 验证签名 RKA === SB 相等则验签成功

Ed25519 — 生成签名

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

私钥:
公钥:

message(Hex):

message输入类型:
Signature

Ed25519 — 验证签名

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

公钥:

message:

0x

Signature:

0x