DEV Community

Matthieu Amoros
Matthieu Amoros

Posted on • Originally published at dev.to

MycelK — Construyendo una mensajería p2p descentralizada from scratch

MycelK — Construyendo una mensajería p2p descentralizada from scratch

(Traducción al español desde mi post original en francés)

Post 0 : el porqué


Hace unos días tuve el placer de escuchar el podcast de Lex Fridman y su conversación con Pavel Durov (Telegram). Como siempre con los podcasts de Lex, las preguntas son pertinentes, las respuestas profundas, y los temas técnicos complejos suenan como poesia. Dos personas tan inteligentes conversando sobre temas complejos inevitablemente dan ganas de abrir el editor de código favorito y lanzarse en un proyecto utópico de mensajería descentralizada... (al menos ese fue el efecto que tuvo en mí).

Pero al final, de lo que se habla es de encriptación end-to-end, protección de datos, responsabilidad de la empresa en moderar los contenidos compartidos, etc. Nada muy entretenido, y ¿por qué llegamos a eso? Porque los servidores le pertenecen a alguien, y ese alguien es responsable de lo que pasa ahí.

Y ahí pensé: ¿qué pasaría si no hubiera servidores? ¿Sin responsables? Y de hecho, si Matthieu quiere hablar con Alice, ¿por qué necesitaría un intermediario?

Entonces empecé a preguntarme: ¿se podría hacer de otra forma?


La idea

Una mensajería que no dependa de ningún servidor central. Donde cada participante es a la vez cliente y nodo de la red. Donde cortar un servidor no corta las comunicaciones.

No es una idea nueva — BitTorrent, IPFS, y decenas de otros proyectos llevan veinte años explorando este tema. Pero yo quería entender cómo funciona de verdad, no solo usar una librería que abstrae toda la complejidad.

Ahí es donde entra Kademlia.


Por qué Kademlia

Kademlia es un algoritmo publicado en 2002 por Maymounkov y Mazières (otra dupla de cabezas brillantes). Es la base de BitTorrent, de una parte de IPFS, y de muchas redes distribuidas/p2p. Su rol: permitir que cualquier nodo de la red encuentre cualquier otra información sin servidor central.

El concepto clave es la definición de la distancia entre los nodos de la red (vía XOR, pero eso lo veremos después). Una métrica con propiedades matemáticas interesantes que garantizan la convergencia del routing y limitan la complejidad algorítmica de las búsquedas.

No voy a explicar Kademlia en este post. Eso será el objeto de un artículo dedicado. Lo que quiero decir acá es que podría haber usado una lib que ya lo implementa. No lo hice. Lo implemento from scratch, porque así es como se aprende de verdad.


Por qué Rust y Tauri

Desarrollo soluciones ERP para la agroindustria. Mi día a día es SQL Server, Python, integración con equipos industriales. Poco espacio para mis utopías de geek.

Rust me llama la atención desde hace un rato por sus garantías de seguridad de memoria y su rendimiento. Un proyecto de red p2p — con concurrencia, timeouts, conexiones UDP — es exactamente el terreno donde esas garantías tienen sentido.

Tauri me permite construir una interfaz desktop con React (el único stack que manejo en frontend) manteniendo el backend en Rust. Un solo binario, multiplataforma, sin Electron y sus 200MB de runtime.


El stack

Kademlia DIY          — el algoritmo, from scratch, sin libs
Tokio                 — runtime async Rust
WebRTC-rs             — p2p entre máquinas detrás de NAT
Ed25519               — identidad criptográfica
ChaCha20-Poly1305     — cifrado E2E (veremos cómo resulta)
Tauri 2 + React + MUI — interfaz desktop
Enter fullscreen mode Exit fullscreen mode

Qué va a cubrir esta serie

Dividí el proyecto en 7 fases:

  1. Core Kademlia — NodeId, distancia XOR, routing table, k-buckets

  2. Transporte UDP + RPC — mensajes, serialización, matching de peticiones/respuestas

  3. Protocolo completo — bootstrap, lookup iterativo, store/republish

  4. Integración WebRTC — conexión p2p real entre dos máquinas

  5. Mensajería — identidad, cifrado E2E, mensajes offline

  6. Tauri + React — interfaz de usuario

  7. Web of Trust — resistencia a ataques Sybil vía firmas Ed25519

Cada fase tendrá uno o más artículos. Voy a documentar las decisiones de arquitectura, los errores, los callejones sin salida. No es un tutorial, es más bien un diario de desarrollo.


MycelK

El proyecto se llama MycelK. Mycel como micelio — esa red subterránea de filamentos fúngicos que conecta los árboles entre sí sin centro, sin jerarquía, de manera resiliente. K como Kademlia.

El código será open source en GitHub. El nombre está libre en crates.io.


Este post existe porque escribir me obliga a clarificar mi pensamiento. Y quién sabe, quizás le dé visibilidad a otros proyectos futuros.

Si trabajas en temas similares o tienes preguntas sobre las decisiones de arquitectura, los comentarios están abiertos.

Lo que sigue: una explicación de Kademlia para humanos, y después el código de la Fase 1.

Top comments (0)