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


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.
Lea el Manual
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.
Características Notables
- Direccionamiento e identificación globalmente únicos sin coordinación
- Enrutamiento multienlace totalmente autoconfigurable sobre portadores heterogéneos
- Escalabilidad flexible sobre topologías heterogéneas
- Reticulum puede transportar datos sobre cualquier mezcla de medios físicos y topologías
- Las redes de bajo ancho de banda pueden coexistir e interoperar con redes grandes y de alto ancho de banda
- Anonimato del iniciador, comuníquese sin revelar su identidad
- Reticulum no incluye direcciones de origen en ningún paquete
- Cifrado asimétrico X25519 y firmas Ed25519 como base para toda comunicación
- Las claves de identidad fundamentales de Reticulum son conjuntos de claves de curva elíptica de 512 bits
- Secreto de avance disponible para todos los tipos de comunicación, tanto para paquetes individuales como a través de enlaces
- Reticulum utiliza el siguiente formato para tokens cifrados:
- Claves efímeras por paquete y por enlace derivadas de un intercambio de claves ECDH en Curve25519
- AES-256 en modo CBC con relleno PKCS7
- HMAC usando SHA256 para autenticación
- Los IV se generan mediante os.urandom()
- Confirmaciones de entrega de paquetes infalsificables
- Sistema de interfaz flexible y extensible
- Reticulum incluye una gran variedad de tipos de interfaz integrados
- Capacidad de cargar y utilizar tipos de interfaz personalizados proporcionados por el usuario o la comunidad
- Cree fácilmente sus propias interfaces personalizadas para comunicarse sobre cualquier cosa
- Autenticación y segmentación de red virtual en todos los tipos de interfaz compatibles
- Una API intuitiva y fácil de usar
- Más simple y fácil de usar que las API de sockets, pero más potente
- Hace que la construcción de aplicaciones distribuidas y descentralizadas sea mucho más simple
- Transferencia confiable y eficiente de cantidades arbitrarias de datos
- Reticulum puede manejar unos pocos bytes de datos o archivos de muchos gigabytes
- La secuenciación, compresión, coordinación de transferencia y suma de verificación son automáticas
- La API es muy fácil de usar y proporciona progreso de transferencia
- Mecanismo de Solicitud/Respuesta ligero, flexible y expandible
- Establecimiento eficiente de enlaces
- El costo total de establecer un enlace cifrado y verificado es de solo 3 paquetes, totalizando 297 bytes
- Bajo costo de mantener enlaces abiertos a solo 0.44 bits por segundo
- Entrega secuencial confiable con mecanismos de Canal y Búfer
Implementación de Referencia
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.
Ejemplos de Aplicaciones de Reticulum
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:
- LXMF es un protocolo de transferencia de mensajes distribuido, tolerante a retrasos y disrupciones construido sobre Reticulum
- El protocolo y marco LXST proporciona transporte de audio y señales en tiempo real sobre Reticulum. Incluye primitivas y utilidades para construir aplicaciones y dispositivos de hardware basados en voz, como el programa
rnphone, que puede usarse para construir teléfonos de hardware. - Para una plataforma de comunicaciones de malla fuera de la red, cifrada y resiliente, vea Nomad Network
- La aplicación para Android, Linux, macOS y Windows Sideband tiene una interfaz gráfica y muchas características avanzadas, como transferencias de archivos, mensajes de imagen y voz, llamadas de voz en tiempo real, un sistema de telemetría distribuido, capacidades de mapeo y extensibilidad completa de complementos.
- MeshChatX es un cliente LXMF con todas las funciones y muchas herramientas y funcionalidades integradas, que también admite mensajes de imagen y voz, transferencias de archivos y llamadas de voz. También incluye un navegador de páginas integrado para navegar por nodos de Nomad Network.
- Puede usar el programa incluido rnsh para establecer sesiones de shell remoto sobre Reticulum.
¿Dónde se puede usar Reticulum?
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.
¿Cómo empiezo?
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
Primitivas Criptográficas
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:
- Las claves de identidad de Reticulum son conjuntos de claves Curve25519 de 512 bits
- Una clave Ed25519 de 256 bits para firmas
- Una clave X25519 de 256 bits para intercambios de claves ECDH
- HKDF para derivación de claves
- Los tokens cifrados se basan en la especificación Fernet
- Claves efímeras derivadas de un intercambio de claves ECDH en Curve25519
- HMAC usando SHA256 para autenticación de mensajes
- Los IV deben generarse mediante
os.urandom()o mejor - AES-256 en modo CBC con relleno PKCS7
- Sin campos de metadatos de versión y marca de tiempo de Fernet
- SHA-256
- SHA-512
En 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.
Agradecimientos y Créditos
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:
- PyCA/cryptography, Licencia BSD
- Pure-25519 por Brian Warner, Licencia MIT
- Pysha2 por Thom Dixon, Licencia MIT
- Python AES-128 por Or Gur Arie, Licencia MIT
- Python AES-256 por BoppreH, Licencia MIT
- Curve25519.py por Nicko van Someren, Dominio público
- I2Plib por Viktor Villainov
- PySerial por Chris Liechti, Licencia BSD
- Configobj por Michael Foord, Nicola Larosa, Rob Dennis & Eli Courtwright, Licencia BSD
- ifaddr por Stefan C. Mueller, Licencia MIT
- Umsgpack.py por Ivan A. Sergeev
- rnsh por Aaron Heise
- Python