基于数字签名和消息恢复的解决方案
假设您要存储的消息M可以分为两部分: M 1和 M 2,并且M = M 1 ||M 2。
通常,消息恢复方案中的验证步骤会告诉您M是否真实,但它也会返回一个段(例如M 2),因此您实际上只需要存储另一个段(例如M 1)。一个缺点是,如果不先验证签名,您就无法访问M 2,但在大多数情况下,这确实不是人们想要做的。
直观地说,一些存储既可以用于消息的一部分,也可以用于签名的一部分。
最普遍的例子可能是标准化为 ISO 9796-2 的方案(这并不完全安全!请阅读下文......)。在该方案中,耦合到 SHA-1 的 2048 位 RSA 签名可用于存储 234 字节的M 2。实际上,这意味着签名长度从 20 到 256 个字节不等,具体取决于M的长度。
更具体地说,如果n是您的 RSA 密钥的长度并且h是哈希输出的长度(均以位为单位),则您可以在签名中存储的字节数为(nh-16)/8。
它对您是否有益取决于您的数据有多长。
我上面提到的警告是,Coron、Naccahe、Tibouchi 和 Weinmann最近表明,ISO 9796-2 可以比人们预期的更容易破解,即使不是“在一台计算机上 5 分钟内”(他们不得不诉诸几个EC2 实例)。然而,在安全方面,它可能对您来说已经足够好了。
存在其他消息恢复方案,但您应该注意的一件事是它们的专利状态。例如,PSS-R、Naccache-Stern、Nyberg-Rueppel、Pintsov-Vanstone不能自由使用。
基于带附件签名的解决方案
DSA是一种可能性。在这种情况下,签名不会嵌入原始消息的任何部分。一般规则是,如果您想要s位的安全性,则需要4s位长的 DSA 签名。也就是说,对于 80 位安全性(相当于 2TDES),您需要 40 个字节。相同的公式适用于ECDSA,但 DSA 在软件库中更简单且更广泛。
在这两种情况下(DSA 和 ECDSA),签名服务器必须具有良好的随机性来源。如果随机生成器不可靠(例如,如果服务器是虚拟机或嵌入式系统),则无论签名有多长,DSA 和 ECDSA 都可能被破坏。