Ed25519在主群的素数阶子群中使用了一个复合阶椭圆曲线(带有辅助因子8)。签名操作应该使用来自素数级子群的生成器/基点。
有一些参数
曲线的阶是8.q,其中q是一个大素数。
a =标量/pvt密钥
B =基点,素数阶子群的生成元
A = a.B =公钥/verification密钥
在签名过程中,确定地生成一个秘密的r。
那么,R = rB
\lbrace R, s \rbrace作为签名输出。
然而,验证过程依赖于一个检查,这在批验证和未批验证之间是不同的。
根据这个博客,
批处理验证使用了一个核心因素公式。
Unbatched使用无cofactorless公式
最初的博客解释了为什么批验证将验证,即使您使用非扭转安全的协因数清除,而未批处理将验证只有当您使用扭转安全的辅助因素清除。
这个来自CryptoSE的问答解释了差异&为什么cofactored更好。
这个预印还说
我们认为,只有单次和批处理的协因数检验是相互兼容的。其他组合(无因子单和无cofactored批处理;cofactored signle与cofactored批处理;cofactored-single和cofactored批处理)都是不兼容的。
我可以理解批验证和未批验证之间的其他区别(可以进行批处理优化)。然而,为什么两个批处理和未批处理都不使用核因素验证?
发布于 2022-09-13 04:01:48
考虑一下未批处理的无代码验证R\overset{?}{=} sB-kA,用于签名(R,s)。
有7个不同的小扭转点,可以添加到R,以使它走出素数阶子群。(它是7,而不是8,因为第八点是无穷远点,在素数阶子群中)。
无论使用的是k值还是s值,都不可能通过无因素的单独验证。
然而,根据在执行无代码批处理验证时使用的随机标量的选择,批处理验证有时会通过,有时会失败,当批处理中至少有一个签名的点不在素数级子群中时。
因此,我们必须作出选择。我们是否应该:
备选案文2最有意义。它提供了一致性。您可能会争辩说,这是以成功验证签名为代价的,而这些签名不会使用无cofactorless的单独验证进行验证。然而,这种情况并没有看上去那么可怕。这并不是说不属于素数级子群的带有R值的签名是伪造的。只是它已经被调整了,所以它不会单独验证。它仍然是私钥a知识的充分的零知识证明.
正如您所链接的文件所解释的,个人验证最初是以无因素形式实现的原因:
伯恩斯坦等人的原始论文。并没有乘以8,这就是所谓的无因素验证。几乎所有的密码库都使用无因素版本来使验证速度更快。
无因子验证消除了点的标量乘8的需要,因此,如果您知道永远不需要执行任何批处理验证,那么就有意义了。
https://crypto.stackexchange.com/questions/101873
复制相似问题