
Lo stack di rete basato su crittografia per costruire reti inarrestabili con LoRa, Packet Radio, WiFi e tutto il resto.
Reticulum Network Stack <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] > Un numero significativo di imitazioni di implementazioni Reticulum, "documentazione", "guide" e applicazioni rivolte all'utente, lanciate frettolosamente, errate, dubbie, direttamente dannose e, nella maggior parte dei casi, interamente generate da LLM, viene attualmente commercializzato con affermazioni curate ma in ultima analisi fuorvianti o apertamente ingannevoli. > > Per informazioni più dettagliate, consultare le sezioni pertinenti del capitolo [Brandolini's Reference](https://reticulum.network/manual/brandolinis.html) del manuale. Le implementazioni comunitarie note come valide sono elencate nella sezione [Community Implementations](#community-implementations) di questo readme. Per software e progetti riconosciuti dalla comunità Reticulum, consultare il capitolo [Programs Using Reticulum](https://reticulum.network/manual/software.html) del manuale. > > I contenuti generati automaticamente derivati dal codice sorgente o dalla documentazione di RNS (come "implementazioni", "guide" in vendita, eccetera), in diversi casi ben documentati violano le licenze open source che hanno concesso i diritti di copia e distribuzione. > > Qualsiasi presunta affermazione di copyright o concessione di licenza (Apache, GPL, eccetera) che tali progetti avanzano sono [concessioni nulle](https://reticulum.network/manual/brandolinis.html#void-grants-legal-foundations-of-machine-generated-code). Sia i trasgressori stessi, sia tutti i progetti a valle che utilizzano i derivati illeciti, sono **direttamente** e personalmente responsabili delle conseguenze legali. > > **Non** usare questi "progetti", sono un pericolo per l'intero ecosistema che abbiamo costruito con cura negli ultimi dieci anni. <p align="center"><img width="200" src="https://assets.kitploit.com/production/public/readmes/10927/035f499a1619cfb6d2da2ca99539e9e9d122bb18addf2ab83d3413592e7662f9.png"></p> *Questo repository è [uno specchio pubblico](https://github.com/markqvist/reticulum/blob/master/MIRROR.md). Tutto lo sviluppo avviene altrove.* Per comprendere la filosofia fondante e gli obiettivi di questo sistema, leggi lo [Zen of Reticulum](https://github.com/markqvist/reticulum/blob/master/Zen%20of%20Reticulum.md). Reticulum è lo stack di rete basato sulla crittografia per costruire reti locali e geografiche con hardware facilmente disponibile. Può funzionare anche con latenza molto elevata e larghezza di banda estremamente ridotta. Reticulum consente di costruire reti geografiche con strumenti disponibili sul mercato, e offre crittografia end-to-end e connettività, anonimato dell'iniziatore, trasporto multi-hop autoconfigurante supportato crittograficamente, indirizzamento efficiente, conferme di consegna non falsificabili e altro ancora. La visione di Reticulum è consentire 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 kill-switch, sorveglianza, censura e controllo. Reti che possono interoperare, associarsi e dissociarsi liberamente tra loro, e che non richiedono alcuna supervisione centrale. Reti per esseri umani. *Reti per il popolo*. Reticulum è uno stack di rete completo, e non si basa su IP o livelli superiori, ma è possibile usare IP come vettore sottostante per Reticulum. È quindi banale incapsulare Reticulum su Internet o su reti IP private. Non avere dipendenze da stack di rete tradizionali libera il sovraccarico 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 userland, e può girare praticamente su qualsiasi sistema che esegua Python 3. ## Leggi il Manuale La documentazione completa per Reticulum è disponibile su [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/). Puoi anche scaricare il [manuale di Reticulum in PDF](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.pdf) o [come e-book in formato EPUB](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.epub). Per maggiori informazioni, vedi [reticulum.network](https://reticulum.network/) e [la sezione FAQ del wiki](https://github.com/markqvist/Reticulum/wiki/Frequently-Asked-Questions). ## Caratteristiche notevoli - Indirizzamento e identificazione globalmente unici senza coordinamento - Routing multi-hop completamente autoconfigurante su vettori eterogenei - Scalabilità flessibile su topologie eterogenee - Reticulum può trasportare dati su qualsiasi combinazione di mezzi fisici e topologie - Reti a bassa larghezza di banda possono coesistere e interoperare con reti grandi e ad alta larghezza di banda - Anonimato dell'iniziatore, comunica senza rivelare la tua identità - Reticulum non include indirizzi di origine su alcun pacchetto - Crittografia asimmetrica X25519 e firme Ed25519 come base per tutta la comunicazione - Le chiavi di identità fondamentali di Reticulum sono set di chiavi a curva ellittica da 512 bit - La Forward Secrecy è disponibile per tutti i tipi di comunicazione, sia per pacchetti singoli che su link - Reticulum usa il seguente formato per i token cifrati: - Chiavi effimere per pacchetto e per link derivate da uno scambio di chiavi ECDH su Curve25519 - AES-256 in modalità CBC con padding PKCS7 - HMAC con SHA256 per l'autenticazione - Gli IV sono generati tramite os.urandom() - Conferme di consegna dei pacchetti non falsificabili - Sistema di interfacce flessibile ed estensibile - Reticulum include una grande varietà di tipi di interfaccia integrati - Capacità di caricare e utilizzare tipi di interfaccia personalizzati forniti dall'utente o dalla comunità - Crea facilmente le tue interfacce personalizzate per comunicare su qualsiasi cosa - Autenticazione e segmentazione di rete virtuale su tutti i tipi di interfaccia supportati - Un'API intuitiva e facile da usare - Più semplice e facile da usare rispetto alle API socket, ma più potente - Rende molto più semplice costruire applicazioni distribuite e decentralizzate - Trasferimento affidabile ed efficiente di quantità arbitrarie di dati - Reticulum può gestire pochi byte di dati o file di molti gigabyte - Sequenziamento, compressione, coordinamento del trasferimento e checksum sono automatici - L'API è molto facile da usare, e fornisce il progresso del trasferimento - Meccanismo Request/Response leggero, flessibile ed espandibile - Stabilimento efficiente dei link - Il costo totale per stabilire un link cifrato e verificato è di soli 3 pacchetti, per un totale di 297 byte - Basso costo per mantenere i link aperti, pari a soli 0,44 bit al secondo - Consegna sequenziale affidabile con meccanismi Channel e Buffer ## Risorse della comunità I riferimenti elencati qui non sono gestiti, amministrati o moderati dal progetto Reticulum o dal suo manutentore. Sono forniti da volontari indipendenti e dedicati della comunità, a beneficio di chiunque sia interessato a saperne di più su Reticulum. - [Reticulum Community Wiki](https://reticulum.miraheze.org/wiki) - [RNS Recipes](https://rns.recipes/) - [RNS Moscow](https://rns.moscow/) - [RMAP.world](https://rmap.world/) Se trovi qualcosa che non è più accurato, errato o semplicemente non del tutto aggiornato, non pretendere né lamentarti con i manutentori di queste risorse. Prenditi invece l'incarico di aiutare e migliorare le cose lavorando e offrendo i contributi che vorresti vedere, come hanno fatto gli stessi creatori di quanto sopra. ## Implementazione di riferimento Il codice Python in questo repository è l'Implementazione di Riferimento di Reticulum. Il Protocollo Reticulum è definito interamente e in modo autorevole da questa implementazione di riferimento, e dal suo manuale associato. È mantenuto da Mark Qvist, identificato dall'Identità Reticulum `<bc7291552be7a58f361522990465165c>`. Nessun derivato di specifica di protocollo di secondo ordine esiste attualmente, né esisterà mai. Non puoi ottenere una specifica migliore di una che è eseguibile, funzionante, testabile, distribuita e operativa 24/7 in tutto il pianeta. Non esiste, e non esisterà mai, una "specifica formale", un "RFC" o qualsiasi cosa di simile separata e derivata per Reticulum: **L'implementazione di riferimento *è* la specifica finale e autorevole.** La compatibilità con il Protocollo Reticulum è definita come piena interoperabilità, e sufficiente parità funzionale con questa implementazione di riferimento. Qualsiasi specifica implementazione del protocollo che raggiunga questo è Reticulum. Qualsiasi che non lo faccia non è Reticulum. L'implementazione di riferimento è rilasciata sotto la Reticulum License. Il Protocollo Reticulum è stato dedicato al Pubblico Dominio nel 2016. ## Implementazioni della comunità Le implementazioni elencate qui hanno dimostrato compatibilità a livello di rete, sufficiente parità di funzionalità, pratiche di sicurezza e sviluppo ragionevoli, impegno a lungo termine e cura per la qualità dell'implementazione. Inoltre, hanno un track record di almeno 18 mesi di sviluppo attivo. Soprattutto, i loro sviluppatori e manutentori sono riconosciuti dalla comunità come persone che sanno effettivamente cosa stanno facendo, e come aventi un impegno a migliorare l'ecosistema Reticulum nel suo complesso. - [microReticulum](https://github.com/attermann/microReticulum/) di [Chad Atterman](https://github.com/attermann) è un'implementazione in C++ rivolta a micro-controllori a 32 bit. - [Reticulum-Go](https://reticulum-go.quad4.io/) di [Quad4](https://quad4.io/) è un'implementazione in Go rivolta sia a desktop, che a mobile e sistemi embedded. *Se sei il manutentore di un'implementazione non elencata sopra, e ritieni che meriti l'inclusione seguendo gli stessi standard di rigore e impegno, la tua proposta sarà ben accolta.* --- **Attenzione!** Un numero significativo di imitazioni di implementazioni Reticulum (e applicazioni rivolte all'utente), lanciate frettolosamente, errate, dubbie, direttamente dannose e, nella maggior parte dei casi, interamente generate da LLM, viene attualmente commercializzato e promosso con affermazioni curate ma in ultima analisi fuorvianti o apertamente ingannevoli. La maggior parte di queste sono o tentativi rapidi di attirare attenzione o denaro, completamente non revisionate, incompatibili, senza manutenzione o supervisione umana, che cercano attivamente di frammentare la comunità, o una combinazione di quanto sopra. --- Per informazioni più estese su questo argomento, leggi il capitolo [Brandolini's Reference](https://reticulum.network/manual/brandolinis.html) del manuale (per i fondamenti legali, vedi specificamente [Void Grants](https://reticulum.network/manual/brandolinis.html#void-grants-legal-foundations-of-machine-generated-code)). Il capitolo è molto lungo, molto dettagliato, ed è l'analisi educata e misurata, intesa come riferimento in evoluzione e suddiviso in sezioni su questi problemi. Se preferisci invece solo la versione breve, senza filtri e piuttosto arrabbiata, che consiste in una risposta messa in atto a una particolare manifestazione del fenomeno nel suo complesso, usata come esempio, puoi leggere [Yes, I am Angry](https://github.com/markqvist/reticulum/blob/master/docs/history/2026_09_18_Yes_I_am_Angry.md). Trasmette lo stesso concetto, con un linguaggio molto diverso, se riesci a sopportare quel tipo di comunicazione. I manutentori e sviluppatori principali di Reticulum **sconsigliano fermamente l'uso di qualsiasi simile "implementazione"**. Il [comportamento ingannevole e opportunistico](https://reticulum.network/manual/brandolinis.html#a-persistent-but-fragile-triad) di un piccolo numero di individui male intenzionati, in cerca di attenzione o incompetenti ha causato significativi [danni e sprechi di tempo e risorse](https://reticulum.network/manual/brandolinis.html#intent-consequence) sia per gli sviluppatori, che per gli operatori dei nodi, gli utenti e la comunità e il progetto Reticulum nel suo complesso. Chiediamo gentilmente, ma con urgenza, a tutti gli utenti di esercitare cautela, buon senso e sano scetticismo nel [valutare](https://reticulum.network/manual/brandolinis.html#evaluating-a-reticulum-implementation) il potenziale utilizzo di qualsiasi implementazione non elencata sopra; e di accettare che **scegliere di farlo comunque trasferisce la responsabilità per potenziali danni da un individuo irresponsabile o malevolo su te stesso**. ## Esempi di applicazioni Reticulum Se vuoi farti rapidamente un'idea di cosa può fare Reticulum, dai un'occhiata alla sezione [Programs Using Reticulum](https://reticulum.network/manual/software.html) del manuale, o alle seguenti risorse: - [LXMF](https://github.com/markqvist/lxmf) è un protocollo di trasferimento messaggi distribuito, tollerante a ritardi e interruzioni, costruito su Reticulum - Il protocollo e framework [LXST](https://github.com/markqvist/lxst) fornisce trasporto audio e segnali in tempo reale su Reticulum. Include primitive e utilità per costruire applicazioni basate sulla voce e dispositivi hardware, come il programma `rnphone`, che può essere usato per costruire telefoni hardware. - Per una piattaforma di comunicazione mesh off-grid, cifrata e resiliente, vedi [Nomad Network](https://github.com/markqvist/NomadNet) - L'app per Android, Linux, macOS e Windows [Sideband](https://github.com/markqvist/Sideband) ha un'interfaccia grafica e molte funzionalità avanzate, come trasferimenti di file, messaggi con immagini e voce, chiamate vocali in tempo reale, un sistema di telemetria distribuito, capacità di mappatura e piena estensibilità tramite plugin. - [MeshChatX](https://git.quad4.io/RNS-Things/MeshChatX) è un client LXMF completo con molti strumenti e funzionalità integrate, che supporta anche messaggi con immagini e voce, trasferimenti di file e chiamate vocali. Include anche un browser di pagine integrato per navigare i nodi Nomad Network. - Puoi usare il programma incluso [rnsh](https://reticulum.network/manual/using.html#the-rnsh-utility) per stabilire sessioni di shell remota su Reticulum. - Il sistema incluso [rngit](https://reticulum.network/manual/git.html) fornisce una soluzione completa per gestire, ospitare, collaborare e interagire con repository Git su Reticulum. ## Dove può essere usato Reticulum? Su praticamente qualsiasi mezzo che possa supportare almeno un canale half-duplex con una velocità effettiva superiore a 5 bit al secondo, e un MTU di 500 byte. Radio dati, modem, radio LoRa, linee seriali, TNC AX.25, modalità 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ò usare. Un'interfaccia open source basata su LoRa chiamata [RNode](https://markqvist.github.io/Reticulum/manual/hardware.html#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, WiFi o Bluetooth all'host. Reticulum può anche essere incapsulato su reti IP esistenti, quindi nulla ti impedisce di usarlo su Ethernet cablato, sulla tua rete WiFi locale o su Internet, dove funzionerà altrettanto bene. In effetti, uno dei punti di forza di Reticulum è la facilità con cui consente di collegare mezzi diversi in una mesh autoconfigurante, resiliente e cifrata, usando qualsiasi combinazione disponibile di infrastruttura disponibile. Ad esempio, è possibile configurare un Raspberry Pi collegato sia a una radio LoRa, che a un TNC radio a pacchetto 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 radio a pacchetto della rete, e viceversa. ## Come posso iniziare? Il modo migliore per iniziare con il Reticulum Network Stack dipende da cosa vuoi fare. Per dettagli completi ed esempi, dai un'occhiata alla sezione [Getting Started Fast](https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html) del [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/). Per installare semplicemente Reticulum e le utilità correlate sul tuo sistema, il modo più semplice è tramite `pip`. Puoi quindi avviare qualsiasi programma che usi Reticulum, oppure avviare Reticulum come servizio di sistema con [l'utilità rnsd](https://markqvist.github.io/Reticulum/manual/using.html#the-rnsd-utility).```bash pip install rns ``` Se stai utilizzando un sistema operativo che blocca la normale installazione dei 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 ``` All'avvio, Reticulum creerà un file di configurazione predefinito, fornendo la 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 sul tuo sistema è presente una versione obsoleta di `pip`, potresti doverla aggiornare prima con `pip install pip --upgrade`. Se non hai già `pip` installato, puoi installarlo usando il gestore di pacchetti del tuo sistema con `sudo apt install python3-pip` o simile. Per esempi più dettagliati su come estendere la comunicazione su molti mezzi come packet radio o LoRa, porte seriali, o su collegamenti IP veloci e Internet usando le interfacce UDP e TCP, dai un'occhiata alla sezione [Supported Interfaces](https://markqvist.github.io/Reticulum/manual/interfaces.html) del [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/). ## Utility incluse Reticulum include una serie di utility utili per gestire le tue reti, visualizzare stato e informazioni, e altre attività. Puoi leggere di più su questi programmi nella sezione [Included Utility Programs](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) del [Reticulum Manual](https://markqvist.github.io/Reticulum/manual/). - Il daemon di sistema `rnsd` per eseguire Reticulum come servizio sempre disponibile - Un'utility 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'utility di gestione delle identità e crittografia `rnid` ti permette di gestire le Identità e cifrare/decifrare file - Il programma `rnsh` ti permette di stabilire una sessione shell completamente interattiva con sistemi remoti - Il programma di esecuzione remota di comandi `rnx` ti permette di eseguire semplici comandi e programmi e recuperare l'output da sistemi remoti - Il programma `rngit` fornisce un nodo Git multi-repository completo per servire repository su Reticulum - L'helper incluso `git-remote-rns` ti permette di interagire con repository Git su Reticulum Tutti gli strumenti, inclusi `rnx` e `rncp`, funzionano in modo affidabile e corretto anche su collegamenti a banda molto bassa come LoRa o Packet Radio. Per shell remote complete su Reticulum, dai un'occhiata anche al programma [rnsh](https://github.com/acehoss/rnsh). ## Tipi di interfaccia e dispositivi supportati Reticulum implementa una serie di tipi di interfaccia generalizzati che coprono 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). I contributi di interfacce personalizzate sono accolti con gratitudine, a condizione che siano generalmente utili e ben testati in uso reale. Attualmente, sono supportate le seguenti interfacce integrate: - Qualsiasi dispositivo Ethernet - LoRa usando [RNode](https://unsigned.io/rnode/) - TNC Packet Radio (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 via stdio o pipe - Hardware personalizzato via stdio o pipe ## Prestazioni *Tutti i valori di prestazioni qui riportati presuppongono `rnsd` in esecuzione in modalità Python completamente interpretata, limitato a un singolo core CPU.* Reticulum punta a un envelope di prestazioni utilizzabili *molto* ampio, ma dà priorità a funzionalità e prestazioni su mezzi a banda bassa. L'obiettivo è fornire un envelope di prestazioni dinamico da 100 bit al secondo a 10 gigabit al secondo su hardware normale. Attualmente, l'envelope di prestazioni utilizzabili sulla rete è di circa 150 bit al secondo fino a 1 gigabit al secondo su hardware modesto. Le prestazioni nel mondo reale varieranno ampiamente con la velocità del tuo sistema, la disponibilità di accelerazione crittografica hardware e altri fattori. Il throughput di routing grezzo per un nodo di trasporto ospitato su un Raspberry Pi 5 è di circa 5 gigabit al secondo. I sistemi con moderna accelerazione crittografica hardware possono raggiungere un throughput di trasporto di 15 gigabit al secondo e oltre. Sebbene l'implementazione di riferimento sia perfettamente in grado di raggiungere 100+ Gbps, utilizzando più core CPU e trasporto vettorizzato, prestazioni oltre il livello attuale non sono una priorità elevata, poiché RNS è già in grado di saturare la larghezza di banda del mezzo fisico disponibile in quasi tutte le situazioni del mondo reale. Gli obiettivi primari per RNS sono *affidabilità*, *correttezza*, *sicurezza*, *corretta gestione del traffico* e *prestazioni effettivamente pratiche*, non vuoti "benchmark" sulla carta con scarsa o nessuna rilevanza sull'usabilità nel mondo reale. Tutti i manutentori di implementazioni alternative sono *caldamente* incoraggiati ad adottare un approccio simile, e specialmente a concentrarsi sul far funzionare correttamente e in modo affidabile le proprie implementazioni prima di pubblicare affermazioni sulle prestazioni empiricamente dubbie o fattualmente errate. ## Stato attuale Tutte le funzionalità principali del protocollo sono implementate e funzionanti, ma probabilmente si aggiungeranno altre man mano che l'uso nel mondo reale viene 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 usare invece il pacchetto `rnspure`, che non richiede dipendenze esterne per l'installazione. Tieni presente che i contenuti dei pacchetti `rns` e `rnspure` sono *identici*. L'unica differenza è che il pacchetto `rnspure` non elenca alcuna dipendenza richiesta per l'installazione. Indipendentemente da 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 può supportare [pyserial](https://github.com/pyserial/pyserial), è perfettamente possibile farlo usando il pacchetto `rnspure`, ma Reticulum non sarà in grado di usare interfacce basate su seriale. Tutti gli altri moduli disponibili verranno comunque caricati quando necessario. **Nota bene!** 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 [Cryptographic Primitives](#cryptographic-primitives) di questo documento. ## Avvio della connettività Reticulum non è un servizio a cui ci si abbona, né è una singola rete globale a cui "unirsi". Reticulum fornisce funzionalità per scoprire le interfacce pubbliche disponibili sulla rete stessa, e la comunità più ampia ha fornito varie directory di entrypoint pubblicamente disponibili per avviare la connettività. Per imparare come stabilire la connettività iniziale su Reticulum, leggi la sezione [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manuale. Se hai già un'idea generale di come funziona, puoi usare 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 Reticulum distribuito globale. ## Testnet pubblico ***Importante!** Storicamente, un testnet rivolto agli sviluppatori è stato reso disponibile dal progetto Reticulum stesso. Poiché la quantità di nodi ed entrypoint Reticulum globali è cresciuta fino a una quantità sostanziale, questo testnet pubblico, incluso l'entrypoint Amsterdam Testnet, è ora stato dismesso. Se hai ancora istanze che si affidavano a questo entrypoint per la connettività, passa all'uso del backbone distribuito. Reticulum ora include un sistema completo di scoperta delle interfacce sulla rete e avvio della connettività. Leggi la sezione [Bootstrapping Connectivity](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manuale per indicazioni.* ## Supporta Reticulum Perché questo sia possibile, ho bisogno del tuo aiuto. Sostieni lo sviluppo continuo di sistemi di comunicazione aperti, liberi e privati donando tramite uno dei seguenti canali: - Monero: ``` 84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w ``` - Bitcoin ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6 ``` - Ethereum ``` 0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E ``` - Liberapay: https://liberapay.com/Reticulum/ - Ko-Fi: https://ko-fi.com/markqvist ## Primitive crittografiche Reticulum utilizza una suite semplice di primitive crittografiche efficienti, robuste e ben collaudate, con implementazioni ampiamente disponibili che possono essere utilizzate sia su CPU general-purpose che su microcontrollori. Una delle considerazioni principali nella scelta di questo particolare insieme di primitive è che possono essere implementate *in modo sicuro* con relativamente poche insidie, su praticamente tutte le attuali piattaforme di calcolo. Le primitive elencate qui **sono autorevoli**. Qualsiasi cosa che pretenda di essere Reticulum, ma che non utilizzi queste esatte primitive **non è** Reticulum, e possibilmente un clone intenzionalmente compromesso o indebolito. Le primitive utilizzate sono: - Le chiavi di identità di Reticulum sono keyset Curve25519 a 512 bit - Una chiave Ed25519 a 256 bit per le firme - Una chiave X22519 a 256 bit per gli scambi di chiavi ECDH - HKDF per la derivazione delle chiavi - I token cifrati si basano sulla [specifica Fernet](https://github.com/fernet/spec/) - Chiavi effimere derivate da uno scambio di chiavi ECDH su Curve25519 - HMAC con SHA256 per l'autenticazione dei messaggi - Gli IV devono essere generati tramite `os.urandom()` o superiore - AES-256 in modalità CBC con padding PKCS7 - Nessun campo di metadati di versione e timestamp Fernet - SHA-256 - SHA-512 Nella configurazione di installazione predefinita, le primitive `X25519`, `Ed25519` e `AES-256-CBC` sono fornite da [OpenSSL](https://www.openssl.org/) (tramite il pacchetto [PyCA/cryptography](https://github.com/pyca/cryptography)). Le funzioni di hashing `SHA-256` e `SHA-512` sono fornite dal modulo standard Python [hashlib](https://docs.python.org/3/library/hashlib.html). Le primitive `HKDF`, `HMAC`, `Token` e la funzione di padding `PKCS7` sono sempre fornite dalle seguenti implementazioni interne: - [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 include anche un'implementazione completa di tutte le primitive necessarie in puro Python. Se OpenSSL e PyCA non sono disponibili sul sistema all'avvio di Reticulum, Reticulum utilizzerà invece le primitive interne in puro Python. Una conseguenza banale di ciò è la prestazione, con il backend OpenSSL che è *molto* più veloce. La conseguenza più importante tuttavia è la potenziale perdita di sicurezza derivante dall'utilizzo di primitive che non hanno ricevuto lo stesso livello di scrutinio, test e revisione di quelle di OpenSSL. Si prega di notare che per impostazione predefinita, l'installazione di Reticulum **richiederà** che OpenSSL e PyCA siano installati automaticamente se non già disponibili. È possibile utilizzare le primitive in puro Python solo se questo requisito viene specificamente sovrascritto dall'utente, ad esempio installando il pacchetto `rnspure` invece del normale pacchetto `rns`, o eseguendo direttamente dal codice sorgente locale. Se si desidera utilizzare le primitive interne in puro Python, è **altamente consigliabile** avere una buona comprensione dei rischi che ciò comporta e prendere una decisione informata sull'accettabilità di tali rischi. Essendo in sviluppo da dieci anni e in distribuzione più ampia da circa cinque anni, Reticulum è un software relativamente giovane e dovrebbe essere considerato come tale. Sebbene sia stato costruito con cura tenendo in massima considerazione le migliori pratiche crittografiche, potrebbero benissimo esserci ancora bug che compromettono la privacy o la sicurezza. ## Riconoscimenti e crediti Reticulum può esistere solo grazie alla montagna di lavoro Open Source su cui è stato costruito, ai contributi di tutti coloro che sono stati coinvolti e a tutti coloro che hanno sostenuto il progetto nel corso degli anni. A tutti coloro che hanno aiutato, grazie mille. Numerosi altri moduli e progetti fanno parte di Reticulum o sono utilizzati da esso. Sinceri ringraziamenti agli autori e ai contributori dei seguenti progetti: - [PyCA/cryptography](https://github.com/pyca/cryptography), *BSD License* - [Pure-25519](https://github.com/warner/python-pure25519) di [Brian Warner](https://github.com/warner), *MIT License* - [Pysha2](https://github.com/thomdixon/pysha2) di [Thom Dixon](https://github.com/thomdixon), *MIT License* - [Python AES-128](https://github.com/orgurar/python-aes) di [Or Gur Arie](https://github.com/orgurar), *MIT License* - [Python AES-256](https://github.com/boppreh/aes) di [BoppreH](https://github.com/boppreh), *MIT License* - [Curve25519.py](https://gist.github.com/nickovs/cc3c22d15f239a2640c185035c06f8a3#file-curve25519-py) di [Nicko van Someren](https://gist.github.com/nickovs), *Public Domain* - [I2Plib](https://github.com/l-n-s/i2plib) di [Viktor Villainov](https://github.com/l-n-s) - [PySerial](https://github.com/pyserial/pyserial) di Chris Liechti, *BSD License* --- [Read more](https://github.com/markqvist/reticulum)