安全 ike/ipsec 需要哪个 diffie-hellman 组

信息安全 ipsec diffie-hellman 艾克
2021-08-14 16:47:42

我们正在嵌入式设备上部署 ipsec,并从 ike 中的 diffie hellman 2048 小组获得灾难性的性能。之后,共享安全用于 3des、sha1。单个隧道的 ipsec 协商远远超过 20 秒。网络堆栈正在使用 openssl 进行协商

在这种情况下,我是否正确地说 1024 在 DH 中使用足够安全?我的理解是 dh 1024 可以协商 ipsec sa,生命周期为 24 小时,直到 dh 1024 可以在 <24 小时内强制执行。这不太可能在 2030 年之前

没有保密要求,所以我们不关心是否有人可以在 24 小时后解密流量,只要他们不能重新注入或篡改当前的数据包就可以了。

使用 dh 2048 的原因是因为“1024 不再安全”。我对 dh 2048 没有任何反对意见,但考虑到性能问题,我正试图推动 1024 组。如果我错过了一些问题,我不想这样做。

1024 不安全的建议与长寿命(1-2 年)的 RSA 密钥有关。由于 DH 协商短期(24 小时)会话密钥,因此 1024 组中的 DH 对我们来说是可以的。

在 2048 组中使用 dh,则生成的共享密钥具有 160 位的安全性,在 10 - 15 年内无法强制使用。10-15 年,因为 rsa 2048 在 2030 年之前被认为是安全的,我假设 dh 2048 是相似的

如果使用 1024 组中的 dh,那么生成的共享密钥可能在几年内都是安全的。为 ike 定义 dh 1024 的 RFC 2409 说它产生超过 160 位的安全性。然而,它应该是所需安全位数的两倍,我们需要 224,因为 224 = 2 * 112 而 3des 需要 112。所以 rfc 中的“超过”是什么意思。

默认情况下,openssl 将 dh 秘密生成为长度等于 dh 共享素数的随机数,所以我认为它将处于“超过”含义的大端。我不知道如何验证虽然

RSA 1024 尚未强制实施,但预计将在不久的将来推出,可能需要数月或数年的计算。但是,我们的产品在 10 年后仍将继续使用。也许 RSA 1024 会在 2025 年很容易实施,只要需要超过一天的时间 dh 1024 仍然可以。(我并不是说 dh 1024 会在 2025 年成为一个不错的选择,我是说如果我们今天选择它,那么我们将不必在 2025 年之前逐步淘汰它)

我们的 dh 产生的共享密钥仅使用 24 小时。SA 生命周期为 24 小时,因此我们将每 24 小时重新协商一次隧道。这意味着每 24 小时就有一个新的 DH 秘密。因此,只要不能在 24 小时内强制使用 dh 1024,我们就可以使用 dh 1024。只要我们认为 DH 1024 仍然需要一天以上的时间,就可以强制使用 dh 1024 的共享密钥可能几周后。

后续问题,如果我们使用 3des tat 需要 112 位安全性,DH 应该生成所需的两倍多的位,但 DH 1024 只生成 160 位。在实践中这有多大问题?

我们还可以选择修改协商,我们可以说使用 dh 2048,但在较小的值空间中生成秘密。在 openssl 中,我们可以在 DH 结构上设置 q 参数以确定要在 DH_generate_key 中生成的字节数。但是,这似乎不如使用 dh 1024 有吸引力

如果这不成立,有人可以纠正我吗?谢谢

2个回答

让我们清楚地定义一些事情......

当您使用 DH 之类的非对称算法时,它的“强度”与用最知名的攻击突破它的难度有关。最著名的 DH 攻击尝试使用索引演算变体解决离散对数问题,该变体与通用数域筛( General Number Field Sieve)(一种整数分解算法)具有许多共同元素。它们具有相同的渐近复杂度,这就是为什么人们常说 RSA-1024 和 DH-1024 具有“相同的强度”。

