当创建Schnorr签名时,数字r与消息连接,生成一个新值,然后对该值进行散列,以给出一个由e表示的数字。然后,将数字e连同在验证期间使用的一些其他数据发送给签名验证器。然后,签名验证器将尝试使用提供给他们的信息重新计算数字r,一旦他们这样做,他们将连接他们与接收到的消息计算的数字r,并使用相同的哈希函数获得一个表示为e\prime的输出。如果是e\prime = e,则签名是有效的。
我的问题是:所使用的散列函数是对签名算法的总体安全性有贡献,还是在签名时用于将数字r和消息的级联压缩为固定的位数?
发布于 2021-12-07 07:47:12
它确实有助于安全。特别是,哈希函数H必须具有“抗随机前缀预图像”的能力,才能避免只存在密钥伪造和“随机前缀第二预图像抵抗”,才能避免已知的消息伪造。
所谓“抗随机前缀预图像”,是指给定一个输出值e和一个随机r,很难找到像H(r||m)=e这样的m (在第二个预图像情况下,即使提供了一个示例m,也很难找到第二个示例)。
如果简单的话,我们可以选择任意的e和s,然后(按照Schnorr验证过程)计算r=g^sy^e,然后解决e和r的图像前问题,以获得(s,e)是有效签名的消息m。请注意,我们不一定控制m,因此此攻击是创建存在主义伪造的关键攻击,并且该方案不会是EUF安全的。
类似地,在第二种预映像情况下,我们可以为消息m获取现有签名,并使用H(r||m)=H(r||m’)创建第二条消息m’。签名(s,e)用于m也将作为m’的签名,并且该方案不会是EUF安全的。
https://crypto.stackexchange.com/questions/96488
复制相似问题