看看算法名称旁的那个大数字,问它究竟在衡量什么。它不会告诉你哪条连接受到保护、由哪个协议提供保护,也不会说明你的客户端支持哪些设置。一个无法把声明与上述任何一项对应起来的页面,是广告而不是文档。下面这些检查适用于你拿到的任何摘要,是一套阅读顺序;当你遇到第一条无法归属到具体连接的声明时,就该停下。

确定声明针对的是哪条连接

一个产品页面可能在同一段里谈论隧道加密、通往账户门户的 HTTPS,以及静态数据的加密。这是不同的通路和不同的存储系统,其中一项的性质说明不了另外两项。在同竞品比较之前,先判断这句话讲的是三者中的哪一个。同一个词“加密”在三种语境里都出现,每次含义都不同。

就隧道本身而言,要找的是有文档记录的协议,以及一套有文档记录的受支持安全设置。这三个标签不能互换:默认套件是你没有选择就随附的,可选模式只在配置文件选中时才生效,而协商结果是连接时双方实际达成的内容。把这些混为一谈的厂商,说的比看上去要少。

检查协议及其允许的套件

从客户端配置文件入手,而不是从对比图表入手。配置文件指明协议,而协议决定哪些套件根本可能,常见的两种情形正是如此。

PropertyIKEv2/IPsec profileWireGuard profile
Cipher suiteProposal list of encryption, integrity, PRF and DH groupFixed ChaCha20-Poly1305 with Curve25519
NegotiationThe gateway narrows the proposal at connect timeNo suite negotiation at all
Peer authenticationCertificates or a preshared secretA public key per peer

IKEv2 的提议列表是网关从中挑选的菜单,因此客户端设置完全相同的两个网关也可能给你不同的套件。WireGuard 没有这样的菜单,这让它的声明更容易核实,也更窄。两种安排本身都不更强;关键在于文档必须说明指的是哪一种。

只写算法名称还会漏掉认证、密钥建立、元数据暴露与留存。现代构造把加密与完整性合为一套,较早的构造则把它们分开,因此只引用一个算法名称,可能掩盖你实际获得的是哪项性质。页面没有写明时,请以书面形式索取协商策略。

检查对端认证与更新状态

即使营销文案跳过,对端认证仍是声明的一部分。向未经验证的接收方做高强度加密,并不是任何人想要的结果;一条说不出谁应答了的隧道,实际保护得比看上去更少。要看你客户端如何验证服务器:证书链、固定密钥,还是预先共享的秘密。这些是不同的信任模型,失效方式也不同。

接着检查实现及其更新状态,因为未打补丁客户端里记录的算法,描述的是一个你可能并未运行的版本。出于同样理由,协议作者公布的局限也值得一读。一年没更新的客户端,和眼前这个页面做的并不是同一个声明。

检查隧道在哪一端终止

从客户端到服务器的隧道终止于 VPN 服务器。应用层加密(例如通往其后服务的 HTTPS)可以保护更远一段路程的流量,而在服务器之后,它可能是仅剩的保护。读一读运营方关于端点的说明,判断声明指的是其中哪一层。

日志政策与账户追踪完全在加密之外。运营方可以在传输加密内容的同时观察时序、地址与流量规模,因此关于载荷保密性的声明,对实际被记录了什么毫无回答。把留存当作一个有独立证据的单独问题。

记录文档没有说明的部分

当某项性质缺失时,记下它缺失,而不要从软件名称或口碑去推断。一次审计只覆盖它真正检查过的性质与组件,而文档中的空白本身就是一项发现。趁还记得是哪一页造成的,就把这个空白写下来。

在自己控制的机器上,通过客户端状态页或网关上的安全关联列表,从活动会话中回读套件,并把该值记在客户端版本旁边。日后更新改变了协商结果时,这份记录能让厂商声明变得可比较。如果客户端与文档不一致,请相信协商结果,并报告这一差异,而不是悄悄调和。

相关文章