
A pilha de rede baseada em criptografia para a construção de redes imparáveis com LoRa, Packet Radio, WiFi e tudo o que está entre eles.

Este repositório é um espelho público. Todo o desenvolvimento está acontecendo em outro lugar.
Para entender a filosofia fundamental e os objetivos deste sistema, leia o Zen do Reticulum.
Reticulum é a pilha de rede baseada em criptografia para construir redes locais e de longa distância com hardware disponível. Pode operar mesmo com latências muito altas e largura de banda extremamente baixa. O Reticulum permite construir redes de longa distância com ferramentas comuns, e oferece criptografia ponta-a-ponta e conectividade, anonimato do iniciador, transporte multi-salto com respaldo criptográfico autoconfigurável, endereçamento eficiente, confirmações de entrega infalsificáveis e muito mais.
A visão do Reticulum é permitir que qualquer pessoa seja seu próprio operador de rede, e tornar barato e fácil cobrir vastas áreas com uma miríade de redes independentes, interconectáveis e autônomas. Reticulum não é uma rede. É uma ferramenta para construir milhares de redes. Redes sem kill-switches, vigilância, censura e controle. Redes que podem interoperar livremente, associar-se e dissociar-se umas das outras, e que não exigem supervisão central. Redes para seres humanos. Redes para as pessoas.
Reticulum é uma pilha de rede completa, e não depende de IP ou camadas superiores, mas é possível usar IP como portador subjacente para o Reticulum. Portanto, é trivial encapsular o Reticulum pela Internet ou redes IP privadas.
Não ter dependências de pilhas de rede tradicionais libera uma sobrecarga que foi usada para implementar uma pilha de rede construída diretamente sobre princípios criptográficos, permitindo resiliência e funcionalidade estável, mesmo em redes abertas e sem confiança.
Nenhum módulo de kernel ou drivers são necessários. O Reticulum é executado completamente no espaço do usuário, e pode ser executado em praticamente qualquer sistema que execute Python 3.
A documentação completa do Reticulum está disponível em markqvist.github.io/Reticulum/manual/.
Você também pode baixar o manual do Reticulum em PDF ou como e-book em formato EPUB.
Para mais informações, veja reticulum.network e a seção FAQ do wiki.
O código Python neste repositório é a Implementação de Referência do Reticulum.
O Protocolo Reticulum é definido inteiramente e autoritativamente por esta implementação
de referência e seu manual associado. É mantido por Mark Qvist,
identificado pela Identidade Reticulum <bc7291552be7a58f361522990465165c>.
Atualmente não existem, nem jamais existirão, derivados de especificações de protocolo de segunda ordem. Você não pode obter uma especificação melhor do que uma que seja executável, funcional, testável, implantada e operando 24/7 em todo o planeta.
Não há, e nunca haverá, uma "especificação formal" separada, "RFC" ou algo similar para o Reticulum:
A implementação de referência é a especificação final e autoritativa.
Compatibilidade com o Protocolo Reticulum é definida como ter interoperabilidade total, e paridade funcional suficiente com esta implementação de referência. Qualquer implementação de protocolo específica que atinja isso é Reticulum. Qualquer que não o faça não é Reticulum.
A implementação de referência está licenciada sob a Licença Reticulum.
O Protocolo Reticulum foi dedicado ao Domínio Público em 2016.
Se você quiser rapidamente ter uma ideia do que o Reticulum pode fazer, veja a seção Programas Usando Reticulum do manual, ou os seguintes recursos:
rnphone, que pode ser usado para construir telefones de hardware.Sobre praticamente qualquer meio que possa suportar pelo menos um canal half-duplex com rendimento maior que 5 bits por segundo, e um MTU de 500 bytes. Rádios de dados, modems, rádios LoRa, linhas seriais, TNCs AX.25, modos digitais de rádio amador, dispositivos WiFi e Ethernet, links ópticos de espaço livre e sistemas similares são todos exemplos dos tipos de dispositivos físicos que o Reticulum pode usar.
Uma interface de código aberto baseada em LoRa chamada RNode foi projetada especificamente para uso com o Reticulum. É possível construí-la você mesmo, ou pode ser adquirida como um transceptor completo que só precisa de uma conexão USB ao host.
Reticulum também pode ser encapsulado sobre redes IP existentes, então não há nada que o impeça de usá-lo sobre Ethernet cabeada, sua rede WiFi local ou a Internet, onde funcionará igualmente bem. Na verdade, um dos pontos fortes do Reticulum é como ele permite facilmente conectar diferentes meios em uma malha autoconfigurável, resiliente e criptografada, usando qualquer mistura disponível de infraestrutura.
Como exemplo, é possível configurar um Raspberry Pi conectado a um rádio LoRa, um TNC de rádio pacote e uma rede WiFi. Uma vez configuradas as interfaces, o Reticulum cuidará do resto, e qualquer dispositivo na rede WiFi pode se comunicar com nós nos lados LoRa e rádio pacote da rede, e vice-versa.
A melhor maneira de começar com a Pilha de Rede Reticulum depende do que você deseja fazer. Para detalhes completos e exemplos, veja a seção Começando Rapidamente do Manual do Reticulum.
Para simplesmente instalar o Reticulum e utilitários relacionados em seu sistema, a maneira mais fácil é via pip.
Você pode então iniciar qualquer programa que use Reticulum, ou iniciar o Reticulum como um serviço de sistema com
o utilitário rnsd.```bash
pip install rns
Se você estiver usando um sistema operacional que bloqueia a instalação normal de pacotes pelo usuário via `pip`,
você pode restaurar o comportamento normal do `pip` editando o arquivo `~/.config/pip/pip.conf`,
e adicionando a seguinte diretiva na seção `[global]`:```text
[global]
break-system-packages = true
Alternativamente, você pode usar a ferramenta pipx para instalar o Reticulum em um ambiente isolado:```bash
pipx install rns
Quando iniciado pela primeira vez, o Reticulum criará um arquivo de configuração padrão,
fornecendo conectividade básica a outros pares Reticulum que possam estar localmente
acessíveis. O arquivo de configuração padrão contém alguns exemplos e referências para
criar uma configuração mais complexa.
Se você tiver uma versão antiga do `pip` em seu sistema, pode ser necessário atualizá-la primeiro com `pip install pip --upgrade`. Se você ainda não tiver o `pip` instalado, pode instalá-lo usando o gerenciador de pacotes do seu sistema com `sudo apt install python3-pip` ou similar.
Para exemplos mais detalhados sobre como expandir a comunicação por muitos meios, como
rádio pacote ou LoRa, portas seriais, ou através de links IP rápidos e a Internet usando
as interfaces UDP e TCP, dê uma olhada na seção [Interfaces Suportadas](https://markqvist.github.io/Reticulum/manual/interfaces.html)
do [Manual do Reticulum](https://markqvist.github.io/Reticulum/manual/).
## Utilitários Inclusos
O Reticulum inclui uma variedade de utilitários úteis para gerenciar suas redes,
visualizar status e informações, e outras tarefas. Você pode ler mais sobre esses
programas na seção [Programas Utilitários Inclusos](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs)
do [Manual do Reticulum](https://markqvist.github.io/Reticulum/manual/).
- O daemon do sistema `rnsd` para executar o Reticulum como um serviço sempre disponível
- Um utilitário de status de interface chamado `rnstatus`, que exibe informações sobre interfaces
- A ferramenta de consulta e gerenciamento de caminhos `rnpath` permitindo visualizar e modificar tabelas de caminhos
- Uma ferramenta de diagnóstico chamada `rnprobe` para verificar conectividade com destinos
- Um programa simples de transferência de arquivos chamado `rncp` facilitando a transferência de arquivos entre sistemas
- O utilitário de gerenciamento de identidade e criptografia `rnid` permite gerenciar Identidades e criptografar/descriptografar arquivos
- O programa `rnsh` permite estabelecer sessões de shell totalmente interativas com sistemas remotos
- O programa de execução remota de comandos `rnx` permite executar comandos simples e programas e recuperar a saída de sistemas remotos
- O programa `rngit` fornece um nó Git completo de múltiplos repositórios para servir repositórios através do Reticulum
- O auxiliar `git-remote-rns` incluído permite interagir com repositórios Git através do Reticulum
Todas as ferramentas, incluindo `rnx` e `rncp`, funcionam de forma confiável e bem mesmo em links de largura de banda muito baixa como LoRa ou Rádio Pacote. Para shells remotos completos através do Reticulum, dê uma olhada também no programa [rnsh](https://github.com/acehoss/rnsh).
## Tipos e dispositivos de interface suportados
O Reticulum implementa uma variedade de tipos de interface generalizados que cobrem a maioria do
hardware de comunicação sobre o qual o Reticulum pode funcionar. Se seu hardware não for
suportado, é [simples implementar um módulo de interface personalizado](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces).
Pull requests para interfaces personalizadas são aceitos com gratidão, desde que sejam
geralmente úteis e bem testados em uso real.
Atualmente, as seguintes interfaces integradas são suportadas:
- Qualquer dispositivo Ethernet
- LoRa usando [RNode](https://unsigned.io/rnode/)
- TNCs de Rádio Pacote (com ou sem AX.25)
- Modems de hardware e software compatíveis com KISS
- Qualquer dispositivo com porta serial
- TCP sobre redes IP
- UDP sobre redes IP
- Programas externos via stdio ou pipes
- Hardware personalizado via stdio ou pipes
## Desempenho
O Reticulum visa um envelope de desempenho utilizável *muito* amplo, mas prioriza
funcionalidade e desempenho em meios de baixa largura de banda. O objetivo é
fornecer um envelope de desempenho dinâmico de 250 bits por segundo a 1 gigabit
por segundo em hardware normal.
Atualmente, o envelope de desempenho utilizável é de aproximadamente 150 bits por segundo
a 500 megabits por segundo, com meios físicos mais rápidos que isso não sendo
saturados. Desempenho além do nível atual é pretendido para atualizações
futuras, mas não é altamente priorizado neste momento.
## Status Atual
Todos os recursos principais do protocolo estão implementados e funcionando, mas adições
provavelmente ocorrerão à medida que o uso no mundo real for explorado e compreendido. A API e o formato de fio
podem ser considerados estáveis.
## Dependências
A instalação do pacote padrão `rns` requer apenas duas dependências externas, listadas
abaixo. Quase todos os sistemas e distribuições possuem pacotes prontamente disponíveis para
essas dependências, e quando o pacote `rns` é instalado com `pip`, elas
serão baixadas e instaladas também.
- [PyCA/cryptography](https://github.com/pyca/cryptography)
- [pyserial](https://github.com/pyserial/pyserial)
Em sistemas mais incomuns, e em alguns casos raros, pode não ser possível
instalar ou mesmo compilar um ou mais dos módulos acima. Nessas situações,
você pode usar o pacote `rnspure` em vez disso, que não requer dependências
externas para instalação. Observe que o conteúdo dos pacotes `rns` e
`rnspure` são *idênticos*. A única diferença é que o pacote `rnspure`
não lista dependências necessárias para instalação.
Não importa como o Reticulum seja instalado e iniciado, ele carregará dependências
externas apenas se elas forem *necessárias* e *disponíveis*. Se por exemplo você quiser
usar o Reticulum em um sistema que não suporta
[pyserial](https://github.com/pyserial/pyserial), é perfeitamente possível
fazê-lo usando o pacote `rnspure`, mas o Reticulum não será capaz de usar
interfaces seriais. Todos os outros módulos disponíveis ainda serão carregados quando
necessário.
**Por favor, note!** Se você usar o pacote `rnspure` para executar o Reticulum em sistemas
que não suportam [PyCA/cryptography](https://github.com/pyca/cryptography),
é importante que você leia e entenda a seção [Primitivas
Criptográficas](#cryptographic-primitives) deste documento.
## Inicialização da Conectividade
O Reticulum não é um serviço ao qual você se inscreve, nem é uma única rede global da qual você "participa".
O Reticulum fornece funcionalidade para descobrir interfaces públicas disponíveis
através da própria rede, e a comunidade mais ampla forneceu vários diretórios
de pontos de entrada publicamente disponíveis para inicializar a conectividade.
Para aprender como estabelecer conectividade inicial através do Reticulum, leia a seção [Inicialização da Conectividade](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) do manual.
Se você já tem uma ideia geral de como isso funciona, pode usar sites administrados pela comunidade
como [directory.rns.recipes](https://directory.rns.recipes/) e [rmap.world](https://rmap.world)
para encontrar definições de interface para conectividade inicial com o backbone distribuído global do Reticulum.
## Testnet Pública
***Importante!** Historicamente, uma testnet voltada para desenvolvedores foi disponibilizada pelo próprio projeto Reticulum. Como a quantidade de nós e pontos de entrada globais do Reticulum cresceu para uma quantidade substancial, esta testnet pública, incluindo o ponto de entrada da Testnet de Amsterdã, foi descomissionada. Se você ainda tem instâncias que dependiam deste ponto de entrada para conectividade, faça a transição para usar o backbone distribuído em vez disso. O Reticulum agora inclui um sistema completo de descoberta de interface na rede e inicialização de conectividade. Leia a seção [Inicialização da Conectividade](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) do manual para orientações.*
## Apoie o Reticulum
Para que isso seja possível, preciso da sua ajuda. Por favor, apoie o desenvolvimento contínuo de sistemas de comunicação abertos, livres e privados doando através de um dos seguintes canais:
- Monero: ```
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
Bitcoin ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6
Ethereum ``` 0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E
Liberapay: https://liberapay.com/Reticulum/
Ko-Fi: https://ko-fi.com/markqvist
O Reticulum usa um conjunto simples de primitivas criptográficas eficientes, fortes e bem testadas, com implementações amplamente disponíveis que podem ser usadas tanto em CPUs de uso geral quanto em microcontroladores.
Uma das principais considerações para escolher este conjunto específico de primitivas é que elas podem ser implementadas com segurança com relativamente poucas armadilhas, em praticamente todas as plataformas de computação atuais.
As primitivas listadas aqui são autoritativas. Qualquer coisa que se diga ser Reticulum, mas que não use exatamente estas primitivas não é Reticulum, e possivelmente um clone intencionalmente comprometido ou enfraquecido. As primitivas utilizadas são:
os.urandom() ou melhorNa configuração de instalação padrão, as primitivas X25519, Ed25519,
e AES-256-CBC são fornecidas pelo OpenSSL
(através do pacote PyCA/cryptography).
As funções de hash SHA-256 e SHA-512 são fornecidas pelo padrão
Python hashlib. As primitivas
HKDF, HMAC, Token, e a função de preenchimento PKCS7 são sempre
fornecidas pelas seguintes implementações internas:
O Reticulum também inclui uma implementação completa de todas as primitivas necessárias em Python puro. Se o OpenSSL e PyCA não estiverem disponíveis no sistema quando o Reticulum for iniciado, o Reticulum usará as primitivas internas em Python puro. Uma consequência trivial disso é o desempenho, com o backend OpenSSL sendo muito mais rápido. A consequência mais importante, no entanto, é a potencial perda de segurança ao usar primitivas que não passaram pelo mesmo nível de escrutínio, teste e revisão que as do OpenSSL.
Por favor, note que, por padrão, a instalação do Reticulum exigirá que o OpenSSL e
PyCA também sejam automaticamente instalados se ainda não estiverem disponíveis. Só é
possível usar as primitivas em Python puro se este requisito for especificamente
ignorado pelo usuário, por exemplo, instalando o pacote rnspure em vez
do pacote normal rns, ou executando diretamente a partir do código-fonte local.
Se você quiser usar as primitivas internas em Python puro, é altamente recomendável que você tenha uma boa compreensão dos riscos que isso acarreta, e tome uma decisão informada sobre se esses riscos são aceitáveis para você.
O Reticulum é um software relativamente novo, e deve ser considerado como tal. Embora tenha sido construído tendo as melhores práticas de criptografia em primeiro plano, ele não passou por uma auditoria de segurança externa, e pode muito bem haver bugs de privacidade ou segurança. Se você quiser ajudar, ou ajudar a patrocinar uma auditoria, por favor, entre em contato.
O Reticulum só pode existir por causa da montanha de trabalho Open Source sobre a qual foi construído, das contribuições de todos os envolvidos, e de todos que apoiaram o projeto ao longo dos anos. A todos que ajudaram, muito obrigado.
Vários outros módulos e projetos fazem parte ou são usados pelo Reticulum. Agradecimentos sinceros aos autores e colaboradores dos seguintes projetos: