一个虚拟专用网络 (VPN)对在您的计算机和 VPN 服务器之间传输的所有数据进行加密。在本完整 VPN 加密指南中,我们详细介绍了什么是加密以及如何在 VPN 连接中使用加密。
也许最重要的是,我们将解释使用的一系列加密术语VPN服务。我们希望,在阅读完本指南后,您将对这个复杂的主题有更深入的了解,并且能够更好地评估 VPN 提供商提出的安全声明。
预赛
如果您不确定 VPN 是什么以及它能为您做什么,请查看我们的VPN 初学者指南。
我们的目标是以尽可能简单的方式展示 VPN 加密的关键功能。尽管无法回避这一事实,但加密是一个复杂的主题。
如果“加密”一词让您眼前一亮,但您仍然想知道优质 VPN 服务需要注意什么,您可以使用目录直接跳到摘要。
什么是加密?
“从头开始,”国王非常严肃地说,“一直走到终点,然后停下来。”
最简单的比喻是加密是一把锁。如果你有正确的钥匙,那么锁很容易打开。如果有人没有正确的钥匙,但想要访问受该锁保护的保险箱中的内容(即您的数据),那么他们可以尝试破解该锁。
就像保护银行金库的锁比保护手提箱的锁更强一样,某些加密比其他加密更强大。
如果您想要具有最强加密能力的 VPN,请查看我们的最安全的 VPN 列表了解更多信息。
基础知识
当您还是个孩子的时候,您是否玩过通过用消息中的一个字母替换另一个字母来创建“秘密消息”的游戏?替换是根据您选择的公式进行的。
例如,您可能已将原始消息的每个字母替换为字母表中后面的三个字母。如果其他人知道这个公式是什么,或者能够算出它,那么他们就能够读取你的“秘密信息”。
用密码学术语来说,您所做的就是根据非常简单的数学算法“加密”消息(数据)。密码学家将此公式称为“密码”。要解密它,您需要密钥。这是一个可变参数,决定密码的最终输出。如果没有这个参数,就不可能解密密码。
如果有人想要读取加密消息但没有密钥,那么他们必须尝试“破解”密码。当加密使用简单的字母替换密码时,破解它很容易。然而,通过使数学算法(密码)更复杂,可以使加密更加安全。
例如,您可以将消息的每三个字母替换为与该字母对应的数字。
加密密钥长度
现代计算机密码是非常复杂的算法。即使在超级计算机的帮助下,破解这些密码也非常困难,即使对于所有实际目的来说并非不可能。衡量密码强度的最粗略方法是通过创建密码的算法的复杂性来衡量。
算法越复杂,使用我们所说的暴力攻击来破解密码就越困难。
如果是一种非常原始的攻击形式(也称为穷举密钥搜索),则称为暴力攻击,它基本上涉及尝试所有可能的数字组合,直到找到正确的密钥。
计算机使用二进制数(零和一)执行所有计算。密码的复杂性取决于其密钥大小(以位为单位) - 表达其算法所需的 1 和 0 的原始数量,其中每个 0 或 1 由单个位表示。
这称为密钥长度,也代表了对任何给定密码成功执行暴力攻击的实际可行性。
可能的组合数量(以及因此暴力破解它们的难度)随着密钥大小呈指数增长。使用AES 密码(见下文):

从这个角度来看:
- 2011 年,世界上最快的超级计算机是 Fujitsu K。它的 Rmax 峰值速度为 10.51 petaflops。根据此数字,强制破解 128 位 AES(高级加密标准)密钥需要 Fujitsu K 1.02 x 10^18 - 大约十亿亿(五分之一)年。这比宇宙的年龄(137.5 亿年)还要古老。
- 目前(2017年)世界上最强大的超级计算机是中国的神威·太湖之光。这头野兽的峰值速度可达 93.02 petaflops。这意味着世界上最强大的计算机仍需要大约 885 万亿年才能暴力破解 128 位 AES 密钥。
- 暴力破解 256 位密码所需的操作次数为 3.31 x 10^56。这大约相当于宇宙中原子的数量!
计算机密码
加密密钥长度是指所涉及的原始数字的数量,而密码是用于执行加密的数学(实际公式或算法)。正如我们刚才所看到的,暴力破解现代计算机密码是非常不切实际的。
这些密码算法的弱点(有时是故意的)可能导致加密被破坏。这是因为(设计不当的)密码的输出可能仍会揭示加密前原始信息的某些结构。这会创建一组减少的可能尝试组合,这实际上减少了有效密钥长度。
例如,Blowfish 密码很容易受到利用概率论中生日问题背后的数学原理的攻击。对密码算法弱点的研究称为密码分析。
较长的密钥长度弥补了这些弱点,因为它们大大增加了可能结果的数量。
对手可以攻击密钥本身,而不是攻击密码本身。这可能会影响特定站点或某些软件产品。但密码算法的安全性仍然完好无损,并且使用相同算法但具有安全密钥生成的其他系统不会受到破解的影响。
密钥长度
密码的强度取决于密码本身的数学原理以及以位表示的密钥长度。因此,密码通常与所使用的密钥长度一起描述。
因此 AES-256(密钥长度为 256 位的 AES 密码)通常被认为比 AES-128 更强。请注意我说的是通常因为我们在这里处理非常复杂的数学(请参阅我稍后关于 AES 的笔记)。
![]()
值得注意的是,密钥长度本身并不能很好地表明密码的强度。重要的是密钥长度和密码的组合。密码用于非对称加密例如,使用比对称加密所用的密钥长度更长的密钥来提供等效的保护。

