mirror of
https://github.com/markqvist/Reticulum.git
synced 2026-05-23 00:04:49 -07:00
Updated docs
This commit is contained in:
@@ -1,203 +0,0 @@
|
||||
******************
|
||||
What is Reticulum?
|
||||
******************
|
||||
|
||||
Reticulum is a cryptography-based networking stack for building both local and
|
||||
wide-area networks with readily available hardware, that can continue to operate
|
||||
under adverse conditions, such as extremely low bandwidth and very high latency.
|
||||
|
||||
To understand the foundational philosophy and goals of this system, read the
|
||||
:ref:`Zen of Reticulum <zen>`.
|
||||
|
||||
Reticulum allows you to build wide-area networks with off-the-shelf tools, and
|
||||
offers end-to-end encryption, forward secrecy, autoconfiguring cryptographically
|
||||
backed multi-hop transport, efficient addressing, unforgeable packet
|
||||
acknowledgements and more.
|
||||
|
||||
From a users perspective, Reticulum allows the creation of applications that
|
||||
respect and empower the autonomy and sovereignty of communities and individuals.
|
||||
Reticulum enables secure digital communication that cannot be subjected to
|
||||
outside control, manipulation or censorship.
|
||||
|
||||
Reticulum enables the construction of both small and potentially planetary-scale
|
||||
networks, without any need for hierarchical or bureaucratic structures to control
|
||||
or manage them, while ensuring individuals and communities full sovereignty
|
||||
over their own network segments.
|
||||
|
||||
Reticulum is a **complete networking stack**, and does not need IP or higher
|
||||
layers, although it is easy to utilise IP (with TCP or UDP) as the underlying
|
||||
carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the
|
||||
Internet or private IP networks. Reticulum is built directly on cryptographic
|
||||
principles, allowing resilience and stable functionality in open and trustless
|
||||
networks.
|
||||
|
||||
No kernel modules or drivers are required. Reticulum can run completely in
|
||||
userland, and will run on practically any system that runs Python 3. Reticulum
|
||||
runs well even on small single-board computers like the Pi Zero.
|
||||
|
||||
|
||||
Current Status
|
||||
==============
|
||||
All core protocol features are implemented and functioning, but additions will probably occur as
|
||||
real-world use is explored. The API and wire-format can be considered complete and stable, but
|
||||
could change if absolutely warranted.
|
||||
|
||||
|
||||
Reference Implementation
|
||||
========================
|
||||
The Python code, for which this documentation is written, and known as the Reticulum Network Stack,
|
||||
is the Reference Implementation of Reticulum. The Reticulum Protocol is defined entirely
|
||||
and authoritatively by this reference implementation, and this manual. It is maintained by Mark Qvist,
|
||||
identified by the Reticulum Identity ``<bc7291552be7a58f361522990465165c>``.
|
||||
|
||||
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.
|
||||
|
||||
The reference implementation is licensed under the :ref:`Reticulum License <license>`.
|
||||
|
||||
The Reticulum Protocol was dedicated to the Public Domain in 2016.
|
||||
|
||||
|
||||
What does Reticulum Offer?
|
||||
==========================
|
||||
|
||||
* Coordination-less globally unique addressing and identification
|
||||
|
||||
* Fully self-configuring multi-hop routing over heterogeneous carriers
|
||||
|
||||
* Flexible scalability over heterogeneous topologies
|
||||
|
||||
* Reticulum can carry data over any mixture of physical mediums and topologies
|
||||
|
||||
* Low-bandwidth networks can co-exist and interoperate with large, high-bandwidth networks
|
||||
|
||||
* Initiator anonymity, communicate without revealing your identity
|
||||
|
||||
* Reticulum does not include source addresses on any packets
|
||||
|
||||
* Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication
|
||||
|
||||
* The foundational Reticulum Identity Keys are 512-bit Elliptic Curve keysets
|
||||
|
||||
* Forward Secrecy is available for all communication types, both for single packets and over links
|
||||
|
||||
* Reticulum uses the following format for encrypted tokens:
|
||||
|
||||
* Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519
|
||||
|
||||
* AES-256 in CBC mode with PKCS7 padding
|
||||
|
||||
* HMAC using SHA256 for authentication
|
||||
|
||||
* IVs are generated through os.urandom()
|
||||
|
||||
* Unforgeable packet delivery confirmations
|
||||
|
||||
* Flexible and extensible interface system
|
||||
|
||||
* Reticulum includes a large variety of built-in interface types
|
||||
|
||||
* Ability to load and utilise custom user- or community-supplied interface types
|
||||
|
||||
* Easily create your own custom interfaces for communicating over anything
|
||||
|
||||
* Authentication and virtual network segmentation on all supported interface types
|
||||
|
||||
* An intuitive and easy-to-use API
|
||||
|
||||
* Simpler and easier to use than sockets APIs and simpler, but more powerful
|
||||
|
||||
* Makes building distributed and decentralised applications much simpler
|
||||
|
||||
* Reliable and efficient transfer of arbitrary amounts of data
|
||||
|
||||
* Reticulum can handle a few bytes of data or files of many gigabytes
|
||||
|
||||
* Sequencing, compression, transfer coordination and checksumming are automatic
|
||||
|
||||
* The API is very easy to use, and provides transfer progress
|
||||
|
||||
* Lightweight, flexible and expandable Request/Response mechanism
|
||||
|
||||
* Efficient link establishment
|
||||
|
||||
* Total cost of setting up an encrypted and verified link is only 3 packets, totalling 297 bytes
|
||||
|
||||
* Low cost of keeping links open at only 0.44 bits per second
|
||||
|
||||
* Reliable sequential delivery with Channel and Buffer mechanisms
|
||||
|
||||
|
||||
Where can Reticulum be Used?
|
||||
============================
|
||||
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,
|
||||
ad-hoc WiFi, free-space optical links and similar systems are all examples
|
||||
of the types of interfaces Reticulum was designed for.
|
||||
|
||||
An open-source LoRa-based interface called `RNode <https://unsigned.io/rnode>`_
|
||||
has been designed as an example transceiver that is very suitable for
|
||||
Reticulum. It is possible to build it yourself, to transform a common LoRa
|
||||
development board into one, or it can be purchased as a complete transceiver
|
||||
from various vendors.
|
||||
|
||||
Reticulum can also be encapsulated over existing IP networks, so there's
|
||||
nothing stopping you from using it over wired Ethernet or your local WiFi
|
||||
network, 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.
|
||||
|
||||
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
|
||||
added, 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.
|
||||
|
||||
Interface Types and Devices
|
||||
===========================
|
||||
Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, it's simple to :ref:`implement an interface class<example-custominterface>`. Currently, Reticulum can use the following devices and communication mediums:
|
||||
|
||||
* Any Ethernet device
|
||||
|
||||
* WiFi devices
|
||||
|
||||
* Wired Ethernet devices
|
||||
|
||||
* Fibre-optic transceivers
|
||||
|
||||
* Data radios with Ethernet ports
|
||||
|
||||
* LoRa using `RNode <https://unsigned.io/rnode>`_
|
||||
|
||||
* Can be installed on `many popular LoRa boards <https://github.com/markqvist/rnodeconfigutil#supported-devices>`_
|
||||
|
||||
* Can be purchased as a `ready to use transceiver <https://unsigned.io/rnode>`_
|
||||
|
||||
* Packet Radio TNCs, such as `OpenModem <https://unsigned.io/openmodem>`_
|
||||
|
||||
* Any packet radio TNC in KISS mode
|
||||
|
||||
* Ideal for VHF and UHF radio
|
||||
|
||||
* Any device with a serial port
|
||||
|
||||
* The I2P network
|
||||
|
||||
* TCP over IP networks
|
||||
|
||||
* UDP over IP networks
|
||||
|
||||
* Anything you can connect via stdio
|
||||
|
||||
* Reticulum can use external programs and pipes as interfaces
|
||||
|
||||
* This can be used to easily hack in virtual interfaces
|
||||
|
||||
* Or to quickly create interfaces with custom hardware
|
||||
|
||||
* Anything else using :ref:`custom interface modules<interfaces-custom>` written in Python
|
||||
|
||||
For a full list and more details, see the :ref:`Supported Interfaces<interfaces-main>` chapter.
|
||||
|
||||
Reference in New Issue
Block a user