GNUnet - GNUnet

GNUnet
Logo ufficiale del progetto GNUnet.svg
Gnunet-gtk 0.10 sotto arch-gnulinux.png
GNUnet con l' interfaccia utente GTK+
Sviluppatore/i GNUnet eV
Versione iniziale 5 novembre 2001 ; 19 anni fa ( 2001-11-05 )
Rilascio stabile
0.15.0 / 8 agosto 2021 ; 2 mesi fa ( 8 agosto 2021 )
Repository
Scritto in C
Sistema operativo ufficiale: Sistemi operativi software liberi ( Linux , FreeBSD , NetBSD , OpenBSD );
non ufficiale: altri sistemi operativi ( OS X , Windows )
Disponibile in Spagnolo, Inglese, Russo, Tedesco, Francese
Tipo P2P anonimo , da amico ad amico
Licenza 2018: AGPL-3.0 o successivo
2007: GPL 3.0 o successivo
2001: GPL 2.0 o successivo
Sito web gnunet .org
Christian Grothoff , manutentore di GNUnet, a Berlino il 1 agosto 2013 all'evento " #youbroketheinternet. Faremo di noi stessi uno GNU. ".

GNUnet è un framework software per reti decentralizzate , peer-to-peer e un pacchetto GNU ufficiale . Il framework offre crittografia dei collegamenti , peer discovery , allocazione delle risorse , comunicazione su molti trasporti (come TCP , UDP , HTTP , HTTPS , WLAN e Bluetooth ) e vari algoritmi peer-to-peer di base per il routing , il multicast e la stima delle dimensioni della rete .

La topologia di rete di base di GNUnet è quella di una rete mesh . GNUnet include una tabella hash distribuita (DHT) che è una variante randomizzata di Kademlia che può ancora instradare in modo efficiente in reti di piccole dimensioni . GNUnet offre un'opzione " topologia F2F " per limitare le connessioni solo agli amici fidati degli utenti. Gli amici degli amici degli utenti (e così via) possono quindi scambiare file indirettamente con il computer dell'utente, senza mai utilizzare direttamente il suo indirizzo IP.

GNUnet utilizza identificatori di risorse uniformi (non approvati da IANA , sebbene sia stata presentata una domanda). Gli URI GNUnet sono costituiti da due parti principali: il modulo e l'identificatore specifico del modulo. Un URI GNUnet ha la forma in
gnunet://module/identifiercui modulo è il nome del modulo e l' identificatore è una stringa specifica del modulo.

Il codebase primario è scritto in C , ma ci sono associazioni in altri linguaggi per produrre un'API per lo sviluppo di estensioni in quei linguaggi. GNUnet fa parte del Progetto GNU . Ha guadagnato interesse nella comunità hacker dopo le rivelazioni di PRISM .

GNUnet è costituito da diversi sottosistemi, di cui quelli essenziali sono i sottosistemi Transport e Core. Il sottosistema di trasporto fornisce comunicazioni a livello di collegamento non sicure, mentre Core fornisce il rilevamento e la crittografia peer. In cima al sottosistema principale sono costruite varie applicazioni.

GNUnet include varie applicazioni P2P nella distribuzione principale del framework, inclusi filesharing, chat e VPN; inoltre, alcuni progetti esterni (come secushare ) stanno estendendo l'infrastruttura GNUnet.

GNUnet non è correlato al vecchio protocollo Gnutella P2P. Gnutella non è un progetto GNU ufficiale mentre GNUnet lo è.

Trasporto

In origine, GNUnet utilizzava UDP per il trasporto sottostante. Ora il sottosistema di trasporto GNUnet fornisce più opzioni, come TCP e SMTP.

La porta di comunicazione, ufficialmente registrata presso IANA , è la 2086 ( tcp + udp ).

Sistema di fiducia

GNUnet fornisce un sistema di fiducia basato su un modello economico basato sull'eccesso. L'idea di impiegare un sistema economico è presa dalla rete MojoNation .

