Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
GNUnet
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== File sharing == The primary application at this point is [[anonymity|anonymous]], [[Internet censorship|censorship]]-resistant file-sharing, allowing users to anonymously publish or retrieve information of all kinds. The GNUnet protocol which provides anonymity is called GAP (GNUnet anonymity protocol).{{sfn|BennettGrothoff|2003}} GNUnet FS can additionally make use of [[GNU libextractor]] to automatically annotate shared files with [[metadata]]. === File encoding === Files shared with GNUnet are ECRS (Encoding for Censorship-Resistant Sharing) coded.{{sfn|BennettGrothoffHorozovPatrascu|2002}} All content is represented as GBlocks. Each GBlock contains 1024 bytes. There are several types of GBlocks, each of them serves a particular purpose. Any GBlock <math>B</math> is uniquely identified by its [[RIPEMD#RIPEMD-160 hashes|RIPEMD-160 hash]] <math>H(B)</math>. DBlocks store actual file contents and nothing else. File is split at 1024 byte boundaries and resulting chunks are stored in DBlocks. DBlocks are linked together into [[Merkle tree]] by means of IBlocks that store DBlock identifiers. Blocks are encrypted with a symmetric key derived from <math>H(B)</math> when they are stored in the network. === Queries and replies === GNUnet Anonymity Protocol consists of queries and replies. Depending on load of the forwarding node, messages are forwarded to zero or more nodes. Queries are used to search for content and request data blocks. Query contains resource identifier, reply address, priority and TTL (Time-to-Live). Resource identifier of datum <math>Q</math> is a triple-hash <math>H(H(H(Q)))</math>.{{sfn|GrothoffPatrascuBennettStef|2002|loc=5.5 More on queries}} Peer that replies to query provides <math>H(H(Q))</math>to prove that it indeed has the requested resource without providing <math>H(Q)</math> to intermediate nodes, so intermediate nodes can't decrypt <math>Q</math>. Reply address is the major difference compared to [[Freenet]] protocol. While in Freenet reply always propagates back using the same path as the query, in GNUnet the path may be shorter. Peer receiving a query may drop it, ''forward'' it without rewriting reply address or ''indirect'' it by replacing reply address with its own address. By indirecting queries peer provides [[cover traffic]] for its own queries, while by forwarding them peer avoids being a link in reply propagation and preserves its bandwidth. This feature allows the user to trade anonymity for efficiency. User can specify an anonymity level for each publish, search and download operation. An anonymity level of ''zero'' can be used to select non-anonymous file-sharing. GNUnet's DHT infrastructure is only used if non-anonymous file-sharing is specified. The anonymity level determines how much cover traffic a peer must have to hide the user's own actions. Priority specifies how much of its trust user wants to spend in case of a resource shortage. TTL is used to prevent queries from staying in the network for too long. === File sharing URIs === The ''fs'' module ''identifier'' consists of either ''chk'', ''sks'', ''ksk'' or ''loc'' followed by a slash and a category specific value. Most URIs contain hashes, which are encoded in [[base32#base32hex|base32hex]].<ref>{{cite web|last1=Grothoff|first1=Christian|title=File-Sharing URIs|url=https://www.gnunet.org/fs-urisyntax|website=www.gnunet.org|access-date=15 July 2016|archive-date=17 August 2016|archive-url=https://web.archive.org/web/20160817025026/https://www.gnunet.org/fs-urisyntax|url-status=dead}}</ref> * ''chk'' identifies files, typically: <code><nowiki>gnunet://fs/chk/[file hash].[query hash].[file size in bytes]</nowiki></code> : File hash is the hash of the plaintext file, which allows decrypting it once it is downloaded. Query hash is the hash of topmost GBlock which allows downloading the whole tree of GBlocks that contain encrypted file. File size is required to determine the shape of the tree. * ''sks'' identifies files within namespaces, typically: <code><nowiki>gnunet://fs/sks/NAMESPACE/IDENTIFIER</nowiki></code> * ''ksk'' identifies search queries, typically: <code><nowiki>gnunet://fs/ksk/KEYWORD[+KEYWORD]*</nowiki></code> * ''loc'' identifies a datum on a specific machine, typically: <code><nowiki>gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE</nowiki></code> ==== Examples ==== A type of GNUnet filesharing URI pointing to a specific copy of [[GNU GPL]] license text: <code style="word-wrap:break-word"> gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992</code> Another type of GNUnet filesharing URI, pointing to the search results of a search with keyword "gpl": <code style="word-wrap:break-word"> gnunet://fs/ksk/gpl </code>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)