aboutsummaryrefslogtreecommitdiff
path: root/doc/documentation/chapters/philosophy.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/documentation/chapters/philosophy.texi')
-rw-r--r--doc/documentation/chapters/philosophy.texi432
1 files changed, 42 insertions, 390 deletions
diff --git a/doc/documentation/chapters/philosophy.texi b/doc/documentation/chapters/philosophy.texi
index 681d5acc3..6d80d77ae 100644
--- a/doc/documentation/chapters/philosophy.texi
+++ b/doc/documentation/chapters/philosophy.texi
@@ -5,36 +5,28 @@
5@c NOTE: We should probably re-use some of the images lynX created 5@c NOTE: We should probably re-use some of the images lynX created
6@c for secushare, showing some of the relations and functionalities 6@c for secushare, showing some of the relations and functionalities
7@c of GNUnet. 7@c of GNUnet.
8The foremost goal of the GNUnet project is to become a widely used, 8The primary goal of the GNUnet project is to provide a reliable, open,
9reliable, open, non-discriminating, egalitarian, unconstrained and 9non-discriminating and censorship-resistant system for information
10censorship-resistant system of free information exchange. 10exchange. We value free speech above state interests and intellectual
11We value free speech above state secrets, law-enforcement or 11monopoly. GNUnet's long-term goal is to serve as a development
12intellectual property. 12platform for the next generation of Internet protocols.
13GNUnet is supposed to be an anarchistic network, where the only 13
14limitation for participants (devices or people making use of the 14GNUnet is an anarchistic network. Participants are encouraged to
15network, in the following sometimes called peers) is 15contribute at least as much resources (storage, bandwidth) to the network
16that they must contribute enough back to the network such that 16as they consume, so that their participation does not have a negative
17their resource consumption does not have a significant impact 17impact on other users.
18on other users.
19GNUnet should be more than just another file-sharing network.
20The plan is to offer many other services and in particular
21to serve as a development platform for the next generation of
22Internet Protocols.
23 18
24@menu 19@menu
25* Design Goals:: 20* Design Principles::
26* Security and Privacy:: 21* Privacy and Anonymity::
27* Versatility::
28* Practicality:: 22* Practicality::
29* Key Concepts::
30@end menu 23@end menu
31 24
32@cindex Design Goals 25@cindex Design Principles
33@cindex Design Goals 26@node Design Principles
34@node Design Goals 27@section Design Principles
35@section Design Goals
36 28
37These are the core GNUnet design goals, in order of relative importance: 29These are the GNUnet design principles, in order of importance:
38 30
39@itemize 31@itemize
40@item GNUnet must be implemented as 32@item GNUnet must be implemented as
@@ -44,385 +36,45 @@ These are the core GNUnet design goals, in order of relative importance:
44the program, to study and change the program in source code form, 36the program, to study and change the program in source code form,
45to redistribute exact copies, and to distribute modified versions. 37to redistribute exact copies, and to distribute modified versions.
46Refer to @uref{https://www.gnu.org/philosophy/free-sw.html, https://www.gnu.org/philosophy/free-sw.html}} 38Refer to @uref{https://www.gnu.org/philosophy/free-sw.html, https://www.gnu.org/philosophy/free-sw.html}}
47@item GNUnet must only disclose the minimal amount of information 39@item GNUnet must minimize the amount of personally identifiable information exposed.
48necessary.
49@c TODO: Explain 'fully' in the terminology section. 40@c TODO: Explain 'fully' in the terminology section.
50@item GNUnet must be fully distributed and survive 41@item GNUnet must be fully distributed and resilient to external attacks and rogue participants.
51@uref{https://en.wikipedia.org/wiki/Byzantine_fault_tolerance, Byzantine failures} 42@item GNUnet must be self-organizing and not depend on administrators or centralized infrastructure.
52@footnote{@uref{https://en.wikipedia.org/wiki/Byzantine_fault_tolerance, https://en.wikipedia.org/wiki/Byzantine_fault_tolerance}} 43@item GNUnet must inform the user which other participants have to be trusted when establishing private communications.
53at any position in the network.
54@item GNUnet must make it explicit to the user which entities are
55considered to be trustworthy when establishing secured communications.
56@item GNUnet must use compartmentalization to protect sensitive
57information.
58@item GNUnet must be open and permit new peers to join. 44@item GNUnet must be open and permit new peers to join.
59@item GNUnet must be self-organizing and not depend on administrators.
60@item GNUnet must support a diverse range of applications and devices. 45@item GNUnet must support a diverse range of applications and devices.
61@item The GNUnet architecture must be cost effective. 46@item GNUnet must use compartmentalization to protect sensitive information.
62@item GNUnet must provide incentives for peers to contribute more 47@item The GNUnet architecture must be resource efficient.
63resources than they consume. 48@item GNUnet must provide incentives for peers to contribute more resources than they consume.
64@end itemize 49@end itemize
65 50
66 51
67@cindex Security and Privacy 52@cindex Privacy and Anonymity
68@node Security and Privacy 53@node Privacy and Anonymity
69@section Security and Privacy 54@section Privacy and Anonymity
70
71GNUnet's primary design goals are to protect the privacy of its users and
72to guard itself against attacks or abuse.
73GNUnet does not have any mechanisms to control, track or censor users.
74Instead, the GNUnet protocols aim to make it as hard as possible to
75find out what is happening on the network or to disrupt operations.
76 55
77@cindex Versatility 56The GNUnet protocols minimize the leakage of personally identifiable information of participants and
78@node Versatility 57do not allow adversaries to control, track, monitor or censor users activities. The
79@section Versatility 58GNUnet protocols also make it as hard as possible to disrupt operations by participating in the network with malicious intent.
80 59
81We call GNUnet a peer-to-peer framework because we want to support many 60Analyzing participant's activities becomes more difficult as the number of peers and
82different forms of peer-to-peer applications. GNUnet uses a plugin 61applications that generate traffic on the network grows, even if the additional
83architecture to make the system extensible and to encourage code reuse. 62traffic generated is not related to anonymous communication. This is one of the reasons why GNUnet is developed as a peer-to-peer
84While the first versions of the system only supported anonymous
85file-sharing, other applications are being worked on and more will
86hopefully follow in the future.
87A powerful synergy regarding anonymity services is created by a large
88community utilizing many diverse applications over the same software
89infrastructure. The reason is that link encryption hides the specifics
90of the traffic for non-participating observers. This way, anonymity can
91get stronger with additional (GNUnet) traffic, even if the additional
92traffic is not related to anonymous communication. Increasing anonymity
93is the primary reason why GNUnet is developed to become a peer-to-peer
94framework where many applications share the lower layers of an 63framework where many applications share the lower layers of an
95increasingly complex protocol stack. 64increasingly complex protocol stack. The GNUnet architecture encourages many
96If merging traffic to hinder traffic analysis was not important, 65different forms of peer-to-peer applications.
97we could have just developed a dozen stand-alone applications
98and a few shared libraries.
99 66
100@cindex Practicality 67@cindex Practicality
101@node Practicality 68@node Practicality
102@section Practicality 69@section Practicality
103 70
104GNUnet allows participants to trade various amounts of security in 71Whereever possible GNUnet allows the peer to adjust its operations
105exchange for increased efficiency. However, it is not possible for any 72and functionalities to specific use cases. A GNUnet peer running on
106user's security and efficiency requirements to compromise the security 73a mobile device with limited battery for example might choose not to
107and efficiency of any other user. 74relay traffic for other participants.
108
109For GNUnet, efficiency is not paramount. If there were a more secure and
110still practical approach, we would choose to take the more secure
111alternative. @command{telnet} is more efficient than @command{ssh}, yet
112it is obsolete.
113Hardware gets faster, and code can be optimized. Fixing security issues
114as an afterthought is much harder.
115
116While security is paramount, practicability is still a requirement.
117The most secure system is always the one that nobody can use.
118Similarly, any anonymous system that is extremely inefficient will only
119find few users.
120However, good anonymity requires a large and diverse user base. Since
121individual security requirements may vary, the only good solution here is
122to allow individuals to trade-off security and efficiency.
123The primary challenge in allowing this is to ensure that the economic
124incentives work properly.
125In particular, this means that it must be impossible for a user to gain
126security at the expense of other users. Many designs (e.g. anonymity via
127broadcast) fail to give users an incentive to choose a less secure but
128more efficient mode of operation.
129GNUnet should avoid where ever possible to rely on protocols that will
130only work if the participants are benevolent.
131While some designs have had widespread success while relying on parties
132to observe a protocol that may be sub-optimal for the individuals (e.g.
133TCP Nagle), a protocol that ensures that individual goals never conflict
134with the goals of the group is always preferable.
135
136@cindex Key Concepts
137@node Key Concepts
138@section Key Concepts
139
140In this section, the fundamental concepts of GNUnet are explained.
141@c FIXME: Use @uref{https://docs.gnunet.org/bib/, research papers}
142@c once we have the new bibliography + subdomain setup.
143Most of them are also described in our research papers.
144First, some of the concepts used in the GNUnet framework are detailed.
145The second part describes concepts specific to anonymous file-sharing.
146
147@menu
148* Authentication::
149* Accounting to Encourage Resource Sharing::
150* Confidentiality::
151* Anonymity::
152* Deniability::
153* Peer Identities::
154* Zones in the GNU Name System (GNS Zones)::
155* Egos::
156@end menu
157
158@cindex Authentication
159@node Authentication
160@subsection Authentication
161
162Almost all peer-to-peer communications in GNUnet are between mutually
163authenticated peers. The authentication works by using ECDHE, that is a
164DH (Diffie---Hellman) key exchange using ephemeral eliptic curve
165cryptography. The ephemeral ECC (Eliptic Curve Cryptography) keys are
166signed using ECDSA (@uref{http://en.wikipedia.org/wiki/ECDSA, ECDSA}).
167The shared secret from ECDHE is used to create a pair of session keys
168@c FIXME: LOng word for HKDF. More FIXMEs: Explain MITM etc.
169(using HKDF) which are then used to encrypt the communication between the
170two peers using both 256-bit AES (Advanced Encryption Standard)
171and 256-bit Twofish (with independently derived secret keys).
172As only the two participating hosts know the shared secret, this
173authenticates each packet
174without requiring signatures each time. GNUnet uses SHA-512
175(Secure Hash Algorithm) hash codes to verify the integrity of messages.
176
177In GNUnet, the identity of a host is its public key. For that reason,
178man-in-the-middle attacks will not break the authentication or accounting
179goals. Essentially, for GNUnet, the IP of the host has nothing to do with
180the identity of the host. As the public key is the only thing that truly
181matters, faking an IP, a port or any other property of the underlying
182transport protocol is irrelevant. In fact, GNUnet peers can use
183multiple IPs (IPv4 and IPv6) on multiple ports --- or even not use the
184IP protocol at all (by running directly on layer 2).
185
186@c NOTE: For consistency we will use @code{HELLO}s throughout this Manual.
187GNUnet uses a special type of message to communicate a binding between
188public (ECC) keys to their current network address. These messages are
189commonly called @code{HELLO}s or peer advertisements.
190They contain the public key of the peer and its current network
191addresses for various transport services.
192A transport service is a special kind of shared library that
193provides (possibly unreliable, out-of-order) message delivery between
194peers.
195For the UDP and TCP transport services, a network address is an IP and a
196port.
197GNUnet can also use other transports (HTTP, HTTPS, WLAN, etc.) which use
198various other forms of addresses. Note that any node can have many
199different active transport services at the same time,
200and each of these can have a different addresses.
201Binding messages expire after at most a week (the timeout can be
202shorter if the user configures the node appropriately).
203This expiration ensures that the network will eventually get rid of
204outdated advertisements.
205@footnote{Ronaldo A. Ferreira, Christian Grothoff, and Paul Ruth.
206A Transport Layer Abstraction for Peer-to-Peer Networks
207Proceedings of the 3rd International Symposium on Cluster Computing
208and the Grid (GRID 2003), 2003.
209(@uref{https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf, https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf})}
210
211@cindex Accounting to Encourage Resource Sharing
212@node Accounting to Encourage Resource Sharing
213@subsection Accounting to Encourage Resource Sharing
214
215Most distributed P2P networks suffer from a lack of defenses or
216precautions against attacks in the form of freeloading.
217While the intentions of an attacker and a freeloader are different, their
218effect on the network is the same; they both render it useless.
219Most simple attacks on networks such as @command{Gnutella}
220involve flooding the network with traffic, particularly
221with queries that are, in the worst case, multiplied by the network.
222
223In order to ensure that freeloaders or attackers have a minimal impact on
224the network, GNUnet's file-sharing implementation tries to distinguish
225good (contributing) nodes from malicious (freeloading) nodes. In GNUnet,
226every file-sharing node keeps track of the behavior of every other node it
227has been in contact with. Many requests (depending on the application)
228are transmitted with a priority (or importance) level.
229That priority is used to establish how important the sender believes
230this request is. If a peer responds to an important request, the
231recipient will increase its trust in the responder:
232the responder contributed resources.
233If a peer is too busy to answer all requests, it needs to prioritize.
234For that, peers do not take the priorities of the requests received at
235face value.
236First, they check how much they trust the sender, and depending on that
237amount of trust they assign the request a (possibly lower) effective
238priority. Then, they drop the requests with the lowest effective priority
239to satisfy their resource constraints. This way, GNUnet's economic model
240ensures that nodes that are not currently considered to have a surplus in
241contributions will not be served if the network load is high.
242@footnote{Christian Grothoff. An Excess-Based Economic Model for Resource
243Allocation in Peer-to-Peer Networks. Wirtschaftsinformatik, June 2003.
244(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf})}
245@c 2009?
246
247@cindex Confidentiality
248@node Confidentiality
249@subsection Confidentiality
250
251Adversaries outside of GNUnet are not supposed to know what kind of
252actions a peer is involved in. Only the specific neighbor of a peer that
253is the corresponding sender or recipient of a message may know its
254contents, and even then application protocols may place further
255restrictions on that knowledge.
256In order to ensure confidentiality, GNUnet uses link encryption, that is
257each message exchanged between two peers is encrypted using a pair of
258keys only known to these two peers.
259Encrypting traffic like this makes any kind of traffic analysis much
260harder. Naturally, for some applications, it may still be desirable if
261even neighbors cannot determine the concrete contents of a message.
262In GNUnet, this problem is addressed by the specific application-level
263protocols (see for example, deniability and anonymity in anonymous file
264sharing).
265
266@cindex Anonymity
267@node Anonymity
268@subsection Anonymity
269 75
270@menu 76For certain applications like file-sharing GNUnet allows participants to trade degrees of anonymity in
271* How file-sharing achieves Anonymity:: 77exchange for increased efficiency. However, it is not possible for any
272@end menu 78user's efficiency requirements to compromise the anonymity
273 79of any other user.
274Providing anonymity for users is the central goal for the anonymous
275file-sharing application. Many other design decisions follow in the
276footsteps of this requirement.
277Anonymity is never absolute. While there are various
278scientific metrics@footnote{Claudia Díaz, Stefaan Seys, Joris Claessens,
279and Bart Preneel. Towards measuring anonymity.
2802002.
281(@uref{https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf, https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf})}
282that can help quantify the level of anonymity that a given mechanism
283provides, there is no such thing as complete anonymity.
284GNUnet's file-sharing implementation allows users to select for each
285operation (publish, search, download) the desired level of anonymity.
286The metric used is the amount of cover traffic available to hide the
287request.
288While this metric is not as good as, for example, the theoretical metric
289given in scientific metrics@footnote{likewise},
290it is probably the best metric available to a peer with a purely local
291view of the world that does not rely on unreliable external information.
292The default anonymity level is 1, which uses anonymous routing but
293imposes no minimal requirements on cover traffic. It is possible
294to forego anonymity when this is not required. The anonymity level of 0
295allows GNUnet to use more efficient, non-anonymous routing.
296
297@cindex How file-sharing achieves Anonymity
298@node How file-sharing achieves Anonymity
299@subsubsection How file-sharing achieves Anonymity
300
301Contrary to other designs, we do not believe that users achieve strong
302anonymity just because their requests are obfuscated by a couple of
303indirections. This is not sufficient if the adversary uses traffic
304analysis.
305The threat model used for anonymous file sharing in GNUnet assumes that
306the adversary is quite powerful.
307In particular, we assume that the adversary can see all the traffic on
308the Internet. And while we assume that the adversary
309can not break our encryption, we assume that the adversary has many
310participating nodes in the network and that it can thus see many of the
311node-to-node interactions since it controls some of the nodes.
312
313The system tries to achieve anonymity based on the idea that users can be
314anonymous if they can hide their actions in the traffic created by other
315users.
316Hiding actions in the traffic of other users requires participating in the
317traffic, bringing back the traditional technique of using indirection and
318source rewriting. Source rewriting is required to gain anonymity since
319otherwise an adversary could tell if a message originated from a host by
320looking at the source address. If all packets look like they originate
321from one node, the adversary can not tell which ones originate from that
322node and which ones were routed.
323Note that in this mindset, any node can decide to break the
324source-rewriting paradigm without violating the protocol, as this
325only reduces the amount of traffic that a node can hide its own traffic
326in.
327
328If we want to hide our actions in the traffic of other nodes, we must make
329our traffic indistinguishable from the traffic that we route for others.
330As our queries must have us as the receiver of the reply
331(otherwise they would be useless), we must put ourselves as the receiver
332of replies that actually go to other hosts; in other words, we must
333indirect replies.
334Unlike other systems, in anonymous file-sharing as implemented on top of
335GNUnet we do not have to indirect the replies if we don't think we need
336more traffic to hide our own actions.
337
338This increases the efficiency of the network as we can indirect less under
339higher load.@footnote{Krista Bennett and Christian Grothoff.
340GAP --- practical anonymous networking. In Proceedings of
341Designing Privacy Enhancing Technologies, 2003.
342(@uref{https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf, https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf})}
343
344@cindex Deniability
345@node Deniability
346@subsection Deniability
347
348Even if the user that downloads data and the server that provides data are
349anonymous, the intermediaries may still be targets. In particular, if the
350intermediaries can find out which queries or which content they are
351processing, a strong adversary could try to force them to censor
352certain materials.
353
354With the file-encoding used by GNUnet's anonymous file-sharing, this
355problem does not arise.
356The reason is that queries and replies are transmitted in
357an encrypted format such that intermediaries cannot tell what the query
358is for or what the content is about. Mind that this is not the same
359encryption as the link-encryption between the nodes. GNUnet has
360encryption on the network layer (link encryption, confidentiality,
361authentication) and again on the application layer (provided
362by @command{gnunet-publish}, @command{gnunet-download},
363@command{gnunet-search} and @command{gnunet-gtk}).
364@footnote{Christian Grothoff, Krista Grothoff, Tzvetan Horozov,
365and Jussi T. Lindgren.
366An Encoding for Censorship-Resistant Sharing.
3672009.
368(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf})}
369
370@cindex Peer Identities
371@node Peer Identities
372@subsection Peer Identities
373
374Peer identities are used to identify peers in the network and are unique
375for each peer. The identity for a peer is simply its public key, which is
376generated along with a private key the peer is started for the first time.
377While the identity is binary data, it is often expressed as ASCII string.
378For example, the following is a peer identity as you might see it in
379various places:
380
381@example
382UAT1S6PMPITLBKSJ2DGV341JI6KF7B66AC4JVCN9811NNEGQLUN0
383@end example
384
385@noindent
386You can find your peer identity by running @command{gnunet-peerinfo -s}.
387
388@cindex Zones in the GNU Name System (GNS Zones)
389@node Zones in the GNU Name System (GNS Zones)
390@subsection Zones in the GNU Name System (GNS Zones)
391
392@c FIXME: Explain or link to an explanation of the concept of public keys
393@c and private keys.
394GNS@footnote{Matthias Wachs, Martin Schanzenbach, and Christian Grothoff.
395A Censorship-Resistant, Privacy-Enhancing and Fully Decentralized Name
396System. In proceedings of 13th International Conference on Cryptology and
397Network Security (CANS 2014). 2014.
398@uref{https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf}}
399zones are similar to those of DNS zones, but instead of a hierarchy of
400authorities to governing their use, GNS zones are controlled by a private
401key.
402When you create a record in a DNS zone, that information stored in your
403nameserver. Anyone trying to resolve your domain then gets pointed
404(hopefully) by the centralised authority to your nameserver.
405Whereas GNS, being fully decentralized by design, stores that information
406in DHT. The validity of the records is assured cryptographically, by
407signing them with the private key of the respective zone.
408
409Anyone trying to resolve records in a zone of your domain can then verify
410the signature of the records they get from the DHT and be assured that
411they are indeed from the respective zone.
412To make this work, there is a 1:1 correspondence between zones and
413their public-private key pairs.
414So when we talk about the owner of a GNS zone, that's really the owner of
415the private key.
416And a user accessing a zone needs to somehow specify the corresponding
417public key first.
418
419@cindex Egos
420@node Egos
421@subsection Egos
422 80
423@c what is the difference between peer identity and egos? It seems
424@c like both are linked to public-private key pair.
425Egos are your "identities" in GNUnet. Any user can assume multiple
426identities, for example to separate their activities online. Egos can
427correspond to pseudonyms or real-world identities. Technically, an
428ego is first of all a public-private key pair.