aboutsummaryrefslogtreecommitdiff
path: root/doc/documentation
diff options
context:
space:
mode:
authorlurchi <lurchi@strangeplace.net>2018-06-28 01:29:14 +0200
committerlurchi <lurchi@strangeplace.net>2018-06-28 01:32:10 +0200
commit7540ebcd02d9bfe0a690689a1f57952eda5b5c81 (patch)
tree4f7444bb5e86adb40dfb2003bc6ba0242f5ec587 /doc/documentation
parentfbf7f994ac4a5a509857c9bd267909d1cffc600c (diff)
parentb5b8184a326352877d97be10ef3812dd760e5d2f (diff)
downloadgnunet-7540ebcd02d9bfe0a690689a1f57952eda5b5c81.tar.gz
gnunet-7540ebcd02d9bfe0a690689a1f57952eda5b5c81.zip
Merge branch 'master' of https://gnunet.org/git/gnunet
Diffstat (limited to 'doc/documentation')
-rw-r--r--doc/documentation/chapters/keyconcepts.texi308
-rw-r--r--doc/documentation/chapters/philosophy.texi446
-rw-r--r--doc/documentation/chapters/user.texi828
-rw-r--r--doc/documentation/gnunet.texi24
4 files changed, 785 insertions, 821 deletions
diff --git a/doc/documentation/chapters/keyconcepts.texi b/doc/documentation/chapters/keyconcepts.texi
new file mode 100644
index 000000000..55f79f1c7
--- /dev/null
+++ b/doc/documentation/chapters/keyconcepts.texi
@@ -0,0 +1,308 @@
1
2@cindex Key Concepts
3@node Key Concepts
4@chapter Key Concepts
5
6In this section, the fundamental concepts of GNUnet are explained.
7@c FIXME: Use @uref{https://docs.gnunet.org/bib/, research papers}
8@c once we have the new bibliography + subdomain setup.
9Most of them are also described in our research papers.
10First, some of the concepts used in the GNUnet framework are detailed.
11The second part describes concepts specific to anonymous file-sharing.
12
13@menu
14* Authentication::
15* Accounting to Encourage Resource Sharing::
16* Confidentiality::
17* Anonymity::
18* Deniability::
19* Peer Identities::
20* Zones in the GNU Name System (GNS Zones)::
21* Egos::
22@end menu
23
24@cindex Authentication
25@node Authentication
26@section Authentication
27
28Almost all peer-to-peer communications in GNUnet are between mutually
29authenticated peers. The authentication works by using ECDHE, that is a
30DH (Diffie---Hellman) key exchange using ephemeral elliptic curve
31cryptography. The ephemeral ECC (Elliptic Curve Cryptography) keys are
32signed using ECDSA (@uref{http://en.wikipedia.org/wiki/ECDSA, ECDSA}).
33The shared secret from ECDHE is used to create a pair of session keys
34@c FIXME: Long word for HKDF. More FIXMEs: Explain MITM etc.
35(using HKDF) which are then used to encrypt the communication between the
36two peers using both 256-bit AES (Advanced Encryption Standard)
37and 256-bit Twofish (with independently derived secret keys).
38As only the two participating hosts know the shared secret, this
39authenticates each packet
40without requiring signatures each time. GNUnet uses SHA-512
41(Secure Hash Algorithm) hash codes to verify the integrity of messages.
42
43@c FIXME: A while back I got the feedback that I should try and integrate
44@c explanation boxes in the long-run. So we could explain
45@c "man-in-the-middle" and "man-in-the-middle attacks" and other words
46@c which are not common knowledge. MITM is not common knowledge. To be
47@c selfcontained, we should be able to explain words and concepts used in
48@c a chapter or paragraph without hinting at Wikipedia and other online
49@c sources which might not be available or accessible to everyone.
50@c On the other hand we could write an introductionary chapter or book
51@c that we could then reference in each chapter, which sound like it
52@c could be more reusable.
53In GNUnet, the identity of a host is its public key. For that reason,
54man-in-the-middle attacks will not break the authentication or accounting
55goals. Essentially, for GNUnet, the IP of the host has nothing to do with
56the identity of the host. As the public key is the only thing that truly
57matters, faking an IP, a port or any other property of the underlying
58transport protocol is irrelevant. In fact, GNUnet peers can use
59multiple IPs (IPv4 and IPv6) on multiple ports --- or even not use the
60IP protocol at all (by running directly on layer 2).
61@c FIXME: "IP protocol" feels wrong, but could be what people expect, as
62@c IP is "the number" and "IP protocol" the protocol itself in general
63@c knowledge?
64
65@c NOTE: For consistency we will use @code{HELLO}s throughout this Manual.
66GNUnet uses a special type of message to communicate a binding between
67public (ECC) keys to their current network address. These messages are
68commonly called @code{HELLO}s or @code{peer advertisements}.
69They contain the public key of the peer and its current network
70addresses for various transport services.
71A transport service is a special kind of shared library that
72provides (possibly unreliable, out-of-order) message delivery between
73peers.
74For the UDP and TCP transport services, a network address is an IP and a
75port.
76GNUnet can also use other transports (HTTP, HTTPS, WLAN, etc.) which use
77various other forms of addresses. Note that any node can have many
78different active transport services at the same time,
79and each of these can have a different addresses.
80Binding messages expire after at most a week (the timeout can be
81shorter if the user configures the node appropriately).
82This expiration ensures that the network will eventually get rid of
83outdated advertisements.
84@footnote{Ronaldo A. Ferreira, Christian Grothoff, and Paul Ruth.
85A Transport Layer Abstraction for Peer-to-Peer Networks
86Proceedings of the 3rd International Symposium on Cluster Computing
87and the Grid (GRID 2003), 2003.
88(@uref{https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf, https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf})}
89
90@cindex Accounting to Encourage Resource Sharing
91@node Accounting to Encourage Resource Sharing
92@section Accounting to Encourage Resource Sharing
93
94Most distributed P2P networks suffer from a lack of defenses or
95precautions against attacks in the form of freeloading.
96While the intentions of an attacker and a freeloader are different, their
97effect on the network is the same; they both render it useless.
98Most simple attacks on networks such as @command{Gnutella}
99involve flooding the network with traffic, particularly
100with queries that are, in the worst case, multiplied by the network.
101
102In order to ensure that freeloaders or attackers have a minimal impact
103on the network, GNUnet's file-sharing implementation (@code{FS} tries
104to distinguish good (contributing) nodes from malicious (freeloading)
105nodes. In GNUnet, every file-sharing node keeps track of the behavior
106of every other node it has been in contact with. Many requests
107(depending on the application) are transmitted with a priority (or
108importance) level. That priority is used to establish how important
109the sender believes this request is. If a peer responds to an
110important request, the recipient will increase its trust in the
111responder: the responder contributed resources. If a peer is too busy
112to answer all requests, it needs to prioritize. For that, peers do
113not take the priorities of the requests received at face value.
114First, they check how much they trust the sender, and depending on
115that amount of trust they assign the request a (possibly lower)
116effective priority. Then, they drop the requests with the lowest
117effective priority to satisfy their resource constraints. This way,
118GNUnet's economic model ensures that nodes that are not currently
119considered to have a surplus in contributions will not be served if
120the network load is high.
121@footnote{Christian Grothoff. An Excess-Based Economic Model for Resource
122Allocation in Peer-to-Peer Networks. Wirtschaftsinformatik, June 2003.
123(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf})}
124@c 2009?
125
126@cindex Confidentiality
127@node Confidentiality
128@section Confidentiality
129
130Adversaries (malicious, bad actors) outside of GNUnet are not supposed
131to know what kind of actions a peer is involved in. Only the specific
132neighbor of a peer that is the corresponding sender or recipient of a
133message may know its contents, and even then application protocols may
134place further restrictions on that knowledge. In order to ensure
135confidentiality, GNUnet uses link encryption, that is each message
136exchanged between two peers is encrypted using a pair of keys only
137known to these two peers. Encrypting traffic like this makes any kind
138of traffic analysis much harder. Naturally, for some applications, it
139may still be desirable if even neighbors cannot determine the concrete
140contents of a message. In GNUnet, this problem is addressed by the
141specific application-level protocols. See for example the following
142sections @pxref{Anonymity}, @pxref{How file-sharing achieves Anonymity},
143and @pxref{Deniability}.
144
145@cindex Anonymity
146@node Anonymity
147@section Anonymity
148
149@menu
150* How file-sharing achieves Anonymity::
151@end menu
152
153Providing anonymity for users is the central goal for the anonymous
154file-sharing application. Many other design decisions follow in the
155footsteps of this requirement.
156Anonymity is never absolute. While there are various
157scientific metrics@footnote{Claudia Díaz, Stefaan Seys, Joris Claessens,
158and Bart Preneel. Towards measuring anonymity.
1592002.
160(@uref{https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf, https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf})}
161that can help quantify the level of anonymity that a given mechanism
162provides, there is no such thing as "complete anonymity".
163GNUnet's file-sharing implementation allows users to select for each
164operation (publish, search, download) the desired level of anonymity.
165The metric used is the amount of cover traffic available to hide the
166request.
167While this metric is not as good as, for example, the theoretical metric
168given in scientific metrics@footnote{likewise},
169it is probably the best metric available to a peer with a purely local
170view of the world that does not rely on unreliable external information.
171The default anonymity level is @code{1}, which uses anonymous routing but
172imposes no minimal requirements on cover traffic. It is possible
173to forego anonymity when this is not required. The anonymity level of
174@code{0} allows GNUnet to use more efficient, non-anonymous routing.
175
176@cindex How file-sharing achieves Anonymity
177@node How file-sharing achieves Anonymity
178@subsection How file-sharing achieves Anonymity
179
180Contrary to other designs, we do not believe that users achieve strong
181anonymity just because their requests are obfuscated by a couple of
182indirections. This is not sufficient if the adversary uses traffic
183analysis.
184The threat model used for anonymous file sharing in GNUnet assumes that
185the adversary is quite powerful.
186In particular, we assume that the adversary can see all the traffic on
187the Internet. And while we assume that the adversary
188can not break our encryption, we assume that the adversary has many
189participating nodes in the network and that it can thus see many of the
190node-to-node interactions since it controls some of the nodes.
191
192The system tries to achieve anonymity based on the idea that users can be
193anonymous if they can hide their actions in the traffic created by other
194users.
195Hiding actions in the traffic of other users requires participating in the
196traffic, bringing back the traditional technique of using indirection and
197source rewriting. Source rewriting is required to gain anonymity since
198otherwise an adversary could tell if a message originated from a host by
199looking at the source address. If all packets look like they originate
200from one node, the adversary can not tell which ones originate from that
201node and which ones were routed.
202Note that in this mindset, any node can decide to break the
203source-rewriting paradigm without violating the protocol, as this
204only reduces the amount of traffic that a node can hide its own traffic
205in.
206
207If we want to hide our actions in the traffic of other nodes, we must make
208our traffic indistinguishable from the traffic that we route for others.
209As our queries must have us as the receiver of the reply
210(otherwise they would be useless), we must put ourselves as the receiver
211of replies that actually go to other hosts; in other words, we must
212indirect replies.
213Unlike other systems, in anonymous file-sharing as implemented on top of
214GNUnet we do not have to indirect the replies if we don't think we need
215more traffic to hide our own actions.
216
217This increases the efficiency of the network as we can indirect less under
218higher load.@footnote{Krista Bennett and Christian Grothoff.
219GAP --- practical anonymous networking. In Proceedings of
220Designing Privacy Enhancing Technologies, 2003.
221(@uref{https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf, https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf})}
222
223@cindex Deniability
224@node Deniability
225@section Deniability
226
227Even if the user that downloads data and the server that provides data are
228anonymous, the intermediaries may still be targets. In particular, if the
229intermediaries can find out which queries or which content they are
230processing, a strong adversary could try to force them to censor
231certain materials.
232
233With the file-encoding used by GNUnet's anonymous file-sharing, this
234problem does not arise.
235The reason is that queries and replies are transmitted in
236an encrypted format such that intermediaries cannot tell what the query
237is for or what the content is about. Mind that this is not the same
238encryption as the link-encryption between the nodes. GNUnet has
239encryption on the network layer (link encryption, confidentiality,
240authentication) and again on the application layer (provided
241by @command{gnunet-publish}, @command{gnunet-download},
242@command{gnunet-search} and @command{gnunet-gtk}).
243@footnote{Christian Grothoff, Krista Grothoff, Tzvetan Horozov,
244and Jussi T. Lindgren.
245An Encoding for Censorship-Resistant Sharing.
2462009.
247(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf})}
248
249@cindex Peer Identities
250@node Peer Identities
251@section Peer Identities
252
253Peer identities are used to identify peers in the network and are unique
254for each peer. The identity for a peer is simply its public key, which is
255generated along with a private key the peer is started for the first time.
256While the identity is binary data, it is often expressed as ASCII string.
257For example, the following is a peer identity as you might see it in
258various places:
259
260@example
261UAT1S6PMPITLBKSJ2DGV341JI6KF7B66AC4JVCN9811NNEGQLUN0
262@end example
263
264@noindent
265You can find your peer identity by running @command{gnunet-peerinfo -s}.
266
267@cindex Zones in the GNU Name System (GNS Zones)
268@node Zones in the GNU Name System (GNS Zones)
269@section Zones in the GNU Name System (GNS Zones)
270
271@c FIXME: Explain or link to an explanation of the concept of public keys
272@c and private keys.
273@c FIXME: Rewrite for the latest GNS changes.
274GNS@footnote{Matthias Wachs, Martin Schanzenbach, and Christian Grothoff.
275A Censorship-Resistant, Privacy-Enhancing and Fully Decentralized Name
276System. In proceedings of 13th International Conference on Cryptology and
277Network Security (CANS 2014). 2014.
278@uref{https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf}}
279zones are similar to those of DNS zones, but instead of a hierarchy of
280authorities to governing their use, GNS zones are controlled by a private
281key.
282When you create a record in a DNS zone, that information is stored in your
283nameserver. Anyone trying to resolve your domain then gets pointed
284(hopefully) by the centralised authority to your nameserver.
285Whereas GNS, being fully decentralized by design, stores that information
286in DHT. The validity of the records is assured cryptographically, by
287signing them with the private key of the respective zone.
288
289Anyone trying to resolve records in a zone of your domain can then verify
290the signature of the records they get from the DHT and be assured that
291they are indeed from the respective zone.
292To make this work, there is a 1:1 correspondence between zones and
293their public-private key pairs.
294So when we talk about the owner of a GNS zone, that's really the owner of
295the private key.
296And a user accessing a zone needs to somehow specify the corresponding
297public key first.
298
299@cindex Egos
300@node Egos
301@section Egos
302
303@c what is the difference between peer identity and egos? It seems
304@c like both are linked to public-private key pair.
305Egos are your "identities" in GNUnet. Any user can assume multiple
306identities, for example to separate their activities online. Egos can
307correspond to "pseudonyms" or "real-world identities". Technically an
308ego is first of all a key pair of a public- and private-key.
diff --git a/doc/documentation/chapters/philosophy.texi b/doc/documentation/chapters/philosophy.texi
index 72c3476a3..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 monopoly. 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,399 +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 elliptic curve
165cryptography. The ephemeral ECC (Elliptic 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
177@c FIXME: A while back I got the feedback that I should try and integrate
178@c explanation boxes in the long-run. So we could explain
179@c "man-in-the-middle" and "man-in-the-middle attacks" and other words
180@c which are not common knowledge. MITM is not common knowledge. To be
181@c selfcontained, we should be able to explain words and concepts used in
182@c a chapter or paragraph without hinting at Wikipedia and other online
183@c sources which might not be available or accessible to everyone.
184@c On the other hand we could write an introductionary chapter or book
185@c that we could then reference in each chapter, which sound like it
186@c could be more reusable.
187In GNUnet, the identity of a host is its public key. For that reason,
188man-in-the-middle attacks will not break the authentication or accounting
189goals. Essentially, for GNUnet, the IP of the host has nothing to do with
190the identity of the host. As the public key is the only thing that truly
191matters, faking an IP, a port or any other property of the underlying
192transport protocol is irrelevant. In fact, GNUnet peers can use
193multiple IPs (IPv4 and IPv6) on multiple ports --- or even not use the
194IP protocol at all (by running directly on layer 2).
195@c FIXME: "IP protocol" feels wrong, but could be what people expect, as
196@c IP is "the number" and "IP protocol" the protocol itself in general
197@c knowledge?
198
199@c NOTE: For consistency we will use @code{HELLO}s throughout this Manual.
200GNUnet uses a special type of message to communicate a binding between
201public (ECC) keys to their current network address. These messages are
202commonly called @code{HELLO}s or @code{peer advertisements}.
203They contain the public key of the peer and its current network
204addresses for various transport services.
205A transport service is a special kind of shared library that
206provides (possibly unreliable, out-of-order) message delivery between
207peers.
208For the UDP and TCP transport services, a network address is an IP and a
209port.
210GNUnet can also use other transports (HTTP, HTTPS, WLAN, etc.) which use
211various other forms of addresses. Note that any node can have many
212different active transport services at the same time,
213and each of these can have a different addresses.
214Binding messages expire after at most a week (the timeout can be
215shorter if the user configures the node appropriately).
216This expiration ensures that the network will eventually get rid of
217outdated advertisements.
218@footnote{Ronaldo A. Ferreira, Christian Grothoff, and Paul Ruth.
219A Transport Layer Abstraction for Peer-to-Peer Networks
220Proceedings of the 3rd International Symposium on Cluster Computing
221and the Grid (GRID 2003), 2003.
222(@uref{https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf, https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf})}
223
224@cindex Accounting to Encourage Resource Sharing
225@node Accounting to Encourage Resource Sharing
226@subsection Accounting to Encourage Resource Sharing
227
228Most distributed P2P networks suffer from a lack of defenses or
229precautions against attacks in the form of freeloading.
230While the intentions of an attacker and a freeloader are different, their
231effect on the network is the same; they both render it useless.
232Most simple attacks on networks such as @command{Gnutella}
233involve flooding the network with traffic, particularly
234with queries that are, in the worst case, multiplied by the network.
235
236In order to ensure that freeloaders or attackers have a minimal impact
237on the network, GNUnet's file-sharing implementation (@code{FS} tries
238to distinguish good (contributing) nodes from malicious (freeloading)
239nodes. In GNUnet, every file-sharing node keeps track of the behavior
240of every other node it has been in contact with. Many requests
241(depending on the application) are transmitted with a priority (or
242importance) level. That priority is used to establish how important
243the sender believes this request is. If a peer responds to an
244important request, the recipient will increase its trust in the
245responder: the responder contributed resources. If a peer is too busy
246to answer all requests, it needs to prioritize. For that, peers do
247not take the priorities of the requests received at face value.
248First, they check how much they trust the sender, and depending on
249that amount of trust they assign the request a (possibly lower)
250effective priority. Then, they drop the requests with the lowest
251effective priority to satisfy their resource constraints. This way,
252GNUnet's economic model ensures that nodes that are not currently
253considered to have a surplus in contributions will not be served if
254the network load is high.
255@footnote{Christian Grothoff. An Excess-Based Economic Model for Resource
256Allocation in Peer-to-Peer Networks. Wirtschaftsinformatik, June 2003.
257(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf})}
258@c 2009?
259
260@cindex Confidentiality
261@node Confidentiality
262@subsection Confidentiality
263
264Adversaries (malicious, bad actors) outside of GNUnet are not supposed
265to know what kind of actions a peer is involved in. Only the specific
266neighbor of a peer that is the corresponding sender or recipient of a
267message may know its contents, and even then application protocols may
268place further restrictions on that knowledge. In order to ensure
269confidentiality, GNUnet uses link encryption, that is each message
270exchanged between two peers is encrypted using a pair of keys only
271known to these two peers. Encrypting traffic like this makes any kind
272of traffic analysis much harder. Naturally, for some applications, it
273may still be desirable if even neighbors cannot determine the concrete
274contents of a message. In GNUnet, this problem is addressed by the
275specific application-level protocols. See for example the following
276sections @pxref{Anonymity}, @pxref{How file-sharing achieves Anonymity},
277and @pxref{Deniability}.
278
279@cindex Anonymity
280@node Anonymity
281@subsection Anonymity
282 75
283@menu 76For certain applications like file-sharing GNUnet allows participants to trade degrees of anonymity in
284* How file-sharing achieves Anonymity:: 77exchange for increased efficiency. However, it is not possible for any
285@end menu 78user's efficiency requirements to compromise the anonymity
286 79of any other user.
287Providing anonymity for users is the central goal for the anonymous
288file-sharing application. Many other design decisions follow in the
289footsteps of this requirement.
290Anonymity is never absolute. While there are various
291scientific metrics@footnote{Claudia Díaz, Stefaan Seys, Joris Claessens,
292and Bart Preneel. Towards measuring anonymity.
2932002.
294(@uref{https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf, https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf})}
295that can help quantify the level of anonymity that a given mechanism
296provides, there is no such thing as "complete anonymity".
297GNUnet's file-sharing implementation allows users to select for each
298operation (publish, search, download) the desired level of anonymity.
299The metric used is the amount of cover traffic available to hide the
300request.
301While this metric is not as good as, for example, the theoretical metric
302given in scientific metrics@footnote{likewise},
303it is probably the best metric available to a peer with a purely local
304view of the world that does not rely on unreliable external information.
305The default anonymity level is @code{1}, which uses anonymous routing but
306imposes no minimal requirements on cover traffic. It is possible
307to forego anonymity when this is not required. The anonymity level of
308@code{0} allows GNUnet to use more efficient, non-anonymous routing.
309
310@cindex How file-sharing achieves Anonymity
311@node How file-sharing achieves Anonymity
312@subsubsection How file-sharing achieves Anonymity
313
314Contrary to other designs, we do not believe that users achieve strong
315anonymity just because their requests are obfuscated by a couple of
316indirections. This is not sufficient if the adversary uses traffic
317analysis.
318The threat model used for anonymous file sharing in GNUnet assumes that
319the adversary is quite powerful.
320In particular, we assume that the adversary can see all the traffic on
321the Internet. And while we assume that the adversary
322can not break our encryption, we assume that the adversary has many
323participating nodes in the network and that it can thus see many of the
324node-to-node interactions since it controls some of the nodes.
325
326The system tries to achieve anonymity based on the idea that users can be
327anonymous if they can hide their actions in the traffic created by other
328users.
329Hiding actions in the traffic of other users requires participating in the
330traffic, bringing back the traditional technique of using indirection and
331source rewriting. Source rewriting is required to gain anonymity since
332otherwise an adversary could tell if a message originated from a host by
333looking at the source address. If all packets look like they originate
334from one node, the adversary can not tell which ones originate from that
335node and which ones were routed.
336Note that in this mindset, any node can decide to break the
337source-rewriting paradigm without violating the protocol, as this
338only reduces the amount of traffic that a node can hide its own traffic
339in.
340
341If we want to hide our actions in the traffic of other nodes, we must make
342our traffic indistinguishable from the traffic that we route for others.
343As our queries must have us as the receiver of the reply
344(otherwise they would be useless), we must put ourselves as the receiver
345of replies that actually go to other hosts; in other words, we must
346indirect replies.
347Unlike other systems, in anonymous file-sharing as implemented on top of
348GNUnet we do not have to indirect the replies if we don't think we need
349more traffic to hide our own actions.
350
351This increases the efficiency of the network as we can indirect less under
352higher load.@footnote{Krista Bennett and Christian Grothoff.
353GAP --- practical anonymous networking. In Proceedings of
354Designing Privacy Enhancing Technologies, 2003.
355(@uref{https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf, https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf})}
356
357@cindex Deniability
358@node Deniability
359@subsection Deniability
360
361Even if the user that downloads data and the server that provides data are
362anonymous, the intermediaries may still be targets. In particular, if the
363intermediaries can find out which queries or which content they are
364processing, a strong adversary could try to force them to censor
365certain materials.
366
367With the file-encoding used by GNUnet's anonymous file-sharing, this
368problem does not arise.
369The reason is that queries and replies are transmitted in
370an encrypted format such that intermediaries cannot tell what the query
371is for or what the content is about. Mind that this is not the same
372encryption as the link-encryption between the nodes. GNUnet has
373encryption on the network layer (link encryption, confidentiality,
374authentication) and again on the application layer (provided
375by @command{gnunet-publish}, @command{gnunet-download},
376@command{gnunet-search} and @command{gnunet-gtk}).
377@footnote{Christian Grothoff, Krista Grothoff, Tzvetan Horozov,
378and Jussi T. Lindgren.
379An Encoding for Censorship-Resistant Sharing.
3802009.
381(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf})}
382
383@cindex Peer Identities
384@node Peer Identities
385@subsection Peer Identities
386
387Peer identities are used to identify peers in the network and are unique
388for each peer. The identity for a peer is simply its public key, which is
389generated along with a private key the peer is started for the first time.
390While the identity is binary data, it is often expressed as ASCII string.
391For example, the following is a peer identity as you might see it in
392various places:
393
394@example
395UAT1S6PMPITLBKSJ2DGV341JI6KF7B66AC4JVCN9811NNEGQLUN0
396@end example
397
398@noindent
399You can find your peer identity by running @command{gnunet-peerinfo -s}.
400
401@cindex Zones in the GNU Name System (GNS Zones)
402@node Zones in the GNU Name System (GNS Zones)
403@subsection Zones in the GNU Name System (GNS Zones)
404
405@c FIXME: Explain or link to an explanation of the concept of public keys
406@c and private keys.
407@c FIXME: Rewrite for the latest GNS changes.
408GNS@footnote{Matthias Wachs, Martin Schanzenbach, and Christian Grothoff.
409A Censorship-Resistant, Privacy-Enhancing and Fully Decentralized Name
410System. In proceedings of 13th International Conference on Cryptology and
411Network Security (CANS 2014). 2014.
412@uref{https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf}}
413zones are similar to those of DNS zones, but instead of a hierarchy of
414authorities to governing their use, GNS zones are controlled by a private
415key.
416When you create a record in a DNS zone, that information is stored in your
417nameserver. Anyone trying to resolve your domain then gets pointed
418(hopefully) by the centralised authority to your nameserver.
419Whereas GNS, being fully decentralized by design, stores that information
420in DHT. The validity of the records is assured cryptographically, by
421signing them with the private key of the respective zone.
422
423Anyone trying to resolve records in a zone of your domain can then verify
424the signature of the records they get from the DHT and be assured that
425they are indeed from the respective zone.
426To make this work, there is a 1:1 correspondence between zones and
427their public-private key pairs.
428So when we talk about the owner of a GNS zone, that's really the owner of
429the private key.
430And a user accessing a zone needs to somehow specify the corresponding
431public key first.
432
433@cindex Egos
434@node Egos
435@subsection Egos
436 80
437@c what is the difference between peer identity and egos? It seems
438@c like both are linked to public-private key pair.
439Egos are your "identities" in GNUnet. Any user can assume multiple
440identities, for example to separate their activities online. Egos can
441correspond to "pseudonyms" or "real-world identities". Technically an
442ego is first of all a key pair of a public- and private-key.
diff --git a/doc/documentation/chapters/user.texi b/doc/documentation/chapters/user.texi
index 9c9bd8df8..2dd6cbcb5 100644
--- a/doc/documentation/chapters/user.texi
+++ b/doc/documentation/chapters/user.texi
@@ -20,232 +20,32 @@ always welcome.
20 20
21 21
22@menu 22@menu
23* Checking the Installation:: 23* Start and stop GNUnet::
24* First steps - File-sharing::
25* First steps - Using the GNU Name System:: 24* First steps - Using the GNU Name System::
26* First steps - Using GNUnet Conversation:: 25* First steps - Using GNUnet Conversation::
27* First steps - Using the GNUnet VPN:: 26* First steps - Using the GNUnet VPN::
28* File-sharing:: 27* File-sharing::
29* The GNU Name System:: 28* The GNU Name System::
30* Using the Virtual Public Network:: 29* Using the Virtual Public Network::
31* The graphical configuration interface:: 30* MOVE TO INSTALL The graphical configuration interface::
32* How to start and stop a GNUnet peer:: 31* MOVE TO INSTALL Checking the Installation::
32* MOVE TO INSTALL Config Leftovers::
33@end menu 33@end menu
34 34
35@node Checking the Installation 35@node Start and stop GNUnet
36@section Checking the Installation 36@section Start and stop GNUnet
37@c %**end of header
38
39This section describes a quick, casual way to check if your GNUnet
40installation works. However, if it does not, we do not cover
41steps for recovery --- for this, please study the instructions
42provided in the developer handbook as well as the system-specific
43instruction in the source code repository@footnote{The system specific instructions are not provided as part of this handbook!}.
44
45
46@menu
47* gnunet-gtk::
48* Statistics::
49* Peer Information::
50@end menu
51
52@cindex GNUnet GTK
53@cindex GTK
54@cindex GTK user interface
55@node gnunet-gtk
56@subsection gnunet-gtk
57@c %**end of header
58
59The @command{gnunet-gtk} package contains several graphical
60user interfaces for the respective GNUnet applications.
61Currently these interfaces cover:
62
63@itemize @bullet
64@item Statistics
65@item Peer Information
66@item GNU Name System
67@item File Sharing
68@item Identity Management
69@item Conversation
70@end itemize
71 37
72@node Statistics 38Previous to use any GNUnet-based application, one has to start a node:
73@subsection Statistics
74@c %**end of header
75
76First, you should launch GNUnet gtk@footnote{Obviously you should also start gnunet, via gnunet-arm or the system provided method}.
77You can do this from the command-line by typing
78 39
79@example 40@example
80gnunet-statistics-gtk 41$ gnunet-arm -s -l gnunet.log
81@end example 42@end example
82 43
83If your peer@footnote{The term ``peer'' is a common word used in federated and distributed networks to describe a participating device which is connected to the network. Thus, your Personal Computer or whatever it is you are looking at the Gtk+ interface describes a ``Peer'' or a ``Node''.} 44To stop GNUnet:
84is running correctly, you should see a bunch of lines,
85all of which should be ``significantly'' above zero (at least if your
86peer has been running for more than a few seconds). The lines indicate
87how many other peers your peer is connected to (via different
88mechanisms) and how large the entire overlay network is currently
89estimated to be. The X-axis represents time (in seconds since the
90start of @command{gnunet-gtk}).
91
92You can click on "Traffic" to see information about the amount of
93bandwidth your peer has consumed, and on "Storage" to check the amount
94of storage available and used by your peer. Note that "Traffic" is
95plotted cumulatively, so you should see a strict upwards trend in the
96traffic.
97
98@node Peer Information
99@subsection Peer Information
100@c %**end of header
101
102First, you should launch the graphical user interface. You can do
103this from the command-line by typing
104 45
105@example 46@example
106$ gnunet-peerinfo-gtk 47$ gnunet-arm -e
107@end example 48@end example
108
109Once you have done this, you will see a list of known peers (by the
110first four characters of their public key), their friend status (all
111should be marked as not-friends initially), their connectivity (green
112is connected, red is disconnected), assigned bandwidth, country of
113origin (if determined) and address information. If hardly any peers
114are listed and/or if there are very few peers with a green light for
115connectivity, there is likely a problem with your network
116configuration.
117
118@node First steps - File-sharing
119@section First steps - File-sharing
120@c %**end of header
121
122This chapter describes first steps for file-sharing with GNUnet.
123To start, you should launch @command{gnunet-fs-gtk}.
124
125As we want to be sure that the network contains the data that we are
126looking for for testing, we need to begin by publishing a file.
127
128
129@menu
130* Publishing::
131* Searching::
132* Downloading::
133@end menu
134
135@node Publishing
136@subsection Publishing
137@c %**end of header
138
139To publish a file, select "File Sharing" in the menu bar just below the
140"Statistics" icon, and then select "Publish" from the menu.
141
142Afterwards, the following publishing dialog will appear:
143
144@c Add image here
145
146In this dialog, select the "Add File" button. This will open a
147file selection dialog:
148
149@c Add image here
150
151Now, you should select a file from your computer to be published on
152GNUnet. To see more of GNUnet's features later, you should pick a
153PNG or JPEG file this time. You can leave all of the other options
154in the dialog unchanged. Confirm your selection by pressing the "OK"
155button in the bottom right corner. Now, you will briefly see a
156"Messages..." dialog pop up, but most likely it will be too short for
157you to really read anything. That dialog is showing you progress
158information as GNUnet takes a first look at the selected file(s).
159For a normal image, this is virtually instant, but if you later
160import a larger directory you might be interested in the progress dialog
161and potential errors that might be encountered during processing.
162After the progress dialog automatically disappears, your file
163should now appear in the publishing dialog:
164
165@c Add image here
166
167Now, select the file (by clicking on the file name) and then click
168the "Edit" button. This will open the editing dialog:
169
170@c Add image here
171
172In this dialog, you can see many details about your file. In the
173top left area, you can see meta data extracted about the file,
174such as the original filename, the mimetype and the size of the image.
175In the top right, you should see a preview for the image
176(if GNU libextractor was installed correctly with the
177respective plugins). Note that if you do not see a preview, this
178is not a disaster, but you might still want to install more of
179GNU libextractor in the future. In the bottom left, the dialog contains
180a list of keywords. These are the keywords under which the file will be
181made available. The initial list will be based on the extracted meta data.
182Additional publishing options are in the right bottom corner. We will
183now add an additional keyword to the list of keywords. This is done by
184entering the keyword above the keyword list between the label "Keyword"
185and the "Add keyword" button. Enter "test" and select "Add keyword".
186Note that the keyword will appear at the bottom of the existing keyword
187list, so you might have to scroll down to see it. Afterwards, push the
188"OK" button at the bottom right of the dialog.
189
190You should now be back at the "Publish content on GNUnet" dialog. Select
191"Execute" in the bottom right to close the dialog and publish your file
192on GNUnet! Afterwards, you should see the main dialog with a new area
193showing the list of published files (or ongoing publishing operations
194with progress indicators):
195
196@c Add image here
197
198@node Searching
199@subsection Searching
200@c %**end of header
201
202Below the menu bar, there are four entry widges labeled "Namespace",
203"Keywords", "Anonymity" and "Mime-type" (from left to right). These
204widgets are used to control searching for files in GNUnet. Between the
205"Keywords" and "Anonymity" widgets, there is also a big "Search" button,
206which is used to initiate the search. We will ignore the "Namespace",
207"Anonymity" and "Mime-type" options in this tutorial, please leave them
208empty. Instead, simply enter "test" under "Keywords" and press "Search".
209Afterwards, you should immediately see a new tab labeled after your
210search term, followed by the (current) number of search
211results --- "(15)" in our screenshot. Note that your results may
212vary depending on what other users may have shared and how your
213peer is connected.
214
215You can now select one of the search results. Once you do this,
216additional information about the result should be displayed on the
217right. If available, a preview image should appear on the top right.
218Meta data describing the file will be listed at the bottom right.
219
220Once a file is selected, at the bottom of the search result list
221a little area for downloading appears.
222
223@node Downloading
224@subsection Downloading
225@c %**end of header
226
227In the downloading area, you can select the target directory (default is
228"Downloads") and specify the desired filename (by default the filename it
229taken from the meta data of the published file). Additionally, you can
230specify if the download should be anonymous and (for directories) if
231the download should be recursive. In most cases, you can simply start
232the download with the "Download!" button.
233
234Once you selected download, the progress of the download will be
235displayed with the search result. You may need to resize the result
236list or scroll to the right. The "Status" column shows the current
237status of the download, and "Progress" how much has been completed.
238When you close the search tab (by clicking on the "X" button next to
239the "test" label), ongoing and completed downloads are not aborted
240but moved to a special "*" tab.
241
242You can remove completed downloads from the "*" tab by clicking the
243cleanup button next to the "*". You can also abort downloads by right
244clicking on the respective download and selecting "Abort download"
245from the menu.
246
247That's it, you now know the basics for file-sharing with GNUnet!
248
249@node First steps - Using the GNU Name System 49@node First steps - Using the GNU Name System
250@section First steps - Using the GNU Name System 50@section First steps - Using the GNU Name System
251@c %**end of header 51@c %**end of header
@@ -309,7 +109,7 @@ rules - GO0T87F9BPMF8NKD5A54L2AH1T0GRML539TPFSRMCEA98182QD30
309@subsection The GNS Tab 109@subsection The GNS Tab
310@c %**end of header 110@c %**end of header
311 111
312Maintaining your zones is through the NAMESTORE service and is discussed 112Maintaing your zones is through the NAMESTORE service and is discussed
313here. You can manage your zone using @command{gnunet-identity} and 113here. You can manage your zone using @command{gnunet-identity} and
314@command{gnunet-namestore}, or most conveniently using 114@command{gnunet-namestore}, or most conveniently using
315@command{gnunet-namestore-gtk}. 115@command{gnunet-namestore-gtk}.
@@ -899,24 +699,198 @@ the searcher/downloader specify "no anonymity", non-anonymous
899file-sharing is used. If either user specifies some desired degree 699file-sharing is used. If either user specifies some desired degree
900of anonymity, anonymous file-sharing will be used. 700of anonymity, anonymous file-sharing will be used.
901 701
902In this chapter, we will first look at the various concepts in GNUnet's 702After a short introduction, we will first look at the various concepts in
903file-sharing implementation. Then, we will discuss specifics as to 703GNUnet's file-sharing implementation. Then, we will discuss specifics as to how
904how they impact users that publish, search or download files. 704they impact users that publish, search or download files.
905
906 705
907 706
908@menu 707@menu
909* File-sharing Concepts:: 708* fs-Searching::
910* File-sharing Publishing:: 709* fs-Downloading::
911* File-sharing Searching:: 710* fs-Publishing::
912* File-sharing Downloading:: 711* fs-Concepts::
913* File-sharing Directories:: 712* fs-Directories::
914* File-sharing Namespace Management:: 713* Namespace Management::
915* File-Sharing URIs:: 714* File-Sharing URIs::
715* GTK User Interface::
916@end menu 716@end menu
917 717
918@node File-sharing Concepts 718@node fs-Searching
919@subsection File-sharing Concepts 719@subsection Searching
720@c %**end of header
721
722The command @command{gnunet-search} can be used to search
723for content on GNUnet. The format is:
724
725@example
726$ gnunet-search [-t TIMEOUT] KEYWORD
727@end example
728
729@noindent
730The -t option specifies that the query should timeout after
731approximately TIMEOUT seconds. A value of zero is interpreted
732as @emph{no timeout}, which is also the default. In this case,
733gnunet-search will never terminate (unless you press CTRL-C).
734
735If multiple words are passed as keywords, they will all be
736considered optional. Prefix keywords with a "+" to make them mandatory.
737
738Note that searching using
739
740@example
741$ gnunet-search Das Kapital
742@end example
743
744@noindent
745is not the same as searching for
746
747@example
748$ gnunet-search "Das Kapital"
749@end example
750
751@noindent
752as the first will match files shared under the keywords
753"Das" or "Kapital" whereas the second will match files
754shared under the keyword "Das Kapital".
755
756Search results are printed by gnunet-search like this:
757
758@c it will be better the avoid the ellipsis altogether because I don't
759@c understand the explanation below that
760@example
761#15:
762gnunet-download -o "COPYING" gnunet://fs/chk/PGK8M...3EK130.75446
763
764@end example
765
766@noindent
767The whole line is the command you would have to enter to download
768the file. The argument passed to @code{-o} is the suggested
769filename (you may change it to whatever you like).
770It is followed by the key for decrypting the file, the query for searching the
771file, a checksum (in hexadecimal) finally the size of the file in bytes.
772
773@node fs-Downloading
774@subsection Downloading
775@c %**end of header
776
777In order to download a file, you need the whole line returned by
778@command{gnunet-search}.
779You can then use the tool @command{gnunet-download} to obtain the file:
780
781@example
782$ gnunet-download -o <FILENAME> <GNUNET-URL>
783@end example
784
785@noindent
786FILENAME specifies the name of the file where GNUnet is supposed
787to write the result. Existing files are overwritten. If the
788existing file contains blocks that are identical to the
789desired download, those blocks will not be downloaded again
790(automatic resume).
791
792If you want to download the GPL from the previous example,
793you do the following:
794
795@example
796$ gnunet-download -o "COPYING" gnunet://fs/chk/PGK8M...3EK130.75446
797@end example
798
799@noindent
800If you ever have to abort a download, you can continue it at any time by
801re-issuing @command{gnunet-download} with the same filename.
802In that case, GNUnet will @strong{not} download blocks again that are
803already present.
804
805GNUnet's file-encoding mechanism will ensure file integrity, even if the
806existing file was not downloaded from GNUnet in the first place.
807
808You may want to use the @command{-V} switch to turn on verbose reporting. In
809this case, @command{gnunet-download} will print the current number of bytes
810downloaded whenever new data was received.
811
812@node fs-Publishing
813@subsection Publishing
814@c %**end of header
815
816The command @command{gnunet-publish} can be used to add content
817to the network. The basic format of the command is
818
819@example
820$ gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME
821@end example
822
823For example
824@example
825$ gnunet-publish -m "description:GNU License" -k gpl -k test -m "mimetype:text/plain" COPYING
826@end example
827
828@menu
829* Important command-line options::
830* Indexing vs. Inserting::
831@end menu
832
833@node Important command-line options
834@subsubsection Important command-line options
835@c %**end of header
836
837The option @code{-k} is used to specify keywords for the file that
838should be inserted. You can supply any number of keywords,
839and each of the keywords will be sufficient to locate and
840retrieve the file. Please note that you must use the @code{-k} option
841more than once -- one for each expression you use as a keyword for
842the filename.
843
844The -m option is used to specify meta-data, such as descriptions.
845You can use -m multiple times. The TYPE passed must be from the
846list of meta-data types known to libextractor. You can obtain this
847list by running @command{extract -L}. Use quotes around the entire
848meta-data argument if the value contains spaces. The meta-data
849is displayed to other users when they select which files to
850download. The meta-data and the keywords are optional and
851maybe inferred using @code{GNU libextractor}.
852
853gnunet-publish has a few additional options to handle namespaces and
854directories. See the man-page for details.
855
856@node Indexing vs. Inserting
857@subsubsection Indexing vs Inserting
858@c %**end of header
859
860By default, GNUnet indexes a file instead of making a full copy.
861This is much more efficient, but requries the file to stay unaltered
862at the location where it was when it was indexed. If you intend to move,
863delete or alter a file, consider using the option @code{-n} which will
864force GNUnet to make a copy of the file in the database.
865
866Since it is much less efficient, this is strongly discouraged for large
867files. When GNUnet indexes a file (default), GNUnet does @strong{not}
868create an additional encrypted copy of the file but just computes a
869summary (or index) of the file. That summary is approximately two percent
870of the size of the original file and is stored in GNUnet's database.
871Whenever a request for a part of an indexed file reaches GNUnet,
872this part is encrypted on-demand and send out. This way, there is no
873need for an additional encrypted copy of the file to stay anywhere
874on the drive. This is different from other systems, such as Freenet,
875where each file that is put online must be in Freenet's database in
876encrypted format, doubling the space requirements if the user wants
877to preseve a directly accessible copy in plaintext.
878
879Thus indexing should be used for all files where the user will keep
880using this file (at the location given to gnunet-publish) and does
881not want to retrieve it back from GNUnet each time. If you want to
882remove a file that you have indexed from the local peer, use the tool
883@command{gnunet-unindex} to un-index the file.
884
885The option @code{-n} may be used if the user fears that the file might
886be found on their drive (assuming the computer comes under the control
887of an adversary). When used with the @code{-n} flag, the user has a
888much better chance of denying knowledge of the existence of the file,
889even if it is still (encrypted) on the drive and the adversary is
890able to crack the encryption (e.g. by guessing the keyword.
891
892@node fs-Concepts
893@subsection Concepts
920@c %**end of header 894@c %**end of header
921 895
922Sharing files in GNUnet is not quite as simple as in traditional 896Sharing files in GNUnet is not quite as simple as in traditional
@@ -1072,184 +1046,9 @@ replication level into the network, and then decrement the replication
1072level by one. If all blocks reach replication level zero, the 1046level by one. If all blocks reach replication level zero, the
1073selection is simply random. 1047selection is simply random.
1074 1048
1075@node File-sharing Publishing
1076@subsection File-sharing Publishing
1077@c %**end of header
1078
1079The command @command{gnunet-publish} can be used to add content
1080to the network. The basic format of the command is
1081
1082@example
1083$ gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME
1084@end example
1085
1086
1087@menu
1088* Important command-line options::
1089* Indexing vs. Inserting::
1090@end menu
1091
1092@node Important command-line options
1093@subsubsection Important command-line options
1094@c %**end of header
1095
1096The option @code{-k} is used to specify keywords for the file that
1097should be inserted. You can supply any number of keywords,
1098and each of the keywords will be sufficient to locate and
1099retrieve the file. Please note that you must use the @code{-k} option
1100more than once -- one for each expression you use as a keyword for
1101the filename.
1102
1103The -m option is used to specify meta-data, such as descriptions.
1104You can use -m multiple times. The TYPE passed must be from the
1105list of meta-data types known to libextractor. You can obtain this
1106list by running @command{extract -L}. Use quotes around the entire
1107meta-data argument if the value contains spaces. The meta-data
1108is displayed to other users when they select which files to
1109download. The meta-data and the keywords are optional and
1110maybe inferred using @code{GNU libextractor}.
1111
1112gnunet-publish has a few additional options to handle namespaces and
1113directories. See the man-page for details.
1114
1115@node Indexing vs. Inserting
1116@subsubsection Indexing vs Inserting
1117@c %**end of header
1118
1119By default, GNUnet indexes a file instead of making a full copy.
1120This is much more efficient, but requries the file to stay unaltered
1121at the location where it was when it was indexed. If you intend to move,
1122delete or alter a file, consider using the option @code{-n} which will
1123force GNUnet to make a copy of the file in the database.
1124
1125Since it is much less efficient, this is strongly discouraged for large
1126files. When GNUnet indexes a file (default), GNUnet does @strong{not}
1127create an additional encrypted copy of the file but just computes a
1128summary (or index) of the file. That summary is approximately two percent
1129of the size of the original file and is stored in GNUnet's database.
1130Whenever a request for a part of an indexed file reaches GNUnet,
1131this part is encrypted on-demand and send out. This way, there is no
1132need for an additional encrypted copy of the file to stay anywhere
1133on the drive. This is different from other systems, such as Freenet,
1134where each file that is put online must be in Freenet's database in
1135encrypted format, doubling the space requirements if the user wants
1136to preseve a directly accessible copy in plaintext.
1137
1138Thus indexing should be used for all files where the user will keep
1139using this file (at the location given to gnunet-publish) and does
1140not want to retrieve it back from GNUnet each time. If you want to
1141remove a file that you have indexed from the local peer, use the tool
1142@command{gnunet-unindex} to un-index the file.
1143 1049
1144The option @code{-n} may be used if the user fears that the file might 1050@node fs-Directories
1145be found on their drive (assuming the computer comes under the control 1051@subsection Directories
1146of an adversary). When used with the @code{-n} flag, the user has a
1147much better chance of denying knowledge of the existence of the file,
1148even if it is still (encrypted) on the drive and the adversary is
1149able to crack the encryption (e.g. by guessing the keyword.
1150
1151@node File-sharing Searching
1152@subsection File-sharing Searching
1153@c %**end of header
1154
1155The command @command{gnunet-search} can be used to search
1156for content on GNUnet. The format is:
1157
1158@example
1159$ gnunet-search [-t TIMEOUT] KEYWORD
1160@end example
1161
1162@noindent
1163The -t option specifies that the query should timeout after
1164approximately TIMEOUT seconds. A value of zero is interpreted
1165as @emph{no timeout}, which is also the default. In this case,
1166gnunet-search will never terminate (unless you press CTRL-C).
1167
1168If multiple words are passed as keywords, they will all be
1169considered optional. Prefix keywords with a "+" to make them mandatory.
1170
1171Note that searching using
1172
1173@example
1174$ gnunet-search Das Kapital
1175@end example
1176
1177@noindent
1178is not the same as searching for
1179
1180@example
1181$ gnunet-search "Das Kapital"
1182@end example
1183
1184@noindent
1185as the first will match files shared under the keywords
1186"Das" or "Kapital" whereas the second will match files
1187shared under the keyword "Das Kapital".
1188
1189Search results are printed by gnunet-search like this:
1190
1191@c it will be better the avoid the ellipsis altogether because I don't
1192@c understand the explanation below that
1193@example
1194$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...C92.17992
1195=> The GNU Public License <= (mimetype: text/plain)
1196@end example
1197
1198@noindent
1199The first line is the command you would have to enter to download
1200the file. The argument passed to @code{-o} is the suggested
1201filename (you may change it to whatever you like).
1202@c except it's triple dash in the above example ---
1203The @code{--} is followed by key for decrypting the file,
1204the query for searching the file, a checksum (in hexadecimal)
1205finally the size of the file in bytes.
1206The second line contains the description of the file; here this is
1207"The GNU Public License" and the mime-type (see the options for
1208gnunet-publish on how to specify these).
1209
1210@node File-sharing Downloading
1211@subsection File-sharing Downloading
1212@c %**end of header
1213
1214In order to download a file, you need the three values returned by
1215@command{gnunet-search}.
1216You can then use the tool @command{gnunet-download} to obtain the file:
1217
1218@example
1219$ gnunet-download -o FILENAME --- GNUNETURL
1220@end example
1221
1222@noindent
1223FILENAME specifies the name of the file where GNUnet is supposed
1224to write the result. Existing files are overwritten. If the
1225existing file contains blocks that are identical to the
1226desired download, those blocks will not be downloaded again
1227(automatic resume).
1228
1229If you want to download the GPL from the previous example,
1230you do the following:
1231
1232@example
1233$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...92.17992
1234@end example
1235
1236@noindent
1237If you ever have to abort a download, you can continue it at any time by
1238re-issuing @command{gnunet-download} with the same filename.
1239In that case, GNUnet will @strong{not} download blocks again that are
1240already present.
1241
1242GNUnet's file-encoding mechanism will ensure file integrity, even if the
1243existing file was not downloaded from GNUnet in the first place.
1244
1245You may want to use the @command{-V} switch (must be added before
1246@c Same as above it's triple dash
1247the @command{--}) to turn on verbose reporting. In this case,
1248@command{gnunet-download} will print the current number of
1249bytes downloaded whenever new data was received.
1250
1251@node File-sharing Directories
1252@subsection File-sharing Directories
1253@c %**end of header 1052@c %**end of header
1254 1053
1255Directories are shared just like ordinary files. If you download a 1054Directories are shared just like ordinary files. If you download a
@@ -1264,8 +1063,8 @@ typically includes the mime-type, description, a filename and
1264other meta information, and possibly even the full original file 1063other meta information, and possibly even the full original file
1265(if it was small). 1064(if it was small).
1266 1065
1267@node File-sharing Namespace Management 1066@node Namespace Management
1268@subsection File-sharing Namespace Management 1067@subsection Namespace Management
1269@c %**end of header 1068@c %**end of header
1270 1069
1271@b{Please note that the text in this subsection is outdated and needs} 1070@b{Please note that the text in this subsection is outdated and needs}
@@ -1436,6 +1235,135 @@ chosen keyword (or password!). A commonly used identifier is
1436"root" which by convention refers to some kind of index or other 1235"root" which by convention refers to some kind of index or other
1437entry point into the namespace. 1236entry point into the namespace.
1438 1237
1238@node GTK User Interface
1239@subsection GTK User Interface
1240This chapter describes first steps for file-sharing with GNUnet.
1241To start, you should launch @command{gnunet-fs-gtk}.
1242
1243As we want to be sure that the network contains the data that we are
1244looking for for testing, we need to begin by publishing a file.
1245
1246@menu
1247* gtk-Publishing::
1248* gtk-Searching::
1249* gtk-Downloading::
1250@end menu
1251
1252@node gtk-Publishing
1253@subsubsection Publishing
1254@c %**end of header
1255
1256To publish a file, select "File Sharing" in the menu bar just below the
1257"Statistics" icon, and then select "Publish" from the menu.
1258
1259Afterwards, the following publishing dialog will appear:
1260
1261@c Add image here
1262
1263In this dialog, select the "Add File" button. This will open a
1264file selection dialog:
1265
1266@c Add image here
1267
1268Now, you should select a file from your computer to be published on
1269GNUnet. To see more of GNUnet's features later, you should pick a
1270PNG or JPEG file this time. You can leave all of the other options
1271in the dialog unchanged. Confirm your selection by pressing the "OK"
1272button in the bottom right corner. Now, you will briefly see a
1273"Messages..." dialog pop up, but most likely it will be too short for
1274you to really read anything. That dialog is showing you progress
1275information as GNUnet takes a first look at the selected file(s).
1276For a normal image, this is virtually instant, but if you later
1277import a larger directory you might be interested in the progress dialog
1278and potential errors that might be encountered during processing.
1279After the progress dialog automatically disappears, your file
1280should now appear in the publishing dialog:
1281
1282@c Add image here
1283
1284Now, select the file (by clicking on the file name) and then click
1285the "Edit" button. This will open the editing dialog:
1286
1287@c Add image here
1288
1289In this dialog, you can see many details about your file. In the
1290top left area, you can see meta data extracted about the file,
1291such as the original filename, the mimetype and the size of the image.
1292In the top right, you should see a preview for the image
1293(if GNU libextractor was installed correctly with the
1294respective plugins). Note that if you do not see a preview, this
1295is not a disaster, but you might still want to install more of
1296GNU libextractor in the future. In the bottom left, the dialog contains
1297a list of keywords. These are the keywords under which the file will be
1298made available. The initial list will be based on the extracted meta data.
1299Additional publishing options are in the right bottom corner. We will
1300now add an additional keyword to the list of keywords. This is done by
1301entering the keyword above the keyword list between the label "Keyword"
1302and the "Add keyword" button. Enter "test" and select "Add keyword".
1303Note that the keyword will appear at the bottom of the existing keyword
1304list, so you might have to scroll down to see it. Afterwards, push the
1305"OK" button at the bottom right of the dialog.
1306
1307You should now be back at the "Publish content on GNUnet" dialog. Select
1308"Execute" in the bottom right to close the dialog and publish your file
1309on GNUnet! Afterwards, you should see the main dialog with a new area
1310showing the list of published files (or ongoing publishing operations
1311with progress indicators):
1312
1313@c Add image here
1314
1315@node gtk-Searching
1316@subsubsection Searching
1317@c %**end of header
1318
1319Below the menu bar, there are four entry widges labeled "Namespace",
1320"Keywords", "Anonymity" and "Mime-type" (from left to right). These
1321widgets are used to control searching for files in GNUnet. Between the
1322"Keywords" and "Anonymity" widgets, there is also a big "Search" button,
1323which is used to initiate the search. We will ignore the "Namespace",
1324"Anonymity" and "Mime-type" options in this tutorial, please leave them
1325empty. Instead, simply enter "test" under "Keywords" and press "Search".
1326Afterwards, you should immediately see a new tab labeled after your
1327search term, followed by the (current) number of search
1328results --- "(15)" in our screenshot. Note that your results may
1329vary depending on what other users may have shared and how your
1330peer is connected.
1331
1332You can now select one of the search results. Once you do this,
1333additional information about the result should be displayed on the
1334right. If available, a preview image should appear on the top right.
1335Meta data describing the file will be listed at the bottom right.
1336
1337Once a file is selected, at the bottom of the search result list
1338a little area for downloading appears.
1339
1340@node gtk-Downloading
1341@subsubsection Downloading
1342@c %**end of header
1343
1344In the downloading area, you can select the target directory (default is
1345"Downloads") and specify the desired filename (by default the filename it
1346taken from the meta data of the published file). Additionally, you can
1347specify if the download should be anonynmous and (for directories) if
1348the download should be recursive. In most cases, you can simply start
1349the download with the "Download!" button.
1350
1351Once you selected download, the progress of the download will be
1352displayed with the search result. You may need to resize the result
1353list or scroll to the right. The "Status" column shows the current
1354status of the download, and "Progress" how much has been completed.
1355When you close the search tab (by clicking on the "X" button next to
1356the "test" label), ongoing and completed downloads are not aborted
1357but moved to a special "*" tab.
1358
1359You can remove completed downloads from the "*" tab by clicking the
1360cleanup button next to the "*". You can also abort downloads by right
1361clicking on the respective download and selecting "Abort download"
1362from the menu.
1363
1364That's it, you now know the basics for file-sharing with GNUnet!
1365
1366
1439@node The GNU Name System 1367@node The GNU Name System
1440@section The GNU Name System 1368@section The GNU Name System
1441@c %**end of header 1369@c %**end of header
@@ -2032,8 +1960,8 @@ that will terminate at the respective peer's service.
2032 1960
2033@c NOTE: Inserted from Installation Handbook in original ``order'': 1961@c NOTE: Inserted from Installation Handbook in original ``order'':
2034@c FIXME: Move this to User Handbook. 1962@c FIXME: Move this to User Handbook.
2035@node The graphical configuration interface 1963@node MOVE TO INSTALL The graphical configuration interface
2036@section The graphical configuration interface 1964@section MOVE TO INSTALL The graphical configuration interface
2037 1965
2038If you also would like to use @command{gnunet-gtk} and 1966If you also would like to use @command{gnunet-gtk} and
2039@command{gnunet-setup} (highly recommended for beginners), do: 1967@command{gnunet-setup} (highly recommended for beginners), do:
@@ -2264,7 +2192,7 @@ the configuration:
2264 2192
2265If you operate a peer permanently connected to GNUnet you can configure 2193If you operate a peer permanently connected to GNUnet you can configure
2266your peer to act as a hostlist server, providing other peers the list of 2194your peer to act as a hostlist server, providing other peers the list of
2267peers known to it. 2195peers known to him.
2268 2196
2269Your server can act as a bootstrap server and peers needing to obtain a 2197Your server can act as a bootstrap server and peers needing to obtain a
2270list of peers can contact it to download this list. 2198list of peers can contact it to download this list.
@@ -2883,7 +2811,7 @@ iwconfig wlan0 channel 1
2883@subsection Configuring HTTP(S) reverse proxy functionality using Apache or nginx 2811@subsection Configuring HTTP(S) reverse proxy functionality using Apache or nginx
2884 2812
2885The HTTP plugin supports data transfer using reverse proxies. A reverse 2813The HTTP plugin supports data transfer using reverse proxies. A reverse
2886proxy forwards the HTTP request it receives with a certain URL to another 2814proxy forwards the HTTP request he receives with a certain URL to another
2887webserver, here a GNUnet peer. 2815webserver, here a GNUnet peer.
2888 2816
2889So if you have a running Apache or nginx webserver you can configure it to 2817So if you have a running Apache or nginx webserver you can configure it to
@@ -3619,8 +3547,91 @@ desktop-user to "sudo" (i.e. using gtksudo) to the "gnunet" user account
3619and then runs "gnunet-arm -e", "gnunet-setup" and "gnunet-arm -s" in 3547and then runs "gnunet-arm -e", "gnunet-setup" and "gnunet-arm -s" in
3620sequence. 3548sequence.
3621 3549
3622@node How to start and stop a GNUnet peer 3550@node MOVE TO INSTALL Checking the Installation
3623@section How to start and stop a GNUnet peer 3551@section MOVE TO INSTALL Checking the Installation
3552@c %**end of header
3553
3554This section describes a quick, casual way to check if your GNUnet
3555installation works. However, if it does not, we do not cover
3556steps for recovery --- for this, please study the instructions
3557provided in the developer handbook as well as the system-specific
3558instruction in the source code repository@footnote{The system specific instructions are not provided as part of this handbook!}.
3559
3560
3561@menu
3562* gnunet-gtk::
3563* Statistics::
3564* Peer Information::
3565@end menu
3566
3567@cindex GNUnet GTK
3568@cindex GTK
3569@cindex GTK user interface
3570@node gnunet-gtk
3571@subsection gnunet-gtk
3572@c %**end of header
3573
3574The @command{gnunet-gtk} package contains several graphical
3575user interfaces for the respective GNUnet applications.
3576Currently these interfaces cover:
3577
3578@itemize @bullet
3579@item Statistics
3580@item Peer Information
3581@item GNU Name System
3582@item File Sharing
3583@item Identity Management
3584@item Conversation
3585@end itemize
3586
3587@node Statistics
3588@subsection Statistics
3589@c %**end of header
3590
3591First, you should launch GNUnet gtk@footnote{Obviously you should also start gnunet, via gnunet-arm or the system provided method}.
3592You can do this from the command-line by typing
3593
3594@example
3595gnunet-statistics-gtk
3596@end example
3597
3598If your peer@footnote{The term ``peer'' is a common word used in federated and distributed networks to describe a participating device which is connected to the network. Thus, your Personal Computer or whatever it is you are looking at the Gtk+ interface describes a ``Peer'' or a ``Node''.}
3599is running correctly, you should see a bunch of lines,
3600all of which should be ``significantly'' above zero (at least if your
3601peer has been running for more than a few seconds). The lines indicate
3602how many other peers your peer is connected to (via different
3603mechanisms) and how large the entire overlay network is currently
3604estimated to be. The X-axis represents time (in seconds since the
3605start of @command{gnunet-gtk}).
3606
3607You can click on "Traffic" to see information about the amount of
3608bandwidth your peer has consumed, and on "Storage" to check the amount
3609of storage available and used by your peer. Note that "Traffic" is
3610plotted cummulatively, so you should see a strict upwards trend in the
3611traffic.
3612
3613@node Peer Information
3614@subsection Peer Information
3615@c %**end of header
3616
3617First, you should launch the graphical user interface. You can do
3618this from the command-line by typing
3619
3620@example
3621$ gnunet-peerinfo-gtk
3622@end example
3623
3624Once you have done this, you will see a list of known peers (by the
3625first four characters of their public key), their friend status (all
3626should be marked as not-friends initially), their connectivity (green
3627is connected, red is disconnected), assigned bandwidth, country of
3628origin (if determined) and address information. If hardly any peers
3629are listed and/or if there are very few peers with a green light for
3630connectivity, there is likely a problem with your network
3631configuration.
3632
3633@node MOVE TO INSTALL Config Leftovers
3634@section MOVE TO INSTALL Config Leftovers
3624 3635
3625This section describes how to start a GNUnet peer. It assumes that you 3636This section describes how to start a GNUnet peer. It assumes that you
3626have already compiled and installed GNUnet and its' dependencies. 3637have already compiled and installed GNUnet and its' dependencies.
@@ -3949,3 +3960,4 @@ Furthermore, 'make install' will silently fail to set the DNS binaries to
3949be owned by group "gnunetdns" unless that group already exists (!). 3960be owned by group "gnunetdns" unless that group already exists (!).
3950An alternative name for the "gnunetdns" group can be specified using the 3961An alternative name for the "gnunetdns" group can be specified using the
3951@code{--with-gnunetdns=GRPNAME} configure option. 3962@code{--with-gnunetdns=GRPNAME} configure option.
3963
diff --git a/doc/documentation/gnunet.texi b/doc/documentation/gnunet.texi
index 0d539a9d7..5ba6f6b15 100644
--- a/doc/documentation/gnunet.texi
+++ b/doc/documentation/gnunet.texi
@@ -82,6 +82,7 @@ This document is the Reference Manual for GNUnet version @value{VERSION}.
82 82
83* Preface:: Chapter 0 83* Preface:: Chapter 0
84* Philosophy:: About GNUnet 84* Philosophy:: About GNUnet
85* Key Concepts:: Key concepts of GNUnet
85@c * Vocabulary:: Vocabulary 86@c * Vocabulary:: Vocabulary
86* Installing GNUnet:: Installing GNUnet 87* Installing GNUnet:: Installing GNUnet
87* Using GNUnet:: Using GNUnet 88* Using GNUnet:: Using GNUnet
@@ -105,11 +106,12 @@ Preface
105 106
106Philosophy 107Philosophy
107 108
108* Design Goals:: 109* Design Principles::
109* Security and Privacy:: 110* Privacy and Anonymity::
110* Versatility:: 111* Practicality::
111* Practicality:: 112
112* Key Concepts:: 113Key Concepts
114
113* Authentication:: 115* Authentication::
114* Accounting to Encourage Resource Sharing:: 116* Accounting to Encourage Resource Sharing::
115* Confidentiality:: 117* Confidentiality::
@@ -125,16 +127,16 @@ Installing GNUnet
125 127
126Using GNUnet 128Using GNUnet
127 129
128* Checking the Installation:: 130* Start and stop GNUnet::
129* First steps - File-sharing::
130* First steps - Using the GNU Name System:: 131* First steps - Using the GNU Name System::
131* First steps - Using GNUnet Conversation:: 132* First steps - Using GNUnet Conversation::
132* First steps - Using the GNUnet VPN:: 133* First steps - Using the GNUnet VPN::
133* File-sharing:: 134* File-sharing::
134* The GNU Name System:: 135* The GNU Name System::
135* Using the Virtual Public Network:: 136* Using the Virtual Public Network::
136* The graphical configuration interface:: 137* MOVE TO INSTALL The graphical configuration interface::
137* How to start and stop a GNUnet peer:: 138* MOVE TO INSTALL Checking the Installation::
139* MOVE TO INSTALL Config Leftovers::
138 140
139GNUnet Contributors Handbook 141GNUnet Contributors Handbook
140 142
@@ -196,6 +198,10 @@ GNUnet Developer Handbook
196@c ********************************************************************* 198@c *********************************************************************
197 199
198@c ********************************************************************* 200@c *********************************************************************
201@include chapters/keyconcepts.texi
202@c *********************************************************************
203
204@c *********************************************************************
199@include chapters/installation.texi 205@include chapters/installation.texi
200@c ********************************************************************* 206@c *********************************************************************
201 207