威胁模型 (Threat Model - Chinese)¶
了解 R-VPN 的保护范围及其安全目标。
安全目标¶
R-VPN 旨在提供以下安全特性:
1. 机密性 (Confidentiality)¶
所有应用数据均使用 AEAD(关联数据的认证加密)密码进行加密。流量内容对任何第三方(包括网络观察者、ISP 和中间基础设施)均不可访问。
2. 前向保密 (Forward Secrecy)¶
即使长期密钥在未来被泄露,过去的会话仍然保持安全。这是通过生成会话专用密钥的临时密钥交换实现的,这些密钥不会被存储。
3. 后妥协安全 (Post-Compromise Security)¶
通过双棘轮算法(Double Ratchet Algorithm),未来会话可以从密钥泄露中恢复。即使当前会话密钥被暴露,协议也能随时间"自我修复",限制漏洞窗口。
4. 不可检测性 (Undetectability)¶
流量被设计为与合法的 HTTPS/WebSocket 流量无法区分。这可以防止流量分类系统识别和阻止 R-VPN 连接。
5. 合理否认性 (Plausible Deniability)¶
服务器向未认证的客户端呈现合法的网站内容。对于外部观察者来说,服务器看起来是一个正常的网络服务,为 VPN 操作提供否认性。
对手能力¶
被动观察者 (Passive Observer)¶
能力: - 流量分析和流监控 - 时序模式观察 - 流量监控和统计收集 - 连接持续时间跟踪
缓解措施: - 通过填充掩盖有效载荷大小的流量填充 - 恒定速率传输模式 - 使用标准密码套件的 TLS 1.3 加密 - WebSocket 帧模拟正常网络流量
主动攻击者 (Active Attacker)¶
能力: - 数据包注入和修改 - 重放攻击 - 中间人攻击 - 连接中断
缓解措施: - 双棘轮序列号防止重放 - AEAD 认证标签检测篡改 - X3DH 密钥协商提供认证 - 完全前向保密限制暴露
DPI 系统 (深度包检测)¶
能力: - 协议指纹识别 - 流量分类 - 数据包模式的统计分析 - TLS 指纹识别
缓解措施: - 基于 TLS 1.3 的 WebSocket(标准网络技术) - 浏览器级流量模拟 - 随机填充防止基于大小的指纹识别 - 不带自定义扩展的标准 TLS 握手
审查系统 (Censorship Systems)¶
能力: - 对可疑 VPN 服务器的主动探测 - 域名和 IP 地址封锁 - 基于分类的流量限制 - 证书固定强制执行
缓解措施: - 域名前置能力(计划中) - CDN 集成实现 IP 多样性(计划中) - 网站伪装(诱饵)用于未认证请求 - 无可区分的协议签名
密钥泄露 (Compromised Keys)¶
能力: - 先存储后解密攻击 - 使用被盗密钥解密会话 - 如果身份密钥被盗则进行冒充
缓解措施: - 通过双棘轮实现后妥协安全 - 对称棘轮提供前向保密 - 定期密钥轮换(签名预密钥约每周轮换) - 一次性预密钥用于临时会话
量子对手 (Quantum Adversary)¶
能力: - 使用量子计算的先存储后解密 - 破解传统非对称加密
缓解措施: - 可用的混合后量子密码模式(ML-KEM + X25519) - 后量子密钥封装机制 - 面向未来的加密设计
R-VPN 保护的内容¶
内容保护¶
- 所有应用层数据均进行端到端加密
- 网络观察者无法访问有效载荷内容
- DNS 查询通过加密连接隧道传输
- 线路上无明文数据暴露
元数据保护¶
- 通过填充掩盖连接时序模式
- 通过恒定速率模式混淆流量大小
- 协议头部被加密
- 无可区分的数据包大小模式
目的地保护¶
- 最终目的地对网络观察者隐藏
- 流量看起来仅发往 VPN 服务器
- 无泄露真实目的地的 DNS 泄漏
- 所有流量通过单个 WebSocket 连接多路复用
身份保护¶
- 客户端身份经过认证但不暴露
- 协议消息中无持久标识符
- Ed25519 身份密钥提供加密认证
- 没有密钥泄露则无法跨会话关联
R-VPN 不保护的内容¶
网络活动模式¶
虽然内容已加密,但某些元数据仍可能泄露: - 连接建立时间 - 整体连接持续时间 - 大致流量大小(无恒定速率模式时) - 网络活动的存在(连接存在的事实)
受损端点¶
如果客户端或服务器设备受损: - 该设备的所有流量对攻击者可见 - 可以提取当前会话密钥 - 在修复之前未来会话可能受损
流量大小分析¶
未启用恒定速率模式时: - 持续高吞吐量连接可能被检测到 - 流量峰值可揭示使用模式 - 上传/下载比例可能被分析
全球级对手¶
具有全球可见性的资源充足对手可能: - 关联进出 VPN 的流量 - 跨网络进行时序分析 - 部署有针对性的主动攻击
应用层泄漏¶
R-VPN 无法防范: - 浏览器指纹识别 - 应用级元数据泄漏 - 用户行为模式 - 在恶意网站上输入的凭据
攻击面¶
服务器 (Server)¶
组件: - TLS 终止点(TLS 1.3) - 提供合法内容的诱饵网站 - VPN 协议处理层 - WebSocket 连接处理程序
风险: - 服务器泄露暴露当前会话密钥 - 内存转储可能暴露临时密钥 - 加密操作的侧信道攻击
缓解措施: - 双棘轮限制暴露窗口 - 最小化日志记录(无流量日志) - 内存安全的 Rust 实现 - 定期安全更新
客户端 (Client)¶
组件: - 设备安全和操作系统保护 - 密钥存储(内存和磁盘) - 本地 SOCKS5 代理 - 浏览器/扩展集成
风险: - 客户端泄露暴露当前和未来会话 - 从内存中提取密钥 - 加密前拦截流量的恶意软件
缓解措施: - 硬件支持的密钥存储(计划中) - 定期密钥轮换 - 最小权限操作 - Rust 中的安全内存处理
网络 (Network)¶
组件: - 客户端和服务器之间的路径 - 中间路由器和代理 - DNS 基础设施
风险: - 流量拦截 - 中间人攻击 - DNS 投毒
缓解措施: - 具有证书验证的 TLS 1.3 - 所有会话的前向保密 - DNS over HTTPS (DoH) 集成 - 证书固定选项
管理接口 (Management Interface)¶
设计原则: 零暴露管理
实现: - 无面向公共互联网的管理 API - 用于服务器管理的本地 CLI - 仅通过 VPN 隧道的管理访问 - 通过本地文件配置
缓解的风险: - API 利用 - 通过网络窃取凭据 - 未经授权的管理访问
安全属性总结¶
| 属性 | 保证 | 机制 |
|---|---|---|
| 前向保密 | 泄露当前密钥不会暴露过去会话 | 临时密钥交换、对称棘轮 |
| 后妥协安全 | 即使当前密钥泄露,未来会话仍安全 | 双棘轮 DH 棘轮 |
| 认证 | 服务器身份经过验证 | Ed25519 签名预密钥 |
| 机密性 | 所有数据已加密 | ChaCha20-Poly1305 AEAD |
| 完整性 | 检测到篡改 | Poly1305 认证标签 |
| 不可检测性 | 流量显示为 HTTPS | 基于 TLS 1.3 的 WebSocket |
| 否认性 | 无持久可验证状态 | 临时会话密钥 |
限制和注意事项¶
流量分析¶
即使使用加密,复杂的流量分析仍可能通过以下方式区分 VPN 流量: - 数据包传输的时序模式 - 流量模式和突发特征 - 连接行为和持续时间 - WebSocket 帧模式
建议: 在高威胁环境中启用恒定速率模式以获得最大隐身性。
密钥泄露场景¶
如果身份密钥泄露: - 过去会话: 受前向保密保护(无法解密) - 当前会话: 在下次 DH 棘轮步骤之前易受攻击 - 未来会话: 如果生成新身份密钥则受保护
建议: 定期轮换密钥,如果怀疑泄露则重新生成身份密钥。
端点泄露¶
如果设备被恶意软件或物理访问入侵: - 该设备的所有流量对攻击者可见 - 来自该设备的未来 VPN 连接可能受损 - 密钥可能从内存中提取
建议: 在可用时使用硬件安全模块,保持系统更新,并使用端点安全工具。
量子计算威胁¶
虽然当前会话受到保护,但加密流量的长期存储可能带来风险: - 当前的 X25519 密钥交换易受量子攻击 - 混合 PQC 模式提供保护但不是默认设置
建议: 为敏感的长期通信启用混合 PQC 模式。
与替代方案的比较¶
| 属性 | R-VPN | 传统 VPN | Tor |
|---|---|---|---|
| 前向保密 | 是 | 有时 | 是 |
| 后妥协安全 | 是 | 否 | 否 |
| 不可检测性 | 高 | 低 | 中 |
| 速度 | 高 | 高 | 低 |
| 延迟 | 低 | 低 | 高 |
| 复杂性 | 中 | 低 | 高 |
| 单跳 | 是 | 是 | 否(3+ 跳) |
| 出口节点信任 | 不需要 | 需要 | 需要 |
| 网站伪装 | 是 | 否 | 否 |
R-VPN 与传统 VPN¶
优势: - 更好的抗流量分类能力 - 通过棘轮实现后妥协安全 - 通过网站伪装实现合理否认性 - 无 VPN 协议签名
权衡: - 更复杂的设置 - 较新的代码库(较少实战检验)
R-VPN 与 Tor¶
优势: - 显著更高的性能 - 更低的延迟 - 单跳设计(无出口节点信任问题) - 更适合高带宽应用
权衡: - 单点信任(服务器) - 对全球级对手的匿名性较低 - 无内置电路轮换
最佳实践¶
对于用户¶
- 使用最新版本 - 定期发布安全改进
- 定期轮换密钥 - 定期密钥轮换限制暴露窗口
- 验证服务器密钥 - 首次使用时始终验证服务器公钥
- 启用认证 - 在 SOCKS5 代理上使用认证
- 启用恒定速率模式 - 在限制性环境中获得最大隐身性
- 监控异常 - 注意意外的连接行为
对于运营者¶
- 保持服务器软件更新 - 及时应用安全补丁
- 使用强 TLS 配置 - 仅使用现代 TLS 1.3、强密码套件
- 实施适当的诱饵内容 - 令人信服的网站伪装
- 监控服务器日志 - 注意探测和攻击尝试
- 定期密钥轮换 - 自动化签名预密钥轮换
- 安全密钥存储 - 使用适当措施保护身份密钥
安全报告指南¶
如果您发现 R-VPN 中的安全漏洞:
应该做¶
- 不要公开披露,直到修复可用
- 通过私人渠道联系开发团队
- 提供详细报告,包括:
- 漏洞描述
- 复现步骤
- 潜在影响评估
- 建议的缓解措施(如有)
- 给予合理的修复时间
- 与团队协调披露时间线
不应该做¶
- 不要超出最小验证范围利用漏洞
- 不要访问他人的数据或系统
- 在修复发布前不要公开披露
- 不要将赔偿作为披露条件
联系方式¶
应通过安全渠道向项目维护者报告安全问题。请查看项目仓库获取当前联系信息。
变更日志¶
| 版本 | 变更 |
|---|---|
| v0.1.0 | 初始发布,支持 X3DH + 双棘轮 |
| v0.2.0 | 添加混合 PQC 模式(ML-KEM + X25519) |
| 未来 | 增强流量整形、硬件密钥支持 |