rosenpass/rosenpass
GitHub: rosenpass/rosenpass
基于 Rust 实现的后量子安全 VPN 工具,通过混合架构将后量子密钥交换与 WireGuard 数据传输相结合,为未来量子计算威胁提供前瞻性保护。
Stars: 1322 | Forks: 112
# Rosenpass README




本仓库包含
1. [Rosenpass 协议](https://github.com/rosenpass/rosenpass/raw/papers-pdf/whitepaper.pdf)的描述
2. 该协议的参考实现 —— [rosenpass 工具](./src)
3. 一个集成 Rosenpass 和 WireGuard 以创建 VPN 的前端 —— [rp 前端](./rp)
4. 使用 proverif 对协议进行的[安全分析](./analysis)
## 入门指南
首先,[安装 rosenpass](#getting-rosenpass)。然后,查看 `rp` 和 `rosenpass` 的帮助功能:
```
rp help
rosenpass help
```
按照[快速入门说明](https://rosenpass.eu/#start)来建立并运行 VPN。
## 软件架构
[rosenpass 工具](./src/)使用 Rust 编写,并使用了 liboqs[^liboqs]。该工具建立对称密钥并将其提供给 WireGuard。由于它通过 PSK 功能向 WireGuard 提供密钥,因此使用 Rosenpass+WireGuard 在加密安全性上不低于单独使用 WireGuard(“混合安全性”)。Rosenpass 每两分钟刷新一次对称密钥。
与任何应用程序一样,存在发生严重安全问题(如缓冲区溢出、远程代码执行)的小风险;Rosenpass 应用程序使用 Rust 编程语言编写,这类问题发生的可能性要低得多。Rosenpass 也可以将密钥写入文件而不是提供给 WireGuard。通过一些脚本编写,该实现的独立模式可用于在 Container、VM 或另一台主机上运行应用程序。此模式也可用于将 WireGuard 以外的工具与 Rosenpass 集成。
使用 Rust 编写的 [`rp`](./rp) 工具可以轻松创建使用 WireGuard 和 Rosenpass 的 VPN。
`rp` 易于上手,但有一些缺点;它以 root 身份运行,要求访问 WireGuard 和 Rosenpass 的私钥,接管接口控制权,并且只适用于一个接口。如果您对以 root 身份运行 Rosenpass 感到不安,应该使用独立模式,通过容器、jails 或虚拟机创建更安全的设置。
### 网络与端口
rp 分配两个 UDP 端口;如果为 rosenpass 指定了端口 N,它将为 WireGuard 分配端口 N+1。
与 WireGuard 一样,Rosenpass 不强制执行客户端和服务器之间的任何分离。
如果不指定 `listen` 选项,Rosenpass 和 WireGuard 将选择随机端口;这就是_客户端模式_。
如果不指定 `endpoint`,Rosenpass 将不会尝试连接到对等端,而是等待来自对等端的连接。这就是_服务器模式_。
您可以同时指定两者。两者都不指定虽然未被禁止,但也用处不大。
## 安全分析
我们正在努力进行加密安全性证明,但我们已经在软件包中提供了使用 proverif 的符号分析。您可以使用处理依赖安装的 nix 包管理器运行安全分析,也可以直接调用 [`./analyze.sh`](https://github.com/rosenpass/rosenpass/blob/main/analyze.sh) 脚本。在这种情况下,您需要确保系统上安装了 `proverif`、`graphviz`、`awk` 和 `cpp`。
```
(nix) $ nix build .#proof-proverif --print-build-logs
(manual) $ ./analyze.sh
```
该分析是根据现代软件工程原则实现的:使用 C 预处理器,我们能够将分析拆分为多个文件,并使用一些元编程来避免重复。
代码使用了各种优化来加速分析,例如使用秘密函数来建模可信/恶意设置。我们将模型拆分为两个可以并行分析的独立入口点。每个都比两个模型组合起来要快得多。
一个封装脚本以彩色提供关于哪些查询按预期执行的即时反馈:如果查询失败则显示红叉,如果成功则显示绿勾。
# 获取 Rosenpass
文档和安装指南可以在 [Rosenpass 网站](https://rosenpass.eu/docs)找到。
Rosenpass 正在越来越多的发行版中被打包,也许也包括您选择的发行版?
[](https://repology.org/project/rosenpass/versions)
## Docker 镜像
Rosenpass 也可作为预构建的 Docker 镜像使用:
- [`ghcr.io/rosenpass/rosenpass`](https://github.com/rosenpass/rosenpass/pkgs/container/rosenpass)
- [`ghcr.io/rosenpass/rp`](https://github.com/rosenpass/rosenpass/pkgs/container/rp)
有关如何使用这些镜像的详细信息,请参阅 [Docker 使用指南](docker/USAGE.md)。
## 基准测试
本仓库包含对 Rosenpass 协议代码及其使用的加密原语实现进行基准测试的设施。原语使用 criterion 进行基准测试。对于协议代码基准测试,我们使用一个库来检测代码,以便将事件写入跟踪,然后在运行后进行检查。
基准测试在 CI 上自动运行。测量结果在 [Benchmark Dashboard] 中可视化。
### 原语基准测试
针对 `Kem`、`Aead` 和 `KeyedHash` trait 的函数有基准测试。它们在 `rosenpass-ciphers` 的 `primitives` 基准测试中对所有实现运行。运行基准测试并使用以下命令查看结果
```
cargo bench -p rosenpass-ciphers --bench primitives -F bench
```
请注意,`bench` 功能启用将 libcrux 支持的 trait 实现包含在模块树中,但不会将其启用为默认值。
### 协议基准测试
被写入的跟踪位于 util crate 中的新模块 `trace_bench` 中。可以使用以下命令运行一个对跟踪进行一些小型统计分析的基本基准测试
```
cargo bench -p rosenpass --bench trace_handshake -F trace_bench
```
这将运行基准测试并以机器可读的 JSON 格式打印结果。
# 镜像
不想使用 GitHub 或只有 IPv6 连接?Rosenpass 为此设立了两个镜像:
- [NotABug](https://notabug.org/rosenpass/rosenpass)
- [GitLab](https://gitlab.com/rosenpass/rosenpass/)
# 支持方
通过 NLNet 资助,并获得欧盟委员会 NGI Assure 计划的财政支持。
标签:DNS解析, Kyber, liboqs, Linux工具, Rust, VPN, WireGuard, ZeroTrust, 加密协议, 可视化界面, 后量子密码学, 安全通信, 密钥交换, 开源项目, 抗量子计算, 混合加密, 端口探测, 网络安全, 网络安全, 网络流量审计, 蓝队防御, 请求拦截, 通知系统, 隐私保护, 隐私保护, 隧道协议