OpenVPN 2.4 tls-crypt 和 dh 与椭圆曲线

OpenVPN 2.4 tls-crypt 和 dh 与椭圆曲线
  1. 如果我理解正确的话OpenVPN 2.4 手册,如果有人使用,ECDH TLS cipher suites那么他们可以设置dh none。这将具有与使用 dh 密钥相同的安全级别(或更好),这是一个正确的假设吗?

  2. 关于 tls-auth,手册上说“如果您想使用密钥文件不仅进行身份验证,而且还加密 TLS 控制通道,请改用 –tls-crypt。”。

目前我不是tls-authtls-crypt在配置中设置但在日志中我看到

Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-ECDSA-AES256-GCM-SHA384, 521 bit EC, curve: secp521r1

这是否意味着tls-crypt如果使用椭圆曲线,该选项就不是必需的?或者,tls-crypt如果控制通道即使没有此选项也已经加密,会增加什么额外的安全性?如果使用 UDP 还是 TCP,会有什么区别?

谢谢!

答案1

  1. ECDH并且DH都是Diffie-Hellman 密钥交换并要求阿贝尔群计算起来非常复杂。然而:

    • DH算法生成良好的有限域相对容易(尽管耗时),因此 OpenVPN 要求您使用 来执行此操作,openssl dhparam并使用 提供结果dh <filename>。这样,您就不会使用可能受制于僵局攻击,这在 NSA 预算之内。但是,有限域中的因式分解是一个众所周知的主题,因此比同等安全级别的计算速度DH要慢。ECDH

    • 生成好的椭圆曲线很困难,所以你必须使用预定义的并且没有ecdh <filename>选项。至于dh选项,您可以使用dh none椭圆曲线。椭圆曲线上的除法还不是很发达,因此要获得与现在类似的安全级别,DH您需要更小的曲线。

  2. 即使没有tls-authtls-crypt选项,您的数据将要总是加密。TLS协议使用密钥交换中获得的密钥对数据进行加密,如上一点所述。这些选项控制如何处理TLS 握手

    通常(如协议中所述HTTPS)它们是未加密的,因为对等体彼此之间没有任何先验知识。但使用 OpenVPN 有一个优势:您可以在服务器和所有授权客户端上配置一个通用的对称密钥,它将对这 4 个数据包进行签名或加密。

    这将允许服务器丢弃所有未签名的ClientHello消息,甚至为计算繁重 TLS协议。因此,它将更容易DDoS在攻击者一次发起数千个连接的攻击中幸存下来。

    使用tls-auth类似于WEP在 Wi-Fi 网络上配置通用密钥,以及每个客户端的WPA-Enterprise身份验证。主要区别在于WEP加密很容易被破解,而HMAC签名或AES加密则不会。因此,您将无法在 Wi-Fi 网络上重现上述配置(软件不支持)。

  3. UDPvs 的选择TCP是毫无疑问的:UDP尽可能使用。TCP保证所有发出的 IP 数据包不会丢失并且会按照发送的顺序到达。

    这听起来不错,但你的VPN隧道也会传输内部TCP连接。如果数据包丢失,OpenVPN客户端和建立内部连接的程序TCP都将启动重发。但是来自内部连接的重新传输的数据包将到达其目的地重新发送的邮件OpenVPN已被送达。这会导致不必要的网络流量。

编辑DH:和的强度之间的比较ECDH可在例如Keylength.com

  • 该组所需的大小DH在列中Discrete Logarithm Group

  • 具有等效强度的椭圆曲线的大小在列中Elliptic Curve

例如椭圆曲线的配置如下:

ecdh-curve prime256v1

相当于使用 和 生成DH参数openssl dhparam -out /etc/openvpn/dh.pem 3072

dh /etc/openvpn/dh.pem

NIST 建议提供的值大致对应于OpenSSL 安全级别。默认安全级别为1级2048,这意味着群组的位数DH224椭圆曲线的位数最少。您可以使用tls-cipher选项(参见OpenSSL 文档格式)。 例如设置:

tls-cipher DEFAULT:@SECLEVEL=4

将导致 OpenVPN 连接失败,直到您将上面的两个设置调整为所需的组大小(7680DH384ECDH)。

相关内容