签名生成的输入和输出的等长

时间:2012-11-21 12:34:57

标签: encryption signing

我想在长度为 300 bit 的文本上生成数字签名,在获取的签名中添加一些新文本,然后对生成的文本进行签名。

我使用了Bouncy Castle函数,并意识到在RSA签名方案中,密钥的大小必须大于输入长度。获得的输出长度等于密钥大小,通过添加新文本,密钥大小必须更大。但是,我想使用一键进行签名。 例如,我首先开始使用512位密钥,但对于第二次签名,我必须使用1024位密钥,而我有一个密钥用于签名。

我该怎么办?是否可能(使用Java或任何语言)?

2 个答案:

答案 0 :(得分:1)

如果您坚持只使用512-bit密钥,那么您可以在一次性中签署的最大数据长度为53 bytes=424 bits,因此您必须拆分数据并单独签名。

例如 -

假设您在进行第二次签名之前的数据长度为500 bits,那么 将其分为两组 - 424 bits66 bits。然后分别签署这两个并连接结果。

修改

还有一种方法可以做到,只使用 1键 -

  • 密钥大小为2048 bits。您可以对长度为245 bytes=1960bits
  • 的数据进行签名
  • 在第一次签名操作并添加其他信息后,在签名(数据)+信息之后,执行a SHA-512 对结果进行摘要。这会将结果压缩为 64个字节。
  • 然后再签名 用同一把钥匙。

    简而言之 - Sign(SHA-1(Sign(data)+info))

    注意:您可以使用密钥长度1024-bit进行上述签名。

答案 1 :(得分:0)

为什么不编写一个简单的算法来创建另一个(Virtual Sign for you),只需将Sign加密为某些代码然后再使用它们。

它将为您解决两个目的。

  • 您将拥有两种不同的签名
  • 您将能够使用您拥有的唯一键

希望它适合你:)