该表有点过时了,因为它没有考虑在 RSA 上发现的较新的攻击。还值得注意的是,RSA 的椭圆曲线和 Diffie-Hellman 变体比传统的要强得多。但希望你明白了。
![]()
需要注意的一件事是,密钥长度越高,涉及的计算量就越多,因此需要的处理能力也就越强。这会影响数据加密和解密的速度。因此,VPN 提供商等在选择加密方案时必须决定如何最好地平衡安全性与实际可用性。有一些 VPN 提供商已经成功地实现了这种微妙的平衡。欲了解更多信息,请查看我们的快速 VPN 指南。
稍后我们将讨论各种 VPN 协议使用的主要密码,但您可能会遇到的最常见密码是 Blowfish 和 AES。除此之外,RSA用于加密并解密密码的密钥,并使用 SHA-1 或 SHA-2 作为哈希函数来验证数据。
非对称加密
完美的前向保密
完美前向保密 (PFS) 也称为使用临时加密密钥,或者对于那些不喜欢使用“完美”一词的人来说,简称为前向保密 (FS)。
大多数现代安全在线通信都依赖于 SSL/TLS。它由以下人员使用HTTPS网站和OpenVPN协议。 TLS(传输层安全)是一种非对称加密协议。使用非对称密码意味着使用每个人都可以使用的公钥来保护数据的安全。然而,它只能由持有正确私钥的预期接收者解密。
该私钥必须保密。如果它被对手窃取或破解,那么对手就可以轻松拦截和读取受其保护的任何通信。
不幸的是,服务器甚至整个公司通常只使用一个私有加密密钥来保护所有通信。为什么?因为这很容易。然而,如果该密钥被泄露,那么攻击者就可以访问用它加密的所有通信。
因此,该私有加密密钥成为可用于解锁与服务器或公司的所有通信的“主密钥”。众所周知,美国国家安全局利用了这一弱点来收集大量所谓的安全数据。
解决方案是完美前向保密。这是一个为每个会话生成新的、唯一的私有加密密钥的系统。这是一个简单的想法,即使迪菲-赫尔曼交换数学很复杂。这意味着每个 TLS 会话都有自己的一组密钥。因此,术语“临时密钥”——它们使用一次,然后就消失了。
因此,不存在可以被利用的“主密钥”。即使会话受到损害,它也是仅有的该会话受到损害 - 不是任何人与该服务器或公司的所有其他会话!
尽管不常见,但甚至可以在会话中刷新 PFS 密钥(例如,每小时)。即使私钥被泄露,这也进一步限制了对手可以拦截的数据量。
几年前,当我写这篇关于该主题的文章时,对 HTTPS 网站和 OpenVPN 连接使用完美前向保密的情况非常罕见。幸运的是,这种情况已经有所改变。尽管并不普遍,但临时密钥的使用最近已大大增加。
VPN 协议是用于在两台计算机之间协商安全加密连接的指令集(机制)。商业 VPN 服务通常支持许多此类 VPN 协议。其中最著名的是 PPTP、L2TP/IPSec、OpenVPN、SSTP 和 IKEv2。
我将逐一查看下面的内容,但 OpenVPN 现在已成为商业 VPN 服务使用的行业标准 VPN 协议 - 这是有充分理由的。它非常安全,几乎可以在所有支持 VPN 的设备上使用。因此,我将花费额外的数字墨水来详细讨论 OpenVPN。
PPTP
优点
- 几乎所有平台都内置了客户端
- 设置非常简单
缺点
- 非常没有安全感
- 绝对是被美国国家安全局(NSA)妥协了
- 轻松封锁
什么是PPTP?
它只是一个 VPN 协议,依赖各种身份验证方法来提供安全性。在商业 VPN 提供商中,这几乎总是 MS-CHAP v2。 PPTP 使用的加密协议(类似于标准密码)是 Microsoft 点对点加密 (MPPE)。
点对点隧道协议(PPTP) 由 Microsoft 成立的一个联盟开发,用于通过拨号网络创建 VPN。因此,PPTP 长期以来一直是企业 VPN 网络的标准协议。
PPTP 在几乎所有支持 VPN 的平台和设备上都是标准配置。它易于设置,无需安装额外的软件。这确保了 PPTP 仍然是企业 VPN 和商业 VPN 服务的流行选择。
它还具有需要较低的计算开销来实现的优点......所以速度很快!
不幸的是,PPTP 并不安全。完全没有。尽管现在通常只使用 128 位加密密钥,但自 1999 年首次与 Windows 95 OSR2 捆绑以来,许多安全漏洞已经被发现。
其中最严重的是未封装的 MS-CHAP v2 身份验证的可能性。利用这个漏洞,PPTP 在两天内就被破解了。 Microsoft 已修补了该缺陷,但自己也发布了使用 L2TP/IPsec 或 SSTP 的建议。
毫不奇怪,NSA 几乎肯定会将 PPTP 加密通信解密作为标准。更令人担忧的是,NSA 收集了大量旧数据,这些数据在 PPTP 被认为安全时就已加密。它几乎肯定也可以解密这些遗留数据。
PPTP 需要 TCP 端口 1723 和 GRE 协议。 GRE 防火墙很容易,这使得阻止 PPTP 连接变得很容易。
L2TP/IPsec
优点
- 通常被认为是安全的
- 易于设置
- 适用于所有现代平台
- 比 OpenVPN 更快(也许)
缺点
- 可能受到 NSA 的损害(未经证实)
- 可能被国家安全局故意削弱(未经证实)
- 可能会遇到限制性防火墙
- 经常执行得不好
什么是 L2TP 和 IPsec?
几乎所有现代操作系统和支持 VPN 的设备都内置了第 2 层隧道协议 (L2TP)。因此,它的设置与 PPTP 一样简单快捷。
就其本身而言,L2TP 并不为通过它的流量提供任何加密或机密性,因此通常使用IPsec 身份验证套件(L2TP/IPsec)。即使提供商仅提及 L2TP 或 IPsec(某些提供商确实如此),它几乎肯定实际上意味着 L2TP/IPSec。
L2TP/IPsec 可以使用 3DES 或 AES 密码。 3DES 很容易受到中间相遇和 Sweet32 冲突攻击,因此在实践中您现在不太可能遇到它。
由于 L2TP/IPSec 协议仅使用有限数量的端口,因此可能会出现问题。当在 NAT 防火墙后面使用时,这可能会导致复杂化。这种对固定端口的依赖也使得该协议相当容易被阻止。
L2TP/IPsec 将数据封装两次,这会减慢速度。加密/解密发生在内核中并且 L2TP/IPsec 允许多线程这一事实抵消了这一点。 OpenVPN 没有。结果是 L2TP/IPsec理论上比 OpenVPN 更快。
使用 AES 密码的 L2TP/IPsec 没有重大已知漏洞,如果实施得当,可能仍然是安全的。然而,爱德华·斯诺登的爆料强烈暗示该标准受到美国国家安全局的损害。
约翰·吉尔摩 (John Gilmore) 是一名安全专家,也是电子前沿基金会的创始成员。他解释说,很可能IPSec被故意削弱在其设计阶段。
一个可以说更大的问题是许多 VPN 服务对 L2TP/IPsec 的实施很差。具体来说,他们使用预共享密钥(PSK)可以从其网站免费下载。
这些 PSK 仅用于验证连接,因此即使遭到泄露,数据仍会使用 AES 进行安全加密。然而,攻击者可以使用预共享密钥来冒充 VPN 服务器。然后,它可以窃听加密流量,甚至将恶意数据注入连接中。
![]()
概括
尽管存在一些主要的理论问题,但如果不使用公开发布的预共享密钥,L2TP/IPsec 通常被认为是安全的。它与许多设备的内置兼容性使其成为一个非常好的选择。
SSTP
优点
- 非常安全
- 完全集成到 Windows 中
- 微软支持
- 可以绕过大多数防火墙
缺点
- 微软拥有的专有标准
什么是SSTP?
SSTP 是一种使用 SSL 3.0 的加密类型,具有与 OpenVPN 类似的优势。这包括使用 TCP 端口 443 逃避审查的能力。与 Windows 的紧密集成使其比该平台上的 OpenVPN 更易于使用且更稳定。
然而,与 OpenVPN 不同的是,SSTP 是 Microsoft 拥有的专有标准。这意味着该代码不接受公众审查。微软与 NSA 合作的历史,以及对 Windows 操作系统可能内置后门的猜测,并没有激发人们对该标准的信心。
安全套接字隧道协议(SSTP) 是由 Microsoft 在 Windows Vista SP1 中引入的。虽然现在可以用于Linux VPN,甚至 Mac OS X,它仍然主要是一个仅限 Windows 的平台。
另一个问题是 SSL v3.0 容易受到所谓的贵宾犬攻击,因此现在不推荐。这个问题是否也会影响 SSTP 尚不清楚,但同样很难激发信心。
![]()
概括
从理论上讲,SSTP 提供了 OpenVPN 的许多优点。然而,作为微软专有标准,严重损害了其可信度。
IKEv2
优点
- 快速地
- 稳定 - 特别是在切换网络或在互联网连接丢失后重新连接时
- 安全(如果使用 AES)
- 易于设置(至少在用户端!)
- Blackberry 设备支持协议
缺点
- 许多平台不支持
- 在服务器端实施 IKEv2 很棘手,这可能会导致出现问题
- 只信任开源实现
什么是 IKEv2?
Internet 密钥交换版本 2 (IKEv2) 由 Microsoft 和 Cisco 联合开发。 Windows 7+、Blackberry 和 iOS 设备原生支持它。这就是为什么很多iOS VPN服务使用 IKEv2 而不是 OpenVPN。
自主开发的IKEv2兼容版本已针对Linux等操作系统开发。其中许多迭代都是开源的。一如既往,我建议对微软开发的任何东西保持警惕。然而,IKEv2 的开源版本应该没有问题。
IKEv2 是 IPsec 协议套件的一部分。它通过在 IPsec 内处理 SA(安全关联)属性来确保流量安全,并在许多方面改进了 IKEv1。因此,IKEv2 有时称为 IKEv2/IPsec。另一方面,IKEv1 通常简称为 IPsec。
IKEv2 被 Microsoft 称为 VPN Connect,特别擅长在用户暂时失去互联网连接时自动重新建立 VPN 连接。例如,进入或离开火车隧道时。
由于支持移动性和多宿主 (MOBIKE) 协议,IKEv2 对不断变化的网络也具有很强的弹性。这使得 IKEv2 成为经常在家庭 WiFi 和移动连接之间切换或经常在热点之间移动的手机用户的绝佳选择。
IKEv2 不像 L2TP/IPSec 那样常见,因为支持它的平台要少得多(尽管这种情况正在迅速改变)。然而,在安全性、性能(速度)、稳定性和建立(和重新建立)连接的能力方面,它被认为至少与 L2TP/IPsec 一样好,甚至优于 L2TP/IPsec。
开放VPN
优点
- 非常安全(如果使用 PFS)
- 高度可配置
- 开源
- 可以绕过防火墙
- 需要第三方软件
什么是 OpenVPN?
开放VPN是一种开源技术,它使用 OpenSSL 库和 TLS 协议以及其他技术的混合体,提供强大而可靠的 VPN 解决方案。它现在已成为商业 VPN 服务使用的行业标准 VPN 协议 - 这是有充分理由的。
OpenVPN 的主要优势之一是它的高度可配置性。它本身不受任何平台支持,但可以通过第三方软件在大多数平台上使用。定制 OpenVPN 客户端和应用程序通常可以从各个 VPN 提供商处获得,但核心开源代码是由OpenVPN项目。
OpenVPN 项目的许多开发人员和贡献者也为 OpenVPN Technologies Inc. 工作,该公司负责监督该项目。
OpenVPN 在 UDP 端口上运行最佳,但它可以设置为在任何端口上运行(请参阅后面的注释)。这包括 TCP 端口 443,该端口由常规 HTTPS 流量使用。通过 TCP 端口 443 运行 OpenVPN 使得很难将 VPN 连接与银行、电子邮件服务和在线零售商使用的安全连接区分开来。这使得 OpenVPN 很难被阻止。
OpenVPN 的另一个优点是用于提供加密的 OpenSSL 库支持多种密码。但实际上,商业 VPN 服务通常只使用 Blowfish 和 AES。我在下面讨论这些。
根据爱德华·斯诺登获得的信息,似乎只要使用完美前向保密,那么 OpenVPN 就不会受到 NSA 的破坏或削弱。
最近对 OpenVPN 的一项众包审计现已完成,另一项由 Private Internet Access 资助的审计也已完成。未发现影响用户隐私的严重漏洞。我们发现了几个漏洞,这些漏洞可能导致 OpenVPN 服务器容易受到拒绝服务 (DoS) 攻击,但这些漏洞已在 OpenVPN 2.4.2 中得到修复。
OpenVPN 通常被认为是最安全的 VPN 协议,并在 VPN 行业得到广泛支持。因此,我将在下面详细讨论 OpenVPN 加密。
OpenVPN 加密
OpenVPN加密包括两部分——数据通道加密和控制通道加密。数据通道加密用于保护您的数据。控制通道加密可保护您的计算机和 VPN 服务器之间的连接。
任何防御措施的强度取决于其最弱点,因此不幸的是,一些 VPN 提供商在一个通道上使用比另一个通道更强的加密(通常在控制通道上更强)。
例如,经常看到 VPN 服务被宣传为使用 AES-256 密码、RSA-4096 握手加密和 SHA-512 哈希身份验证。这听起来非常令人印象深刻,直到你意识到它仅有的指的是控制通道加密,而不是数据通道,数据通道仅使用 Blowfish-128 和 SHA1 哈希身份验证进行加密。这样做只是出于营销原因。
如果数据和控制通道使用不同的加密,则 OpenVPN 连接的真实强度将通过所使用的较弱的加密套件来衡量。
为了获得最大的安全性,数据和控制通道加密都应该尽可能强。然而,使用的加密越强,连接速度就越慢,这就是为什么一些提供商在数据通道加密方面精打细算的原因。
控制通道加密也称为 TLS 加密,因为传输层安全协议是用于安全协商您的计算机和 VPN 服务器之间的连接的技术。这与您的浏览器用于安全协商与 HTTPS 加密网站的连接的技术相同。
- 控制通道加密由密码、握手加密和哈希认证组成。
- 数据通道加密由密码和散列认证组成。
VPN 提供商通常对控制通道和数据通道使用相同级别的加密。在我们的评论和“红绿灯”表中,如果每个通道使用不同的值,我们只会单独列出它们。
如果我们声明提供商使用 AES-256 密码,则意味着 AES-256 密码用于控制和数据通道。*
(*这应该至少是这样。一些遗留审查不符合我们当前的指导方针,但这些应该及时淘汰)。
密码
OpenVPN 可以使用多种对称密钥密码为了保护控制和数据通道上的数据。实际上,商业 VPN 提供商仅使用 Blowfish、AES 和(极少数)Camellia。
河豚
Blowfish-128 是 OpenVPN 使用的默认密码。理论上,密钥大小的范围可以从 32 位到 448 位,但 Blowfish-128 是您在野外可能遇到的唯一版本。
河豚 通常认为对于休闲目的来说足够安全,但也有已知的弱点。它是由著名密码学家布鲁斯·施奈尔 (Bruce Schneier) 创建的,他在 2007 年表示:“但在这一点上,我很惊讶它仍在使用。”
我们认为,使用 Blowfish-128 作为 OpenVPN 数据通道上的第二道防线是可以接受的。然而,当在控制通道上使用时,不应将其视为安全的。
AES
AES已成为 VPN 行业范围内的“黄金标准”对称密钥密码。 AES 是通过 NIST 认证并且几乎被普遍认为非常安全的。美国政府使用 AES-256 来保护“安全”数据。
事实上它有 128 位块大小而不是 Blowfish 的 64 位块大小也意味着它可以比 Blowfish 更好地处理更大的文件(超过 4 GB)。除此之外,AES 指令集还受益于大多数平台上的内置硬件加速。
AES 通常有 128 位和 256 位密钥大小(也存在 192 位 AES)。据任何人所知,AES-128 仍然是安全的。然而,鉴于我们现在所了解的 NSA 对加密标准的攻击程度,大多数专家都认为 AES-256 提供了更高的安全裕度。
不过,为了确保没有人觉得这个主题太简单,对此问题存在一些争论。 AES-128具有更强的关键时间表比 AES-256 强,这导致一些非常著名的专家认为 AES-128 实际上比 AES-256 更强。
然而,普遍的共识是 AES-256 更强。
茶花
Camellia 是一种现代安全密码,至少与 AES 一样安全和快速。它提供 128、192 和 256 位密钥大小。然而,由于 NIST 认证以及美国政府的使用,AES 几乎总是被用来代替 Camellia。
但正如我下面讨论的,有理由不信任 NIST 认证的密码。 Camellia 是非 NIST 密码这一事实是选择它而不是 AES 的主要原因。然而,此选项很少可用。
还值得注意的是,Camellia 没有像 AES 那样经过充分的弱点测试。
握手加密
为了安全地协商您的设备和 VPN 服务器之间的连接,OpenVPN 使用TLS 握手。这允许 OpenVPN 客户端和 VPN 服务器建立用于通信的密钥。
为了保护此握手,TLS 通常使用 RSA公钥密码系统。这是一种加密和数字签名算法,用于识别TLS/SSL 证书。然而,它也可以使用 Diffie-Hellman 或 ECDH 密钥交换。
RSA
RSA 是一种非对称加密系统 - 使用公钥来加密数据,但使用不同的私钥来解密数据。在过去 20 年左右的时间里,它一直是互联网安全的基础。
现在众所周知,密钥长度为 1024 位 (RSA-1024) 或更少的 RSA 并不安全,并且几乎可以肯定已被 NSA 破解。因此,互联网公司纷纷采取一致行动,放弃 RSA-1024。
不幸的是,我们仍然发现一些 VPN 服务继续使用 RSA-1024 来保护握手。这不好。
RSA-2048 及更高版本是仍然被认为是安全的。 RSA 本身不提供完美前向保密 (PFS)。然而,这可以通过在其密码套件中包含 Diffie-Hellman (DH) 或椭圆曲线 Diffie-Hellman (ECDH) 密钥交换来实现。
在这种情况下,DH 或 ECDH 密钥的强度并不重要,因为它正在使用仅有的提供完美的前向保密。使用 RSA 保护连接的安全。
因为它可能会引起混乱,所以我还要指出,RSA 密码系统与名誉扫地的美国科技公司 RSA Security LLC 无关。这家公司故意削弱其旗舰BSAFE加密产品经过受贿美国国家安全局拨款 1000 万美元。
迪菲-赫尔曼和 ECDH
OpenVPN 有时使用的另一种(竞争对手)握手加密是 Diffie-Hellman (DH) 加密密钥交换。密钥长度通常为 2048 位或 4096 位。请注意,由于容易受到僵局攻击,应避免低于 DH-2048 的任何内容。
与 RSA 相比,Diffie-Hellman 握手的主要优点是它本身提供完美的前向保密。然而,正如已经指出的,只需将 DH 密钥交换添加到 RSA 握手即可达到类似的目的。
Diffie-Hellman 因其重复使用一组有限的素数而引起了巨大争议。这使得它很容易被强大的对手破解,比如美国国家安全局。因此,Diffie-Hellman 本身并不能实现安全的握手加密。然而,当用作 RSA 密码套件的一部分时,它就很好了。
椭圆曲线 Diffie-Hellman (ECDH) 是一种较新形式的密码学,不易受到这种攻击。这是因为它使用特定类型代数曲线的属性而不是大素数来加密连接。
ECDH 可以用作 RSA 握手的一部分以提供完美的前向保密,或者可以自行安全地加密握手(使用 ECDSA 签名)。这也提供了 PFS。
ECDH 密钥长度从 384 位开始。这被认为是安全的,但当单独使用来保护 TLS 握手时,时间越长越好(无论如何,就安全性而言)。
SHA 哈希验证
这也称为数据身份验证或哈希消息身份验证代码 (HMAC)。
安全哈希算法(SHA) 是一种加密哈希函数,用于(除其他外)验证数据和 SSL/TLS 连接。这包括 OpenVPN 连接。
它创建有效 TLS 证书的唯一指纹,可由任何 OpenVPN 客户端进行验证。即使是最微小的变化也是可以察觉的。如果证书被篡改,将立即检测到并拒绝连接。
这对于防止中间人 (MitM) 攻击非常重要,在这种攻击中,攻击者会尝试将您的 OpenVPN 连接转移到其自己的服务器之一,而不是您的 VPN 提供商。例如,它可以通过侵入您的路由器来做到这一点。
如果对手可以破解提供商的真实 TLS 证书的哈希值,则它可以反转哈希值以创建伪造的证书。然后,您的 Open VPN 软件将验证该连接是否真实。
SHA 安全吗?
当用于保护 HTTPS 网站时,SHA-1 被破坏。这件事已经为人所知有一段时间了。 SHA-1 网站仍然可以找到,但正在被逐步淘汰。现在,当您尝试连接到使用 SHA-1 保护的网站时,大多数浏览器都会发出警告。
现在建议使用 SHA-2 和 SHA-3 哈希函数,并且它们是安全的。 SHA-2 包括 SHA-256、SHA-384 和 SHA-512。然而…
OpenVPN 仅对 HMAC 使用 SHA。我认为在这里讨论太多细节没有用,但 SHA 哈希身份验证是 HMAC 算法的一部分。攻击嵌入 SHA-1 的 HMAC 比攻击 SHA-1 哈希函数本身要困难得多。
换句话说,OpenVPN 使用的 HMAC SHA-1 被认为是安全的,并且有数学证明。当然,HMAC SHA-2 和 HMAC SHA-3 是偶数更多的安全的!事实上,最近的 OpenVPN 审核认识到 HMAC SHA-1 是安全的,但建议改用 HMAC SHA-2 或 HMAC SHA-3。
笔记
美国国家标准技术研究院
AES、RSA、SHA-1 和 SHA-2 均由美国开发和/或认证美国国家标准技术研究院(美国国家标准技术研究所)。该机构自己承认在密码开发方面与美国国家安全局密切合作。
鉴于我们现在所知的 NSA 系统性地削弱国际加密标准或在国际加密标准中建立后门,我们有充分的理由质疑 NIST 算法的完整性。
当然,NIST 强烈反驳了此类指控:
”NIST 不会故意削弱加密标准。”
它还邀请公众参与一些即将提出的加密标准,此举旨在增强公众信心。
这纽约时报然而,指责 NSA 通过引入无法检测的后门或颠覆公共开发流程来削弱算法,从而规避了 NIST 批准的加密标准。
当 RSA Security(EMC 的一个部门)私下告诉客户停止使用据报道包含 NSA 设计的缺陷的加密算法时,这种不信任进一步加剧。该算法也得到了 NIST 的认可。
此外,Dual_EC_DRBG(双椭圆曲线确定性随机位生成器)是 NIST 设计的加密标准。多年来,人们都知道它是不安全的。
2006 年,荷兰埃因霍温科技大学指出,针对它的攻击很容易在“普通 PC”上发起。微软工程师还指出了算法中可疑的后门。
尽管存在这些担忧,但 NIST 引领的领域,整个行业也紧随其后。 Microsoft、Cisco、Symantec 和 RSA 都将该算法包含在其产品的加密库中。这在很大程度上是因为遵守 NIST 标准是获得美国政府合同的先决条件。
NIST 认证的加密标准在全球范围内几乎无处不在,遍及依赖隐私的工业和商业的所有领域。这让整个情况变得相当令人不寒而栗。
也许正是因为如此依赖这些标准,密码学专家一直不愿意正视这个问题。
AES-CBC 与 AES-GCM
直到最近,您在 VPN 世界中可能遇到的唯一 AES 密码是 AES-CBC(密码块链)。这是指分组密码模式,这是一个不值得在这里讨论的复杂主题。尽管加拿大广播公司可能理论上有一些漏洞,普遍的共识是 CBC 是安全的。 OpenVPN 手册中确实推荐了 CBC。
OpenVPN 现在还支持 AES-GCM(Galios/Counter 模式)。
- GCM 提供身份验证,无需 HMAC SHA 哈希函数。
- 它也比 CBC 稍快,因为它使用硬件加速(通过线程到多个处理器核心)。
AES-CBC 仍然是最常用的模式,但我们现在开始“在野外”遇到 AES-GCM。鉴于 GCM 的优势,这种趋势很可能会持续下去。从密码学的角度来看,尽管如此,AES-CBC 和 AES-GCM 都非常安全。
OpenVPN UDP 与 OpenVPN TCP
OpenVPN可以跑过去TCP(传输控制协议)或 UDP(用户数据报协议)。
- TCP=可靠。每当计算机使用 TCP 发送网络数据包时,它都会等待数据包已到达的确认,然后再发送下一个数据包。如果没有收到确认,它将重新发送数据包。这称为纠错。所有数据都有“保证交付”,但速度可能相当慢。
- UDP = 快。使用 UDP 时,不会执行此类错误纠正。数据包只是简单地发送和接收,无需确认或重试。这使得 UDP 比 TCP 快得多,但可靠性较差。
如果可以选择,我建议使用更快的 UDP 协议,除非您遇到连接问题。这是大多数 VPN 提供商采用的默认策略。
使用 TCP 端口 443 上的 OpenVPN 击败审查制度
OpenVPN 的一大优势是它可以在任何端口上运行,包括 TCP 端口 443。这是 HTTPS 使用的端口,HTTPS 是保护所有安全网站的加密协议。
如果没有 HTTPS,就不可能进行任何形式的在线商务,例如购物或银行业务。因此,该端口被封锁的情况非常罕见。
另外,TCP 端口 443 上的 VPN 流量可以在 TLS 加密内部路由,方式与 HTTPS 使用的方式相同。这使得很多使用高级技术更难发现深度包检测技术。因此,TCP 端口 443 是逃避 VPN 封锁的首选端口。
许多 VPN 提供商都提供使用其定制软件更改 OpenVPN 使用的端口号的功能。
即使您的不支持,许多 VPN 提供商实际上也支持在服务器级别使用 TCP 端口 443 的 OpenVPN。您可以通过对 OpenVPN 配置 (.ovpn) 文件进行简单编辑来切换到它。因此,值得向您的 VPN 提供商询问此事。
值得注意的是,网络工程师不喜欢这种策略,因为 TCP over TCP 非常效率低下。然而,当谈到击败审查制度时,它通常会奏效。
SSTP 默认使用 TCP 端口 443。
摘要
VPN协议
- PPTP是非常不安全的,应该避免。虽然 L2TP/IPsec 的易于设置和跨平台兼容性很有吸引力,但它也具有相同的优势,而且安全性更高。
- L2TP/IPsec对于非关键用途来说是一个很好的 VPN 解决方案。在不支持 OpenVPN 的旧设备上尤其如此。然而,它已受到美国国家安全局的严重破坏。
- SSTP提供 OpenVPN 的大部分优点,但主要只是 Windows 协议。这确实意味着它可以更好地集成到操作系统中,但由于这一限制,VPN 提供商对它的支持很差。除此之外,它的专有性质以及由 Microsoft 创建的事实意味着我不信任它。
- IKEv2是一个非常好的(安全且快速)协议。特别是移动用户,甚至可能更喜欢它而不是 OpenVPN,因为它提高了互联网连接中断时重新连接的能力。对于黑莓用户来说,这几乎是唯一可用的选择。尽可能使用开源版本。
- 开放VPN是大多数情况下推荐的 VPN 协议。它快速、可靠、安全且开源。它本身没有真正的缺点,但要真正安全,良好实施非常重要。这意味着具有完美前向保密性的强加密。
OpenVPN 加密
当谈到加密时,细节决定成败。我们经常看到 VPN 提供商声称他们使用“超强 256 位”AES OpenVPN 加密,但这实际上并不能告诉我们太多信息。 AES-256 确实是一种强大的密码,但如果所使用的加密套件的其他方面较弱,那么您的数据将不安全。
- 密码– 这可以保护您的实际数据。 AES-256 现已成为行业标准并推荐使用。
- 握手– 这可以保护您与 VPN 服务器的连接。 RSA-2048+ 或 ECDH-384+ 是安全的。重要的是 RSA-1024 和 Diffie-Hellman 握手是不是。
- 哈希认证– 创建一个唯一的指纹,用于验证数据和 TLS 证书(即检查您正在连接的服务器是否确实是您认为正在连接的服务器)。 HMAC SHA-1 绝对没问题,但 HMAC SHA-2(SHA-256、SHA-384 和 SHA-512)和 HMAC SHA-3 甚至更好更多的安全的!请注意,哈希认证是不是如果使用 AES-GCM 密码,则需要。
- 完美的前向保密(PFS) – 这确保为每个会话创建新的加密密钥。除非实现 PFS,否则 OpenVPN 不应被视为安全。这可以通过在 RSA 握手或 DH 或 ECDH 握手中包含 Diffie-Hellman 或 ECDH 密钥交换来完成。
- 加密的安全性取决于其最弱点。这意味着加密设置应该很强两个都数据和控制通道。
- 对密码和密钥使用更高的位长度几乎总是更安全,但这是以速度为代价的。
OpenVPN 将在客户端和服务器之间随意协商密码。除非定义了非常具体的参数,否则 OpenVPN 可能会默认为弱设置。至少,OpenVPN 将默认使用 Blowfish-128 密码、无 PFS 的 RSA-1024 握手以及 HMAC SHA-1 哈希身份验证。
结论
希望您现在能够更好地了解安全 VPN 连接的构成要素。然而,当谈到正确配置 VPN 时,加密只是故事的一半。另一半是确保没有流量在 VPN 连接之外进入或离开您的计算机。
要了解更多相关信息,请查看我们的IP 泄露完整指南。
