Some verification implementations for the x25519 scheme algorithm.
Scheme | Paper (description) | Status |
---|---|---|
Ring Signature | Borromean Ring Signature | prepared |
Zero-Knowledge Proof | Schnorr Non-interactive Zero-Knowledge Proof | prepared |
Multi Signatures | parpared | |
Threshold Signatures | Douglas R. Stinson, Reto Strobl - Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates | parpared |
本文中所有出现的变量,小写字母表示标量,大写字母表示离散对数问题中的参数,例如:椭圆曲线中的点。
原始的Schnorr签名是一个交互式的签名机制。允许在任何拥有相同生成元(指在离散对数问题中)的协议参与者双方,证明某一方拥有knowledge
Original Schnorr Signature的协议流程如下:
- 证明者随机选择一个标量
$r_1$ ,然后计算出$R = r_1G$ 。并将$R$ 发送至验证者。 - 验证者回应一个随机的标量
$r_2$ 。 - 证明者回应一个值$s$,通过公式
$s = r_1 + r_2x$ 计算。
因为离散对数问题是困难的,因此验证者不会知道
- 由于$s = r_1 + r_2x$,等式两边同时添加相同的生成元可得
$sG = r_1G + r_2xG$ 。 - 由于$R = r_1G$,$Y = xG$,可以化简得到
$sG = R + r_2Y$ 。
其中
这个过程是零知识的,因为验证者并不能得到私钥
然而这样交互式的过程,会导致验证者通过"fork"的方式获得私钥
为了解决这个问题后续将采用Random oracles改造这个算法来使Schnorr签名变成可公开验证的非交互式算法。
随机数预言机,即随机数函数,是一种针对任意输入得到的输出之间是项目独立切均匀分布的函数。理想的随机数预言机并不存在,在视线中,经常采用密码学哈希函数作为随机数预言机。
原本的设计中,Schnorr签名是一种交互式协议,需要一个实际存在的验证者与参与者,而根据Fiat-Shamir转换,可以将具体的验证者采用随机数预言机来代替。将验证者替换为随机数预言机后,外部的验证者便无法通过交换
当前根据ED25519协议中密钥长度
- 随机选择一个长度为
$b$ 为的二进制数作为私钥$a$ 。 - 对
$a$ 的进行哈希,产生一个长度为$2b$ 的值为$h = H(a)$ ,其中$h_0 \ldots h_{b-1}$ 为$ x $,用于产生公钥 ,$h_b \dots h_{2b-1}$ 为随机数$k$ 。 - 将
$x_0, x_1, x_2$ 置$0$,$x_{b-1}$置0,$x_{b-2}$置1。 - 计算公钥
$Y = xG$ 。
其中
进行签名时,需要私钥
- 计算随机数
$r = H(k, M)$ 。 - 计算随机点$R = rG$。
- 计算签名$s = (r + H(R,Y,M)x ) \bmod l$。
其中得到的$(R,s)$便是得到的数字签名。
其中
进行验证时,验证者只需要知道公钥
- 验证$sG = R + H(R,Y,M)Y$是否成立,即可验证签名是否正确。
其中