如何在 Java 应用服务器上禁用 112 位密码套件。具体来说,请参见以下文章。
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
我已经编辑了该java.security
文件并制作了jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 2048
,这些算法仍然被列出。
我还想拥有降级攻击预防功能(TLS_FALLBACK_SCSV
)
该怎么办 ?
答案1
在更改 SSL 配置之前,可能有必要准确了解这里的漏洞是什么。
3DES 推出时,要求它与传统的单 DES 系统具有互操作性。3DES 背后的理念是,您可以通过使用不同的密钥执行多个 DES 操作来增加安全性。为了提供兼容性,他们使用了 EDE 结构:按顺序执行 3 个 DES 操作 - 加密、解密、加密 - 或简称为 EDE。事实证明,DES 解密操作在安全性方面基本上可以与加密操作互换,因此这种方法非常有效。当您对每个操作使用三个独立密钥(称为密钥选项 1)时,您实际上有一个 168 位密钥。如果您想返回旧的单 DES 模式,您可以使用不同的密钥选项 (3),该选项将所有三个子密钥设置为相同的值,即 k1 = k2 = k3,这样两个操作就会抵消,实际上只有一个 DES 操作很重要。还有另一个密钥选项,其中两个密钥具有相同的值,但其中一个不同,从而产生一个 112 位密钥,但这在现实中并没有真正使用,并且(有点令人困惑)与您看到 3DES 报告为 112 位的原因完全无关。
更令人困惑的是,您有时会听到人们谈论 64 位 DES 或 192 位 3DES。从加密角度来看,它们与 56 位 DES 或 168 位 3DES 相同。DES 指定一个密钥填充系统,其中 8 个填充位可以添加到 56 位密钥中以生成 64 位填充密钥。这用于一些旧系统,虽然并不重要,但可以忽略 8 位,只有 56 位才是真正的密钥材料。在 192 位 3DES 中也会发生同样的事情,其中每个 56 位子密钥都用 8 个填充位填充,但真正的加密密钥只有 168 位长。
那么,112 位到底是什么呢?
3DES 存在一个问题,称为中间相遇攻击.做法如下:
- 对于您想要破解的给定密钥,找到已知的明文和密文块对。
- 针对所有可能的 56 位密钥,计算明文块的第一步加密步骤(即一个 DES 加密操作)。
- 将所有得到的 64 位块存储在一个大查找表中。
- 对于密钥的每个可能的剩余 112 位部分,对密文执行另外两个操作(解密、加密)。
- 如果两个操作的结果与查找表中的任何块匹配,则说明您已找到密钥。否则,请尝试下一个 112 位密钥。
这是一个时间/空间的权衡,允许您将计算次数从 2 168减少到 2 112,空间成本为 2 56 64 位块(512 PB)。
现在,出于某种奇怪的原因,所有安全工具似乎都将 3DES-EDE 报告为 112 位,但实际上并未说明原因。3DES-EDE 没有 112 位密钥长度,甚至没有 112 位有效密钥长度,除非您指定攻击者拥有 512PiB 的闪电般快速的存储空间以及大量 DES 破解 ASIC。将其报告为 112 位的做法似乎始于“sslscan”工具,此后已被其他各种工具复制,导致各种混乱和误解(我甚至在安全考试中看到错误地标记了这一点!)
这并不是说你不应该禁用 3DES - 它现在是一种旧算法,并且存在问题,因此可能值得放弃它。只是值得知道为什么。
如果需要,请将DESede
和添加DES
到禁用算法列表中。这些名称在加密提供商文档,以防您想禁用任何其他功能。