gnunet-handbook

The GNUnet Handbook
Log | Files | Refs

about.rst (28114B)


      1 ************
      2 About GNUnet
      3 ************
      4 
      5 GNUnet in its current version is the result of over 20 years of work
      6 from many contributors. So far, most contributions were made by
      7 volunteers or people paid to do fundamental research. At this stage,
      8 GNUnet remains an experimental system where significant parts of the
      9 software lack a reasonable degree of professionalism in its
     10 implementation. Furthermore, we are aware of a significant number of
     11 existing bugs and critical design flaws, as some unfortunate early
     12 design decisions remain to be rectified. There are still known open
     13 problems; GNUnet remains an active research project.
     14 
     15 The project was started in 2001 when some initial ideas for improving
     16 Freenet’s file-sharing turned out to be too radical to be easily
     17 realized within the scope of the existing Freenet project. We lost our
     18 first contributor on 11.9.2001 as the contributor realized that privacy
     19 may help terrorists. The rest of the team concluded that it was now even
     20 more important to fight for civil liberties. The first release was
     21 called “GNet” – already with the name GNUnet in mind, but without the
     22 blessing of GNU we did not dare to call it GNUnet immediately. A few
     23 months after the first release we contacted the GNU project, happily
     24 agreed to their governance model and became an official GNU package.
     25 
     26 Within the first year, we created GNU libextractor, a helper library for
     27 meta data extraction which has been used by a few other projects as
     28 well. 2003 saw the emergence of pluggable transports, the ability for
     29 GNUnet to use different mechanisms for communication, starting with TCP,
     30 UDP and SMTP (support for the latter was later dropped due to a lack of
     31 maintenance). In 2005, the project first started to evolve beyond the
     32 original file-sharing application with a first simple P2P chat. In 2007,
     33 we created GNU libmicrohttpd to support a pluggable transport based on
     34 HTTP. In 2009, the architecture was radically modularized into the
     35 multi-process system that exists today. Coincidentally, the first
     36 version of the ARM service (ARM: Automatic Restart Manager) was
     37 implemented a day before systemd was announced. From 2009 to 2014 work
     38 progressed rapidly thanks to a significant research grant from the
     39 Deutsche Forschungsgesellschaft. This resulted in particular in the
     40 creation of the R5N DHT, CADET, ATS and the GNU Name System. In 2010,
     41 GNUnet was selected as the basis for the secushare online social
     42 network, resulting in a significant growth of the core team. In 2013, we
     43 launched GNU Taler to address the challenge of convenient and
     44 privacy-preserving online payments. In 2015, the pretty Easy privacy
     45 (pEp) project announced that they will use GNUnet as the technology for
     46 their meta-data protection layer, ultimately resulting in GNUnet e.V.
     47 entering into a formal long-term collaboration with the pEp Foundation.
     48 In 2016, Taler Systems SA, a first startup using GNUnet technology, was
     49 founded with support from the community.
     50 
     51 GNUnet is not merely a technical project, but also a political mission:
     52 like the GNU project as a whole, we are writing software to achieve
     53 political goals with a focus on the human right of informational
     54 self-determination. Putting users in control of their computing has been
     55 the core driver of the GNU project. With GNUnet we are focusing on
     56 informational self-determination for collaborative computing and
     57 communication over networks.
     58 
     59 The Internet is shaped as much by code and protocols as it is by its
     60 associated political processes (IETF, ICANN, IEEE, etc.). Similarly its
     61 flaws are not limited to the protocol design. Thus, technical excellence
     62 by itself will not suffice to create a better network. We also need to
     63 build a community that is wise, humble and has a sense of humor to
     64 achieve our goal to create a technical foundation for a society we would
     65 like to live in.
     66 
     67 Project governance
     68 ==================
     69 
     70 GNUnet, like the GNU project and many other free software projects,
     71 follows the governance model of a benevolent dictator. This means that
     72 ultimately, the GNU project appoints the GNU maintainer and can overrule
     73 decisions made by the GNUnet maintainer. Similarly, the GNUnet
     74 maintainer can overrule any decisions made by individual developers.
     75 Still, in practice neither has happened in the last 20 years for GNUnet,
     76 and we hope to keep it that way.
     77 
     78 The current maintainers of GNUnet are:
     79 
     80 -  `Christian Grothoff <https://grothoff.org/christian/>`__
     81 -  `Martin Schanzenbach <https://schanzen.eu/>`__
     82 
     83 The GNUnet project is supported by GNUnet e.V., a German association
     84 where any developer can become a member. GNUnet e.V. serves as a legal
     85 entity to hold the copyrights to GNUnet. GNUnet e.V. may also choose to
     86 pay for project resources, and can collect donations as well as choose
     87 to adjust the license of the software (with the constraint that it has
     88 to remain free software). In 2018 we switched from GPL3 to AGPL3, in
     89 practice these changes do not happen very often.
     90 
     91 Philosophy
     92 ==========
     93 
     94 The primary goal of the GNUnet project is to provide a reliable, open,
     95 non-discriminating and censorship-resistant system for information
     96 exchange. We value free speech above state interests and intellectual
     97 monopoly. GNUnet’s long-term goal is to serve as a development platform
     98 for the next generation of Internet protocols.
     99 
    100 Participants are encouraged to contribute at least as much resources
    101 (storage, bandwidth) to the network as they consume, so that their
    102 participation does not have a negative impact on other users.
    103 
    104 Design Principles
    105 -----------------
    106 
    107 These are the GNUnet design principles, in order of importance:
    108 
    109 -  GNUnet must be implemented as Free Software — This means that you
    110    have the four essential freedoms: to run the program, to study and
    111    change the program in source code form, to redistribute exact copies,
    112    and to distribute modified versions.
    113    (https://www.gnu.org/philosophy/free-sw.html).
    114 -  GNUnet must minimize the amount of personally identifiable
    115    information exposed.
    116 -  GNUnet must be fully distributed and resilient to external attacks
    117    and rogue participants.
    118 -  GNUnet must be self-organizing and not depend on administrators or
    119    centralized infrastructure.
    120 -  GNUnet must inform the user which other participants have to be
    121    trusted when establishing private communications.
    122 -  GNUnet must be open and permit new peers to join.
    123 -  GNUnet must support a diverse range of applications and devices.
    124 -  GNUnet must use compartmentalization to protect sensitive
    125    information.
    126 -  The GNUnet architecture must be resource efficient.
    127 -  GNUnet must provide incentives for peers to contribute more resources
    128    than they consume.
    129 
    130 Privacy and Anonymity
    131 ---------------------
    132 
    133 The GNUnet protocols minimize the leakage of personally identifiable
    134 information of participants and do not allow adversaries to control,
    135 track, monitor or censor users activities. The GNUnet protocols also
    136 make it as hard as possible to disrupt operations by participating in
    137 the network with malicious intent.
    138 
    139 Analyzing participant’s activities becomes more difficult as the number
    140 of peers and applications that generate traffic on the network grows,
    141 even if the additional traffic generated is not related to anonymous
    142 communication. This is one of the reasons why GNUnet is developed as a
    143 peer-to-peer framework where many applications share the lower layers of
    144 an increasingly complex protocol stack. The GNUnet architecture
    145 encourages many different forms of peer-to-peer applications.
    146 
    147 Practicality
    148 ------------
    149 
    150 Wherever possible GNUnet allows the peer to adjust its operations and
    151 functionalities to specific use cases. A GNUnet peer running on a mobile
    152 device with limited battery for example might choose not to relay
    153 traffic for other participants.
    154 
    155 For certain applications like file-sharing GNUnet allows participants to
    156 trade degrees of anonymity in exchange for increased efficiency.
    157 However, it is not possible for any user’s efficiency requirements to
    158 compromise the anonymity of any other user.
    159 
    160 Key Concepts
    161 ============
    162 
    163 GNUnet is an alternative network stack for building secure, decentralized and privacy-preserving distributed applications. Our goal is to replace the old insecure Internet protocol stack. Starting from an application for secure publication of files, it has grown to include all kinds of basic protocol components and applications towards the creation of a GNU internet.
    164 
    165 Today, the actual use and thus the social requirements for a global network differs widely from those goals of 1970. While the Internet remains suitable for military use, where the network equipment is operated by a command hierarchy and when necessary isolated from the rest of the world, the situation is less tenable for civil society.
    166 
    167 Due to fundamental Internet design choices, Internet traffic can be misdirected, intercepted, censored and manipulated by hostile routers on the network. And indeed, the modern Internet has evolved exactly to the point where, as Matthew Green put it, "the network is hostile".
    168 
    169 We believe liberal societies need a network architecture that uses the anti-authoritarian decentralized peer-to-peer paradigm and privacy-preserving cryptographic protocols. The goal of the GNUnet project is to provide a Free Software realization of this ideal.
    170 
    171 Specifically, GNUnet tries to follow the following design principles, in order of importance:
    172 
    173   1. GNUnet must be implemented as Free Software.
    174   2. GNUnet must minimize the amount of personally identifiable information exposed.
    175   3. GNUnet must be fully distributed and resilient to external attacks and rogue participants.
    176   4. GNUnet must be self-organizing and not depend on administrators or centralized infrastructure.
    177   5. GNUnet must inform the user which other participants have to be trusted when establishing private communications.
    178   6. GNUnet must be open and permit new peers to join.
    179   7. GNUnet must support a diverse range of applications and devices.
    180   8. GNUnet must use compartmentalization to protect sensitive information.
    181   9. The GNUnet architecture must be resource efficient.
    182   10. GNUnet must provide incentives for peers to contribute more resources than they consume.
    183 
    184 Architecture
    185 ------------
    186 
    187 GNUnet consists of a set of services.
    188 In order to realize a peer-to-peer network stack, a subset of GNUnet subsystems
    189 emulate what can be found in the ISO/OSI layer of the Internet.
    190 (TODO insert image here)
    191 
    192 Peer Identities
    193 ~~~~~~~~~~~~~~~
    194 
    195 In GNUnet, the identity of a host is its public key called **Peer Identity**.
    196 For that reason, man-in-the-middle attacks will not break the authentication or
    197 accounting goals. Essentially, for GNUnet, the IP of the host has
    198 nothing to do with the identity of the host. As the public key is the
    199 only thing that truly matters, faking an IP, a port or any other
    200 property of the underlying transport protocol is irrelevant. In fact,
    201 GNUnet peers can use multiple IPs (IPv4 and IPv6) on multiple ports — or
    202 even not use the IP protocol at all (by running directly on layer 2).
    203 
    204 Peer identities are used to identify peers in the network and are unique
    205 for each peer. The identity for a peer is simply its public key, which
    206 is generated along with a private key when the peer is started for the
    207 first time. While the identity is binary data, it is often expressed as
    208 an ASCII string. For example, the following is a peer identity as you
    209 might see it in various places:
    210 
    211 ::
    212 
    213    UAT1S6PMPITLBKSJ2DGV341JI6KF7B66AC4JVCN9811NNEGQLUN0
    214 
    215 You can find your peer identity by running ``gnunet-core``.
    216 
    217 Almost all peer-to-peer communications in GNUnet are between mutually
    218 authenticated peers.
    219 GNUnet uses a special type of message to communicate a binding between
    220 public (ECC) keys to their current network address. These messages are
    221 commonly called **HELLOs** or peer advertisements. They contain the public
    222 key of the peer and its current network addresses for various transport
    223 services. A transport service is a special kind of shared library that
    224 provides (possibly unreliable, out-of-order) message delivery between
    225 peers. For the UDP and TCP transport services, a network address is an
    226 IP and a port. GNUnet can also use other transports (HTTP, HTTPS, WLAN,
    227 etc.) which use various other forms of addresses. Note that any node can
    228 have many different active transport services at the same time, and each
    229 of these can have a different addresses. Binding messages expire after
    230 at most a week (the timeout can be shorter if the user configures the
    231 node appropriately). This expiration ensures that the network will
    232 eventually get rid of outdated advertisements.
    233 
    234 For more information, refer to the following paper:
    235 
    236 Ronaldo A. Ferreira, Christian Grothoff, and Paul Ruth. A Transport
    237 Layer Abstraction for Peer-to-Peer Networks Proceedings of the 3rd
    238 International Symposium on Cluster Computing and the Grid (GRID 2003),
    239 2003. (https://git.gnunet.org/bibliography.git/plain/docs/transport.pdf)
    240 
    241 
    242 Security goals and threat model
    243 -------------------------
    244 
    245 GNUnet is designed as to subsist in the face of a strong adversaries (malicous, bad actors).
    246 This includes, in decending strength, malicous
    247 
    248   1. nation states,
    249   2. network operators,
    250   3. peer operators,
    251   4. and GNUnet users.
    252 
    253 External, network-level adversaries may attempt to identify GNUnet traffic
    254 and throttle or otherwise impair its use.
    255 To prevent easy identification, GNUnet communication is cryptographically and
    256 steganographically obfuscated.
    257 For example, GNUnet traffic can be made to look like QUIC or HTTP/3 traffic or
    258 even look like random noise on the network.
    259 Further, through the use of multiple communication protocols at the same time
    260 (e.g. QUIC and Ad-hoc WiFi), loss of a single communication method does not cause complete communication breakdown.
    261 Adversaries outside of GNUnet are not supposed
    262 to know what kind of actions a peer is involved in. Only the specific
    263 neighbor of a peer that is the corresponding sender or recipient of a
    264 message may know its contents, and then application protocols may
    265 place further restrictions on that knowledge. In order to ensure
    266 confidentiality, GNUnet uses link encryption, that is each message
    267 exchanged between two peers is encrypted using a pair of keys only known
    268 to these two peers. Encrypting traffic like this makes any kind of
    269 traffic analysis much harder. Naturally, for some applications, it may
    270 still be desirable if even neighbors cannot determine the concrete
    271 contents of a message. In GNUnet, this problem is addressed by the
    272 specific application-level protocols. See for example the following
    273 sections: `Anonymity <about.md#anonymity>`__, see `How file-sharing
    274 achieves Anonymity <about.md#how-file-sharing-achieves-anonymity>`__,
    275 and see `Deniability <about.md#deniability>`__.
    276 
    277 GNUnet attemtps to satisfy the following security goals in the face of those adversaries:
    278 
    279 1. Censorship resistance
    280 2. Confidential communication
    281 3. Anonymity (where possible)
    282 
    283 
    284 From the lowest layer to the applications layer, the securty goals and associated subsystems are:
    285 
    286 1. Base layer (Communicators/TRANSPORT): This layer optionally provides steganographic and ad-hoc security guarantees against external adversaries that largely depend on the communicator(s) used. For example, use of the HTTP3/QUIC communicator will use TLS and try to validate a certificate signed by the peer we want to connect to. Other communicators may not provide the same properties.
    287   - QUIC Communicator: Appears to be a regular TLS connection (EdDSA/X25519).
    288   - TCP/UDP Communicator: Uses Diffie-Hellman with Elligator (`LSD 0011 <https://lsd.gnunet.org/lsd0011/>`_) to look like random noise.
    289 2. Peer connectivity and routing layer (CORE, R5N): This layer provides a secure channel between two (physically) connected peers. Peers are mutually authenticated and a secure cryptographic channel is established, but there is no particular trust required between the communication partners. It does not assume any security guarantees from the previous layer. It provides confidential communication in the face of an external adversary. The R5N uses this layer to establish an overlay network (DHT).
    290   - CORE: DTLS-style KEMTLS called CAKE with EdDSA and X25519. Specification: `LSD 0012 <https://lsd.gnunet.org/lsd0012/>`_
    291   - R5N: EdDSA signatures for route recording: `LSD 0004 <https://lsd.gnunet.org/lsd0004/>`_
    292 3. Peer connectivity layer (CADET): This layer provides an end-to-end secure secure cryptographic channel between two peers. It is assumed that this channel is established between to peers that share a strong trust relationship.
    293   - CADET: Axolotl 3DH with EdDSA Peer Identities to provide perfect forward secrecy, post-compromise security, secure out-of-order delivery and participant repudication (deniability).
    294 4. Application layer: Each :ref:`subsystem <subsystems>` of GNUnet incorporates its own security mechanism taking the existing baseline of the GNUnet network as well as the adversary model into account. See the respective section in the User handbook.
    295   - GNS: Resource records are signed using EDDSA (or EdDSA) for data origin authentication and encrypted using AES-CTR (or EdDSA+XSalsa20-Poly1305) to achieve data confidentiality against certain adversaries. Public keys are blinded to prevent censorship. Specification: `LSD 0001 <https://lsd.gnunet.org/lsd0012/>`_
    296 
    297 
    298 Cryptography
    299 ------------
    300 
    301 Cryptographic Inventory
    302 ~~~~~~~~~~~~~~~~~~~~~~~
    303 
    304 GNUnet makes heavy use of standard, well-tested cryptographic primitives to
    305 implement its protocols. The primary primtives are:
    306 
    307 - Digital signatures: For Peer Identities and general (data origin) authentication. Scheme: EdDSA.
    308 - Key exchange and KEMs: For handshakes. Schemes: X25519 (with Ed25519-to-Curve25519 transformations where necessary, such as CORE).
    309 - Blindable signature keys: For the GNU Name System. Schemes: EDDSA and EdDSA.
    310 - Blind signatures: For blind signing. Primarily used by GNU Taler. Scheme: RSA-FDH.
    311 - Symmetric encryption: For secure communication. Schemes: XSalsa20-Poly1305, AES (to be phased out in favor of AEGIS where possible).
    312 - Public-key encryption: To send encrypted messages. Schemes: HPKE (RFC 9180), only DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, ChaCha20-Poly1305.
    313 - Hash functions and KDF: GNUnet primarily uses SHA(-512) and HKDF.
    314 
    315 Currently, no clear path to post-quantum primitives has been laid out.
    316 This is mostly due to open research questions in the areas of key blinding and blind signatures.
    317 
    318 Egos
    319 ~~~~
    320 
    321 **Egos** are your “identities” in GNUnet. Any user can assume multiple
    322 identities, for example to separate their activities online. Egos can
    323 correspond to “pseudonyms” or “real-world identities”. Technically an
    324 ego is first of all a key pair of a public- and private-key.
    325 The current primary use for Egos are in the GNU Name System as zone keys.
    326 
    327 Zones in the GNU Name System
    328 """"""""""""""""""""""""""""
    329 
    330 Egos are used as **GNS zones**.
    331 
    332 GNS zones are similar to those of DNS zones, but instead of a hierarchy
    333 of authorities to governing their use, GNS zones are controlled by a
    334 private key. When you create a record in a DNS zone, that information is
    335 stored in your nameserver. Anyone trying to resolve your domain then
    336 gets pointed (hopefully) by the centralised authority to your
    337 nameserver. Whereas GNS, being fully decentralized by design, stores
    338 that information in DHT. The validity of the records is assured
    339 cryptographically, by signing them with the private key of the
    340 respective zone.
    341 
    342 Anyone trying to resolve records in a zone of your domain can then
    343 verify the signature of the records they get from the DHT and be assured
    344 that they are indeed from the respective zone. To make this work, there
    345 is a 1:1 correspondence between zones and their public-private key
    346 pairs. So when we talk about the owner of a GNS zone, that’s really the
    347 owner of the private key. And a user accessing a zone needs to somehow
    348 specify the corresponding public key first.
    349 
    350 For more information, refer to RFC 9498.
    351 
    352 
    353 
    354 Anonymity
    355 ---------
    356 
    357 Providing anonymity for users is the central goal for the anonymous
    358 file-sharing application. Many other design decisions follow in the
    359 footsteps of this requirement. Anonymity is never absolute. While there
    360 are various scientific metrics (Claudia Díaz, Stefaan Seys, Joris
    361 Claessens, and Bart Preneel. Towards measuring anonymity. 2002.
    362 (https://git.gnunet.org/bibliography.git/plain/docs/article-89.pdf))
    363 that can help quantify the level of anonymity that a given mechanism
    364 provides, there is no such thing as “complete anonymity”.
    365 
    366 GNUnet’s file-sharing implementation allows users to select for each
    367 operation (publish, search, download) the desired level of anonymity.
    368 The metric used is based on the amount of cover traffic needed to hide
    369 the request.
    370 
    371 While there is no clear way to relate the amount of available cover
    372 traffic to traditional scientific metrics such as the anonymity set or
    373 information leakage, it is probably the best metric available to a peer
    374 with a purely local view of the world, in that it does not rely on
    375 unreliable external information or a particular adversary model.
    376 
    377 The default anonymity level is 1, which uses anonymous routing but
    378 imposes no minimal requirements on cover traffic. It is possible to
    379 forego anonymity when this is not required. The anonymity level of 0
    380 allows GNUnet to use more efficient, non-anonymous routing.
    381 
    382 How file-sharing achieves Anonymity
    383 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    384 
    385 Contrary to other designs, we do not believe that users achieve strong
    386 anonymity just because their requests are obfuscated by a couple of
    387 indirections. This is not sufficient if the adversary uses traffic
    388 analysis. The threat model used for anonymous file sharing in GNUnet
    389 assumes that the adversary is quite powerful. In particular, we assume
    390 that the adversary can see all the traffic on the Internet. And while we
    391 assume that the adversary can not break our encryption, we assume that
    392 the adversary has many participating nodes in the network and that it
    393 can thus see many of the node-to-node interactions since it controls
    394 some of the nodes.
    395 
    396 The system tries to achieve anonymity based on the idea that users can
    397 be anonymous if they can hide their actions in the traffic created by
    398 other users. Hiding actions in the traffic of other users requires
    399 participating in the traffic, bringing back the traditional technique of
    400 using indirection and source rewriting. Source rewriting is required to
    401 gain anonymity since otherwise an adversary could tell if a message
    402 originated from a host by looking at the source address. If all packets
    403 look like they originate from one node, the adversary can not tell which
    404 ones originate from that node and which ones were routed. Note that in
    405 this mindset, any node can decide to break the source-rewriting paradigm
    406 without violating the protocol, as this only reduces the amount of
    407 traffic that a node can hide its own traffic in.
    408 
    409 If we want to hide our actions in the traffic of other nodes, we must
    410 make our traffic indistinguishable from the traffic that we route for
    411 others. As our queries must have us as the receiver of the reply
    412 (otherwise they would be useless), we must put ourselves as the receiver
    413 of replies that actually go to other hosts; in other words, we must
    414 indirect replies. Unlike other systems, in anonymous file-sharing as
    415 implemented on top of GNUnet we do not have to indirect the replies if
    416 we don’t think we need more traffic to hide our own actions.
    417 
    418 This increases the efficiency of the network as we can indirect less
    419 under higher load. Refer to the following paper for more: Krista Bennett
    420 and Christian Grothoff. GAP — practical anonymous networking. In
    421 Proceedings of Designing Privacy Enhancing Technologies, 2003.
    422 (https://git.gnunet.org/bibliography.git/plain/docs/aff.pdf)
    423 
    424 How messaging provided Anonymity
    425 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    426 
    427 While the file-sharing tries to achieve anonymity through hiding actions
    428 in other traffic, the messaging service provides a weaker form of
    429 protection against identification.
    430 
    431 The messaging service allows the use of an anonymous ego for the signing
    432 and verification process of messages instead of a unique ego. This
    433 anonymous ego is a publicly known key pair which is shared between all
    434 peers in GNUnet.
    435 
    436 Using this ego only ensures that individual messages alone can’t
    437 identify its sender inside of a messenger room. It should be clarified
    438 that the route of the traffic for each message can still be tracked to
    439 identify the senders peer inside of a messenger room if the threat agent
    440 controls certain peers hosting the room.
    441 
    442 Also opening a room in the messenger service will potentially match your
    443 peer identity with the internal member identity from the messenger
    444 service. So despite using the anonymous ego you can reveal your peer
    445 identity. This means to decrease the chance of being identified, it is
    446 recommended to enter rooms but you should not open them for others.
    447 
    448 Deniability
    449 -----------
    450 
    451 Even if the user that downloads data and the server that provides data
    452 are anonymous, the intermediaries may still be targets. In particular,
    453 if the intermediaries can find out which queries or which content they
    454 are processing, a strong adversary could try to force them to censor
    455 certain materials.
    456 
    457 With the file-encoding used by GNUnet’s anonymous file-sharing, this
    458 problem does not arise. The reason is that queries and replies are
    459 transmitted in an encrypted format such that intermediaries cannot tell
    460 what the query is for or what the content is about. Mind that this is
    461 not the same encryption as the link-encryption between the nodes. GNUnet
    462 has encryption on the network layer (link encryption, confidentiality,
    463 authentication) and again on the application layer (provided by
    464 gnunet-publish, gnunet-download, gnunet-search and gnunet-fs-gtk).
    465 
    466 Refer to the following paper for more: Christian Grothoff, Krista
    467 Grothoff, Tzvetan Horozov, and Jussi T. Lindgren. An Encoding for
    468 Censorship-Resistant Sharing. 2009.
    469 (https://git.gnunet.org/bibliography.git/plain/docs/ecrs.pdf)
    470 
    471 Accounting to Encourage Resource Sharing
    472 ----------------------------------------
    473 
    474 Most distributed P2P networks suffer from a lack of defenses or
    475 precautions against attacks in the form of freeloading. While the
    476 intentions of an attacker and a freeloader are different, their effect
    477 on the network is the same; they both render it useless. Most simple
    478 attacks on networks such as Gnutella involve flooding the network with
    479 traffic, particularly with queries that are, in the worst case,
    480 multiplied by the network.
    481 
    482 In order to ensure that freeloaders or attackers have a minimal impact
    483 on the network, GNUnet’s file-sharing implementation (FS) tries to
    484 distinguish good (contributing) nodes from malicious (freeloading)
    485 nodes. In GNUnet, every file-sharing node keeps track of the behavior of
    486 every other node it has been in contact with. Many requests (depending
    487 on the application) are transmitted with a priority (or importance)
    488 level. That priority is used to establish how important the sender
    489 believes this request is. If a peer responds to an important request,
    490 the recipient will increase its trust in the responder: the responder
    491 contributed resources. If a peer is too busy to answer all requests, it
    492 needs to prioritize. For that, peers do not take the priorities of the
    493 requests received at face value. First, they check how much they trust
    494 the sender, and depending on that amount of trust they assign the
    495 request a (possibly lower) effective priority. Then, they drop the
    496 requests with the lowest effective priority to satisfy their resource
    497 constraints. This way, GNUnet’s economic model ensures that nodes that
    498 are not currently considered to have a surplus in contributions will not
    499 be served if the network load is high.
    500 
    501 For more information, refer to the following paper: Christian Grothoff.
    502 An Excess-Based Economic Model for Resource Allocation in Peer-to-Peer
    503 Networks. Wirtschaftsinformatik, June 2003.
    504 (https://git.gnunet.org/bibliography.git/plain/docs/ebe.pdf)
    505