如何减少用Diffie-Hellman建立的密钥的大小?


4

当我使用Diffie Hellman方法(DH)生成密钥时,建立的共享密钥的大小与使用的素数相同。 据我所知,经典DH应该至少有2000比特,有些人甚至说更多。

但是对于对称方案通常需要256或512位。

我听说它应该足以散列已建立的密钥来减小大小,但有些使用密钥派生函数。

现在我问自己,做这件事的标准方法是什么? 使用密钥派生函数也更安全吗?

如果您能指出所使用的方法并且我可以详细了解这些方法,我将不胜感激。

  0

密钥派生函数只不过是一个哈希值。 HKDF的主要优势在于它可以生成命名的任意大小的输出,而不是单个恒定大小的输出。在HMAC-SHA-2之上实现HKDF非常简单。 12 8月. 132013-08-12 12:18:54

7

Diffie-Hellman允许双方产生无法通过观察通信重建的秘密值。所述秘密值从密钥交换引起的尺寸(ABp)确实是大小为素相同,但是它的熵可以小于如果一个b被选择在一个较小的空间。挑选ab为256位随机数gives you 128-bit security,以得到秘密值。

原则上,由此产生的秘密价值有一些数学结构,你不应该照原样使用它。相反,您应该散列它并将结果用作对称密钥。更确切地说,您应该使用共享机密作为key derivation function的输入。不是基于密码的密钥导出函数:秘密值具有足够的熵值,不需要加强,只能拉伸。 (ZZ || type || ctr)其中ZZ是共享密钥的字节编码,type表示正在派生什么类型的资料, ctr是计数器的字节编码。使用SHA-256或SHA-512等其他散列函数,而不是SHA-1显然是可以的。

只要双方同意,关键材料得出的确切方式并不重要。例如,如果你只需要256位,那么SHA-256(ZZ)就可以。在一个计数器上加固的要点是当你需要比散列函数能够提供的运行更多的时候。为了保证您的协议能够面向未来,最好遵循RFC。如果您现在只需要派生一个密钥,则可以在应用程序中将该类型和计数器的相应ASN.1编码硬编码为字符串文字。

事实上,事实证明,using the DH shared secret directly“not too bad”。尽管如此,你应该通过KDF(至少哈希)来扭曲它:它很容易,快速,更安全,更标准,更具前瞻性。

+1

在我对此事的进一步研究中,我发现这篇文章http://instantlogic.net/publications/DiffieHellman.pdf给出了类似的论点,我只是想分享它。 13 8月. 132013-08-13 09:21:57