对于 AES-256 的 Diffie-Hellman,这个素数是否足够大/太大?

信息安全 密码学 加密 密钥交换
2021-08-30 17:34:13

我正在使用 Diffie-Hellman 密钥交换来使用 AES-256 加密数据。我使用的素数来自RFC 3526(第 6 页)中指定的 8192 位组。

第 7 页表明,对于 620 位指数,这相当于 310 位的密钥强度,因此对于 AES-256 来说足够大。它还表明具有 540 位指数的 6144 位素数就足够了(270 位)。

现在,这两个都相当慢。在我的场景中,较大的一个导致交换大约需要两秒钟。

因此,我的问题是:

我在荒谬吗?我应该使用较小的素数,甚至是 2048 位素数和 320 位指数的 AES-128 吗?我可能完全误解了什么吗?

对于上下文:速度并不是那么关键。我需要这种加密在接下来的 10 年内(最多)非常强大。如果这需要两秒钟的时间,那就这样吧。

3个回答

AES-256 和 8192 位 DH 模数都过大了。将它们相互比较是一种微妙的练习,几乎没有意义,因为两者都已进入“现在不能打破它,30年后也不能做到”的境界。您可以查看此站点以获取有关估计对称和非对称算法的相对强度的各种方法的信息和计算器。

现在可以推荐用于适当安全性的实用参数是 AES-128 和 2048 位 DH 素数模数(具有 256 位指数)。

是的。你的方法太过分了。AES-128 和 2048 位 Diffie-Hellman 组(具有 256 位指数)绰绰有余。即使有这些参数,密码数学也极不可能成为系统中最薄弱的环节。绕过加密比正面破坏加密更有可能破坏您的系统。

是的。选择 AES-256 和 8192 位 DH 是荒谬的。

您可能需要考虑几件事情。

  1. 您在保护企业数据吗?如果是,那么您实际上可以对 AES-128 和 2048 位 DH 感到满意。原因很简单。AES-256 有出口控制政策,如果你想打包你的应用程序,那么你必须使用特殊的 jar(如果你使用的是 JAVA)等。但是,你可以使用 AES-256。没有问题。此外,如果您使用高于 2048 位 DH 的任何设备,速度会很慢。您还必须注意将在其上解密数据的系统。它不应该花费太多时间。许多财富 1000 强公司仍在使用 3DES,而您正在使用 AES,这是一种更好的算法。所以使用 AES-128 和 2048 DH 是安全的

  2. 您是否正在保护一个小型封闭团体的私有数据?然后,您只需要 AES-128 和 2048 位 DH。由于您正在查看的时间范围只有 10 年,因此不需要除此之外的任何内容。

如果你真的想要更多的安全性并且想要在未来证明它,那么 DH 是错误的前进方向。椭圆密钥密码术最适合于此。这个方向的资源不多。但是,这绝对是值得的。

底线 - 大小不是密码学中的一切。算法和实现的正确选择才是真正重要的。继续使用 AES-128 和 2048 位 DH。这是安全的。

更新:

@stefano - 嗨,自从你说新闻记者的政府间谍活动以来,有几件事必须考虑。政府从不告诉我们他们的真实能力。因此,他们可能已经拥有破解 AES-256 的基础设施。国家安全局不会批准超出他们头脑的事情。此外,AES 不是可用的最高安全级别。如果我没记错的话,它会形成 NSA 算法堆栈中的第 2 层。但是,我们的选择有限。所以我们可以使用 AES-256 来提供更好的安全性。

为了长期提供更好的安全性,您必须考虑椭圆密钥密码术。它是唯一一个公开可用的系统,可以以合理的方式证明未来的事情。当您想在两方或多方之间传输数据时,可以使用 DH。我假设您了解非对称密钥加密的基础知识以及为什么需要 DH。如果您将数据存储在系统中而不进行传输,则不需要 DH 或 RSA 或椭圆密钥密码术。

此外,您可以使用非常强的密码,该密码将通过加盐和 SHA-512 直接影响在 AES 中选择的密钥,这将使您能够不时更改加密文本,以便出现弱密钥有些期刊不会打扰您的加密数据。256位指数很好。但是,对于您当前的情况,更高一点的指数可以做得更好。