La rete GNUnet non ha entità fidate, quindi è impossibile mantenere una reputazione globale . Invece, ogni peer mantiene la propria fiducia per ciascuno dei suoi collegamenti locali.

Quando le risorse, come la larghezza di banda e il tempo della CPU, sono in eccesso, il peer le fornisce a tutti i vicini richiedenti senza ridurre la fiducia o addebitarli in altro modo. Quando un nodo è sotto stress, elimina le richieste dai nodi vicini che hanno un valore di fiducia interno inferiore. Tuttavia, quando il peer ha meno risorse che sufficienti per soddisfare le richieste di tutti, nega le richieste di quei vicini di cui si fida meno e addebita agli altri riducendo la loro fiducia.

Condivisione di file

L'applicazione principale a questo punto è la condivisione di file anonima e resistente alla censura , che consente agli utenti di pubblicare o recuperare in modo anonimo informazioni di ogni tipo. Il protocollo GNUnet che fornisce l'anonimato è chiamato GAP (protocollo di anonimato GNUnet). GNUnet FS può inoltre utilizzare GNU libextractor per annotare automaticamente i file condivisi con i metadati .

Codifica file

I file condivisi con GNUnet sono codificati ECRS (An Encoding for Censorship-Resistant Sharing).

Tutto il contenuto è rappresentato come GBlocks. Ogni GBlock contiene 1024 byte. Esistono diversi tipi di GBlock, ognuno dei quali ha uno scopo particolare. Qualsiasi GBlock è identificato in modo univoco dal suo hash RIPEMD-160 .

I DBlock archiviano i contenuti dei file effettivi e nient'altro. Il file è suddiviso in limiti di 1024 byte e i blocchi risultanti vengono archiviati in DBlocks. I DBlock sono collegati tra loro nell'albero Merkle tramite Iblock che memorizzano gli identificatori di DBlock.

I blocchi sono crittografati con una chiave simmetrica derivata da quando sono archiviati nella rete.

Domande e risposte

Il protocollo di anonimato GNUnet consiste di query e risposte. A seconda del carico del nodo di inoltro, i messaggi vengono inoltrati a zero o più nodi.

Le query vengono utilizzate per cercare contenuto e richiedere blocchi di dati.

La query contiene identificatore di risorsa, indirizzo di risposta, priorità e TTL (Time-to-Live).

L'identificatore di risorsa del dato è un hash triplo . Il peer che risponde alla query fornisce di dimostrare che ha effettivamente la risorsa richiesta senza fornire ai nodi intermedi, quindi i nodi intermedi non possono decrittografare .

L'indirizzo di risposta è la principale differenza rispetto al protocollo Freenet . Mentre in Freenet la risposta si propaga sempre utilizzando lo stesso percorso della query, in GNUnet il percorso potrebbe essere più breve. Il peer che riceve una query può eliminarla, inoltrarla senza riscrivere l'indirizzo di risposta o indirettamente sostituendo l'indirizzo di risposta con il proprio indirizzo. Indirizzando le query, il peer fornisce traffico di copertura per le proprie query, mentre inoltrandole il peer evita di essere un collegamento nella propagazione della risposta e preserva la sua larghezza di banda. Questa funzione consente all'utente di scambiare l'anonimato con l'efficienza. L'utente può specificare un livello di anonimato per ogni operazione di pubblicazione, ricerca e download. È possibile utilizzare un livello di anonimato pari a zero per selezionare la condivisione di file non anonima. L'infrastruttura DHT di GNUnet viene utilizzata solo se viene specificata la condivisione di file non anonima. Il livello di anonimato determina quanto traffico di copertura deve avere un peer per nascondere le azioni dell'utente.

La priorità specifica quanto l'utente di fiducia desidera spendere in caso di carenza di risorse.

TTL viene utilizzato per impedire che le query rimangano nella rete per troppo tempo.

URI di condivisione file

