RSA签名伪造,e = 41,破坏填充

时间:2016-05-08 13:09:29

标签: cryptography rsa

有RSA签名检查,它具有以下属性:

  • RSA模量N为2048位
  • RSA指数等于41(0x29)
  • 签名使用SHAA哈希的EMSA-PKCS1-v1_5填充,但是解码器只比较20个最低有效字节,即SHA1哈希

这意味着除了20个最低有效字节之外的所有字节,在将伪造的签名上升到41个幂模N后,都可能是垃圾。

我检查过以下内容:

  • Bleichenbacher's RSA signature forgery based on implementation error在这里不适用,因为它处理最重要的字节(最低有效字节是垃圾),并且正如我测试的那样,当e = 41时,它不能伪造包含20字节任意选择前缀的签名
  • Yutaka Oiwa,Kazukuni Kobara,Hajime Watanabe:使用参数场攻击RSA签名验证的新变体 - RSA模数太小,无法在此方法中有效。这是英特尔在BERserk
  • 中使用的攻击

是否有任何计算可行的算法可用于伪造签名,验证者只接受20个最低有效字节的接受?

编辑: Poncho comment from another RSA attack question在这里可行吗?如果是这样,如何实施:

x = MD5(消息)找到带有y^3=x (mod 2^128)的128位数y(如果x为奇数,则存在,并且可以在128步中找到);

这种情况的变化是:

  • 41而不是3
  • SHA1而不是MD5
  • 180而不是128

EDIT2: 我认为Poncho的评论与BERserk Vulnerability part 1中提到的forge_suffix_odd中实现的内容完全相同。

然而,如前所述,此功能给出了太大的值。 forge_suffix_odd的结果是否是填写目标的最低可能数字?

Edit3:forge_suffix_odd返回满足目标的最低可能数字。

Edit4:Greg Martin answered my question at Mathematics并为最低有效位等于0的SHA1校验和提供了非常有用的解决方案。

0 个答案:

没有答案