Reticulum 网络栈 <img align="right" src="https://static.pepy.tech/personalized-badge/rns?period=month&units=international_system&left_color=grey&right_color=blue&left_text=Installs/month" style="padding-left:10px"/><a href="https://github.com/markqvist/Reticulum/actions/workflows/build.yml"><img align="right" src="https://github.com/markqvist/Reticulum/actions/workflows/build.yml/badge.svg"/></a> ========== > [!WARNING] > 目前有大量仓促推出、错误、可疑、直接有害,且在大多数情况下完全由 LLM 生成的 Reticulum 实现、“文档”、“指南”和面向用户应用程序的仿冒品,正以光鲜亮丽但最终具有误导性或彻头彻尾欺骗性的宣传进行营销。 > > 有关更详细的信息,请参阅手册中 [Brandolini 参考](https://reticulum.network/manual/brandolinis.html)章节的相关部分。已知良好的社区实现列在本 readme 的[社区实现](#community-implementations)部分。有关 Reticulum 社区认可的软件和项目,请参阅手册中的[使用 Reticulum 的程序](https://reticulum.network/manual/software.html)章节。 > > 从 RNS 源代码或文档衍生的机器生成内容(例如“实现”、出售的“指南”等),在若干有据可查的案例中,违反了授予复制和分发权利的开源许可证。 > > 此类项目所作出的任何版权主张或授予许可的声明(Apache、GPL 等)均为[无效授予](https://reticulum.network/manual/brandolinis.html#void-grants-legal-foundations-of-machine-generated-code)。违规者本身以及所有使用侵权衍生品的下游项目,均对法律后果承担**直接**和个人责任。 > > **请勿**使用这些“项目”,它们对我们过去十年来精心构建的整个生态系统构成危害。 <p align="center"><img width="200" src="https://assets.kitploit.com/production/public/readmes/10927/035f499a1619cfb6d2da2ca99539e9e9d122bb18addf2ab83d3413592e7662f9.png"></p> *本仓库是[一个公开镜像](https://github.com/markqvist/reticulum/blob/master/MIRROR.md)。所有开发工作都在其他地方进行。* 要理解本系统的基本理念和目标,请阅读 [Reticulum 之禅](https://github.com/markqvist/reticulum/blob/master/Zen%20of%20Reticulum.md)。 Reticulum 是基于密码学的网络栈,用于使用现成硬件构建局域网和广域网。它甚至可以在极高延迟和极低带宽下运行。Reticulum 允许你使用现成的工具构建广域网,并提供端到端加密和连接、发起者匿名、自动配置的密码学支持多跳传输、高效寻址、不可伪造的送达确认等。 Reticulum 的愿景是让任何人都能成为自己的网络运营商,并以低廉且简便的方式,用无数独立、可互连且自主的网络覆盖广阔区域。Reticulum **不是** *一个*网络。它是用于构建*数千个网络*的**工具**。没有终止开关、监视、审查和控制的网络。可以自由互操作、关联和解除关联,且无需中央监管的网络。为人类服务的网络。*为人民服务的网络*。 Reticulum 是一个完整的网络栈,不依赖 IP 或更高层,但也可以使用 IP 作为 Reticulum 的底层载体。因此,通过互联网或私有 IP 网络隧道传输 Reticulum 是轻而易举的。 由于不依赖传统网络栈,节省下来的开销被用于实现一个直接构建在密码学原则之上的网络栈,从而即使在开放且无需信任的网络中也能实现韧性和稳定功能。 无需内核模块或驱动程序。Reticulum 完全在用户空间运行,几乎可以在任何运行 Python 3 的系统上运行。 ## 阅读手册 Reticulum 的完整文档可在 [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/) 获取。 你也可以下载 [Reticulum 手册 PDF 版](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.pdf)或 [EPUB 格式电子书](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.epub)。 更多信息,请参阅 [reticulum.network](https://reticulum.network/) 和 [wiki 的 FAQ 部分](https://github.com/markqvist/Reticulum/wiki/Frequently-Asked-Questions)。 ## 显著特性 - 无需协调的全局唯一寻址和标识 - 在异构载体上完全自配置的多跳路由 - 在异构拓扑上灵活扩展 - Reticulum 可以在任意物理介质和拓扑组合上承载数据 - 低带宽网络可以与大型高带宽网络共存并互操作 - 发起者匿名,通信时不暴露你的身份 - Reticulum 不在任何数据包中包含源地址 - 以非对称 X25519 加密和 Ed25519 签名为所有通信的基础 - 基础 Reticulum 身份密钥是 512 位椭圆曲线密钥集 - 所有通信类型均提供前向保密,无论是单个数据包还是链路 - Reticulum 对加密令牌使用以下格式: - 每包和链路临时密钥,源自 Curve25519 上的 ECDH 密钥交换 - AES-256 CBC 模式,带 PKCS7 填充 - 使用 SHA256 的 HMAC 进行认证 - IV 通过 os.urandom() 生成 - 不可伪造的数据包送达确认 - 灵活且可扩展的接口系统 - Reticulum 包含大量内置接口类型 - 能够加载和使用用户或社区提供的自定义接口类型 - 轻松创建自己的自定义接口,以通过任何方式通信 - 在所有支持的接口类型上提供认证和虚拟网络分段 - 直观且易于使用的 API - 比套接字 API 更简单易用,但更强大 - 使构建分布式和去中心化应用程序变得更加简单 - 可靠且高效地传输任意数量的数据 - Reticulum 可以处理几字节的数据或数 GB 的文件 - 排序、压缩、传输协调和校验和均自动完成 - API 非常易于使用,并提供传输进度 - 轻量、灵活且可扩展的请求/响应机制 - 高效的链路建立 - 建立加密且经过验证的链路总成本仅为 3 个数据包,共 297 字节 - 保持链路打开的成本低至每秒 0.44 比特 - 通过 Channel 和 Buffer 机制实现可靠的顺序交付 ## 社区资源 此处列出的参考资料并非由 Reticulum 项目或其维护者运行、管理或审核。它们由社区中专注、独立的志愿者提供,以造福任何有兴趣进一步了解 Reticulum 的人。 - [Reticulum 社区 Wiki](https://reticulum.miraheze.org/wiki) - [RNS Recipes](https://rns.recipes/) - [RNS Moscow](https://rns.moscow/) - [RMAP.world](https://rmap.world/) 如果你发现任何不再准确、不正确或只是不够最新的内容,请不要向这些资源的维护者提出要求或抱怨。相反,请自己承担起任务,通过参与并贡献你希望看到的改进来帮助改善,就像上述资源的创建者自己所做的那样。 ## 参考实现 本仓库中的 Python 代码是 Reticulum 的参考实现。Reticulum 协议完全且权威地由该参考实现及其相关手册定义。它由 Mark Qvist 维护,其 Reticulum 身份标识为 `<bc7291552be7a58f361522990465165c>`。 目前不存在,也永远不会存在二阶协议规范衍生品。你无法获得比一个可执行、功能正常、可测试、已部署并在全球 24/7 运行的规范更好的规范。 不存在,也永远不会存在单独的、衍生的“正式规范”、“RFC”或任何类似 Reticulum 的东西: **参考实现*就是*最终、权威的规范。** 与 Reticulum 协议的兼容性定义为与该参考实现具有完全互操作性以及足够的功能对等性。任何实现这一点的特定协议实现就是 Reticulum。任何未实现这一点的就不是 Reticulum。 参考实现根据 Reticulum 许可证授权。 Reticulum 协议于 2016 年贡献给公共领域。 ## 社区实现 此处列出的实现已证明具有线路兼容性、足够的功能对等性、合理的安全和开发实践、长期承诺以及对实现质量的关注。此外,它们拥有至少 18 个月活跃开发的记录。 最重要的是,它们的开发者和维护者被社区认可为真正知道自己在做什么,并致力于改善整个 Reticulum 生态系统。 - [Chad Atterman](https://github.com/attermann) 的 [microReticulum](https://github.com/attermann/microReticulum/) 是一个面向 32 位微控制器的 C++ 实现。 - [Quad4](https://quad4.io/) 的 [Reticulum-Go](https://reticulum-go.quad4.io/) 是一个面向桌面、移动和嵌入式系统的 Go 实现。 *如果你是未列于上述列表中的实现维护者,并认为它遵循同样严格的严谨性和承诺标准而值得纳入,你的提议将受到欢迎。* --- **警告!** 目前有大量仓促推出、错误、可疑、直接有害,且在大多数情况下完全由 LLM 生成的 Reticulum 实现(以及面向用户的应用程序)仿冒品,正以光鲜亮丽但最终具有误导性或彻头彻尾欺骗性的宣传进行营销和推广。其中大多数要么是快速吸引眼球或圈钱,完全未经审查、不兼容、没有维护或人工监督,积极试图分裂社区,或兼而有之。 --- 有关此主题的更广泛信息,请阅读手册中的 [Brandolini 参考](https://reticulum.network/manual/brandolinis.html)章节(关于法律基础,请特别参阅[无效授予](https://reticulum.network/manual/brandolinis.html#void-grants-legal-foundations-of-machine-generated-code))。该章节非常长、非常详细,是礼貌、审慎的分析,旨在作为关于这些问题的不断演进、分节的参考资料。 如果你更想阅读简短、未经过滤且相当愤怒的版本,它由针对该现象整体某一特定表现形式的实际回应组成,并作为示例使用,你可以阅读[是的,我很愤怒](https://github.com/markqvist/reticulum/blob/master/docs/history/2026_09_18_Yes_I_am_Angry.md)。如果你能接受那种沟通方式,它以非常不同的语言传达了相同的观点。 Reticulum 核心维护者和开发者**强烈建议不要使用任何此类“实现”**。少数要么恶意、要么寻求关注、要么无能的人的[欺骗性和自私行为](https://reticulum.network/manual/brandolinis.html#a-persistent-but-fragile-triad)已对开发者、节点运营者、用户以及社区和整个 Reticulum 项目造成了重大的[损害以及时间和资源浪费](https://reticulum.network/manual/brandolinis.html#intent-consequence)。 我们善意但紧急地请求所有用户在[评估](https://reticulum.network/manual/brandolinis.html#evaluating-a-reticulum-implementation)使用上述未列出的任何实现的潜在可能性时,保持谨慎、常识和健康的怀疑态度;并接受**选择这样做会将潜在损害的责任从不负责任或恶意的个人转移到你自己身上**。 ## Reticulum 应用示例 如果你想快速了解 Reticulum 能做什么,请查看手册中的[使用 Reticulum 的程序](https://reticulum.network/manual/software.html)部分,或以下资源: - [LXMF](https://github.com/markqvist/lxmf) 是构建在 Reticulum 之上的分布式、容忍延迟和中断的消息传输协议 - [LXST](https://github.com/markqvist/lxst) 协议和框架通过 Reticulum 提供实时音频和信号传输。它包含用于构建基于语音的应用程序和硬件设备(例如 `rnphone` 程序)的原语和实用工具,可用于构建硬件电话。 - 关于离网、加密且有韧性的网状通信平台,请参阅 [Nomad Network](https://github.com/markqvist/NomadNet) - Android、Linux、macOS 和 Windows 应用 [Sideband](https://github.com/markqvist/Sideband) 具有图形界面和许多高级功能,例如文件传输、图像和语音消息、实时语音通话、分布式遥测系统、地图功能以及完整的插件可扩展性。 - [MeshChatX](https://git.quad4.io/RNS-Things/MeshChatX) 是一个功能齐全的 LXMF 客户端,内置许多工具和功能,还支持图像和语音消息、文件传输和语音通话。它还包括用于浏览 Nomad Network 节点的内置页面浏览器。 - 你可以使用随附的 [rnsh](https://reticulum.network/manual/using.html#the-rnsh-utility) 程序通过 Reticulum 建立远程 shell 会话。 - 随附的 [rngit](https://reticulum.network/manual/git.html) 系统提供了通过 Reticulum 管理、托管、协作和交互 Git 仓库的完整解决方案。 ## Reticulum 可以在哪里使用? 几乎可以在任何能够支持至少半双工信道、吞吐量大于每秒 5 比特且 MTU 为 500 字节的介质上使用。数据电台、调制解调器、LoRa 电台、串行线路、AX.25 TNC、业余无线电数字模式、WiFi 和以太网设备、自由空间光链路以及类似系统,都是 Reticulum 可以使用的物理设备类型示例。 一种名为 [RNode](https://markqvist.github.io/Reticulum/manual/hardware.html#rnode) 的开源 LoRa 接口专为与 Reticulum 配合使用而设计。你可以自行构建,也可以购买完整的收发器,只需通过 USB、WiFi 或蓝牙连接到主机即可。 Reticulum 也可以封装在现有 IP 网络上,因此没有什么能阻止你在有线以太网、本地 WiFi 网络或互联网上使用它,它同样可以正常工作。事实上,Reticulum 的优势之一就是它能轻松地将不同介质连接成一个自配置、有韧性且加密的网状网络,使用任何可用的基础设施组合。 例如,可以设置一个同时连接到 LoRa 电台、分组无线电 TNC 和 WiFi 网络的 Raspberry Pi。一旦配置好接口,Reticulum 将处理其余工作,WiFi 网络上的任何设备都可以与网络 LoRa 和分组无线电侧的节点通信,反之亦然。 ## 我该如何开始? 开始使用 Reticulum 网络栈的最佳方式取决于你想做什么。有关完整细节和示例,请查看 [Reticulum 手册](https://markqvist.github.io/Reticulum/manual/)中的[快速入门](https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html)部分。 要在你的系统上简单地安装 Reticulum 及相关实用工具,最简单的方法是通过 `pip`。然后你可以启动任何使用 Reticulum 的程序,或使用 [rnsd 实用工具](https://markqvist.github.io/Reticulum/manual/using.html#the-rnsd-utility)将 Reticulum 作为系统服务启动。```bash pip install rns ``` 如果你使用的操作系统阻止普通用户通过 `pip` 安装软件包,你可以通过编辑 `~/.config/pip/pip.conf` 文件,并在 `[global]` 部分添加以下指令,使 `pip` 恢复正常行为:```text [global] break-system-packages = true ``` 或者,你可以使用 `pipx` 工具在隔离环境中安装 Reticulum:```bash pipx install rns ``` 首次启动时,Reticulum 会创建一个默认配置文件,提供与本地可访问的其他 Reticulum 对等节点之间的基本连接。默认配置文件包含一些示例,以及创建更复杂配置的参考。 如果你的系统上安装的是旧版本的 `pip`,你可能需要先使用 `pip install pip --upgrade` 进行升级。如果你还没有安装 `pip`,可以使用系统的包管理器通过 `sudo apt install python3-pip` 或类似命令进行安装。 关于如何通过多种媒介扩展通信的更详细示例,例如分组无线电或 LoRa、串行端口,或通过 UDP 和 TCP 接口在快速 IP 链路和互联网上进行通信,请查看 [Reticulum 手册](https://markqvist.github.io/Reticulum/manual/) 中的 [支持的接口](https://markqvist.github.io/Reticulum/manual/interfaces.html) 部分。 ## 包含的实用工具 Reticulum 包含一系列有用的实用工具,用于管理你的网络、查看状态和信息,以及执行其他任务。你可以在 [Reticulum 手册](https://markqvist.github.io/Reticulum/manual/) 的 [包含的实用程序](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) 部分中阅读更多关于这些程序的信息。 - 系统守护进程 `rnsd`,用于将 Reticulum 作为始终可用的服务运行 - 一个名为 `rnstatus` 的接口状态实用工具,用于显示接口信息 - 路径查找和管理工具 `rnpath`,让你查看和修改路径表 - 一个名为 `rnprobe` 的诊断工具,用于检查到目的地的连通性 - 一个名为 `rncp` 的简单文件传输程序,使系统之间的文件传输变得容易 - 身份管理和加密实用工具 `rnid`,让你管理身份并加密/解密文件 - `rnsh` 程序允许你与远程系统建立完全交互式的 shell 会话 - 远程命令执行程序 `rnx`,让你运行简单的命令和程序,并从远程系统获取输出 - `rngit` 程序提供了一个完整的多仓库 Git 节点,用于通过 Reticulum 提供仓库服务 - 包含的 `git-remote-rns` 辅助工具允许你通过 Reticulum 与 Git 仓库进行交互 所有工具,包括 `rnx` 和 `rncp`,即使在 LoRa 或分组无线电等极低带宽链路上也能可靠且良好地工作。对于通过 Reticulum 的全功能远程 shell,也请查看 [rnsh](https://github.com/acehoss/rnsh) 程序。 ## 支持的接口类型和设备 Reticulum 实现了多种通用接口类型,涵盖了 Reticulum 可以运行的大多数通信硬件。如果你的硬件不受支持,[实现自定义接口模块很简单](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces)。 我们欣然接受自定义接口的贡献,前提是它们具有普遍实用性并在实际使用中经过充分测试。 目前,支持以下内置接口: - 任何以太网设备 - 使用 [RNode](https://unsigned.io/rnode/) 的 LoRa - 分组无线电 TNC(带或不带 AX.25) - 兼容 KISS 的硬件和软件调制解调器 - 任何具有串行端口的设备 - IP 网络上的 TCP - IP 网络上的 UDP - 通过 stdio 或管道的外部程序 - 通过 stdio 或管道的自定义硬件 ## 性能 *此处所有性能数据均假设 `rnsd` 在完全解释的 Python 模式下运行,且限制为单个 CPU 核心。* Reticulum 的目标是*非常*广泛的可用性能范围,但优先考虑低带宽媒介上的功能和性能。目标是在普通硬件上提供从每秒 100 比特到每秒 10 吉比特的动态性能范围。 目前,在普通硬件上,网络内可用性能范围约为每秒 150 比特到每秒 1 吉比特。实际性能将因系统速度、加密硬件加速的可用性以及其他因素而有很大差异。 托管在 Raspberry Pi 5 上的传输节点的原始路由吞吐量约为每秒 5 吉比特。具有现代加密硬件加速的系统可以实现每秒 15 吉比特及更高的传输吞吐量。 虽然参考实现完全能够通过利用多个 CPU 核心和向量化传输达到 100+ Gbps,但当前水平之上的性能并未被高度重视,因为 RNS 在几乎所有实际情况下已经能够饱和可用的物理介质带宽。 RNS 的主要目标是*可靠性*、*正确性*、*安全性*、*适当的流量管理*和*真正实用的性能*,而不是与现实世界可用性几乎无关的空洞纸面“基准测试”。 *强烈*鼓励所有替代实现的维护者采用类似的方法,尤其是专注于让他们的实现正确可靠地工作,然后再发布经验上可疑或事实上错误的性能声明。 ## 当前状态 所有核心协议功能均已实现并正常运行,但随着实际使用的探索和理解,可能会有所增加。API 和线格式可视为稳定。 ## 依赖项 默认 `rns` 包的安装仅需要两个外部依赖项,如下所列。几乎所有系统和发行版都有现成的这些依赖项包,当使用 `pip` 安装 `rns` 包时,它们也会被下载并安装。 - [PyCA/cryptography](https://github.com/pyca/cryptography) - [pyserial](https://github.com/pyserial/pyserial) 在更不寻常的系统和某些罕见情况下,可能无法安装甚至编译上述一个或多个模块。在这种情况下,你可以改用 `rnspure` 包,它安装时不需要任何外部依赖项。请注意,`rns` 和 `rnspure` 包的内容是*完全相同*的。唯一的区别是 `rnspure` 包不列出安装所需的依赖项。 无论 Reticulum 如何安装和启动,它仅在外部依赖项*需要*且*可用*时才加载它们。例如,如果你想在不支持 [pyserial](https://github.com/pyserial/pyserial) 的系统上使用 Reticulum,完全可以使用 `rnspure` 包来实现,但 Reticulum 将无法使用基于串行的接口。所有其他可用模块在需要时仍会被加载。 **请注意!** 如果你使用 `rnspure` 包在不支持 [PyCA/cryptography](https://github.com/pyca/cryptography) 的系统上运行 Reticulum,那么阅读并理解本文档的[加密原语](#cryptographic-primitives)部分非常重要。 ## 引导连接 Reticulum 不是你订阅的服务,也不是你“加入”的单一全球网络。Reticulum 提供了通过网络本身发现可用公共接口的功能,更广泛的社区提供了各种公开可用入口点的目录,以引导连接。 要了解如何在 Reticulum 上建立初始连接,请阅读手册中的[引导连接](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity)部分。 如果你已经大致了解其工作原理,可以使用社区运营的站点,如 [directory.rns.recipes](https://directory.rns.recipes/) 和 [rmap.world](https://rmap.world),来查找用于初始连接到全球分布式 Reticulum 骨干网的接口定义。 ## 公共测试网 ***重要!** 历史上,Reticulum 项目本身曾提供面向开发者的测试网。随着全球 Reticulum 节点和入口点数量增长到相当大的规模,这个公共测试网,包括 Amsterdam Testnet 入口点,现已退役。如果你的实例仍然依赖此入口点进行连接,请转而使用分布式骨干网。Reticulum 现在包含完整的网络内接口发现和连接引导系统。请阅读手册中的[引导连接](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity)部分以获取指引。* ## 支持 Reticulum 为了实现这一点,我需要你的帮助。请通过以下渠道之一捐款,支持开放、自由和私密通信系统的持续开发: - Monero: ``` 84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w ``` - Bitcoin ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6 ``` - Ethereum ``` 0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E ``` - Liberapay: https://liberapay.com/Reticulum/ - Ko-Fi: https://ko-fi.com/markqvist ## 密码学原语 Reticulum 使用一套简单、高效、强健且经过充分测试的密码学原语,其实现广泛可用,既能在通用 CPU 上使用,也能在微控制器上使用。 选择这组特定原语的主要考量之一,是它们几乎可以在当前所有计算平台上*安全地*实现,且陷阱相对较少。 此处列出的原语**具有权威性**。任何声称是 Reticulum,但未使用这些确切原语的东西**都不是** Reticulum,而且可能是一个被有意破坏或削弱的克隆。所使用的原语如下: - Reticulum 身份密钥是 512 位的 Curve25519 密钥集 - 一个 256 位的 Ed25519 密钥用于签名 - 一个 256 位的 X22519 密钥用于 ECDH 密钥交换 - HKDF 用于密钥派生 - 加密令牌基于 [Fernet 规范](https://github.com/fernet/spec/) - 从 Curve25519 上的 ECDH 密钥交换派生的临时密钥 - 使用 SHA256 的 HMAC 进行消息认证 - IV 必须通过 `os.urandom()` 或更好的方式生成 - 使用 PKCS7 填充的 CBC 模式 AES-256 - 没有 Fernet 版本和时间戳元数据字段 - SHA-256 - SHA-512 在默认安装配置中,`X25519`、`Ed25519` 和 `AES-256-CBC` 原语由 [OpenSSL](https://www.openssl.org/) 提供(通过 [PyCA/cryptography](https://github.com/pyca/cryptography) 包)。哈希函数 `SHA-256` 和 `SHA-512` 由标准 Python [hashlib](https://docs.python.org/3/library/hashlib.html) 提供。`HKDF`、`HMAC`、`Token` 原语以及 `PKCS7` 填充函数始终由以下内部实现提供: - [HKDF.py](https://github.com/markqvist/reticulum/blob/master/RNS/Cryptography/HKDF.py) - [HMAC.py](https://github.com/markqvist/reticulum/blob/master/RNS/Cryptography/HMAC.py) - [Token.py](https://github.com/markqvist/reticulum/blob/master/RNS/Cryptography/Token.py) - [PKCS7.py](https://github.com/markqvist/reticulum/blob/master/RNS/Cryptography/PKCS7.py) Reticulum 还包含所有必要原语的完整纯 Python 实现。如果 Reticulum 启动时系统上没有 OpenSSL 和 PyCA,Reticulum 将改用内部纯 Python 原语。这样做的一个小后果是性能,OpenSSL 后端要*快得多*。然而最重要的后果是,使用未经与 OpenSSL 同等程度审查、测试和评审的原语可能带来安全性损失。 请注意,默认情况下,安装 Reticulum 会**要求**自动安装 OpenSSL 和 PyCA(如果尚未安装)。只有在用户明确覆盖此要求时,才可能使用纯 Python 原语,例如安装 `rnspure` 包而不是普通的 `rns` 包,或直接从本地源代码运行。 如果你想使用内部纯 Python 原语,**强烈建议**你充分了解这样做带来的风险,并就这些风险对你而言是否可接受做出明智的决定。 Reticulum 已经开发了十年,广泛部署约五年,它仍然是相对年轻的软件,也应如此看待。尽管它在构建时始终将密码学最佳实践放在首位,但仍可能存在破坏隐私或安全性的漏洞。 ## 致谢与鸣谢 Reticulum 之所以能够存在,是因为它所构建于其上的大量开源工作、所有参与者的贡献,以及多年来支持该项目的每一个人。感谢所有提供帮助的人,非常感谢。 许多其他模块和项目要么是 Reticulum 的一部分,要么被 Reticulum 使用。衷心感谢以下项目的作者和贡献者: - [PyCA/cryptography](https://github.com/pyca/cryptography),*BSD License* - [Pure-25519](https://github.com/warner/python-pure25519) 由 [Brian Warner](https://github.com/warner) 开发,*MIT License* - [Pysha2](https://github.com/thomdixon/pysha2) 由 [Thom Dixon](https://github.com/thomdixon) 开发,*MIT License* - [Python AES-128](https://github.com/orgurar/python-aes) 由 [Or Gur Arie](https://github.com/orgurar) 开发,*MIT License* - [Python AES-256](https://github.com/boppreh/aes) 由 [BoppreH](https://github.com/boppreh) 开发,*MIT License* - [Curve25519.py](https://gist.github.com/nickovs/cc3c22d15f239a2640c185035c06f8a3#file-curve25519-py) 由 [Nicko van Someren](https://gist.github.com/nickovs) 开发,*Public Domain* - [I2Plib](https://github.com/l-n-s/i2plib) 由 [Viktor Villainov](https://github.com/l-n-s) 开发 - [PySerial](https://github.com/pyserial/pyserial) 由 Chris Liechti 开发,*BSD License* - [Configobj](https://github.com/DiffSK/configobj) 由 Michael Foord、Nicola Larosa、Rob Dennis 和 Eli Courtwright 开发,*BSD License* - [ifaddr](https://github.com/pydron/ifaddr) 由 Stefan C. Mueller 开发,*MIT License* - [Umsgpack.py](https://github.com/vsergeev/u-msgpack-python) 由 [Ivan A. Sergeev](https://github.com/vsergeev) 开发 - [rnsh](https://github.com/acehoss/rnsh) 由 [Aaron Heise](https://github.com/acehoss) 开发 - [Python](https://www.python.org)