L' identificatore del modulo fs è costituito da chk , sks , ksk o loc seguito da una barra e da un valore specifico della categoria. La maggior parte degli URI contiene hash, che sono codificati in base32hex .

  • chk identifica i file, in genere:gnunet://fs/chk/[file hash].[query hash].[file size in bytes]
L'hash del file è l'hash del file di testo in chiaro, che consente di decifrarlo una volta scaricato. L'hash della query è l'hash del GBlock più in alto che consente di scaricare l'intero albero di GBlock che contiene file crittografati. La dimensione del file è necessaria per determinare la forma dell'albero.
  • sks identifica i file all'interno degli spazi dei nomi, in genere:gnunet://fs/sks/NAMESPACE/IDENTIFIER
  • ksk identifica le query di ricerca, in genere:gnunet://fs/ksk/KEYWORD[+KEYWORD]*
  • loc identifica un dato su una macchina specifica, tipicamente:gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE

Esempi

Un tipo di URI di condivisione file GNUnet che punta a una copia specifica del testo della licenza GNU GPL : gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992

Un altro tipo di URI di condivisione file GNUnet, che punta ai risultati di una ricerca con la parola chiave "gpl": gnunet://fs/ksk/gpl

Sistema dei nomi GNU

GNUnet include un'implementazione del GNU Name System (GNS), un sostituto del DNS decentralizzato e resistente alla censura . In GNS, ogni utente gestisce le proprie zone e può delegare sottodomini a zone gestite da altri utenti. Le ricerche dei record definiti da altri utenti vengono eseguite utilizzando il DHT di GNUnet.

Traduzione del protocollo

GNUnet può incanalare il traffico IP sulla rete peer-to-peer. Se necessario, GNUnet può eseguire la traduzione del protocollo IPv4-IPv6 nel processo. GNUnet fornisce un gateway a livello di applicazione DNS per le richieste DNS proxy e mappa gli indirizzi alla famiglia di indirizzi desiderata, se necessario. In questo modo, GNUnet offre una possibile tecnologia per facilitare la transizione IPv6 . Inoltre, in combinazione con GNS, il sistema di traduzione del protocollo di GNUnet può essere utilizzato per accedere a servizi nascosti, servizi basati su IP che vengono eseguiti localmente su alcuni peer nella rete e a cui è possibile accedere solo risolvendo un nome GNS.

API sociale

Gabor X Toth ha pubblicato all'inizio di settembre 2013 una tesi per presentare la progettazione di un servizio di messaggistica sociale per il framework peer-to-peer GNUnet che offre scalabilità, estensibilità e comunicazione crittografata end-to-end. La proprietà di scalabilità è ottenuta tramite la consegna di messaggi multicast, mentre l'estensibilità è resa possibile utilizzando PSYC (Protocol for SYnchronous Conferencing), che fornisce una sintassi RPC (Remote Procedure Call) estensibile che può evolversi nel tempo senza dover aggiornare il software su tutti i nodi nella rete. Un'altra caratteristica chiave fornita dal livello PSYC sono i canali multicast stateful, che vengono utilizzati per memorizzare, ad esempio, i profili utente. La comunicazione crittografata end-to-end è fornita dal servizio mesh di GNUnet, su cui sono costruiti i canali multicast. Gli utenti pseudonimi e i luoghi sociali nel sistema hanno identità crittografiche - identificate dalla loro chiave pubblica - queste sono mappate su nomi memorabili umani usando GNS ( GNU Name System ), dove ogni pseudonimo ha una zona che punta ai suoi luoghi.

Questo è l'elemento costitutivo necessario per trasformare il framework GNUnet in una piattaforma di social networking completamente peer-to-peer .

Chiacchierata

Nel modulo CADET è stata implementata una chat, per la quale esiste un'interfaccia GTK per GNOME , progettata specificamente per i telefoni Linux emergenti (come il Librem 5 o il PinePhone ).

Guarda anche

Appunti

Riferimenti

Ulteriori riferimenti

link esterno