【问题标题】:Compressing signature压缩签名
【发布时间】:2015-01-12 22:03:03
【问题描述】:

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

以下是十进制签名的示例: 5670805304946899675614751184947294808143702505785021095830828785725573127924144977212837580418240432902375737987653828318622222068237988634991262293689098

如何将此签名压缩到以 2048 为基数的 4 位左右?这可以使用Sudoku compression吗?

【问题讨论】:

  • 一些简单的问题...您对人类可读性的标准是什么?另外,您是要压缩原始的 64 字节值,还是该 64 字节值的十进制表示?是否应该涉及任何安全性(例如,随机数是否应该以某种方式增加安全性?)“压缩”是否包括用于秘密共享随机数的字节?那个随机数每次都不一样吗?
  • 你怎么知道签名是可压缩的(有熵)?
  • @templatetypedef 人类可读性不是什么大问题,我已经更新了我的问题以反映这一点。这取决于哪个最容易压缩,如果压缩原始 64 字节值有效,我完全赞成。共享随机数不是秘密,安全性不是这里的一个因素;我们正在尝试重新创建签名。共享的随机数实际上是时间戳除以 30,所以每 30 秒不同。
  • 所以您想将 512 位压缩到 88 位?有人建议这项任务可能是不可能的吗?
  • 我认为简单的算术运算不会减少所需的位数,只是将它们移动一点。您也许可以通过共享数字中的位数找到一种方法来减少问题,但除此之外,我坚持我最初的反应是这是不可能的。

标签: algorithm math computer-science ed25519


【解决方案1】:

我认为这是不可能的。至少您说“第二方必须能够从数据中重新创建签名”的部分

这背后的简单原因是,即每个签名中包含的信息量。首先,让我们看看您描述的每种“格式”最多可以存储多少信息。

  • ed25519 签名:64 字节,即 512 位(因此有 2^512 种可能性,大约 1.34e154)
  • 4 位以 2048 为基数,即 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() 可以是 44 或 88。
  2. 如果可以通过 N=1 而不是 N→∞ 来达到此限制,因为您希望每个签名使用 44 或 88 位进行编码,而不是 N 个签名的平均位数低于 44 或 88。这是一个更严格的要求。

ed25519 签名中的熵肯定比 44 位或 88 位存储的更多。来自网站Introduction to Ed25519

安全级别高。 本系统有 2^128 安全目标;破解它与破解 NIST P-256、具有约 3000 位密钥的 RSA、强大的 128 位分组密码等具有相似的难度。已知的最佳攻击实际上平均花费超过 2^140 位操作,并且成功地以二次方降低随着位操作次数的减少,概率。

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

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

除此之外,我们读到:

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

这意味着即使较大的密钥中有一些冗余,它们已经进行了额外的压缩,我们可以合理地假设较小的密钥中应该有相同的信息密度,如果不是更高密度的话。即,找到冗余的机会更小。

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

【讨论】:

    【解决方案2】:

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

    编辑:问题已被修改和澄清,以询问这里是否可以进行数独压缩。填充数独网格的方法有 6670903752021072936960 = 2^72.49... ,远小于标记每个单元格的 9^81 = 2^256.7... 方法。但签名算法的情况并非如此,因此从信息上讲,这种压缩是不可能的。

    【讨论】:

    • 谢谢,虽然没有共享秘密。我已经澄清了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多