
La pila de red basada en criptografía para construir redes imparables con LoRa, Radio de Paquetes, WiFi y todo lo demás.

Este repositorio es un espejo público. Todo el desarrollo se realiza en otro lugar.
Para entender la filosofía fundacional y los objetivos de este sistema, lea el Zen de Reticulum.
Reticulum es la pila de red basada en criptografía para construir redes locales y de área amplia con hardware disponible. Puede operar incluso con latencia muy alta y ancho de banda extremadamente bajo. Reticulum permite construir redes de área amplia con herramientas comerciales, y ofrece cifrado de extremo a extremo y conectividad, anonimato del iniciador, transporte multienlace respaldado criptográficamente y autoconfigurable, direccionamiento eficiente, confirmaciones de entrega infalsificables y más.
La visión de Reticulum es permitir que cualquiera sea su propio operador de red, y hacer que sea barato y fácil cubrir vastas áreas con una miríada de redes independientes, interconectables y autónomas. Reticulum no es una red. Es una herramienta para construir miles de redes. Redes sin interruptores de apagado, vigilancia, censura y control. Redes que puedan interoperar, asociarse y disociarse libremente entre sí, y que no requieran supervisión central. Redes para seres humanos. Redes para el pueblo.
Reticulum es una pila de red completa, y no depende de IP ni de capas superiores, pero es posible usar IP como portador subyacente para Reticulum. Por lo tanto, es trivial tunelizar Reticulum sobre Internet o redes IP privadas.
Al no tener dependencias de las pilas de red tradicionales, se libera sobrecarga que se ha utilizado para implementar una pila de red construida directamente sobre principios criptográficos, lo que permite resiliencia y funcionalidad estable, incluso en redes abiertas y sin confianza.
No se requieren módulos de kernel ni controladores. Reticulum se ejecuta completamente en espacio de usuario, y puede ejecutarse prácticamente en cualquier sistema que ejecute Python 3.
La documentación completa de Reticulum está disponible en markqvist.github.io/Reticulum/manual/.
También puede descargar el manual de Reticulum en PDF o como libro electrónico en formato EPUB.
Para más información, consulte reticulum.network y la sección de preguntas frecuentes del wiki.
El código Python en este repositorio es la Implementación de Referencia de Reticulum. El Protocolo Reticulum se define total y autoritativamente por esta implementación de referencia y su manual asociado. Es mantenido por Mark Qvist, identificado por la Identidad de Reticulum <bc7291552be7a58f361522990465165c>.
No existen actualmente, ni existirán nunca, derivados de especificaciones de protocolo de segundo orden. No se puede obtener una mejor especificación que una que sea ejecutable, funcional, comprobable, desplegada y operativa 24/7 en todo el planeta.
No existe, ni existirá nunca, una 'especificación formal', 'RFC' o algo similar separado y derivado para Reticulum:
La implementación de referencia es la especificación final y autorizada.
La compatibilidad con el Protocolo Reticulum se define como tener interoperabilidad total y paridad funcional suficiente con esta implementación de referencia. Cualquier implementación de protocolo específica que logre esto es Reticulum. Cualquier que no lo haga no es Reticulum.
La implementación de referencia está licenciada bajo la Licencia Reticulum.
El Protocolo Reticulum fue dedicado al Dominio Público en 2016.
Si desea tener una idea rápida de lo que Reticulum puede hacer, eche un vistazo a la sección Programas que usan Reticulum del manual, o los siguientes recursos:
rnphone, que puede usarse para construir teléfonos de hardware.Sobre prácticamente cualquier medio que pueda soportar al menos un canal semidúplex con un rendimiento mayor a 5 bits por segundo, y un MTU de 500 bytes. Radios de datos, módems, radios LoRa, líneas serie, TNC AX.25, modos digitales de radioaficionados, dispositivos WiFi y Ethernet, enlaces ópticos de espacio libre y sistemas similares son todos ejemplos de los tipos de dispositivos físicos que Reticulum puede usar.
Se ha diseñado una interfaz basada en LoRa de código abierto llamada RNode específicamente para su uso con Reticulum. Es posible construirla usted mismo, o se puede comprar como un transceptor completo que solo necesita una conexión USB al anfitrión.
Reticulum también puede encapsularse sobre redes IP existentes, así que nada le impide usarlo sobre Ethernet cableada, su red WiFi local o Internet, donde funcionará igual de bien. De hecho, una de las fortalezas de Reticulum es lo fácil que permite conectar diferentes medios en una malla autoconfigurable, resiliente y cifrada, utilizando cualquier mezcla disponible de infraestructura.
Como ejemplo, es posible configurar una Raspberry Pi conectada tanto a una radio LoRa, un TNC de radio por paquetes y una red WiFi. Una vez configuradas las interfaces, Reticulum se encargará del resto, y cualquier dispositivo en la red WiFi puede comunicarse con nodos en los lados de radio LoRa y radio por paquetes de la red, y viceversa.
La mejor manera de comenzar con la Pila de Red Reticulum depende de lo que quiera hacer. Para obtener todos los detalles y ejemplos, eche un vistazo a la sección Inicio Rápido del Manual de Reticulum.
Para simplemente instalar Reticulum y utilidades relacionadas en su sistema, la forma más fácil es a través de pip. Luego puede iniciar cualquier programa que use Reticulum, o iniciar Reticulum como un servicio del sistema con la utilidad rnsd.```bash
pip install rns
Si estás usando un sistema operativo que bloquea la instalación normal de paquetes de usuario mediante `pip`, puedes devolver `pip` a su comportamiento normal editando el archivo `~/.config/pip/pip.conf` y añadiendo la siguiente directiva en la sección `[global]`:```text
[global]
break-system-packages = true
Alternativamente, puedes usar la herramienta pipx para instalar Reticulum en un entorno aislado:```bash
pipx install rns
Al iniciarse por primera vez, Reticulum creará un archivo de configuración predeterminado, proporcionando conectividad básica con otros pares de Reticulum que puedan estar localmente al alcance. El archivo de configuración predeterminado contiene algunos ejemplos y referencias para crear una configuración más compleja.
Si tienes una versión antigua de `pip` en tu sistema, es posible que necesites actualizarlo primero con `pip install pip --upgrade`. Si aún no tienes `pip` instalado, puedes instalarlo usando el gestor de paquetes de tu sistema con `sudo apt install python3-pip` o similar.
Para ejemplos más detallados sobre cómo expandir la comunicación a través de muchos medios, como radio por paquetes o LoRa, puertos serie, o enlaces IP rápidos e Internet usando las interfaces UDP y TCP, eche un vistazo a la sección [Interfaces compatibles](https://markqvist.github.io/Reticulum/manual/interfaces.html) del [Manual de Reticulum](https://markqvist.github.io/Reticulum/manual/).
## Utilidades incluidas
Reticulum incluye una variedad de utilidades útiles para gestionar tus redes, ver el estado e información, y otras tareas. Puedes leer más sobre estos programas en la sección [Programas de utilidad incluidos](https://markqvist.github.io/Reticulum/manual/using.html#included-utility-programs) del [Manual de Reticulum](https://markqvist.github.io/Reticulum/manual/).
- El demonio del sistema `rnsd` para ejecutar Reticulum como un servicio siempre disponible
- Una utilidad de estado de interfaces llamada `rnstatus`, que muestra información sobre las interfaces
- La herramienta de búsqueda y gestión de rutas `rnpath` que permite ver y modificar tablas de rutas
- Una herramienta de diagnóstico llamada `rnprobe` para verificar la conectividad a destinos
- Un programa simple de transferencia de archivos llamado `rncp` que facilita la transferencia de archivos entre sistemas
- La utilidad de gestión de identidades y cifrado `rnid` te permite gestionar Identidades y cifrar/descifrar archivos
- El programa `rnsh` te permite establecer sesiones de shell completamente interactivas con sistemas remotos
- El programa de ejecución remota de comandos `rnx` te permite ejecutar comandos y programas simples y recuperar la salida de sistemas remotos
- El programa `rngit` proporciona un nodo Git completo con múltiples repositorios para servir repositorios a través de Reticulum
- El ayudante incluido `git-remote-rns` te permite interactuar con repositorios Git a través de Reticulum
Todas las herramientas, incluyendo `rnx` y `rncp`, funcionan de manera fiable y bien incluso en enlaces de muy bajo ancho de banda como LoRa o Radio por Paquetes. Para shells remotas completas a través de Reticulum, echa también un vistazo al programa [rnsh](https://github.com/acehoss/rnsh).
## Tipos de interfaces y dispositivos compatibles
Reticulum implementa una gama de tipos de interfaz generalizados que cubren la mayoría del hardware de comunicaciones sobre el que Reticulum puede ejecutarse. Si tu hardware no es compatible, es [simple implementar un módulo de interfaz personalizado](https://markqvist.github.io/Reticulum/manual/interfaces.html#custom-interfaces). Las solicitudes de extracción para interfaces personalizadas se aceptan con gratitud, siempre que sean generalmente útiles y estén bien probadas en el uso real.
Actualmente, se admiten las siguientes interfaces integradas:
- Cualquier dispositivo Ethernet
- LoRa usando [RNode](https://unsigned.io/rnode/)
- TNCs de radio por paquetes (con o sin AX.25)
- Módems de hardware y software compatibles con KISS
- Cualquier dispositivo con puerto serie
- TCP sobre redes IP
- UDP sobre redes IP
- Programas externos a través de stdio o tuberías
- Hardware personalizado a través de stdio o tuberías
## Rendimiento
Reticulum apunta a un *muy* amplio rango de rendimiento utilizable, pero prioriza la funcionalidad y el rendimiento en medios de bajo ancho de banda. El objetivo es proporcionar un rango de rendimiento dinámico desde 250 bits por segundo, hasta 1 gigabit por segundo en hardware normal. Actualmente, el rango de rendimiento utilizable es de aproximadamente 150 bits por segundo a 500 megabits por segundo, sin saturar medios físicos más rápidos que eso. El rendimiento más allá del nivel actual está previsto para futuras actualizaciones, pero no está altamente priorizado en este momento.
## Estado actual
Todas las características principales del protocolo están implementadas y funcionando, pero probablemente se añadirán más a medida que se explore y entienda su uso en el mundo real. La API y el formato de cable pueden considerarse estables.
## Dependencias
La instalación del paquete predeterminado `rns` requiere solo dos dependencias externas, listadas a continuación. Casi todos los sistemas y distribuciones tienen paquetes fácilmente disponibles para estas dependencias, y cuando el paquete `rns` se instala con `pip`, también se descargarán e instalarán.
- [PyCA/cryptography](https://github.com/pyca/cryptography)
- [pyserial](https://github.com/pyserial/pyserial)
En sistemas más inusuales, y en algunos casos raros, puede que no sea posible instalar o incluso compilar uno o más de los módulos anteriores. En tales situaciones, puedes usar el paquete `rnspure` en su lugar, que no requiere dependencias externas para la instalación. Ten en cuenta que el contenido de los paquetes `rns` y `rnspure` es *idéntico*. La única diferencia es que el paquete `rnspure` no lista dependencias requeridas para la instalación.
Independientemente de cómo se instale e inicie Reticulum, cargará dependencias externas solo si son *necesarias* y *están disponibles*. Por ejemplo, si deseas usar Reticulum en un sistema que no puede soportar [pyserial](https://github.com/pyserial/pyserial), es perfectamente posible hacerlo usando el paquete `rnspure`, pero Reticulum no podrá usar interfaces basadas en puerto serie. Todos los demás módulos disponibles se cargarán cuando sea necesario.
**¡Tenga en cuenta!** Si usas el paquete `rnspure` para ejecutar Reticulum en sistemas que no soportan [PyCA/cryptography](https://github.com/pyca/cryptography), es importante que leas y entiendas la sección [Primitivas Criptográficas](#cryptographic-primitives) de este documento.
## Arranque de Conectividad
Reticulum no es un servicio al que te suscribas, ni es una única red global a la que 'te unas'. Reticulum proporciona funcionalidad para descubrir interfaces públicas disponibles a través de la propia red, y la comunidad en general ha proporcionado varios directorios de puntos de entrada disponibles públicamente para iniciar la conectividad.
Para aprender cómo establecer conectividad inicial a través de Reticulum, lee la sección [Arranque de Conectividad](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manual.
Si ya tienes una idea general de cómo funciona esto, puedes usar sitios administrados por la comunidad como [directory.rns.recipes](https://directory.rns.recipes/) y [rmap.world](https://rmap.world) para encontrar definiciones de interfaz para la conectividad inicial con la red troncal distribuida global de Reticulum.
## Red de Pruebas Pública
***¡Importante!** Históricamente, el propio proyecto Reticulum puso a disposición una red de pruebas orientada a desarrolladores. Dado que la cantidad de nodos y puntos de entrada globales de Reticulum ha crecido a una cantidad sustancial, esta red de pruebas pública, incluido el punto de entrada de Ámsterdam, ha sido desmantelada. Si aún tienes instancias que dependían de este punto de entrada para la conectividad, transiciona a usar la red troncal distribuida en su lugar. Reticulum ahora incluye un sistema completo de descubrimiento de interfaces en red y arranque de conectividad. Lee la sección [Arranque de Conectividad](https://reticulum.network/manual/gettingstartedfast.html#bootstrapping-connectivity) del manual para obtener indicaciones.*
## Apoya a Reticulum
Para que esto sea posible, necesito tu ayuda. Por favor, apoya el desarrollo continuo de sistemas de comunicación abiertos, libres y privados donando a través de uno de los siguientes canales:
- Monero: ```
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
Bitcoin ``` bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6
- Ethereum ```
0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E
Liberapay: https://liberapay.com/Reticulum/
Ko-Fi: https://ko-fi.com/markqvist
Reticulum utiliza un conjunto simple de primitivas criptográficas eficientes, sólidas y bien probadas, con implementaciones ampliamente disponibles que pueden usarse tanto en CPU de propósito general como en microcontroladores.
Una de las consideraciones principales para elegir este conjunto particular de primitivas es que se pueden implementar de forma segura con relativamente pocos puntos débiles, en prácticamente todas las plataformas informáticas actuales.
Las primitivas aquí listadas son autoritativas. Cualquier cosa que afirme ser Reticulum, pero que no utilice estas primitivas exactas no es Reticulum, y posiblemente sea un clon comprometido o debilitado intencionalmente. Las primitivas utilizadas son:
os.urandom() o mejorEn la configuración de instalación predeterminada, las primitivas X25519, Ed25519 y AES-256-CBC son proporcionadas por OpenSSL (a través del paquete PyCA/cryptography). Las funciones hash SHA-256 y SHA-512 son proporcionadas por el estándar hashlib de Python. Las primitivas HKDF, HMAC, Token y la función de relleno PKCS7 siempre son proporcionadas por las siguientes implementaciones internas:
Reticulum también incluye una implementación completa de todas las primitivas necesarias en Python puro. Si OpenSSL y PyCA no están disponibles en el sistema cuando se inicia Reticulum, Reticulum utilizará en su lugar las primitivas internas de Python puro. Una consecuencia trivial de esto es el rendimiento, siendo el backend de OpenSSL mucho más rápido. Sin embargo, la consecuencia más importante es la posible pérdida de seguridad al usar primitivas que no han recibido la misma cantidad de escrutinio, pruebas y revisión que las de OpenSSL.
Tenga en cuenta que, por defecto, instalar Reticulum requerirá que OpenSSL y PyCA también se instalen automáticamente si aún no están disponibles. Solo es posible utilizar las primitivas de Python puro si este requisito es anulado específicamente por el usuario, por ejemplo, instalando el paquete rnspure en lugar del paquete normal rns, o ejecutando directamente desde el código fuente local.
Si desea utilizar las primitivas internas de Python puro, es altamente recomendable que comprenda bien los riesgos que esto conlleva y tome una decisión informada sobre si esos riesgos son aceptables para usted.
Reticulum es un software relativamente joven y debe considerarse como tal. Si bien se ha construido teniendo en mente las mejores prácticas de criptografía, no ha sido auditado externamente en seguridad, y podría haber errores de privacidad o seguridad. Si desea ayudar o patrocinar una auditoría, no dude en ponerse en contacto.
Reticulum solo puede existir gracias a la montaña de trabajo de Código Abierto sobre la que se construyó, las contribuciones de todos los involucrados y todos los que han apoyado el proyecto a lo largo de los años. A todos los que han ayudado, muchas gracias.
Varios otros módulos y proyectos son parte de Reticulum o son utilizados por él. Sincero agradecimiento a los autores y contribuyentes de los siguientes proyectos: