java - EC 签名大小?

标签 java security cryptography digital-signature

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

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

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

我的问题是:

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

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

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

  4. 还有字符串的大小(在我的例子中是一个只有 9 的字符串 正在签名的字符,例如“123456789”在最终长度中发挥作用 签名?

为此苦苦挣扎了一段时间,在网上到处搜索 - 有很多技术讲座的答案 - 但没有具体回答我的问题(我得到的最接近的是 this article for RSA keys )

我希望我能得到一些快速的回应——我的项目已经推迟了几周。 谢谢大家!

最佳答案

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

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

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

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

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

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

关于java - EC 签名大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953113/

相关文章:

java - JUnitCore 在 Eclipse 插件中给出 "No runnable methods"错误

php - 强制密码要求

c# - 如何在不考虑缓存域凭据的情况下验证域凭据

.net - Windows CNG 自定义 key 存储提供程序

java - 如何使用java实现aiml

java - 自定义 HTML 代码在 IE 9 中创建空列表

azure - 为什么 Azure 建议使用用户委派共享访问签名

Golang AES-CBC 256 使用 CryptoJS 解密

java - 如何使用openssl模拟Java Signature签名方式?

Java:使用具有通配符类型参数的类函数