
GNUnet es un marco de software para redes descentralizadas punto a punto y un paquete oficial de GNU . El marco ofrece cifrado de enlaces , descubrimiento de pares , asignación de recursos , comunicación a través de diversos protocolos de transporte (como TCP , UDP , HTTP , HTTPS , WLAN y Bluetooth ) y varios algoritmos básicos punto a punto para enrutamiento , multidifusión y estimación del tamaño de la red. [ 5 ] [ 6 ]
La topología básica de red de GNUnet es la de una red de malla . GNUnet incluye una tabla hash distribuida (DHT), una variante aleatoria de Kademlia que permite un enrutamiento eficiente en redes de mundo pequeño . GNUnet ofrece una opción de " topología F2F " para restringir las conexiones únicamente a los amigos de confianza del usuario. De esta forma, los amigos de los amigos del usuario (y así sucesivamente) pueden intercambiar archivos indirectamente con el ordenador del usuario, sin utilizar nunca su dirección IP directamente.
GNUnet utiliza identificadores uniformes de recursos (no aprobados por IANA , aunque se ha presentado una solicitud). Las URI de GNUnet constan de dos partes principales: el módulo y el identificador específico del módulo. Una URI de GNUnet tiene el formato donde módulo es el nombre del módulo e identificador es una cadena específica del módulo.gnunet://module/identifier
El código fuente principal está escrito en C , pero existen enlaces en otros lenguajes para generar una API que permita desarrollar extensiones en dichos lenguajes. GNUnet forma parte del Proyecto GNU . Ha despertado interés en la comunidad hacker tras las revelaciones de PRISM . [ 7 ]
GNUnet consta de varios subsistemas, de los cuales los esenciales son los subsistemas de transporte y núcleo. [ 8 ] El subsistema de transporte proporciona comunicaciones de capa de enlace inseguras, mientras que el núcleo proporciona descubrimiento de pares y cifrado. [ 9 ] Sobre el subsistema central se construyen varias aplicaciones.
GNUnet incluye varias aplicaciones P2P en la distribución principal del framework, como el intercambio de archivos, el chat y la VPN; además, algunos proyectos externos (como secushare) también están ampliando la infraestructura de GNUnet.
GNUnet no tiene relación con el protocolo P2P Gnutella , que es más antiguo . Gnutella no es un proyecto oficial de GNU, mientras que GNUnet sí lo es. [ 10 ]
Transporte
Originalmente, GNUnet utilizaba UDP para el transporte subyacente. [ 11 ] El subsistema de transporte de GNUnet se amplió para incluir opciones adicionales, como TCP y SMTP. [ 12 ] Posteriormente se eliminó el soporte para este último debido a la falta de mantenimiento. [ 13 ]
El puerto de comunicación, registrado oficialmente en IANA , es 2086 ( TCP + UDP ). [ 14 ]
Sistema de confianza
GNUnet proporciona un sistema de confianza basado en un modelo económico basado en el exceso. [ 15 ] La idea de emplear un sistema económico se toma de la red MojoNation . [ 16 ]
La red GNUnet no tiene entidades de confianza, por lo que es imposible mantener una reputación global . En cambio, cada nodo mantiene su propio nivel de confianza para cada uno de sus enlaces locales.
Cuando hay un exceso de recursos, como ancho de banda y tiempo de CPU, el nodo par los proporciona a todos los vecinos que los solicitan sin reducir la confianza ni cobrarles de otra manera. Cuando un nodo está bajo presión, rechaza las solicitudes de aquellos vecinos en los que confía menos y cobra a los demás reduciendo su nivel de confianza.
Compartir archivos
La aplicación principal en este punto es el intercambio anónimo y resistente a la censura de archivos, que permite a los usuarios publicar o recuperar información de todo tipo de forma anónima. El protocolo GNUnet que proporciona anonimato se llama GAP (GNUnet anonymity protocol). [ 17 ] GNUnet FS puede además utilizar GNU libextractor para anotar automáticamente los archivos compartidos con metadatos .
Codificación de archivos
Los archivos compartidos con GNUnet están codificados con ECRS (Encoding for Censorship-Resistant Sharing). [ 18 ]
Todo el contenido se representa como GBlocks. Cada GBlock contiene 1024 bytes. Hay varios tipos de GBlocks, cada uno de ellos tiene un propósito particular. Cualquier GBlockse identifica de forma única mediante su hash RIPEMD-160..
Los DBlocks almacenan el contenido real del archivo y nada más. El archivo se divide en intervalos de 1024 bytes y los fragmentos resultantes se almacenan en DBlocks. Los DBlocks se enlazan para formar un árbol Merkle mediante IBlocks que almacenan los identificadores de los DBlocks.
Los bloques se cifran con una clave simétrica derivada decuando se almacenan en la red.
Consultas y respuestas
El protocolo de anonimato GNUnet consta de consultas y respuestas. Dependiendo de la carga del nodo de reenvío, los mensajes se reenvían a cero o más nodos.
Las consultas se utilizan para buscar contenido y solicitar bloques de datos.
La consulta contiene el identificador del recurso, la dirección de respuesta, la prioridad y el TTL (tiempo de vida).
Identificador de recurso de datumes un triple hash. [ 19 ] El par que responde a la consulta proporcionapara demostrar que efectivamente tiene el recurso solicitado sin proporcionara nodos intermedios, por lo que los nodos intermedios no pueden descifrar.
La dirección de respuesta es la principal diferencia con respecto al protocolo Freenet . Mientras que en Freenet la respuesta siempre se propaga de vuelta utilizando la misma ruta que la consulta, en GNUnet la ruta puede ser más corta. El par que recibe una consulta puede descartarla, reenviarla sin reescribir la dirección de respuesta o indirectarla reemplazando la dirección de respuesta con su propia dirección. Al indirectar las consultas, el par proporciona tráfico de cobertura para sus propias consultas, mientras que al reenviarlas evita ser un enlace en la propagación de la respuesta y conserva su ancho de banda. Esta característica permite al usuario intercambiar anonimato por eficiencia. El usuario puede especificar un nivel de anonimato para cada operación de publicación, búsqueda y descarga. Se puede utilizar un nivel de anonimato de cero para seleccionar el intercambio de archivos no anónimo. La infraestructura DHT de GNUnet solo se utiliza si se especifica el intercambio de archivos no anónimo. El nivel de anonimato determina cuánto tráfico de cobertura debe tener un par para ocultar las acciones del usuario.
La prioridad especifica cuánto de su confianza el usuario desea gastar en caso de escasez de recursos.
El TTL se utiliza para evitar que las consultas permanezcan demasiado tiempo en la red.
URI para compartir archivos
El identificador del módulo fs consta de chk , sks , ksk o loc, seguido de una barra diagonal y un valor específico de la categoría. La mayoría de las URI contienen hashes, que están codificados en base32hex . [ 20 ]
- chk identifica archivos, normalmente:
gnunet://fs/chk/[file hash].[query hash].[file size in bytes]
- El hash del archivo es el hash del archivo de texto plano, que permite descifrarlo una vez descargado. El hash de la consulta es el hash del GBlock superior, que permite descargar todo el árbol de GBlocks que contienen el archivo cifrado. Se requiere el tamaño del archivo para determinar la estructura del árbol.
- sks identifica archivos dentro de espacios de nombres, normalmente:
gnunet://fs/sks/NAMESPACE/IDENTIFIER - ksk identifica las consultas de búsqueda, normalmente:
gnunet://fs/ksk/KEYWORD[+KEYWORD]* - loc identifica un dato en una máquina específica, normalmente:
gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE
Ejemplos
Un tipo de URI de intercambio de archivos de GNUnet que apunta a una copia específica del texto de la licencia GNU GPL : gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992
Otro tipo de URI de intercambio de archivos de GNUnet, que apunta a los resultados de una búsqueda con la palabra clave "gpl": gnunet://fs/ksk/gpl
Sistema de nombres GNU
GNUnet incluye una implementación del Sistema de Nombres de GNU (GNS), un reemplazo descentralizado y resistente a la censura para DNS . En GNS, cada usuario administra sus propias zonas y puede delegar subdominios a zonas administradas por otros usuarios. Las búsquedas de registros definidos por otros usuarios se realizan utilizando la DHT de GNUnet. [ 21 ] GNS se estandarizó en RFC 9498 en 2023. El registro GANA administra el dominio de nivel superior ".alt" en GNS. [ 22 ]
Traducción de protocolos
GNUnet puede tunelizar el tráfico IP a través de la red peer-to-peer. Si es necesario, puede realizar la traducción de protocolos IPv4-IPv6 durante el proceso. GNUnet proporciona una puerta de enlace DNS a nivel de aplicación para actuar como proxy de las solicitudes DNS y asignar direcciones a la familia de direcciones deseada según sea necesario. De esta manera, GNUnet ofrece una tecnología que facilita la transición a IPv6 . Además, en combinación con GNS, el sistema de traducción de protocolos de GNUnet puede utilizarse para acceder a servicios ocultos: servicios basados en IP que se ejecutan localmente en algún nodo de la red y a los que solo se puede acceder resolviendo un nombre GNS.
API social
Gabor X Toth publicó a principios de septiembre de 2013 una tesis [ 23 ] para presentar el diseño de un servicio de mensajería social para el marco peer-to-peer GNUnet que ofrece escalabilidad, extensibilidad y comunicación cifrada de extremo a extremo. La escalabilidad se logra mediante la entrega de mensajes multicast, mientras que la extensibilidad es posible gracias al uso de PSYC (Protocolo para Conferencias Síncronas), que proporciona una sintaxis RPC (Llamada a Procedimiento Remoto) extensible que puede evolucionar con el tiempo sin necesidad de actualizar el software en todos los nodos de la red. Otra característica clave que proporciona la capa PSYC son los canales multicast con estado, que se utilizan para almacenar, por ejemplo, perfiles de usuario. La comunicación cifrada de extremo a extremo la proporciona el servicio de malla de GNUnet, sobre el cual se construyen los canales multicast. Los usuarios seudónimos y los espacios sociales del sistema tienen identidades criptográficas —identificadas por su clave pública— que se asignan a nombres fáciles de recordar para los humanos mediante GNS ( GNU Name System ), donde cada seudónimo tiene una zona que apunta a sus ubicaciones.
Ese es el componente básico necesario para convertir el marco de trabajo GNUnet en una plataforma de redes sociales totalmente peer-to-peer .
Charlar
Se ha implementado un chat en el módulo CADET, [ 24 ] para el cual existe una interfaz GTK para GNOME , [ 25 ] diseñada específicamente para los teléfonos Linux emergentes (como el Librem 5 o el PinePhone ). [ 26 ]
Véase también
Notas
Referencias
- ↑ GNUnet.org – Acerca de GNUnet eV
- ↑ Martin Schanzenbach (17 de julio de 2026). "GNUnet 0.28.0 lanzado" . info-GNUnet . Consultado el 17 de julio de 2026 .
- ↑ Código fuente de GNUnet
- ↑ "Aviso de licencia ubicado en la parte superior de uno de los archivos fuente del repositorio del proyecto, probablemente en cada uno de sus archivos fuente" . Consultado el 8 de junio de 2018.
GNUnet es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General Affero de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
- ↑ EvansPolotGrothoff 2012 .
- ^ Grothoff, cristiano (10 de octubre de 2017). El sistema GNUnet (tesis de habilitación). Universidad de Rennes 1.
- ↑ Grothoff 2013 .
- ↑ FerreiraGrothoffRuth 2003 , Figura 1.
- ↑ FerreiraGrothoffRuth 2003 , II. GNUNET Y LA CAPA DE TRANSPORTE: "El núcleo es responsable del cifrado de enlace a enlace, la vinculación de identidades de nodos a direcciones enrutables y el descubrimiento de pares."
- ↑ "Software GNU" . Software - Proyecto GNU - Fundación del Software Libre . Fundación del Software Libre, Inc. Consultado el 25 de enero de 2020 .
- ↑ GrothoffPatrascuBennettStef 2002 , 3.1.1 UDP.
- ↑ FerreiraGrothoffRuth 2003 .
- ↑ "Acerca de GNUnet — Documentación de GNUnet" . docs.gnunet.org . Consultado el 13 de agosto de 2025 .
- ↑ Registro de nombres de servicio y números de puerto del protocolo de transporte, pág. 38
- ↑ Grothoff 2003 .
- ↑ GrothoffPatrascuBennettStef 2002 , 2.4 Mojo Nation.
- ↑ BennettGrothoff 2003 .
- ↑ BennettGrothoffHorozovPatrascu 2002 .
- ↑ GrothoffPatrascuBennettStef 2002 , 5.5 Más sobre consultas.
- ↑ Grothoff, Christian. "URI para compartir archivos" . www.gnunet.org . Archivado del original el 17 de agosto de 2016. Consultado el 15 de julio de 2016 .
- ↑ Wachs, Schanzenbach y Grothoff 2014 .
- ↑ "RFC 9498: El sistema de nombres GNU [ LWN.net ] " . lwn.net .
- ↑ Toth, Gabor X (5 de septiembre de 2013), Diseño de un sistema de mensajería social mediante multidifusión con estado. Archivado el 22 de febrero de 2014 en Wayback Machine . Consultado el 28 de septiembre de 2013.
- ↑ Documentación de GNUnet.org (14/11/2019) Chatear con un cliente (sencillo) - Consultado el 14/11/2019
- ↑ cadet-gtk en GitLab
- ↑ GNUnet CADET para Linux móvil – Reddit
Referencias adicionales
- Grothoff, Christian; Patrascu, Ioana; Bennett, Krista; Stef, Tiberiu; Horozov, Tzvetan (13 de junio de 2002). El libro blanco de GNet (PDF) (Informe técnico). Universidad de Purdue.
- Bennett, Krista; Grothoff, Christian; Horozov, Tzvetan; Patrascu, Ioana (3 de julio de 2002). Batten, Lynn ; Seberry, Jennifer (eds.). Compartición eficiente de datos cifrados . Notas de clase en informática. Springer Berlin Heidelberg. págs. 107–120 . CiteSeerX 10.1.1.19.9837 . doi : 10.1007/3-540-45450-0_8 . ISBN 9783540438618.
- Ferreira, Ronaldo; Grothoff, Christian; Ruth, Paul (1 de mayo de 2003). "Una abstracción de capa de transporte para redes peer-to-peer" (PDF) . CCGrid 2003. 3er Simposio Internacional IEEE/ACM sobre Computación en Clúster y Grid, 2003. Actas . IEEE. págs. 398–405 . CiteSeerX 10.1.1.13.5086 . doi : 10.1109/CCGRID.2003.1199393 . ISBN 978-0-7695-1919-7. S2CID 1928711 .
- Grothoff, Dipl-Math Christian (1 de junio de 2003). "Asignación de recursos en redes peer-to-peer". Wirtschaftsinformatik . 45 (3): 285– 292. doi : 10.1007/BF03254946 . ISSN 0937-6429 . S2CID 4479637 .
- Wachs, Matthias; Schanzenbach, Martin; Grothoff, Christian (2014). «Un sistema de nombres totalmente descentralizado, que mejora la privacidad y es resistente a la censura» (PDF) . Criptología y seguridad de redes . Notas de clase en informática. Vol. 8813. pp. 127–142 . doi : 10.1007/978-3-319-12280-9_9 . ISBN 978-3-319-12279-3.
- Bennett, Krista; Grothoff, Christian (26 de marzo de 2003). «Gap – Redes anónimas prácticas». En Dingledine, Roger (ed.). Tecnologías para mejorar la privacidad . Lecture Notes in Computer Science. Vol. 2760. Springer Berlin Heidelberg. pp. 141–160 . CiteSeerX 10.1.1.125.9673 . doi : 10.1007/978-3-540-40956-4_10 . ISBN 9783540206101.
- Evans, Nathan; Polot, Bartlomiej; Grothoff, Christian (21 de mayo de 2012). «Estimación eficiente y segura del tamaño de la red descentralizada». En Bestak, Robert; Kencl, Lukas; Li, Li Erran; Widmer, Joerg; Yin, Hao (eds.). Networking 2012. Lecture Notes in Computer Science. Vol. 7289. Springer Berlin Heidelberg. pp. 304–317 . doi : 10.1007/978-3-642-30045-5_23 . ISBN 9783642300448.
- Grothoff, Christian (1 de agosto de 2013). "Vídeo: Rompisteis Internet. Nosotros nos estamos creando una red GNU" . gnunet.org . Pirate Party Germany , Berlín . Consultado el 4 de octubre de 2013 .
- Grothoff, Christian (2015). "La arquitectura de GNUnet: 45 subsistemas en 45 minutos" (PDF) . Recuperado el 14 de julio de 2016 .
Enlaces externos
- Software del Proyecto GNU
- Software gratuito para compartir archivos
- Redes de anonimato
- Redes anónimas para compartir archivos
- Software libre programado en C
- Software libre multiplataforma
- Software que utiliza la Licencia Pública General Affero de GNU.
- Enrutamiento basado en claves