我的问题指的是EdDSA,如RFC 8032中所规定的。
我从RFC中得知,ed25519和ed25519ph是EdDSA的两个不同的实例,主要是因为在ed25519ph的情况下,消息的哈希是签名的。
签名过程的第二步是:
在ed25519中,PH函数是标识函数,在ed25519ph中,its是SHA512的实现。然而,我很好奇的一点是,这并不是两者之间唯一的区别。
根据RFC的dom2(F,C)实际上也是不同的:
dom2(x,y):签名或验证Ed25519时的空白八进制字符串。否则,八位组字符串:"SigEd25519 no Ed25519 collisions“\x{##**$$}{##**$} y,其中x在0-255范围内,y是最多255个八位数的八位数字符串。"SigEd25519 no Ed25519冲突“在ASCII中(32位字节)。
原因是什么?如果不是这种情况,我们可以通过简单地散列消息并将其作为输入传递给ed25519的实现来构造ed25519。它指定此结构的方式将与ed25519ph的实现不兼容(因为dom2前缀)。
发布于 2019-07-18 14:19:20
这只是一项预防措施。如果没有这种分离,知道ed25519ph(m)的攻击者也会学习ed25519(h(m))。
我不知道有任何现实世界的协议同时使用,也不知道这会是一个问题,但认为可能是这样的话,并不是太牵强。
领域分离是良好的卫生,并已成为非常普遍的新设计。
在使用dom2()时,选择ed25519为空字符串只是为了与现有实现保持兼容。
https://crypto.stackexchange.com/questions/72035
复制相似问题