加密和微小数据

时间:2012-08-10 13:17:19

标签: cryptography

我需要签署少量数据(并将该签名存储在类似的小空间中) - 标准的PKCS签名太大了,我需要一些8到16字节签名的区域。其次我需要它是一个非对称加密,第三,我需要它相对安全(在今天的计算机上用5分钟就不会破坏)。

我希望:

  1. 使用CRC算法(CRC32或CRC64)生成数据哈希,这将产生4或8个字节的哈希数据。
  2. 然后使用私钥加密该数据,并将结果附加到最后。
  3. 然而,使用RSA加密,RSA产生的输出与密钥最小值一样长 - 因此512 RSA密钥将产生64字节的数据。还有哪些其他选择?

    编辑:通过不对称加密我的意思是我不能有任何共享秘密,即有一个签名服务器'这将是一个秘密,并且需要验证数据来自该来源的分布式公共应用程序因此无法包含签名机密。

3 个答案:

答案 0 :(得分:2)

我认为您的要求无法获得。你可以得到的最接近的可能是Elliptic Curve,但即使这样你也会得到最小的输出192/8 * 2 = 48字节。使用160位曲线,您可以将其降低到40个字节,但之后安全边际变得太低。 此答案之前提到点压缩,但可能无法使用

最好使用安全散列,然后只使用前X位,而不是使用非安全散列,如CRC。使用ECC 160位SHA-1是显而易见的选择,对于如此小的数据部分,SHA-1将足够强大。安全散列的想法是没有人可以创建映射到相同散列的另一个消息。这不是CRC或Adler等功能的属性。

答案 1 :(得分:2)

基于带有消息恢复的数字签名的解决方案

假设您要存储的消息 M 可以分为两个段:M 1 和M 2 ,并且< em> M = M 1 || M 2

通常,消息恢复方案中的验证步骤会告诉您 M 是否可信,但它也会返回一个段(例如 M 2 < / sub> )这样你实际上只需要存储其他段(例如 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, and 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都可能被破坏。

答案 2 :(得分:-3)

您的要求是自相矛盾的。

  

签署少量数据

可能是安全摘要(哈希)

  

我需要它是一个不对称的加密

但这是可逆的,因此不是一个安全的摘要。

  

然而,使用RSA加密,RSA产生的输出与密钥最小值

一样长

使用任何可逆的enctyption 会产生一个与最小键数一样长的输出。

如果您只需要一个哈希值,那么请使用salted md5(16个字节)。