EC签名尺寸?

Dee*_*der 3 java security cryptography digital-signature

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

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

System.out.println("length: "+signedProductKeyBytes.length);
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

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

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

  4. 字符串的大小(在我的情况下,它只是9个字符的字符串,例如"123456789"被签名在签名的最后长度中起作用?

已经挣扎了一段时间,在网上到处搜索 - 通过大量的技术会谈回答 - 但没有具体回答我的问题(我得到的最近的是 RSA密钥的这篇文章)

我希望我得到一些快速反应 - 我的项目已经很晚了几周.多谢你们!

Cod*_*aos 6

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

  • 原始ECC签名(ECDSA等)是安全级别的四倍.如果您需要80位安全级别(使用160位曲线),您将获得40个字节的签名.你可以减少几个字节,牺牲一些安全性,但是将它打破到20到30个字节之间变得微不足道.

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

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

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

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