Re: Re: Implementing a Gnutella-structured network only with basic HTTP possible?Date: Wed, 24 Feb 2010 09:08:15 +0000 (UTC)Date: Fri, 26 Feb 2010 12:55:15 +0000 (UTC)

verdy_p <[email protected]> Fri, 26 Feb 2010 22:59:40 +0100 (CET)
Newsgroups gmane.network.gnutella.devel
Message-ID <18528582.93811.1267221580192.JavaMail.www@wwinf1e36>
> De : "Max" 

> in offload you connect to most possible nodes actively, but list all nodes
> known in the network. As chunks are stored 3x in the network, you have
> always a great chance to find the needed block in any node, you are
> connected to. so there is no isolated node. the isolated node is the offline
> one.

This does not work this way, because it's still impossible to predict or manage the "3x" metric.

What the P2P network is doing is trying to duplicate some chunk of data, but as there's no warranty that it will 
survive for long before the dissaminated chunks get lost (even caches will run in a MRU like way and chunks will 
discarded if they are not renewed), there must exist a way for the network to monitor this metric and maintain it 
under two minimum and maximum threshold (let's suppose that the network is fully connected, they should be reachable 
easily at anytime to detect their presence).

But this has a significant cost: just to make sure that some chunk of data is still present, you need a push or pull 
protocol to detect this. Traditionnally, Gnutella has used a pull strategy for disseminating data on request, so it 
lead to an explosion of pull requests (even if this is just a basic HTTP STAT request), but lacks a pull strategy 
which should be schedulable and should use multicast to a list of subscribers, and a way to unsubscribe.

Yes this is the role of a trcker to mange this, but trackers are not balanced, their problem is that they use the 
convential centralized server, instead of creating a mesh between participants (fully connected within a small hops 
distance) which will collaborate and schedule the broadcast of their presence information in that mesh.

The small meshes controling the presence of a chunk in the network should not be precisely located on dedicated 
machines. Its size must also remain small in order to minimize the traffic they generate internally for their own 
need (maintaining a chunk of data live). All of these participants must be also be equally reachable from anywhjere 
in the larger network. And if instructed by the original pusher of the chunk, a mesh should be able to "suicide".

These decentralized small sub-meshes should be able to elect any other nearby peer if one of the participants 
disconnects. When a peer will restart, it will also need to locate in the network where each of the meashes it was 
participating are located, and if it would be usefull to join them, or trade a superfluous chunk of data against 
another chunk from another sub-mesh to help them balance their workload (notably the lower and higher replication 
level of chunks should also follow the demand for some chunks, and the response time between participants in one 
sub-mesh should be monitored to see if the mesh is not about to explode and split into separate non-coordinated sub-
meshes that will use too much traffic on the network.

Do you need trackers in fact? No. The DHT is supposed to do that, and should be used not just to locate where the 
files are first injected, but also how they are split in chunks spread all over the network into caching meshes. The 
basic MRU strategy (where all chunk sub-meshes are considered equal) is not very good. The MRU strategy for the 
caches must take into account the persistance of life of meshes and their response time in case of increase of their 
workload (meaning degraded response time for the rest of the data belonging to less "popular" chunk sub-meshes).

Having a failure tolerant system effectively requires duplication (some will think about it as a solution named 
"backup" for long term storage, even if the location of these backups requires a longer response time), but this 
must not be done at the price of excessive duplication that will overwhelm the available ressources of the network.

A "3x" replication metric is not enough, but users of Gnutella typically consume more than what they produce. But if 
we estimate that we can increase the duplication, the limiting factor is still the bandwidth not the storage space 
which today is not expensive. But people are still reluctant to cache data for others, notably if there's a legal 
risk for this data. The only solution is to have this cached data completely split into small chunks whose content 
is not directlly trackable to the metadata describing it: the chunks have to be completely blind, possible even 
encrypted including during their transport on the network (the decryption keys are stored elsewhere as separate 
chunks, also unidentifiable directly with a backward link).

The only way to find and use any chunk of data (delocalized in decentralized and fully replicated sub-meshes, that 
can be located by the DHT) is to be able to describe any resource from a small staring metadata which will reference 
in only one direction the unique identifiers of subchunks containing the decryption keys, and the contents or 
additional metadata). And there asolutely MUST exist a feature in the design that will allow the ORIGINAL submitted 
to send a kill action (order all participants in all submeshes referenced by the initial ressource, to suicide 
themselves). Here also the DHT can help, and the kill action must be also secured.

