【问题标题】:TLS 1.2 - key-pair size and encryption key lengthTLS 1.2 - 密钥对大小和加密密钥长度
【发布时间】:2017-01-16 18:50:41
【问题描述】:

假设一个使用 java 1.8 的(基于 java 的)服务器和一个也使用 java 8 的(基于 java 的)客户端。 并且鉴于 java 8 默认支持 TLS 1.2。 是否保证将使用 512 位加密?如果不是什么会影响对称密钥大小?

关于 RSA 密钥(1024 或 2048)的另一个问题。 RSA 密钥是证书的一部分还是 RSA 密钥是在 TLS 握手期间确定的?

非常感谢 伙计

【问题讨论】:

  • 启用的密码套件列表决定了所使用的算法和密钥强度。客户端和服务器将协商一个都已启用的密码套件。服务器在共享的候选项中进行选择。 --- RSA 密钥是证书的一部分。
  • 谢谢@Andreas 默认情况下,可用的密码很少,会选择哪一个?我想知道鉴于两端都支持 TLS 1.2,是否可以保证使用 512 位密钥?用于挑选密码的算法是什么?

标签: java ssl tls1.2


【解决方案1】:

(对称)数据加密的密钥大小作为密码套件的一部分进行协商,例如 TLS_RSA_WITH_AES_256_CBC_SHA 使用 AES 和 256 位密钥,而 TLS_RSA_WITH_AES_128_CBC_SHA 使用 AES 和 128 位密钥。 来自 Oracle(以及以前的 Sun)的开箱即用 Java 包仅限于 128 位强度的对称加密;要使用 AES-256 密码套件,您需要安装“无限强度”策略,请参阅 SSLHandshakeException while connecting to a https siteOpenJDK 没有此限制。请注意,强度不等于大小; SSL/TLS(密钥选项 1)中使用的 3DES 的密钥 size 为 168,但 strength 只有 112,并且在“有限”政策下是允许的。

在任何 SSL/TLS 中根本没有使用“512 位加密”算法。请注意,在我们当前的太阳系中,无法通过常规方式打破 AES-256 之类的 256 位强度;你至少需要控制银河系的大部分地区数十亿年,而对于这样的对手,你的猫视频、银行账户甚至商业策略都完全无趣。 Quantum 可能会改变这一点,但没有人知道这是否会奏效、何时奏效或效果如何。

是的,如果您使用 RSA,则 RSA 密钥在证书中,这是最常见的选择,但不是唯一的选择。 (除了在一些故意破坏的“导出”密码套件中存在临时 RSA 密钥,您不想使用这些密钥,并且在 TLSv1.1 2006 和 TLSv1.2 2008 中已被正式禁止,并且默认情况下 Java 已完全禁用自 Java7 大约 2011 年以来。)自 2013 年以来,Symantec GoDaddy 等公共 CA 没有为小于 2048 位的 RSA 密钥颁发证书;如果您使用自签名证书或运行您自己的个人 CA,您可以这样做,但浏览器可能会给出错误或警告。

请注意,RSA-1024 的强度只有大约 80 位(这就是它不再被认为是安全的原因),而 RSA-2048 的强度大约为 112;见https://www.keylength.com
https://crypto.stackexchange.com/questions/1978/how-big-an-rsa-key-is-considered-secure-today
https://crypto.stackexchange.com/questions/6236/why-does-the-recommended-key-size-between-symmetric-and-assymetric-encryption-
https://crypto.stackexchange.com/questions/8687/security-strength-of-rsa-in-relation-with-the-modulus-size

【讨论】:

    【解决方案2】:

    SSL Labs 有一个 github 页面,自 2013 年以来他们一直在该页面上就此类内容提出建议:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices

    您的问题的具体答案在这里: https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#11-use-2048-bit-private-keys

    我将它粘贴在下面,但知道我的答案可能会在他们的文档继续更新时过时:

    1.1 使用 2048 位私钥。 对于大多数网站,2,048 位 RSA 密钥提供的安全性就足够了。广泛支持 RSA 公钥算法,这使得这种类型的密钥成为安全的默认选择。在 2,048 位时,此类密钥可提供大约 112 位的安全性。如果您想要比这更高的安全性,请注意 RSA 密钥不能很好地扩展。要获得 128 位的安全性,您需要 3,072 位的 RSA 密钥,速度明显较慢。 ECDSA 密钥提供了一种替代方案,可提供更好的安全性和更好的性能。 ECDSA 密钥为 256 位,提供 128 位的安全性。少数老客户不支持 ECDSA,但现代客户支持。如果您不介意管理此类设置的开销,则可以两全其美并同时使用 RSA 和 ECDSA 密钥进行部署。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多