但在实践中,DH 往往比​​相同大小的 RSA 强一些。GNFS 的最后阶段涉及在一个非常大的矩阵中进行线性代数;对于 RSA,矩阵元素是位,而对于 DH,元素将是模数大小大致相同的数字——因此 DH-1024 的矩阵将比 RSA-1024 的矩阵大一千倍。对于大键,这个线性代数是瓶颈,正是由于矩阵的庞大规模。因此,预计 DH-1024 在某些方面比 RSA-1024“更具抵抗力”。我们可能注意到当前 RSA 模分解的记录是768 位,而离散对数记录是596 位

对于 1024 位分解,我们知道问题超出了现有计算机的容量。对于可以分解 1024 位整数的专用机器,我们有一些理论设计概念;进行一次计算需要数年时间,而制造这台机器将花费数百万美元(但不是数十亿美元——至少“在纸面上”)。对于 DH-1024,我不知道有类似的设计或成本估算。

请注意,这与您生成的密钥的长度无关。密码学家喜欢使用的是等效的对称强度他们想说算法/密钥的强度是,比如说,“100 位”,他们的意思是:“破解它的努力将等同于突破 100 位密钥的详尽搜索所涉及的努力一种理想的对称加密算法”。但是,这是非常还原的。暴力破解对称密钥是关于尝试所有可能的密钥,这可以并行完成并且需要可忽略不计的 RAM 内容,只需要 CPU。蛮力可以很好地扩展,结构开销可以忽略不计。这根本不成立用于 GNFS;特别是,大型 RSA 或 DH 密钥在 GNFS 中的主要困难在于,矩阵的最后一步非常难以并行计算,并且需要大量非常快的 RAM。

这并没有阻止各种人和机构做出估计。您可以在那里浏览这些估计值综上所述,根据您与谁交谈,DH-1024 将被认为具有大约“80 位强度”,而 DH-2048 的速率更接近 112 位强度。

现在80位的实力还是相当可观的。迄今为止报告的最大的密钥处理工作是64 位80 位的难度是 65536 倍。专用电路可能会大大降低成本。但我们仍在谈论数百万美元,而不仅仅是数百万美元;接近十亿,真的。因此,对于您想要隐藏在嵌入式系统中的秘密的价值来说,这可能已经足够了。


我注意到“20秒”很多。几年前,我在 33 MHz ARM7TDMI 上实现了一个基本的 DH-2048,即不是有史以来最快的嵌入式系统。它可以在不到 7 秒的时间内完成一次完整的 DH。我的代码是纯 C 的,众所周知,C 在利用 CPU 能力进行大整数运算的乘法方面并不理想。我的猜测是,进行组装会让 DH-2048 在 4 秒左右的时间内在同一平台上运行。

要考虑的一件事是指数的大小。在进行 DH 时,您正在计算一个大素数p 的,并将两个值提高到指数x(您身边的 DH 私钥)。对于 80 位安全性,您需要p是一个 1024 位整数(至少),并且您还需要随机选择长度为 160 位的x(因为攻击要么是 GNFS over p,要么是具有成本的“通用 DL”平方(x))。对于 2048 位素数,您在 GNFS 端获得 112 位安全性,因此您需要 DH 私钥为 224 位。更大的 DH 私钥不会带来额外的安全性,但会使计算时间更长。可能,您当前的实现使用过大的 DH 私钥(例如 512 位指数),这可以解释您的问题。

为了获得更好的性能,您可能需要切换到椭圆曲线 (ECDH)。当然,这取决于另一方支持的内容。ECDH 提供与 DH 相同级别的安全性,具有更多的算术运算但具有更小的值,从而显着提升性能(通常快 5 到 20 倍)。224 位曲线提供“112 位强度”,即类似于 2048 位 DH。

根据斯诺登的文件,DH 1024 不再对 NSA 安全。

NSA 预先计算 DH 512、DH 768 和 DH 2014 的离散日志,并且可以实时破解它。

https://weakdh.org/imperfect-forward-secrecy-ccs15.pdf