mirror of
https://github.com/markqvist/Reticulum.git
synced 2026-10-25 18:40:17 -04:00
Fixed outdated meta-docs
This commit is contained in:
parent
3ad70c63ea
commit
b899389956
2 changed files with 45 additions and 181 deletions
224
README.md
224
README.md
|
|
@ -18,34 +18,15 @@ Reticulum Network Stack <img align="right" src="https://static.pepy.tech/persona
|
||||||
|
|
||||||
To understand the foundational philosophy and goals of this system, read the [Zen of Reticulum](Zen%20of%20Reticulum.md).
|
To understand the foundational philosophy and goals of this system, read the [Zen of Reticulum](Zen%20of%20Reticulum.md).
|
||||||
|
|
||||||
Reticulum is the cryptography-based networking stack for building local and wide-area
|
Reticulum is the cryptography-based networking stack for building local and wide-area networks with readily available hardware. It can operate even with very high latency and extremely low bandwidth. Reticulum allows you to build wide-area networks with off-the-shelf tools, and offers end-to-end encryption and connectivity, initiator anonymity, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable delivery acknowledgements and more.
|
||||||
networks with readily available hardware. It can operate even with very high latency
|
|
||||||
and extremely low bandwidth. Reticulum allows you to build wide-area networks
|
|
||||||
with off-the-shelf tools, and offers end-to-end encryption and connectivity,
|
|
||||||
initiator anonymity, autoconfiguring cryptographically backed multi-hop
|
|
||||||
transport, efficient addressing, unforgeable delivery acknowledgements and
|
|
||||||
more.
|
|
||||||
|
|
||||||
The vision of Reticulum is to allow anyone to be their own network operator,
|
The vision of Reticulum is to allow anyone to be their own network operator, and to make it cheap and easy to cover vast areas with a myriad of independent, inter-connectable and autonomous networks. Reticulum **is not** *one* network. It is **a tool** for building *thousands of networks*. Networks without kill-switches, surveillance, censorship and control. Networks that can freely interoperate, associate and disassociate with each other, and require no central oversight. Networks for human beings. *Networks for the people*.
|
||||||
and to make it cheap and easy to cover vast areas with a myriad of independent,
|
|
||||||
inter-connectable and autonomous networks. Reticulum **is not** *one* network.
|
|
||||||
It is **a tool** for building *thousands of networks*. Networks without
|
|
||||||
kill-switches, surveillance, censorship and control. Networks that can freely
|
|
||||||
interoperate, associate and disassociate with each other, and require no
|
|
||||||
central oversight. Networks for human beings. *Networks for the people*.
|
|
||||||
|
|
||||||
Reticulum is a complete networking stack, and does not rely on IP or higher
|
Reticulum is a complete networking stack, and does not rely on IP or higher layers, but it is possible to use IP as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks.
|
||||||
layers, but it is possible to use IP as the underlying carrier for Reticulum.
|
|
||||||
It is therefore trivial to tunnel Reticulum over the Internet or private IP
|
|
||||||
networks.
|
|
||||||
|
|
||||||
Having no dependencies on traditional networking stacks frees up overhead that
|
Having no dependencies on traditional networking stacks frees up overhead that has been used to implement a networking stack built directly on cryptographic principles, allowing resilience and stable functionality, even in open and trustless networks.
|
||||||
has been used to implement a networking stack built directly on cryptographic
|
|
||||||
principles, allowing resilience and stable functionality, even in open and
|
|
||||||
trustless networks.
|
|
||||||
|
|
||||||
No kernel modules or drivers are required. Reticulum runs completely in
|
No kernel modules or drivers are required. Reticulum runs completely in userland, and can run on practically any system that runs Python 3.
|
||||||
userland, and can run on practically any system that runs Python 3.
|
|
||||||
|
|
||||||
## Read The Manual
|
## Read The Manual
|
||||||
The full documentation for Reticulum is available at [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/).
|
The full documentation for Reticulum is available at [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/).
|
||||||
|
|
@ -102,10 +83,7 @@ If you find anything that is no longer accurate, incorrect or simply not quite u
|
||||||
|
|
||||||
## Reference Implementation
|
## Reference Implementation
|
||||||
|
|
||||||
The Python code in this repository is the Reference Implementation of Reticulum.
|
The Python code in this repository is the Reference Implementation of Reticulum. The Reticulum Protocol is defined entirely and authoritatively by this reference implementation, and its associated manual. It is maintained by Mark Qvist, identified by the Reticulum Identity `<bc7291552be7a58f361522990465165c>`.
|
||||||
The Reticulum Protocol is defined entirely and authoritatively by this reference
|
|
||||||
implementation, and its associated manual. It is maintained by Mark Qvist,
|
|
||||||
identified by the Reticulum Identity `<bc7291552be7a58f361522990465165c>`.
|
|
||||||
|
|
||||||
No second-order protocol specification derivatives currently do, or will ever exist. You can't get a better specification than one that is executable, functional, testable, deployed and operating 24/7 across the planet.
|
No second-order protocol specification derivatives currently do, or will ever exist. You can't get a better specification than one that is executable, functional, testable, deployed and operating 24/7 across the planet.
|
||||||
|
|
||||||
|
|
@ -113,9 +91,7 @@ There is not, and never will be a separate, derived "formal spec", "RFC" or anyt
|
||||||
|
|
||||||
**The reference implementation *is* the final, authoritative specification.**
|
**The reference implementation *is* the final, authoritative specification.**
|
||||||
|
|
||||||
Compatibility with the Reticulum Protocol is defined as having full interoperability,
|
Compatibility with the Reticulum Protocol is defined as having full interoperability, and sufficient functional parity with this reference implementation. Any specific protocol implementation that achieves this is Reticulum. Any that does not is not Reticulum.
|
||||||
and sufficient functional parity with this reference implementation. Any specific protocol
|
|
||||||
implementation that achieves this is Reticulum. Any that does not is not Reticulum.
|
|
||||||
|
|
||||||
The reference implementation is licensed under the Reticulum License.
|
The reference implementation is licensed under the Reticulum License.
|
||||||
|
|
||||||
|
|
@ -158,48 +134,24 @@ If you want to quickly get an idea of what Reticulum can do, take a look at the
|
||||||
- The included [rngit](https://reticulum.network/manual/git.html) system provides a full solution for managing, hosting, collaborating on and interacting with Git repositories over Reticulum.
|
- The included [rngit](https://reticulum.network/manual/git.html) system provides a full solution for managing, hosting, collaborating on and interacting with Git repositories over Reticulum.
|
||||||
|
|
||||||
## Where can Reticulum be used?
|
## Where can Reticulum be used?
|
||||||
Over practically any medium that can support at least a half-duplex channel
|
Over practically any medium that can support at least a half-duplex channel with greater throughput than 5 bits per second, and an MTU of 500 bytes. Data radios, modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes, WiFi and Ethernet devices, free-space optical links, and similar systems are all examples of the types of physical devices Reticulum can use.
|
||||||
with greater throughput than 5 bits per second, and an MTU of 500 bytes. Data radios,
|
|
||||||
modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes,
|
|
||||||
WiFi and Ethernet devices, free-space optical links, and similar systems are
|
|
||||||
all examples of the types of physical devices Reticulum can use.
|
|
||||||
|
|
||||||
An open-source LoRa-based interface called
|
An open-source LoRa-based interface called [RNode](https://markqvist.github.io/Reticulum/manual/hardware.html#rnode) has been designed specifically for use with Reticulum. It is possible to build yourself, or it can be purchased as a complete transceiver that just needs a USB, WiFi or Bluetooth connection to the host.
|
||||||
[RNode](https://markqvist.github.io/Reticulum/manual/hardware.html#rnode) has
|
|
||||||
been designed specifically for use with Reticulum. It is possible to build
|
|
||||||
yourself, or it can be purchased as a complete transceiver that just needs a
|
|
||||||
USB connection to the host.
|
|
||||||
|
|
||||||
Reticulum can also be encapsulated over existing IP networks, so there's
|
Reticulum can also be encapsulated over existing IP networks, so there's nothing stopping you from using it over wired Ethernet, your local WiFi network or the Internet, where it'll work just as well. In fact, one of the strengths of Reticulum is how easily it allows you to connect different mediums into a self-configuring, resilient and encrypted mesh, using any available mixture of available infrastructure.
|
||||||
nothing stopping you from using it over wired Ethernet, your local WiFi network
|
|
||||||
or the Internet, where it'll work just as well. In fact, one of the strengths
|
|
||||||
of Reticulum is how easily it allows you to connect different mediums into a
|
|
||||||
self-configuring, resilient and encrypted mesh, using any available mixture of
|
|
||||||
available infrastructure.
|
|
||||||
|
|
||||||
As an example, it's possible to set up a Raspberry Pi connected to both a LoRa
|
As an example, it's possible to set up a Raspberry Pi connected to both a LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are configured, Reticulum will take care of the rest, and any device on the WiFi network can communicate with nodes on the LoRa and packet radio sides of the network, and vice versa.
|
||||||
radio, a packet radio TNC and a WiFi network. Once the interfaces are
|
|
||||||
configured, Reticulum will take care of the rest, and any device on the WiFi
|
|
||||||
network can communicate with nodes on the LoRa and packet radio sides of the
|
|
||||||
network, and vice versa.
|
|
||||||
|
|
||||||
## How do I get started?
|
## How do I get started?
|
||||||
The best way to get started with the Reticulum Network Stack depends on what
|
The best way to get started with the Reticulum Network Stack depends on what you want to do. For full details and examples, have a look at the [Getting Started Fast](https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html) section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
||||||
you want to do. For full details and examples, have a look at the
|
|
||||||
[Getting Started Fast](https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html)
|
|
||||||
section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
|
||||||
|
|
||||||
To simply install Reticulum and related utilities on your system, the easiest way is via `pip`.
|
To simply install Reticulum and related utilities on your system, the easiest way is via `pip`. You can then start any program that uses Reticulum, or start Reticulum as a system service with [the rnsd utility](https://markqvist.github.io/Reticulum/manual/using.html#the-rnsd-utility).
|
||||||
You can then start any program that uses Reticulum, or start Reticulum as a system service with
|
|
||||||
[the rnsd utility](https://markqvist.github.io/Reticulum/manual/using.html#the-rnsd-utility).
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install rns
|
pip install rns
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using an operating system that blocks normal user package installation via `pip`,
|
If you are using an operating system that blocks normal user package installation via `pip`, you can return `pip` to normal behaviour by editing the `~/.config/pip/pip.conf` file, and adding the following directive in the `[global]` section:
|
||||||
you can return `pip` to normal behaviour by editing the `~/.config/pip/pip.conf` file,
|
|
||||||
and adding the following directive in the `[global]` section:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
[global]
|
[global]
|
||||||
|
|
@ -212,23 +164,14 @@ Alternatively, you can use the `pipx` tool to install Reticulum in an isolated e
|
||||||
pipx install rns
|
pipx install rns
|
||||||
```
|
```
|
||||||
|
|
||||||
When first started, Reticulum will create a default configuration file,
|
When first started, Reticulum will create a default configuration file, providing basic connectivity to other Reticulum peers that might be locally reachable. The default config file contains a few examples, and references for creating a more complex configuration.
|
||||||
providing basic connectivity to other Reticulum peers that might be locally
|
|
||||||
reachable. The default config file contains a few examples, and references for
|
|
||||||
creating a more complex configuration.
|
|
||||||
|
|
||||||
If you have an old version of `pip` on your system, you may need to upgrade it first with `pip install pip --upgrade`. If you no not already have `pip` installed, you can install it using the package manager of your system with `sudo apt install python3-pip` or similar.
|
If you have an old version of `pip` on your system, you may need to upgrade it first with `pip install pip --upgrade`. If you no not already have `pip` installed, you can install it using the package manager of your system with `sudo apt install python3-pip` or similar.
|
||||||
|
|
||||||
For more detailed examples on how to expand communication over many mediums such
|
For more detailed examples on how to expand communication over many mediums such as packet radio or LoRa, serial ports, or over fast IP links and the Internet using the UDP and TCP interfaces, take a look at the [Supported Interfaces](https://markqvist.github.io/Reticulum/manual/interfaces.html) section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
||||||
as packet radio or LoRa, serial ports, or over fast IP links and the Internet using
|
|
||||||
the UDP and TCP interfaces, take a look at the [Supported Interfaces](https://markqvist.github.io/Reticulum/manual/interfaces.html)
|
|
||||||
section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
|
||||||
|
|
||||||
## Included Utilities
|
## Included Utilities
|
||||||
Reticulum includes a range of useful utilities for managing your networks,
|
Reticulum includes a range of useful utilities for managing your networks, viewing status and information, and other tasks. You can read more about these programs in the [Included Utility Programs](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
||||||
viewing status and information, and other tasks. You can read more about these
|
|
||||||
programs in the [Included Utility Programs](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs)
|
|
||||||
section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/).
|
|
||||||
|
|
||||||
- The system daemon `rnsd` for running Reticulum as an always-available service
|
- The system daemon `rnsd` for running Reticulum as an always-available service
|
||||||
- An interface status utility called `rnstatus`, that displays information about interfaces
|
- An interface status utility called `rnstatus`, that displays information about interfaces
|
||||||
|
|
@ -241,19 +184,13 @@ section of the [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/)
|
||||||
- The `rngit` program provides a full multi-repository Git node for serving repositories over Reticulum
|
- The `rngit` program provides a full multi-repository Git node for serving repositories over Reticulum
|
||||||
- The included `git-remote-rns` helper allows you to interact with Git repositories over Reticulum
|
- The included `git-remote-rns` helper allows you to interact with Git repositories over Reticulum
|
||||||
|
|
||||||
All tools, including `rnx` and `rncp`, work reliably and well even over very
|
All tools, including `rnx` and `rncp`, work reliably and well even over very low-bandwidth links like LoRa or Packet Radio. For full-featured remote shells over Reticulum, also have a look at the [rnsh](https://github.com/acehoss/rnsh) program.
|
||||||
low-bandwidth links like LoRa or Packet Radio. For full-featured remote shells
|
|
||||||
over Reticulum, also have a look at the [rnsh](https://github.com/acehoss/rnsh)
|
|
||||||
program.
|
|
||||||
|
|
||||||
## Supported interface types and devices
|
## Supported interface types and devices
|
||||||
|
|
||||||
Reticulum implements a range of generalised interface types that covers most of
|
Reticulum implements a range of generalised interface types that covers most of the communications hardware that Reticulum can run over. If your hardware is not supported, it's [simple to implement a custom interface module](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces).
|
||||||
the communications hardware that Reticulum can run over. If your hardware is
|
|
||||||
not supported, it's [simple to implement a custom interface module](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces).
|
|
||||||
|
|
||||||
Pull requests for custom interfaces are gratefully accepted, provided they are
|
Contributions of custom interfaces are gratefully accepted, provided they are generally useful and well-tested in real-world usage.
|
||||||
generally useful and well-tested in real-world usage.
|
|
||||||
|
|
||||||
Currently, the following built-in interfaces are supported:
|
Currently, the following built-in interfaces are supported:
|
||||||
|
|
||||||
|
|
@ -268,82 +205,42 @@ Currently, the following built-in interfaces are supported:
|
||||||
- Custom hardware via stdio or pipes
|
- Custom hardware via stdio or pipes
|
||||||
|
|
||||||
## Performance
|
## Performance
|
||||||
*All performance numbers here assume `rnsd` running in fully interpreted Python mode,
|
*All performance numbers here assume `rnsd` running in fully interpreted Python mode, limited to a single CPU core.*
|
||||||
limited to a single CPU core.*
|
|
||||||
|
|
||||||
Reticulum targets a *very* wide usable performance envelope, but prioritises
|
Reticulum targets a *very* wide usable performance envelope, but prioritises functionality and performance on low-bandwidth mediums. The goal is to provide a dynamic performance envelope from 100 bits per second, to 10 gigabits per second on normal hardware.
|
||||||
functionality and performance on low-bandwidth mediums. The goal is to provide a
|
|
||||||
dynamic performance envelope from 100 bits per second, to 10 gigabits per second
|
|
||||||
on normal hardware.
|
|
||||||
|
|
||||||
Currently, the on-network, usable performance envelope is approximately 150 bits
|
Currently, the on-network, usable performance envelope is approximately 150 bits per second to 1 gigabit per second on modest hardware. Real-world performance will vary widely with the speed of your system, availability of cryptographic hardware acceleration, and other factors.
|
||||||
per second to 1 gigabit per second on modest hardware. Real-world performance will
|
|
||||||
vary widely with the speed of your system, availability of cryptographic hardware
|
|
||||||
acceleration, and other factors.
|
|
||||||
|
|
||||||
Raw routing throughput for a transport node hosted on a Raspberry Pi 5 is
|
Raw routing throughput for a transport node hosted on a Raspberry Pi 5 is approximately 5 gigabits per second. Systems with modern crypto hardware acceleration can achieve transport throughput of 15 gigabits per second and higher.
|
||||||
approximately 5 gigabits per second. Systems with modern crypto hardware acceleration
|
|
||||||
can achieve transport throughput of 15 gigabits per second and higher.
|
|
||||||
|
|
||||||
While the reference implementation is perfectly capable of reaching 100+ Gbps, by
|
While the reference implementation is perfectly capable of reaching 100+ Gbps, by utilizing multiple CPU cores and vectorized transport, performance beyond the current level is not higly prioritised, since RNS is already able to saturate available physical medium bandwidth in almost all real-world situations.
|
||||||
utilizing multiple CPU cores and vectorized transport, performance beyond the
|
|
||||||
current level is not higly prioritised, since RNS is already able to saturate available
|
|
||||||
physical medium bandwidth in almost all real-world situations.
|
|
||||||
|
|
||||||
The primary objectives for RNS are *reliability*, *correctness*, *security*,
|
The primary objectives for RNS are *reliability*, *correctness*, *security*, *proper traffic management* and *actually practical performance*, not hollow on-paper "benchmarks" with little to no bearing on real-world usability.
|
||||||
*proper traffic management* and *actually practical performance*, not hollow on-paper
|
|
||||||
"benchmarks" with little to no bearing on real-world usability.
|
|
||||||
|
|
||||||
All alternative-implementation maintainers are *highly* encouraged to adopt a
|
All alternative-implementation maintainers are *highly* encouraged to adopt a similar approach, and especially to focus on getting their implementations working properly and reliably before publishing empirically dubious or factually wrong performance claims.
|
||||||
similar approach, and especially to focus on getting their implementations working
|
|
||||||
properly before publishing empirically dubious or factually wrong performance claims.
|
|
||||||
|
|
||||||
## Current Status
|
## Current Status
|
||||||
All core protocol features are implemented and functioning, but additions will
|
All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored and understood. The API and wire-format can be considered stable.
|
||||||
probably occur as real-world use is explored and understood. The API and wire-format
|
|
||||||
can be considered stable.
|
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
The installation of the default `rns` package requires only two external dependencies, listed
|
The installation of the default `rns` package requires only two external dependencies, listed below. Almost all systems and distributions have readily available packages for these dependencies, and when the `rns` package is installed with `pip`, they will be downloaded and installed as well.
|
||||||
below. Almost all systems and distributions have readily available packages for
|
|
||||||
these dependencies, and when the `rns` package is installed with `pip`, they
|
|
||||||
will be downloaded and installed as well.
|
|
||||||
|
|
||||||
- [PyCA/cryptography](https://github.com/pyca/cryptography)
|
- [PyCA/cryptography](https://github.com/pyca/cryptography)
|
||||||
- [pyserial](https://github.com/pyserial/pyserial)
|
- [pyserial](https://github.com/pyserial/pyserial)
|
||||||
|
|
||||||
On more unusual systems, and in some rare cases, it might not be possible to
|
On more unusual systems, and in some rare cases, it might not be possible to install or even compile one or more of the above modules. In such situations, you can use the `rnspure` package instead, which require no external dependencies for installation. Please note that the contents of the `rns` and `rnspure` packages are *identical*. The only difference is that the `rnspure` package lists no dependencies required for installation.
|
||||||
install or even compile one or more of the above modules. In such situations,
|
|
||||||
you can use the `rnspure` package instead, which require no external
|
|
||||||
dependencies for installation. Please note that the contents of the `rns` and
|
|
||||||
`rnspure` packages are *identical*. The only difference is that the `rnspure`
|
|
||||||
package lists no dependencies required for installation.
|
|
||||||
|
|
||||||
No matter how Reticulum is installed and started, it will load external
|
No matter how Reticulum is installed and started, it will load external dependencies only if they are *needed* and *available*. If for example you want to use Reticulum on a system that cannot support [pyserial](https://github.com/pyserial/pyserial), it is perfectly possible to do so using the `rnspure` package, but Reticulum will not be able to use serial-based interfaces. All other available modules will still be loaded when needed.
|
||||||
dependencies only if they are *needed* and *available*. If for example you want
|
|
||||||
to use Reticulum on a system that cannot support
|
|
||||||
[pyserial](https://github.com/pyserial/pyserial), it is perfectly possible to
|
|
||||||
do so using the `rnspure` package, but Reticulum will not be able to use
|
|
||||||
serial-based interfaces. All other available modules will still be loaded when
|
|
||||||
needed.
|
|
||||||
|
|
||||||
**Please Note!** If you use the `rnspure` package to run Reticulum on systems
|
**Please Note!** If you use the `rnspure` package to run Reticulum on systems that do not support [PyCA/cryptography](https://github.com/pyca/cryptography), it is important that you read and understand the [Cryptographic Primitives](#cryptographic-primitives) section of this document.
|
||||||
that do not support [PyCA/cryptography](https://github.com/pyca/cryptography),
|
|
||||||
it is important that you read and understand the [Cryptographic
|
|
||||||
Primitives](#cryptographic-primitives) section of this document.
|
|
||||||
|
|
||||||
## Bootstrapping Connectivity
|
## Bootstrapping Connectivity
|
||||||
|
|
||||||
Reticulum is not a service you subscribe to, nor is it a single global network you "join".
|
Reticulum is not a service you subscribe to, nor is it a single global network you "join". Reticulum provides functionality for discovering available public interfaces over the network itself, and the broader community has provided various directories of publicly available entrypoints to bootstrap connectivity.
|
||||||
Reticulum provides functionality for discovering available public interfaces
|
|
||||||
over the network itself, and the broader community has provided various directories
|
|
||||||
of publicly available entrypoints to bootstrap connectivity.
|
|
||||||
|
|
||||||
To learn how to establish initial connectivity over Reticulum, read the [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) section of the manual.
|
To learn how to establish initial connectivity over Reticulum, read the [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) section of the manual.
|
||||||
|
|
||||||
If you already have a general idea of how this works, you can use community-run
|
If you already have a general idea of how this works, you can use community-run sites such as [directory.rns.recipes](https://directory.rns.recipes/) and [rmap.world](https://rmap.world) to find interface definitions for initial connectivity to the global distributed Reticulum backbone.
|
||||||
sites such as [directory.rns.recipes](https://directory.rns.recipes/) and [rmap.world](https://rmap.world)
|
|
||||||
to find interface definitions for initial connectivity to the global distributed Reticulum backbone.
|
|
||||||
|
|
||||||
## Public Testnet
|
## Public Testnet
|
||||||
***Important!** Historically, a developer-targeted testnet was made available by the Reticulum project itself. As the amount of global Reticulum nodes and entrypoints have grown to a substantial quantity, this public testnet, including the Amsterdam Testnet entrypoint, has now been decommissioned. If your still have instances that relied on this entrypoint for connectivity, transition to using the distributed backbone instead. Reticulum now includes a full on-network interface discovery and connectivity bootstrapping system. Read the [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) section of the manual for pointers.*
|
***Important!** Historically, a developer-targeted testnet was made available by the Reticulum project itself. As the amount of global Reticulum nodes and entrypoints have grown to a substantial quantity, this public testnet, including the Amsterdam Testnet entrypoint, has now been decommissioned. If your still have instances that relied on this entrypoint for connectivity, transition to using the distributed backbone instead. Reticulum now includes a full on-network interface discovery and connectivity bootstrapping system. Read the [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) section of the manual for pointers.*
|
||||||
|
|
@ -368,17 +265,11 @@ For this to be possible, I need your help. Please support the continued developm
|
||||||
- Ko-Fi: https://ko-fi.com/markqvist
|
- Ko-Fi: https://ko-fi.com/markqvist
|
||||||
|
|
||||||
## Cryptographic Primitives
|
## Cryptographic Primitives
|
||||||
Reticulum uses a simple suite of efficient, strong and well-tested cryptographic
|
Reticulum uses a simple suite of efficient, strong and well-tested cryptographic primitives, with widely available implementations that can be used both on general-purpose CPUs and on microcontrollers.
|
||||||
primitives, with widely available implementations that can be used both on
|
|
||||||
general-purpose CPUs and on microcontrollers.
|
|
||||||
|
|
||||||
One of the primary considerations for choosing this particular set of primitives is
|
One of the primary considerations for choosing this particular set of primitives is that they can be implemented *safely* with relatively few pitfalls, on practically all current computing platforms.
|
||||||
that they can be implemented *safely* with relatively few pitfalls, on practically
|
|
||||||
all current computing platforms.
|
|
||||||
|
|
||||||
The primitives listed here **are authoritative**. Anything claiming to be Reticulum,
|
The primitives listed here **are authoritative**. Anything claiming to be Reticulum, but not using these exact primitives **is not** Reticulum, and possibly an intentionally compromised or weakened clone. The utilised primitives are:
|
||||||
but not using these exact primitives **is not** Reticulum, and possibly an
|
|
||||||
intentionally compromised or weakened clone. The utilised primitives are:
|
|
||||||
|
|
||||||
- Reticulum Identity Keys are 512-bit Curve25519 keysets
|
- Reticulum Identity Keys are 512-bit Curve25519 keysets
|
||||||
- A 256-bit Ed25519 key for signatures
|
- A 256-bit Ed25519 key for signatures
|
||||||
|
|
@ -393,13 +284,7 @@ intentionally compromised or weakened clone. The utilised primitives are:
|
||||||
- SHA-256
|
- SHA-256
|
||||||
- SHA-512
|
- SHA-512
|
||||||
|
|
||||||
In the default installation configuration, the `X25519`, `Ed25519`,
|
In the default installation configuration, the `X25519`, `Ed25519`, and `AES-256-CBC` primitives are provided by [OpenSSL](https://www.openssl.org/) (via the [PyCA/cryptography](https://github.com/pyca/cryptography) package). The hashing functions `SHA-256` and `SHA-512` are provided by the standard Python [hashlib](https://docs.python.org/3/library/hashlib.html). The `HKDF`, `HMAC`, `Token` primitives, and the `PKCS7` padding function are always provided by the following internal implementations:
|
||||||
and `AES-256-CBC` primitives are provided by [OpenSSL](https://www.openssl.org/)
|
|
||||||
(via the [PyCA/cryptography](https://github.com/pyca/cryptography) package).
|
|
||||||
The hashing functions `SHA-256` and `SHA-512` are provided by the standard
|
|
||||||
Python [hashlib](https://docs.python.org/3/library/hashlib.html). The `HKDF`,
|
|
||||||
`HMAC`, `Token` primitives, and the `PKCS7` padding function are always
|
|
||||||
provided by the following internal implementations:
|
|
||||||
|
|
||||||
- [HKDF.py](RNS/Cryptography/HKDF.py)
|
- [HKDF.py](RNS/Cryptography/HKDF.py)
|
||||||
- [HMAC.py](RNS/Cryptography/HMAC.py)
|
- [HMAC.py](RNS/Cryptography/HMAC.py)
|
||||||
|
|
@ -407,39 +292,18 @@ provided by the following internal implementations:
|
||||||
- [PKCS7.py](RNS/Cryptography/PKCS7.py)
|
- [PKCS7.py](RNS/Cryptography/PKCS7.py)
|
||||||
|
|
||||||
|
|
||||||
Reticulum also includes a complete implementation of all necessary primitives
|
Reticulum also includes a complete implementation of all necessary primitives in pure Python. If OpenSSL and PyCA are not available on the system when Reticulum is started, Reticulum will instead use the internal pure-python primitives. A trivial consequence of this is performance, with the OpenSSL backend being *much* faster. The most important consequence however, is the potential loss of security by using primitives that has not seen the same amount of scrutiny, testing and review as those from OpenSSL.
|
||||||
in pure Python. If OpenSSL and PyCA are not available on the system when
|
|
||||||
Reticulum is started, Reticulum will instead use the internal pure-python
|
|
||||||
primitives. A trivial consequence of this is performance, with the OpenSSL
|
|
||||||
backend being *much* faster. The most important consequence however, is the
|
|
||||||
potential loss of security by using primitives that has not seen the same
|
|
||||||
amount of scrutiny, testing and review as those from OpenSSL.
|
|
||||||
|
|
||||||
Please note that by default, installing Reticulum will **require** OpenSSL and
|
Please note that by default, installing Reticulum will **require** OpenSSL and PyCA to also be automatically installed if not already available. It is only possible to use the pure-python primitives if this requirement is specifically overridden by the user, for example by installing the `rnspure` package instead of the normal `rns` package, or by running directly from local source-code.
|
||||||
PyCA to also be automatically installed if not already available. It is only
|
|
||||||
possible to use the pure-python primitives if this requirement is specifically
|
|
||||||
overridden by the user, for example by installing the `rnspure` package instead
|
|
||||||
of the normal `rns` package, or by running directly from local source-code.
|
|
||||||
|
|
||||||
If you want to use the internal pure-python primitives, it is **highly
|
If you want to use the internal pure-python primitives, it is **highly advisable** that you have a good understanding of the risks that this pose, and make an informed decision on whether those risks are acceptable to you.
|
||||||
advisable** that you have a good understanding of the risks that this pose, and
|
|
||||||
make an informed decision on whether those risks are acceptable to you.
|
|
||||||
|
|
||||||
Reticulum is relatively young software, and should be considered as such. While
|
Having been in development for ten, and wider deployment for around five years, Reticulum is relatively young software, and should be considered as such. While it has been carefully built with cryptography best-practices very foremost in mind, there could very well still be privacy or security breaking bugs.
|
||||||
it has been built with cryptography best-practices very foremost in mind, it
|
|
||||||
_has not_ been externally security audited, and there could very well be
|
|
||||||
privacy or security breaking bugs. If you want to help out, or help sponsor an
|
|
||||||
audit, please do get in touch.
|
|
||||||
|
|
||||||
## Acknowledgements & Credits
|
## Acknowledgements & Credits
|
||||||
Reticulum can only exist because of the mountain of Open Source work it was
|
Reticulum can only exist because of the mountain of Open Source work it was built on top of, the contributions of everyone involved, and everyone that has supported the project through the years. To everyone who has helped, thank you so much.
|
||||||
built on top of, the contributions of everyone involved, and everyone that has
|
|
||||||
supported the project through the years. To everyone who has helped, thank you
|
|
||||||
so much.
|
|
||||||
|
|
||||||
A number of other modules and projects are either part of, or used by
|
A number of other modules and projects are either part of, or used by Reticulum. Sincere thanks to the authors and contributors of the following projects:
|
||||||
Reticulum. Sincere thanks to the authors and contributors of the following
|
|
||||||
projects:
|
|
||||||
|
|
||||||
- [PyCA/cryptography](https://github.com/pyca/cryptography), *BSD License*
|
- [PyCA/cryptography](https://github.com/pyca/cryptography), *BSD License*
|
||||||
- [Pure-25519](https://github.com/warner/python-pure25519) by [Brian Warner](https://github.com/warner), *MIT License*
|
- [Pure-25519](https://github.com/warner/python-pure25519) by [Brian Warner](https://github.com/warner), *MIT License*
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ Please note that by default, installing Reticulum will `!require`! OpenSSL and P
|
||||||
|
|
||||||
If you want to use the internal pure-python primitives, it is `!highly advisable`! that you have a good understanding of the risks that this pose, and make an informed decision on whether those risks are acceptable to you.
|
If you want to use the internal pure-python primitives, it is `!highly advisable`! that you have a good understanding of the risks that this pose, and make an informed decision on whether those risks are acceptable to you.
|
||||||
|
|
||||||
Reticulum is relatively young software, and should be considered as such. While it has been built with cryptography best-practices very foremost in mind, it _has not_ been externally security audited, and there could very well be privacy or security breaking bugs. If you want to help out, or help sponsor an audit, please do get in touch.
|
Having been in development for ten, and wider deployment for around five years, Reticulum is relatively young software, and should be considered as such. While it has been carefully built with cryptography best-practices very foremost in mind, there could very well still be privacy or security breaking bugs.
|
||||||
|
|
||||||
>> Acknowledgements & Credits
|
>> Acknowledgements & Credits
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue