压缩签名

时间:2015-01-12 22:03:03

标签: algorithm math computer-science ed25519

假设我有一方创建的64字节签名(来自ed25519)。该方必须进一步压缩签名,使其在基数2048中为4-8位。然后,第二方必须能够从数据中重新创建签名。

以下是小数签名的示例: 5670805304946899675614751184947294808143702505785021095830828785725573127924144977212837580418240432902375737987653828318622222068237988634991262293689098

如何在2048基础上将此签名压缩为大约4位?这可以使用Sudoku compression吗?

2 个答案:

答案 0 :(得分:5)

我认为这是不可能的。至少你说'#34; 第二方的部分必须能够从数据中重新创建签名"

这背后的简单原因是 entropy ,或每个签名中包含的信息量。首先,让我们看一下在每种格式中最多可以存储多少信息"你形容。

  • ed25519签名:64字节,即512位(因此2 ^ 512种可能性,大约1.34e154)
  • 基数2048中的4位数,即2048 ^ 4种可能性,log2((2 ^ 11)^ 4)= 44
  • 8位数(因为你说4-8),同样的推理,88位

因此,基于2048的数字已经少了很多(最大可能)信息。对于你的函数存在,这意味着在2 ^ 512种可能性中,有足够的冗余信息(即如果你知道位a和b,你很有可能知道位c,或者可能是某些值的配置完全不可能等等,你可以用44(或88)位表征所有可能的输出。

让我们看看Shannon's source coding theorem

  

N i.i.d.每个具有熵H(X)的随机变量可以被压缩成多于N H(X)个比特,信息丢失的风险可以忽略不计,如N→∞;但相反,如果将它们压缩到少于N H(X)位,则几乎可以肯定信息会丢失。

这里的随机变量是ed25519签名。你问两件事

  1. 如果H(< random ed25519签名>)可以是44或88。
  2. 如果使用N = 1而不是N→∞可以达到此限制,因为您希望每个签名都使用44或88位进行编码,而不是N个签名的平均位数低于44或88。这是一个更强烈的要求。
  3. ed25519签名中的熵肯定比44或88位中的熵更多。来自网站Introduction to Ed25519

      

    高安全级别。此系统具有2 ^ 128安全目标;打破它有类似的难度打破NIST P-256,RSA与~3000位密钥,强大的128位分组密码等。已知的最佳攻击实际上平均花费超过2 ^ 140位操作,并成功降低二次性位操作数下降的概率。

    但如果你的功能存在,它可能会容易得多,因为你只需要2 ^ 44(或2 ^ 88)次尝试,每次应用"反向"功能,彻底查找所有碰撞。当然,我们不知道假设的反向函数需要多少位操作,但至少它会给你一个想法。另外,如果你使用the birthday attack进行暴力攻击,你只需要这个尝试次数的平方根(因此2 ^ 22或2 ^ 44)。

    相反,如果你用平均2 ^ 140次操作阅读执行此攻击的文章,每次执行2 ^ i次迭代(因此i + o = 140),你可能希望找到一种格式合理地列举了所有可能的具有2 * i位的64字节签名。但是,这只适用于您的第一个问题,因为攻击可以利用属性,例如某些签名值比其他签名值更频繁地发生。然后,只有平均值才能达到2 * i的最佳存储长度,而不是每个值,通过编码某些值,这些值通常用比经常发生的值更少的位发生。

    除此之外,我们读到:

      

    小签名。签名适合64个字节。这些签名实际上是较长签名的压缩版本;压缩和减压的时间包括在上面报告的循环计数中。

    这意味着即使较大的密钥中存在一些冗余,它们也已经进行了额外的压缩传递,我们可以合理地假设在较小的密钥中应该存在相同的信息密度。即,发现裁员的可能性更小。

    因此,这意味着如果您将签名转换应用于44-88位,您将丢失信息,几乎占用了64字节的a hash。由于无法重新创建从其校验和下载的文件,因此无法从您计算的哈希重新创建ed25519签名。

答案 1 :(得分:3)

签名是64字节,因此有256 ^ 64或2 ^ 512个可能的签名。只有当使用2 ^ 512个可能的签名中最多2048 ^ 8 = 2 ^ 88时,才可能进行该压缩量。 Ed25519似乎不太可能出现这种情况。

编辑:问题已修改并澄清,以询问是否可以在此进行数独压缩。有6670903752021072936960 = 2 ^ 72.49 ...填写数独网格的方法,远小于9 ^ 81 = 2 ^ 256.7 ...标记每个单元格的方式。但是签名算法不应该是这种情况,因此在理论上不需要这种压缩。