GNUnet es un marco de software para descentralizado , peer-to-peer redes y un funcionario de GNU paquete. El marco ofrece cifrado de enlaces , descubrimiento de pares , asignación de recursos , comunicación a través de muchos transportes (como TCP , UDP , HTTP , HTTPS , WLAN y Bluetooth ) y varios algoritmos básicos de igual a igual para enrutamiento , multidifusión y estimación del tamaño de la red . [5][6]
Desarrollador (es) | GNUnet eV [1] |
---|---|
Versión inicial | 5 de noviembre de 2001 |
Lanzamiento estable | 0.14.1 [2] / 4 de abril de 2021 |
Repositorio | |
Escrito en | C [3] |
Sistema operativo | oficial: sistemas operativos de software libre ( GNU / Linux , FreeBSD , NetBSD , OpenBSD ); no oficial: otros sistemas operativos ( OS X , Windows ) |
Disponible en | Español, Inglés, Ruso, Alemán, Francés |
Tipo | P2P anónimo , amigo a amigo |
Licencia | GNU AGPLv3 o posterior [4] ( software gratuito ) |
Sitio web | gnunet |
La topología de red básica de GNUnet es la de una red en malla . GNUnet incluye una tabla hash distribuida (DHT), que es una variante aleatoria de Kademlia que aún puede enrutarse de manera eficiente en redes de mundo pequeño . GNUnet ofrece una opción de " topología F2F " para restringir las conexiones solo a los amigos de confianza de los usuarios. Los propios amigos de los amigos de los usuarios (y así sucesivamente) pueden intercambiar archivos indirectamente con la computadora de los usuarios, nunca usando su dirección IP directamente.
GNUnet utiliza identificadores de recursos uniformes (no aprobados por IANA , aunque se ha realizado una solicitud). [ cuando? ] Los URI de GNUnet constan de dos partes principales: el módulo y el identificador específico del módulo. Un URI de GNUnet tiene un formato gnunet://module/identifier
en el que módulo es el nombre del módulo y el identificador es una cadena específica del módulo.
El código base principal está escrito en C , pero hay enlaces en otros lenguajes para producir una API para desarrollar extensiones en esos lenguajes. GNUnet es parte del Proyecto GNU . Ha ganado interés en la comunidad de hackers después de las revelaciones de PRISM . [7]
GNUnet consta de varios subsistemas, de los cuales los esenciales son los subsistemas Transport y Core. [8] El subsistema de transporte proporciona comunicaciones de capa de enlace inseguras, mientras que Core proporciona descubrimiento y cifrado de pares. [9] Sobre el subsistema principal se construyen varias aplicaciones.
GNUnet incluye varias aplicaciones P2P en la distribución principal del marco, incluido el intercambio de archivos, chat y VPN; Además, algunos proyectos externos (como secushare ) también están ampliando la infraestructura GNUnet.
GNUnet no está relacionado con el antiguo protocolo P2P de Gnutella . Gnutella no es un proyecto GNU oficial, mientras que GNUnet sí lo es. [10]
Transporte
Originalmente, GNUnet usó UDP para el transporte subyacente. [11] Ahora el subsistema de transporte GNUnet ofrece múltiples opciones, como TCP y SMTP. [12]
El puerto de comunicación, registrado oficialmente en IANA , es 2086 ( tcp + udp ). [13]
Sistema de confianza
GNUnet proporciona un sistema de confianza basado en un modelo económico basado en excesos. [14] La idea de emplear un sistema económico se toma de la red MojoNation . [15]
La red GNUnet no tiene entidades de confianza, por lo que es imposible mantener una reputación global . En cambio, cada par mantiene su propia confianza para cada uno de sus enlaces locales.
Cuando los recursos, como el ancho de banda y el tiempo de la CPU, son excesivos, el par se los proporciona a todos los vecinos solicitantes sin reducir la confianza o cobrarles de otra manera. Cuando un nodo está bajo estrés, elimina las solicitudes de sus nodos vecinos que tienen un valor de confianza interno más bajo. Sin embargo, cuando el par tiene menos recursos que suficientes para cumplir con las solicitudes de todos, niega las solicitudes de aquellos vecinos en los que confía menos y cobra a los demás al reducir su confianza.
Compartición de archivos
La aplicación principal en este punto es el intercambio de archivos anónimo y resistente a la censura , lo 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 (protocolo de anonimato GNUnet). [16] GNUnet FS también puede hacer uso de GNU libextractor para anotar automáticamente archivos compartidos con metadatos .
Codificación de archivos
Los archivos compartidos con GNUnet están codificados con ECRS (una codificación para compartir resistente a la censura). [17]
Todo el contenido se representa como GBlocks. Cada bloque de GB contiene 1024 bytes. Hay varios tipos de GBlocks, cada uno de ellos tiene un propósito particular. Cualquier GBlockse identifica de forma única por su hash RIPEMD-160 .
DBlocks almacena el contenido real del archivo y nada más. El archivo se divide en límites de 1024 bytes y los fragmentos resultantes se almacenan en DBlocks. Los DBlocks se enlazan entre sí en el árbol Merkle por medio de IBlocks que almacenan identificadores DBlock.
Los bloques se cifran con una clave simétrica derivada de cuando 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 identificador de recurso, dirección de respuesta, prioridad y TTL (tiempo de vida).
Identificador de recurso del dato es un triple hash . [18] El par que responde a la consulta proporcionapara demostrar que efectivamente tiene el recurso solicitado sin proporcionar a los nodos intermedios, por lo que los nodos intermedios no pueden descifrar .
La dirección de respuesta es la principal diferencia en comparación con el protocolo Freenet . Mientras que en Freenet la respuesta siempre se propaga utilizando la misma ruta que la consulta, en GNUnet la ruta puede ser más corta. Los pares que reciben una consulta pueden descartarla, reenviarla sin reescribir la dirección de respuesta o indirectamente reemplazando la dirección de respuesta con su propia dirección. Al dirigir las consultas de forma indirecta, el par proporciona tráfico de cobertura para sus propias consultas, mientras que al reenviarlas, el par evita ser un enlace en la propagación de respuesta y conserva su ancho de banda. Esta característica permite al usuario cambiar el anonimato por la 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 usa si se especifica el uso compartido de archivos no anónimo. El nivel de anonimato determina cuánto tráfico de cobertura debe tener un par para ocultar las propias acciones del usuario.
Prioridad especifica cuánto de su confianza el usuario quiere gastar en caso de escasez de recursos.
TTL se utiliza para evitar que las consultas permanezcan en la red durante demasiado tiempo.
URI de uso compartido de archivos
El identificador del módulo fs consta de chk , sks , ksk o loc seguido de una barra y un valor específico de categoría. La mayoría de los URI contienen hashes, que están codificados en base32hex . [19]
- 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 sin formato, que permite descifrarlo una vez que se descarga. El hash de 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 forma 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, típicamente:
gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE
Ejemplos de
Un tipo de URI de intercambio de archivos 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 uso compartido de archivos 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 GNU (GNS), un reemplazo descentralizado y resistente a la censura para DNS . En GNS, cada usuario gestiona sus propias zonas y puede delegar subdominios a zonas gestionadas por otros usuarios. Las búsquedas de registros definidos por otros usuarios se realizan utilizando DHT de GNUnet. [20]
Traducción de protocolos
GNUnet puede canalizar el tráfico IP a través de la red peer-to-peer. Si es necesario, GNUnet puede realizar la traducción del protocolo IPv4-IPv6 en el proceso. GNUnet proporciona una puerta de enlace de nivel de aplicación DNS para enviar solicitudes de DNS y asignar direcciones a la familia de direcciones deseada según sea necesario. De esta manera, GNUnet ofrece una posible tecnología para facilitar la transición de IPv6 . Además, en combinación con GNS, el sistema de traducción de protocolos de GNUnet se puede usar para acceder a servicios ocultos: servicios basados en IP que se ejecutan localmente en algún par 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 [21] para presentar el diseño de un servicio de mensajería social para el marco GNUnet peer-to-peer que ofrece escalabilidad, extensibilidad y comunicación cifrada de extremo a extremo. La propiedad de escalabilidad se logra mediante la entrega de mensajes de multidifusión, mientras que la extensibilidad es posible mediante el uso de PSYC (Protocolo para conferencias sincrónicas), que proporciona una sintaxis extensible de RPC (llamada a procedimiento remoto) que puede evolucionar con el tiempo sin tener que actualizar el software en todos los nodos en la red. Otra característica clave proporcionada por la capa PSYC son los canales de multidifusión con estado, que se utilizan para almacenar, por ejemplo, perfiles de usuario. La comunicación encriptada de extremo a extremo es proporcionada por el servicio de malla de GNUnet, sobre el cual se construyen los canales de multidifusión. Los usuarios seudónimos y los lugares sociales en el sistema tienen identidades criptográficas, identificadas por su clave pública, que se asignan a nombres humanos memorables utilizando GNS ( Sistema de nombres GNU ), donde cada seudónimo tiene una zona que apunta a sus lugares.
Ese es el bloque de construcción necesario para convertir el marco GNUnet en una plataforma de redes sociales totalmente peer-to-peer .
Chat
Se ha implementado un chat en el módulo CADET, [22] para el cual existe una interfaz GTK de terceros para GNOME , [23] diseñado específicamente para los teléfonos GNU / Linux emergentes (como el Librem 5 o el PinePhone ). [24]
Ver también
- Sistema de archivos interPlanetario
- Comparación de aplicaciones para compartir archivos
- Conferencias sincrónicas
Notas
- ^ GNUnet.org - Acerca de GNUnet eV
- ^ "GNUnet 0.14.1 lanzado" ; cadena de nombre del autor: Martin Schanzenbach; fecha de publicación: 4 de abril de 2021; Consultado: 19 de abril de 2021.
- ^ Código fuente de GNUnet
- ^ "aviso de licencia colocado 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 según los términos de la Licencia Pública General GNU Affero 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, Christian (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 nodo a direcciones enrutables y el descubrimiento de pares".
- ^ "Software GNU" . Software - Proyecto GNU - Free Software Foundation . Free Software Foundation, Inc . Consultado el 25 de enero de 2020 .
- ^ GrothoffPatrascuBennettStef 2002 , 3.1.1 UDP.
- ^ FerreiraGrothoffRuth 2003 .
- ^ Registro de número de puerto de protocolo de transporte y nombre de servicio, p. 37
- ^ Grothoff 2003 .
- ^ GrothoffPatrascuBennettStef 2002 , 2.4 Nación Mojo.
- ^ BennettGrothoff, 2003 .
- ↑ BennettGrothoffHorozovPatrascu, 2002 .
- ^ GrothoffPatrascuBennettStef 2002 , 5.5 Más sobre consultas.
- ^ Grothoff, Christian. "URI de uso compartido de archivos" . www.gnunet.org . Consultado el 15 de julio de 2016 .
- ^ Wachs 2014 .
- ^ Toth, Gabor X (5 de septiembre de 2013), Diseño de un sistema de mensajería social con multidifusión con estado. Archivado 22 de febrero de 2014 en Wayback Machine . Consultado el 28 de septiembre de 2013.
- ^ Documentación de GNUnet.org (14 de noviembre de 2019) Charlando con un cliente (simple) - Consultado el 14 de noviembre de 2019
- ^ cadet-gtk en GitLab
- ^ GNUnet CADET para Linux móvil - Reddit
Referencias
- Grothoff, cristiano; Patrascu, Ioana; Bennett, Krista; Stef, Tiberiu; Horozov, Tzvetan (13 de junio de 2002). El documento técnico de GNet (PDF) (Informe técnico). Universidad de Purdue.
- Bennett, Krista; Grothoff, cristiano; Horozov, Tzvetan; Patrascu, Ioana (3 de julio de 2002). Batten, Lynn ; Seberry, Jennifer (eds.). Uso compartido eficiente de datos cifrados . Apuntes de conferencias en informática. Springer Berlín Heidelberg. págs. 107–120. CiteSeerX 10.1.1.19.9837 . doi : 10.1007 / 3-540-45450-0_8 . ISBN 9783540438618.
- Ferreira, Ronaldo; Grothoff, cristiano; Ruth, Paul (1 de mayo de 2003). "Una abstracción de la capa de transporte para redes peer-to-peer" (PDF) . CCGrid 2003. 3er Simposio Internacional IEEE / ACM sobre Cluster Computing 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, resistente a la censura y que mejora la privacidad" (PDF) . XIII Congreso Internacional de Criptología y Seguridad de Redes (CANS 2014) . Apuntes de conferencias en informática. 8813 (13): 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). Dingledine, Roger (ed.). gap - Prácticas redes anónimas . Apuntes de conferencias en informática. Springer Berlín Heidelberg. págs. 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). Bestak, Robert; Kencl, Lukas; Li, Li Erran; Widmer, Joerg; Yin, Hao (eds.). Estimación de tamaño de red descentralizada eficiente y segura . Apuntes de conferencias en informática. Springer Berlín Heidelberg. págs. 304–317. doi : 10.1007 / 978-3-642-30045-5_23 . ISBN 9783642300448.
- Grothoff, Christian (1 de agosto de 2013). "Video: rompiste Internet. Nos estamos convirtiendo en uno GNU" . gnunet.org . Partido Pirata de Alemania , Berlín . Consultado el 4 de octubre de 2013 .
- Grothoff, Christian (2015). "La arquitectura de GNUnet: 45 subsistemas en 45 minutos" (PDF) . Consultado el 14 de julio de 2016 .
enlaces externos
- Página web oficial