2

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

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

我该怎么做?有可能(用Java或任何语言)吗?

4

2 回答 2

1

如果你坚持只用key,那么你一次512-bit可以签名的最大数据长度就达到了53 bytes=424 bits,所以你必须拆分数据,单独签名。 例如- 假设您在进行第二次签名之前的数据长度是,然后将其分成两组- 并且。然后分别对这两个签名并连接结果。 编辑 还有另一种方法可以做到这一点,只使用1 个键-



500 bits424 bits66 bits



  • 密钥大小为2048 bits. 您可以签署最长为245 bytes=1960bits.
  • 在第一次签名操作和添加附加信息之后,即在 Sign(data)+info 之后,对结果执行 SHA-512摘要。这会将结果压缩为64 个字节。
  • 然后再次使用相同的密钥对其进行签名。

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

    注意:您可以使用密钥长度进行上述签名1024-bit
于 2012-11-21T13:06:16.180 回答
0

你为什么不编写一个简单的算法来创建另一个(为你的虚拟标志),只需将标志加密成一些代码,然后同时使用它们。

它将为您解决两个目的。

  • 你会有两个不同的签名
  • 您将能够使用您拥有的唯一密钥

希望对你有帮助 :)

于 2012-11-21T13:04:44.980 回答