
Lo stack di rete basato su crittografia per costruire reti inarrestabili con LoRa, Packet Radio, WiFi e tutto il resto.

Questo repository è un mirror pubblico. Tutto lo sviluppo avviene altrove.
Per comprendere la filosofia di base e gli obiettivi di questo sistema, leggi lo Zen di Reticulum.
Reticulum è lo stack di rete basato su crittografia per costruire reti locali e geografiche con hardware facilmente reperibile. Può operare anche con latenza molto elevata e larghezza di banda estremamente ridotta. Reticulum ti permette di costruire reti geografiche con strumenti standard, e offre crittografia end-to-end e connettività, anonimato dell'iniziatore, trasporto multi-hop autoconfigurante con supporto crittografico, indirizzamento efficiente, conferme di consegna infalsificabili e altro ancora.
La visione di Reticulum è permettere a chiunque di essere il proprio operatore di rete, e rendere economico e semplice coprire vaste aree con una miriade di reti indipendenti, interconnesse e autonome. Reticulum non è una rete. È uno strumento per costruire migliaia di reti. Reti senza interruttori di spegnimento, sorveglianza, censura e controllo. Reti che possono interoperare liberamente, associarsi e dissociarsi le une dalle altre, e che non richiedono supervisione centrale. Reti per gli esseri umani. Reti per le persone.
Reticulum è uno stack di rete completo e non si basa su IP o livelli superiori, ma è possibile utilizzare IP come vettore sottostante per Reticulum.
Non avere dipendenze da stack di rete tradizionali libera overhead che è stato utilizzato per implementare uno stack di rete costruito direttamente su principi crittografici, consentendo resilienza e funzionalità stabile, anche in reti aperte e senza fiducia.
Non sono richiesti moduli del kernel o driver. Reticulum funziona completamente in spazio utente, e può funzionare su praticamente qualsiasi sistema che esegua Python 3.
La documentazione completa per Reticulum è disponibile su markqvist.github.io/Reticulum/manual/.
Puoi anche scaricare il manuale di Reticulum in formato PDF o come e-book in formato EPUB.
Per maggiori informazioni, visita reticulum.network e la sezione FAQ del wiki.
Il codice Python in questo repository è l'implementazione di riferimento di Reticulum. Il protocollo Reticulum è definito completamente e autorevolmente da questa implementazione di riferimento e dal suo manuale associato. È mantenuto da Mark Qvist, identificato dall'identità Reticulum <bc7291552be7a58f361522990465165c>.
Non esistono attualmente, né esisteranno mai, derivati di specifiche di protocollo di secondo ordine. Non puoi ottenere una specifica migliore di una che sia eseguibile, funzionale, testabile, distribuita e operativa 24/7 in tutto il pianeta.
Non esiste, e mai esisterà, una 'specifica formale' derivata separata, 'RFC' o qualcosa di simile per Reticulum:
L'implementazione di riferimento è la specifica finale e autorevole.
La compatibilità con il protocollo Reticulum è definita come piena interoperabilità e parità funzionale sufficiente con questa implementazione di riferimento. Qualsiasi implementazione specifica del protocollo che raggiunge questo obiettivo è Reticulum. Qualsiasi che non lo fa non è Reticulum.
L'implementazione di riferimento è concessa in licenza secondo la licenza Reticulum.
Il protocollo Reticulum è stato dedicato al pubblico dominio nel 2016.
Se vuoi farti rapidamente un'idea di cosa può fare Reticulum, dai un'occhiata alla sezione Programmi che usano Reticulum del manuale, o alle seguenti risorse:
rnphone, che può essere utilizzato per costruire telefoni hardware.Su praticamente qualsiasi mezzo che possa supportare almeno un canale half-duplex con una velocità maggiore di 5 bit al secondo e un MTU di 500 byte. Radio dati, modem, radio LoRa, linee seriali, TNC AX.25, modi digitali radioamatoriali, dispositivi WiFi ed Ethernet, collegamenti ottici in spazio libero e sistemi simili sono tutti esempi dei tipi di dispositivi fisici che Reticulum può utilizzare.
Un'interfaccia open-source basata su LoRa chiamata RNode è stata progettata specificamente per l'uso con Reticulum. È possibile costruirla da soli, oppure può essere acquistata come ricetrasmettitore completo che necessita solo di una connessione USB all'host.
Reticulum può anche essere incapsulato su reti IP esistenti, quindi nulla ti impedisce di utilizzarlo su Ethernet cablata, sulla tua rete WiFi locale o su Internet, dove funzionerà altrettanto bene. In effetti, uno dei punti di forza di Reticulum è quanto facilmente ti permette di collegare diversi mezzi in una mesh autoconfigurante, resiliente e crittografata, utilizzando qualsiasi miscela disponibile di infrastruttura disponibile.
Ad esempio, è possibile configurare un Raspberry Pi collegato sia a una radio LoRa, a un TNC per packet radio e a una rete WiFi. Una volta configurate le interfacce, Reticulum si occuperà del resto, e qualsiasi dispositivo sulla rete WiFi potrà comunicare con i nodi sui lati LoRa e packet radio della rete, e viceversa.
Il modo migliore per iniziare con lo stack di rete Reticulum dipende da cosa vuoi fare. Per dettagli completi ed esempi, dai un'occhiata alla sezione Getting Started Fast del Manuale di Reticulum.
Per installare semplicemente Reticulum e le utility correlate sul tuo sistema, il modo più semplice è tramite pip. Puoi quindi avviare qualsiasi programma che utilizza Reticulum, o avviare Reticulum come servizio di sistema con l'utility rnsd.```bash
pip install rns
Se stai utilizzando un sistema operativo che blocca l'installazione normale di pacchetti utente tramite `pip`,
puoi ripristinare il comportamento normale di `pip` modificando il file `~/.config/pip/pip.conf`,
e aggiungendo la seguente direttiva nella sezione `[global]`:```text
[global]
break-system-packages = true
In alternativa, puoi usare lo strumento pipx per installare Reticulum in un ambiente isolato:```bash
pipx install rns
Al primo avvio, Reticulum creerà un file di configurazione predefinito, fornendo connettività di base ad altri peer Reticulum che potrebbero essere raggiungibili localmente. Il file di configurazione predefinito contiene alcuni esempi e riferimenti per creare una configurazione più complessa.
Se hai una vecchia versione di `pip` sul tuo sistema, potresti doverla aggiornare prima con `pip install pip --upgrade`. Se non hai già `pip` installato, puoi installarlo usando il gestore pacchetti del tuo sistema con `sudo apt install python3-pip` o simile.
Per esempi più dettagliati su come espandere la comunicazione su molti mezzi come radio a pacchetto o LoRa, porte seriali, o su collegamenti IP veloci e Internet utilizzando le interfacce UDP e TCP, dai un'occhiata alla sezione [Interfacce Supportate](https://markqvist.github.io/Reticulum/manual/interfaces.html) del [Manuale di Reticulum](https://markqvist.github.io/Reticulum/manual/).
## Utility Incluse
Reticulum include una gamma di utili utilità per gestire le tue reti, visualizzare stato e informazioni, e altre attività. Puoi leggere di più su questi programmi nella sezione [Programmi di Utilità Inclusi](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) del [Manuale di Reticulum](https://markqvist.github.io/Reticulum/manual/).
- Il demone di sistema `rnsd` per eseguire Reticulum come servizio sempre disponibile
- Un'utilità di stato delle interfacce chiamata `rnstatus`, che visualizza informazioni sulle interfacce
- Lo strumento di ricerca e gestione dei percorsi `rnpath` che ti permette di visualizzare e modificare le tabelle dei percorsi
- Uno strumento di diagnostica chiamato `rnprobe` per verificare la connettività verso le destinazioni
- Un semplice programma di trasferimento file chiamato `rncp` che rende facile trasferire file tra sistemi
- L'utilità di gestione delle identità e crittografia `rnid` ti permette di gestire Identità e crittografare/decrittografare file
- Il programma `rnsh` ti permette di stabilire sessioni shell completamente interattive con sistemi remoti
- Il programma di esecuzione remota dei comandi `rnx` ti permette di eseguire semplici comandi e programmi e recuperare output da sistemi remoti
- Il programma `rngit` fornisce un nodo Git multi-repository completo per servire repository su Reticulum
- Il helper incluso `git-remote-rns` ti permette di interagire con i repository Git su Reticulum
Tutti gli strumenti, inclusi `rnx` e `rncp`, funzionano in modo affidabile anche su collegamenti a larghezza di banda molto ridotta come LoRa o Radio a Pacchetto. Per shell remote complete su Reticulum, dai un'occhiata anche al programma [rnsh](https://github.com/acehoss/rnsh).
## Tipi di interfacce e dispositivi supportati
Reticulum implementa una gamma di tipi di interfacce generalizzati che copre la maggior parte dell'hardware di comunicazione su cui Reticulum può funzionare. Se il tuo hardware non è supportato, è [semplice implementare un modulo di interfaccia personalizzato](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces).
Le richieste pull per interfacce personalizzate sono accettate con gratitudine, purché siano generalmente utili e ben testate nell'uso reale.
Attualmente, sono supportate le seguenti interfacce integrate:
- Qualsiasi dispositivo Ethernet
- LoRa usando [RNode](https://unsigned.io/rnode/)
- TNC radio a pacchetto (con o senza AX.25)
- Modem hardware e software compatibili KISS
- Qualsiasi dispositivo con porta seriale
- TCP su reti IP
- UDP su reti IP
- Programmi esterni tramite stdio o pipe
- Hardware personalizzato tramite stdio o pipe
## Prestazioni
Reticulum punta a un inviluppo di prestazioni *molto* ampio, ma dà priorità alla funzionalità e alle prestazioni su mezzi a bassa larghezza di banda. L'obiettivo è fornire un inviluppo di prestazioni dinamico da 250 bit al secondo a 1 gigabit al secondo su hardware normale.
Attualmente, l'inviluppo di prestazioni utilizzabile è di circa 150 bit al secondo fino a 500 megabit al secondo, con mezzi fisici più veloci che non vengono saturati. Prestazioni oltre il livello attuale sono previste per aggiornamenti futuri, ma non sono altamente prioritarie al momento.
## Stato attuale
Tutte le funzionalità principali del protocollo sono implementate e funzionanti, ma probabilmente verranno aggiunte man mano che l'uso reale verrà esplorato e compreso. L'API e il formato di trasmissione possono essere considerati stabili.
## Dipendenze
L'installazione del pacchetto predefinito `rns` richiede solo due dipendenze esterne, elencate di seguito. Quasi tutti i sistemi e le distribuzioni hanno pacchetti prontamente disponibili per queste dipendenze, e quando il pacchetto `rns` viene installato con `pip`, verranno scaricate e installate anch'esse.
- [PyCA/cryptography](https://github.com/pyca/cryptography)
- [pyserial](https://github.com/pyserial/pyserial)
Su sistemi più insoliti e in alcuni rari casi, potrebbe non essere possibile installare o persino compilare uno o più dei moduli sopra elencati. In tali situazioni, puoi utilizzare invece il pacchetto `rnspure`, che non richiede dipendenze esterne per l'installazione. Si prega di notare che i contenuti dei pacchetti `rns` e `rnspure` sono *identici*. L'unica differenza è che il pacchetto `rnspure` non elenca dipendenze richieste per l'installazione.
Non importa come Reticulum viene installato e avviato, caricherà le dipendenze esterne solo se sono *necessarie* e *disponibili*. Se ad esempio vuoi usare Reticulum su un sistema che non supporta [pyserial](https://github.com/pyserial/pyserial), è perfettamente possibile farlo usando il pacchetto `rnspure`, ma Reticulum non sarà in grado di utilizzare interfacce basate su seriale. Tutti gli altri moduli disponibili verranno comunque caricati quando necessario.
**Per favore nota!** Se usi il pacchetto `rnspure` per eseguire Reticulum su sistemi che non supportano [PyCA/cryptography](https://github.com/pyca/cryptography), è importante che tu legga e comprenda la sezione [Primitive Crittografiche](#cryptographic-primitives) di questo documento.
## Bootstrap della Connettività
Reticulum non è un servizio a cui ci si abbona, né è una singola rete globale a cui ci si "unisce". Reticulum fornisce funzionalità per scoprire interfacce pubbliche disponibili sulla rete stessa, e la comunità più ampia ha fornito vari elenchi di punti di accesso pubblicamente disponibili per avviare la connettività.
Per imparare come stabilire la connettività iniziale su Reticulum, leggi la sezione [Bootstrap della Connettività](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manuale.
Se hai già un'idea generale di come funziona, puoi utilizzare siti gestiti dalla comunità come [directory.rns.recipes](https://directory.rns.recipes/) e [rmap.world](https://rmap.world) per trovare definizioni di interfaccia per la connettività iniziale al backbone distribuito globale di Reticulum.
## Testnet Pubblico
***Importante!** Storicamente, una testnet per sviluppatori è stata resa disponibile dal progetto Reticulum stesso. Poiché la quantità di nodi Reticulum globali e punti di ingresso è cresciuta in modo significativo, questa testnet pubblica, incluso il punto di ingresso Amsterdam Testnet, è stata ora dismessa. Se hai ancora istanze che si basavano su questo punto di ingresso per la connettività, passa invece all'uso del backbone distribuito. Reticulum ora include un sistema completo di scoperta delle interfacce e bootstrap della connettività sulla rete. Leggi la sezione [Bootstrap della Connettività](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manuale per indicazioni.*
## Supporta Reticulum
Affinché ciò sia possibile, ho bisogno del tuo aiuto. Per favore supporta lo sviluppo continuo di sistemi di comunicazione aperti, liberi e privati donando tramite uno dei seguenti canali:
- Monero: ```
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
Liberapay: https://liberapay.com/Reticulum/
Ko-Fi: https://ko-fi.com/markqvist
Reticulum utilizza una semplice suite di primitive crittografiche efficienti, robuste e ben testate, con implementazioni ampiamente disponibili che possono essere utilizzate sia su CPU generiche sia su microcontrollori.
Una delle considerazioni principali per la scelta di questo particolare insieme di primitive è che possono essere implementate in modo sicuro con relativamente pochi ostacoli, su praticamente tutte le piattaforme informatiche attuali.
Le primitive elencate qui sono autorevoli. Qualsiasi cosa che si definisca Reticulum, ma che non utilizzi queste esatte primitive non è Reticulum, e probabilmente è un clone deliberatamente compromesso o indebolito. Le primitive utilizzate sono:
os.urandom() o meglioNella configurazione di installazione predefinita, le primitive X25519, Ed25519 e AES-256-CBC sono fornite da OpenSSL (tramite il pacchetto PyCA/cryptography). Le funzioni di hashing SHA-256 e SHA-512 sono fornite dal modulo standard Python hashlib. Le primitive HKDF, HMAC, Token e la funzione di padding PKCS7 sono sempre fornite dalle seguenti implementazioni interne:
Reticulum include anche un'implementazione completa di tutte le primitive necessarie in Python puro. Se OpenSSL e PyCA non sono disponibili sul sistema all'avvio di Reticulum, Reticulum utilizzerà invece le primitive interne in Python puro. Una conseguenza banale di ciò è la performance, con il backend OpenSSL che è molto più veloce. La conseguenza più importante, tuttavia, è la potenziale perdita di sicurezza nell'utilizzo di primitive che non hanno ricevuto la stessa quantità di controllo, test e revisione di quelle di OpenSSL.
Si noti che per impostazione predefinita, l'installazione di Reticulum richiede che anche OpenSSL e PyCA vengano installati automaticamente se non già disponibili. È possibile utilizzare le primitive in Python puro solo se questo requisito viene specificamente ignorato dall'utente, ad esempio installando il pacchetto rnspure invece del normale pacchetto rns, o eseguendo direttamente dal codice sorgente locale.
Se desideri utilizzare le primitive interne in Python puro, è altamente consigliabile che tu abbia una buona comprensione dei rischi che ciò comporta e prenda una decisione informata sull'accettabilità di tali rischi.
Reticulum è un software relativamente giovane e va considerato come tale. Sebbene sia stato costruito con le migliori pratiche crittografiche in primo piano, non è stato sottoposto a un audit di sicurezza esterno e potrebbero esserci bug che compromettono la privacy o la sicurezza. Se desideri aiutare o sponsorizzare un audit, contattaci.
Reticulum può esistere solo grazie alla montagna di lavoro Open Source su cui è stato costruito, ai contributi di tutti i coinvolti e a tutti coloro che hanno supportato il progetto nel corso degli anni. A tutti coloro che hanno aiutato, grazie infinite.
Numerosi altri moduli e progetti fanno parte di Reticulum o vengono da esso utilizzati. Un sentito ringraziamento agli autori e ai contributori dei seguenti progetti: