开发者博客:Lightway 内部概览

这篇文章最初发表于 2021 年 2 月 1 日。

VPN 协议定义了客户端和服务器怎样相互验证、建立连接以及通过创建的隧道传输数据。 有大量可用的 VPN 协议,每种协议都有自己独特的环境和用例。

在 ExpressVPN,我们开发了自己的协议,以最好地满足客户的需求,使他们能够始终保持联系,而无需在隐私、速度和便利性方面进行权衡。 在这里,我们概述了我们为提供更加私密、安全和可靠的 VPN 体验而做出的一些关键设计决策。

[Go behind the scenes of ExpressVPN. Sign up for the ExpressVPN Blog Newsletter.]

Lightway 协议是一个只有大约 1,000 行代码的紧凑库,可供任何平台上的客户端应用程序或直接在服务器上使用。 它没有实现自己的密码学,而是严重依赖于完善的密码学库 wolfSSL,它已经过广泛的审查并具有 FIPS-ready 库。

Lightway 不依赖于带有配置文件的外部二进制文件(预编译的代码),这意味着 VPN 协议、其实现和客户端之间的关系更加明显。 它没有未使用或已弃用的功能形式的额外包袱,因此很轻薄且易于审核。 它还允许开发人员在客户端和服务器上的各种平台上安全地实施 Lightway。

Lightway 最明显的好处是连接时间短。 Lightway 客户端可以在一次往返中对服务器进行身份验证,并在三个往返中建立连接。 在 UDP 上,协议使用 D/TLS 1.2 (UDP 的 TLS),并且在中断或不活动的情况下,用户可以从中断的地方继续。 D/TLS 源自 TLS 1.2 并继承了它的所有优点,包括重放保护。 对于 TCP 连接,Lightway 使用 TLS 1.3,一旦 TLS 1.3 支持 UDP,Lightway 会尽快使用。

由于连接并未终止而是处于空闲状态,因此在许多常见情况下(例如将设备从睡眠中唤醒或半天后停用飞行模式时)从用户停止的地方继续几乎是不明显的。 即使在更改移动网络或您的物理位置后,您仍将连接到相同的 ExpressVPN 服务器。

在一段时间不活动后,您的连接被重置,您的内部 IP 被发送回队列,最终将被分配给其他人,确保所有连接都已终止。 (这个“不活动时钟”随着每个数据包的发送而重置,并且不记录登录时间或活动配置文件。)

密钥每 15 分钟使用椭圆曲线 Diffie-Hellman (ECDH) 协商一次,或者每当您的设备更改网络时,例如当您在 Wi-Fi 和移动数据之间移动时。 如果 ECDH 失败,软件将退回到经典的 Diffie-Hellman 交换。

Lightway 中使用的仅有的两种密码是 AES-256-GCM 和 ChaCha20/Poly1305。 由于大多数设备都具有出色的 AES 硬件加速功能,Lightway 将大多默认使用这种经过充分验证的密码。 只有在功率较低的路由器或入门级移动设备上才能使用 ChaCha20。 客户端和服务器软件中不包含其他协议(例如 SSL 或旧版本的 TLS)和密码,从而降低了降级攻击的风险。

Lightway 默认情况下不会混淆其流量。 为了减轻监视和审查,客户端可以在 Lightway 协议之上修改流量,使其看起来像其他流量。 这非常适合这种方式 ExpressVPN 用户使用他们的应用程序。

Lightway 的核心代码库现在可以在 GitHub 上预览,确保对我们的用户透明。 我们将很快发布更多 Lightway 代码,让用户可以使用 ExpressVPN 无需封闭源代码软件或未知二进制文件的网络,类似于当今 OpenVPN 手动配置所允许的方式。

阅读更多: 全部 ExpressVPN 应用程序和浏览器扩展至少支持 17 种语言