4

我已经为此苦苦挣扎了一段时间。这是我的场景。我正在尝试生成 25 个字符的软件产品密钥(如 Microsoft 风格的 FFFFF-EEEEE-DDDDD-BBBBB-77777)。我已经通过 nonce(原始产品密钥)成功生成 - 根据这篇文章,我的最终产品密钥(在以 base 24 格式编码之前)应该正好是 15 个字节(我的 nonce 为 4 个字节,我的数字签名为 11 个字节)。

现在的问题是如何生成一个 11 字节的签名?我尝试过使用当前最短的签名密码术(ECC - 使用 secp128r2 曲线 - 它给了我一个 128 位的私钥)。签名后,我的签名大小为 80 字节(如 Java 语句打印的

System.out.println("length: "+signedProductKeyBytes.length);

我的问题是:

  1. EC 密钥大小(以位为单位)与生成的 EC 签名的长度(以字节为单位)之间究竟有什么关系?

  2. 例如,一个 128 位的 EC 密钥应该产生多少字节的签名大小?

  3. 如何生成 11 字节签名(顺便说一句,我确定在 Windows XP 时代没有 EC 密钥 - 所以 MS 没有使用 EC - 有没有更好的方法?说使用 RSA 32 位密钥或者其他的东西?)?

  4. 字符串的大小(在我的情况下是一个只有 9 个字符的字符串,例如正在签名的“123456789”)是否在签名的最终长度中起作用?

已经为此苦苦挣扎了一段时间,在网上到处搜索 - 有很多技术讲座的答案 - 但没有具体回答我的问题(我得到的最近的是 这篇文章 RSA 密钥

我希望我能得到一些快速的回应——我的项目已经延迟了几周。多谢你们!

4

1 回答 1

8

我知道没有生成小签名的安全签名方案。

  • 原始 ECC 签名(ECDSA 等)是安全级别的四倍。如果您想要 80 位安全级别(使用 160 位曲线),您将获得 40 字节的签名。您可以减少几个字节,牺牲一点安全性,但将其中断在 20 到 30 个字节之间就变得微不足道了。

    128 位曲线(64 位安全性,可以被破坏,但它可能太昂贵而不值得)将产生一个 32 字节的签名。

  • 有限域签名(DSA 等)与具有相同安全级别的 ECC 的签名具有相同的大小。

  • RSA 签名的大小与模数相同。使用相当小的 768 位密钥,您可以获得 96 字节的签名。

  • BLS 签名非常接近。签名大小仅为安全级别的两倍。80 位级别的 20 个字节。64 位级别的 16 个字节。您应该能够通过截断减少另外两个字节左右,以换取更高的签名验证时间。

于 2013-02-19T10:33:50.060 回答