P2P à travers l'espace et le temps
Par idoric le lundi, février 15 2016, 16:09 - Lien permanent
Suite à une conversation (semi-)privée, je suis arrivé à la conclusion que les réseaux P2P n'étaient pas aussi résilients qu'ils pourraient l'être. On peut s'attendre à ce que le routage des informations au sein d'un réseau P2P soit le plus efficace possible vis-à-vis des objectifs visés. Ceux-ci peuvent être divers¹, comme obtenir le plus vite possible l'information désirée, protéger son anonymat, ou s'assurer que le contenu même chiffré ne passera qu'entre des mains de confiances².
Or, à ma connaissance, mais j'espère que quelqu'un dans les commentaires me contredira, les techniques de routage P2P s'interdisent toutes une même possibilité. Elles exigent que tous les nœuds sur le chemin soient actifs au même moment. Pour le dire autrement, la topologie d'un réseau P2P se déploie dans l'espace, mais jamais dans le temps.
Ce n'est pourtant en rien une obligation. Imaginons qu'Alice (A) veut envoyer un contenu à Bob (B) qui n'est présentement pas en ligne, alors qu'elle-même s'apprête à se déconnecter. Elle pourrait envoyer son message (chiffré ou non) à C (en F2F ou un parfait inconnu) en lui laissant pour mission de le transmettre à B dès qu'il sera en ligne. Et si C devait à son tour se déconnecter alors que ni A ni B ne sont en ligne, il pourrait transmettre le flambeau à D. Cette première proposition pourrait facilement être améliorée, il faudrait par exemple au moins anticiper les risques de déconnexions intempestives, mais je pense que tout le monde voit maintenant l'idée générale. L'essentiel est donc de réussir à constituer une chaîne de nœuds à travers l'espace et le temps pour relier A à B³. La communication est évidemment dans ce cas unilatérale, si B veut répondre il faudra construire une nouvelle chaîne spatio-temporelle allant de B à A.
On me rétorquera qu'on s'en sort très bien en comptant sur la présence de nœuds fonctionnant 24h/24. Mais justement là est tout le problème, car ce faisant on donne un rôle prépondérant à ces nœuds. On ne se contente pas d'exploiter ces nœuds 24h/24, on s'attend à ce qu'ils tournent 24h/24, on compte sur eux, et par sur les autres, qui deviennent des nœuds de seconde zone comme il y a des citoyens de seconde zone. Chaque nœud continue à communiquer avec tous les autres sur la base du même protocole, mais au-delà du protocolaire il y a des pairs qui sont plus égaux que d'autres.
Cette dissymétrie de traitement entre les nœuds n'est pas qu'un problème pour puristes du P2P, qui feraient passer l'idéal avant l'efficacité. Au contraire, cette anomalie est une véritable faiblesse pour les réseaux P2P concernés.
En premier lieu, l'attendu de la présence de nœuds 24h/24 recentralise une partie importante du trafic au sein du réseau P2P lui-même. Notez le choix du terme, cette partie peut être importante en terme de quantité, mais elle est plus généralement importante vis-à-vis du caractère critique des informations qui passent par elle. Peu importe qu'il n'y a que 0,001 % de l'information qui passe par quelques serveurs centraux, si en l'absence de cette information plus rien ne fonctionne.
Cette recentralisation fait perdre les bénéfices attendus du P2P. Dans un pays en guerre ou en proie à un soulèvement (ou encore où il est plus que temps de s'y préparer), un tel réseau P2P ne tiendrait pas bien longtemps, puisqu'il suffirait de cibler ces serveurs et uniquement eux. Inversement, un réseau P2P capable de penser sa topologie non seulement en terme d'espace mais aussi de temps, serait bien plus capable d'acheminer des informations, malgré des coupures internet par régions entières, des coupures électriques répétées un peu partout, etc. Et sans parler de guerre civile, conserver une connexion 24h/24 est tout simplement impossible dans certains pays.
Et si ça ne suffisait pas, ce défaut de conception limite l'adoption d'un réseau P2P, ou même d'un réseau décentralisé. On le voit très bien avec Framasphere, qui n'a réussi que la première moitié de son pari, à savoir faire découvrir une alternative à Facebook, mais pas la deuxième, à savoir initier une dynamique d'ouverture de nouvelles instances, parce qu'avoir un serveur 24h/24, c'est couteux en argent, en temps et ça demande de solides connaissances et savoir-faire. À la place, bien du monde est venu sur le serveur Framasphere, et il est devenu tellement énorme que c'est devenu un problème même pour eux.
Pour revenir au cœur de notre sujet, si on se penche sur le cas des réseaux F2F, il est évident qu'entre proches et amis, on a moins de chance de trouver quelqu'un qui s'auto-héberge et pourrait proposer un nœud 24h/24 pour la petite communauté, tant et si bien que le concept a bien du mal à décoller dans la pratique⁴, sauf à accepter dans ses « friends » des inconnus du bout du monde, ce qui n'est pas l'idée. À l'inverse, un réseau P2P tel que je le décris ne risquerait pas de s'effondrer par un trop faible taux de nœuds persistants par rapport au total de nœuds participants, au contraire chaque nouveau nœud viendrait le renforcer, et plus il y aurait de nœuds, plus il serait résilient.
¹ Ces différents objectifs sont d'ailleurs globalement contradictoires entre eux et devraient pouvoir être négociés entre pairs, mais c'est une autre histoire.
² Avec les progrès en la matière, un contenu n'est indéchiffrable que pour les temps présents, et si un secret conserve sa valeur pendant dix ou vingt ans, le conserver quitte à ne le déchiffrer que quelques années plus tard reste intéressant.
³ La théorie des graphes serait d'une grande utilisé je pense, tout particulièrement les graphes d'intervalles.
⁴ Les réseaux F2F visant généralement à partager du contenu, il faudrait envisager la possibilité de notification de partage de nouveaux contenus avant même qu'ils soient demandés pour faciliter les choses, mais il ne s'agit que d'un message particulier vers plusieurs autres nœuds déterminés.
AJOUT
Ailleurs on me dit que ça existe déjà, il s'agit des fameuses blockchains⁵, et on me cite Bitmessage⁶. Pour moi la solution ne se trouve clairement pas là. D'abord, la scalabilité (désolé pour l'anglicisme) est catastrophique. En guise d'exemple je rappellerai que le maximum théorique (la réalité est pire) est de 7 transactions actées par seconde dans la blockchain elle-même concernant BitCoin. Ensuite, il faut maximiser le nombre de nœuds, et pour cela ne pas supposer une puissance de calcul phénoménal, un énorme disque dur, ou de la puissance électrique à foison et disponible sans compter. Or, entre une blockchain qui ne peut devenir qu'énorme avec le temps, et une preuve de travail très couteuse en temps processeur, il serait bien difficile de compter sur une armada de smartphone pour combler les trous d'une chaine spatio-temporelle. Et là je ne parle même pas du gâchis de ressource et d'énergie, miner du Bitcoin, ce n'est définitivement pas écologique (à comparer avec (voir la partie sur la blockchain qui n'en est pas vraiment une⁵) par exemple).
⁵ Je prend pour définition celle du wikipédia anglophone, à savoir : « a block chain or blockchain is a permissionless distributed database that maintains a continuously growing list of data records hardened against tampering and revision, even by its operators ». ⁶ Au passage, sur le wikipédia anglophone on peut lire ceci : « Outgoing messages do not contain the explicit address of the recipient of the message. Therefore, every network participant attempts decryption of every message passing through the network even if the message was not originally intended for that network participant. Since only the actual recipient can successfully decrypt the messages intended for him, all network participants know that if they fail to decrypt the message then the message was not intended for them. » Au secours !