Now there's the need to control the reputation of every participant: the public reputation is not good, what people 
want is a restricted level where their trust can be given to a handful of particopants, and where they can eliminate 
those that they don't want to participate in that trust. This is just like a structure where a user is a secured 
memeber of a group to which they can gight some rights, without necessarily extending the trust to further 
subgroups: the number of hops in the trust delegation tree must be controlable, as well as the possibility to browse 
the full list of those that have received some delegation. This job MUST not be performed by a central server, it 
should be only under the control of a participant.

The delegations also MUST not be symetric: you should be able to give trust for yuou own needs, to someone that will 
not trust you for his own needs. Trust delegations must be in a directed graph, non-transitive and be user-centric. 
You must be able to determine themselves and personnally who will be a secondary "administrator" of a group for 
which you must be always the primary administrator (from your own view of the group). The delegation system must 
absolutely not adopt the model used in Facebook "friends" (with infinitely recursive friends of friends via Facebook 
controling everyone). In that model, each user should be as powerful as Facebook, driving his own network and being 
alone to know exactly the full list of whom they have given trust to.

For this model to work, users must be able to socialize each other using one or more identities (not just one) and 
without necessarily revealing their true identity. These multiple virtual identities can be used to "test" some 
person, test some possible common interests, evaluate what they get in return, and be able to delete an identity or 
to join two identities into a single one. When joining identities, they should be able to give a rating for the 
networks of trusts they have in each identity, possibly in a non symetric way (for example join one secondary 
identity into a main one but not sharing with other users that know our main identity all waht we know from users 
that know our secondary identity, but allowing the reverse to be true, so that the secondary identity may share with 
its existing network of trusts some or all of the trusts we have rated in the prior primary identity).

In fact, a P2P network should really be used for that purpose. Then when you can trust people securely, you can 
socialize securely with them and exchange data through various ways, not just through Gnutella: you could provide to 
some of your friends specific rights, for example giving a tracker identifier (located vua the DHT) that describes 
an interesting ressource and allows the friend to download it from the meshes dissaminated in the network (and that 
cannot be retreived in a usable way without this initial tracker (which shoulod just consist in a secure digital 
print such as a TigerTree hash root, located via the DHT)

And in this network, you would no longer search for files, but for people that have some common interests on a 
topic. Users will then see on their application incoming questions from people they know and trust and looking for 
some ressources, they will reply by pointing them some lists of ressource trackers, or by pointing ressources that 
can be automatically shared between users within a group of contacts that the user has created for its group of 
trusts : instead of having to reply to all incoming questions, they can also give a limited (non-transitive) access 
to the existing list of ressources shared in that group.

When doing that, the trackers should not be usable as long as you don't belong to the group (thre should be a secure 
way to limit the number of hops, for example by providing decryption keys along each hop in order to successfully 
access to the content, and this can only work if the encryption/decryption keys are securely asymetric, such as RSA-
like key pairs, with a public key and a private key; the problem being that the time to generate a new key secure 
pair is quite expensive, so this should only occur when users add new contacts to a group or when they join two of 
their groups to create a posibly assymetric authorization between them along with a trust rating between each group)

Most of the traffic on the Gnet will then consist in exchanges of keys, and in encrypted discussions between 
participants in a group. In those discussions, people will be able to include and transmit trackers to specific 
people, along with the associated non-transitive decryption key, that the client will generate automatically).

Contact rating should also be more advenced than just "friends". We need several levels, as well as the need to 
delegate to some more reliable contacts the right and the numeric mean to subdelegate according to the limits we 
have given them and that they cannot ignore (because even them won't have the necessary key that will allow crating 
the first delegation): their contacts are not our contacts, our contacts are not theirs, and we should even be 
allowed to restrict communications coming indirectly via a trusted contact who had some limited level of delegation.

By design, the right of being forgiven completely will be warrantied (except for the readable content that will have 
been discussed between mutually trusted participants, because nothing will really warranty that they will have not 
save an archiving log of the past discussions, so if you reveal personnal details in those discussions instead of 
your virtual identity, all what can warranty the secret is a mutual agreement, or the laws about privacy, and the 
intelligence of people so that they won't exchange more details than what they receive from someone).

Finally, in that network, filesharing will just become an accessory service. Most people will in fact share blogs, 
opinions, their creation, demonstrate their skills, discuss politics, plan their holidays, criticize what they've 
seen on TV or a film seen at the cinema, they will socialize for meetings (and sexual plans of course), or to 
organize public events. Because they will know better each other, they will more securely share trustable files and 
their creations.

And when they are not connected (or connected with another identity on the network) they will become invisible and 
unreachable (outside possibly through a virtual mailbox stored for a limited time on the Gnet within the small sub-
meshes described above, with data or discussions that have a limited lifetime, say: min 1 week and max 1 month, 
according to data sender preferences, so that they can be automatically purged of all participating caches, unless 
the intended recipient loads it and securely kills immediately that data whose he is the only recipient)

Philippe.