Description technique
Un article de Freenet Doc.
Attention cet article est en cours de validation par l'équipe de documentation, par conséquent les informations que vous pouvez y trouver peuvent être erronées et/ou incomplètes (en savoir plus sur la validation des articles)
Sommaire |
[modifier] Le stockage de l'information
Dans Freenet, tout est fichier : les pages et les images composant un Freesite, les messages que vous échangez dans les groupes de discussions, etc. Les fichiers sont découpés en morceaux de 32 Ko et identifiés par des clés. Quand un fichier fait plus de 32 Ko, sa clé pointe vers un fichier qui contient la liste des clés de chaque morceau qui le compose.
[modifier] Les clés
Il existe plusieurs types de clés. Chacune a son utilité :
[modifier] Les CHK
Content-Hash Key
Ces clés servent à désigner un fichier particulier contenu dans le réseau. Voici à quoi elles ressemblent :
CHK@SVbD9~HM5nzf3AX4yFCBc-A4dhNUF5DPJZLL5NX5Brs,bA7qLNJR7IXRKn6uS5PAySjIM6azPFvK~18kSi6bbNQ,AAEA--8
Elle se compose de 3 parties :
- SVbD9~HM5nzf3AX4yFCBc-A4dhNUF5DPJZLL5NX5Brs : le hash SHA256 du fichier, qui permet de l'identifier.
- bA7qLNJR7IXRKn6uS5PAySjIM6azPFvK~18kSi6bbNQ : la clé de déchiffrement.
- AAEA--8 : méta-données contenant, entre autres, l'algorithme de chiffrement utilisé.
[modifier] Les SSK
Signed-Subspace Key
Ces clés peuvent être vues comme des trousseaux de clés qu'il est possible de mettre à jour. Les Freesites reposent sur une clé SSK qui contient les clés CHK des fichiers composant le site.
Ces clés utilisent un chiffrement asymétrique. On a donc une clé privée (insert URI) qui permet d'insérer une nouvelle version de la clé dans Freenet et une clé publique (request URI) qui permet aux visiteurs de récupérer la clé.
Voici à quoi elles ressemblent :
SSK@GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w,c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs,AQABAAE/testinserts-3/
Elle se compose de 5 parties :
- GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w : le hash de la clé publique. C'est la seule partie qui est stockée par le nœud.
- c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs : la clé de déchiffrement.
- AQABAAE : méta-données contenant, entre autres, l'algorithme de chiffrement utilisé.
- testinserts : le chemin choisi par le créateur du site.
- 3 : le numéro de version du site.
[modifier] Les USK
Updateable Subspace Key
Il ne s'agit pas vraiment d'un type de clé mais plutôt d'une aide à l'utilisation des SSK. Prenons la clé SSK donnée ci-dessus et transformons-la en USK :
USK@GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w,c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs,AQABAAE/testinserts/3/
Avec cette clé, votre nœud vous renverra la même chose qu'avec la SSK, mais si une nouvelle version a été insérée, c'est elle que vous recevrez, automatiquement.
[modifier] Le datastore
Chaque nœud met à disposition du réseau une partie de son disque dur, appelée datastore, afin de stocker des clés. Le datastore est découpé en deux parties de taille égale :
- Le cache : il stocke à peu près toutes les clés qu'il voit passer.
- Le store : il stocke les clés qui sont les plus proches de lui (le principe des positions est détaillé plus bas).
Quand le datastore est plein, il commence à supprimer les clés qui n'ont pas été accédées depuis longtemps.
[modifier] Fonctionnement du réseau
[modifier] Principe général
Chaque ordinateur faisant partie du réseau est appelé un "nœud" (ou "node" en anglais). Il partage une partie de son disque dur pour stocker les informations du réseau et il est connecté à un nombre limité d'autres nœuds. La théorie mathématique du "Small World" nous dit qu'il est possible de contacter n'importe quel nœud du réseau en passant par plusieurs nœuds intermédiaires. Bien évidemment, les communications entre les noeuds sont chiffrées.
Prenons un exemple :
Quand un nœud veut une information, il la demande à ses voisins immédiats. Si l'un d'eux a l'information, il la lui donne, sinon, il demande à ses propres voisins, etc. Dans l'exemple ci-dessus, si le nœud 1 veut une information détenue par le nœud 6 voici ce qui va se passer (ce n'est qu'un exemple, le nombre de chemins possibles est infini) :
- Chemin de la requête (en bleu) : 1 - 8 - 7 - 6
- Chemin de l'information (en rouge) : 6 - 7 - 8 - 1
[modifier] Principe des positions
Les clés et les nœuds sont placés sur un cercle imaginaire qui va de 0 à 1. Cette position n'a rien à voir avec la position physique des ordinateurs :
- La position des clés est déterminée en fonction de leur hash.
- La position des nœuds est déterminée aléatoirement au moment de leur création.
Un algorithme de permutation de position (location swapping) permet au nœuds d'échanger leurs positions pour se rapprocher de leurs peers. Les nœuds ont ainsi tendance à se rapprocher en fonction de leurs "affinités" pour un certain type de clés. Les nœuds consacrant la moitié de leur datastore aux clés dont ils sont "proches", cela aide considérablement la recherche d'informations : quand un nœud veut une clé, il va la demander à celui de ses peers qui est le plus proche de la position de la clé, et ainsi de suite.
[modifier] Les connexions
Tous les nœuds qui font tourner Freenet forment un seul réseau. Mais ils peuvent être connectés les uns aux autres de deux manières différentes. Chaque nœud peut utiliser les deux types de connexions simultanément, ou un seul selon les choix de son propriétaire.
[modifier] Connexions Darknet
C'est le mode de fonctionnement par défaut de Freenet, le plus sécurisé. Ces connexions sont faites entre des personnes qui se connaissent et se font confiance. Elles sont fixes et seul le propriétaire du nœud peut décider d'en ajouter ou d'en supprimer.
Un nœud qui n'a que des connexions Darknet est virtuellement indétectable puisqu'il n'acceptera aucune connexions venant de personnes qui ne sont pas ses amis. Une organisation ou un gouvernement qui voudrait localiser tous les nœuds Freenet ne pourrait pas le trouver.
Ces connexions répondent à la Théorie du Small-World qui est derrière le fonctionnement de Freenet. Elles aident considérablement le routage des informations au sein du réseau, à condition qu'elles soient vraiment faites entre des personnes qui se connaissent. Se connecter Darknet à une personne qu'on ne connait pas n'a aucun intérêt !
[modifier] Connexions Opennet
Ces connexions sont établies de façon automatique par les nœuds qui ont activé l'Opennet. Elles permettent aux gens qui ne connaissent personne dans le réseau (ou seulement 2-3 personnes) de s'y connecter quand-même.
Ce sont des connexions dynamiques qui évoluent dans le temps : votre noeud va automatiquement fermer les connexions les moins performantes pour en établir de nouvelles (20 au maximum).
Les noeuds qui utilisent l'Opennet bénéficient du même anonymat que les autres mais ils sont détectables. Cela signifie qu'il est assez facile de savoir qu'ils font tourner Freenet, mais très difficile de savoir ce qu'ils font à l'intérieur du réseau.
[modifier] Mode mixte
Il est parfaitement possible (et raisonnable) d'utiliser les deux types de connexion en même temps.
Par exemple :
Une personne décide de se connecter à Freenet mais elle ne connait personne dans le réseau. Elle active donc l'Opennet et obtient automatiquement 20 connexions à des personnes qu'elle ne connait pas.
Elle explore le réseau et découvre que c'est le meilleur du monde. ;-) Elle en parle donc à son meilleur ami, qui installe Freenet à son tour. Cet ami active également l'Opennet et obtiens 20 connexions.
Les deux amis peuvent alors établir une connexions Darknet entre leurs deux nœuds. Ils auront donc chacun 1 connexion Darknet et 19 connexions Opennet. Au fil du temps, si d'autres personnes de leur connaissance découvrent Freenet, ils pourront se connecter en Darknet avec eux également.
Dès qu'une personne a une dizaine de connexions Darknet, elle peut se permettre de désactiver l'Opennet pour bénéficier d'un peu plus de sécurité...
[modifier] Comment Freenet atteint ses objectifs ?
[modifier] Anonymat
Le fonctionnement du réseau décrit plus haut fait qu'il est impossible de savoir qui demande information et qui la met à disposition. Le plus gros des données chiffrées qui transitent par votre nœud ne vous appartiennent pas et sont à destination d'autres personnes.
Les données sont stockées en version chiffrées sur le disque dur. Or, la clé permettant de les déchiffrer se trouve dans le texte de la clé et non pas sur votre disque dur. On ne peut pas vous accuser de stocker une donnée interdite puisque vous ne pouvez pas savoir ce que contient votre datastore. Ce principe est appelé "Déni plausible".
[modifier] Résistance à la censure
Le seul moyen de censurer une information consisterait à éteindre tous les nœuds qui contiennent cette information.
Pour pouvoir faire ça, il faut commencer par trouver ces nœuds. La méthode pour le faire consisterait à faire une requête pour cette clé et à analyser soigneusement le trafic de tous les nœuds. Cela demanderait des moyens considérables : seuls des gouvernements ou de très puissantes organisations sont capables de faire cela.
Là où ça devient amusant, c'est qu'à chaque fois que vous demandez une information dans Freenet, un des nœuds sur le trajet peut décider d'en conserver une copie dans son cache. Le résultat, c'est que l'information que vous vouliez censurer se multiplie.
[modifier] Résistance aux attaques
[modifier] Harvesting
Comme il n'y a pas de serveurs centraux qu'on pourrait facilement éteindre, il faut s'attaquer à l'ensemble du réseau. Pour cela, il faut localiser la totalité des nœuds du réseau avant de pouvoir les bloquer. Ce genre d'attaque est également réservé aux gouvernements et aux organisations les plus puissantes. La technique consiste à faire tourner une version modifiée du nœud dont le but est de récupérer un maximum d'adresses IP. Tous les logiciels de peer2peer, cryptés ou non, sont vulnérables à cette attaque, puisque ce sont des Opennet.
La réponse du projet Freenet à cette attaque, c'est le Darknet : quand on ne peut pas savoir si une machine fait tourner Freenet ou non, il est difficile de justifier une perquisition ou la coupure de son accès internet...
[modifier] Location swapping
Une autre attaque consiste à s'en prendre à l'algorithme d'échange de positions. En se faisant passer pour une multitude de nœuds et en demandant à échanger sa place avec les nœuds d'une zone précise, on peut créer un "trou" et espérer faire disparaitre les clés de cette zone. Le réseau a subi cette attaque au début de l'année 2007 mais elle a échoué à cause du cache qui faisait que ces données étaient également stockées à d'autres endroits du réseau. Les performances ont baissé mais le réseau n'est pas tombé.
En réponse à cette attaque, un mécanisme a été mis en place : toutes les 2000 permutations, un nœud peut créer une nouvelle position aléatoire. Cela permet d'uniformiser la répartition des nœuds sur l'ensemble du cercle.
[modifier] Attaques légales
Ces menaces sont peu probables dans les démocraties occidentales mais le projet se doit de proposer des solutions aux personnes qui en ont le plus besoin : celles qui vivent dans des dictatures où l'information est strictement contrôlée.
Un gouvernement ou un FAI qui déciderait d'interdire purement et simplement Freenet aurait plusieurs armes à sa disposition :
- Blocage de ports : chaque nœud utilise un numéro de port différent pour ses communications. Bloquer tous les ports reviendrait à bloquer tout accès à internet.
- Blocage de protocole : le traffic crypté d'un nœud Freenet ne contient aucune donnée reconnaissable. Il est impossible de le différencier de n'importe quelle autre communication cryptée. Une faille de Freenet 0.5 avait permis à la Chine de le bloquer de cette manière.
- Interdiction du cryptage : le cryptage est utilisé partout dans le commerce en ligne. Aucun gouvernement ne voudrait faire ça.
- Pénaliser l'utilisation de Freenet : dans ce cas, seul le réseau Darknet pourra subsister. Le seul moyen de prouver que vous utilisez Freenet consistera à perquisitionner votre ordinateur. Et il faut un motif valable pour pouvoir le faire.
De plus, le système a été conçu pour accepter des "Transport Plugins" qui permettront de camoufler le trafic de Freenet dans d'autres protocoles (images, streaming vidéo, webradios, etc.). Les possibilités sont illimitées. Ces mesures ne sont pas encore en place mais peuvent être déployées rapidement.
[modifier] Identification d'un utilisateur
Ces attaques ont besoin de beaucoup de requètes pour pouvoir fonctionner. Elles peuvent porter sur :
- Un grand fichier (splitfile). Pour info, récupérer un fichier de 4Go génère 270 000 requètes !
- Une identité FMS (tous les messages sont insérés dans la même SSK).
Ces attaques sont théoriquement impossibles contre un pur-darknet. Mais elles sont réalisables contre un nœud opennet, mixte ou faux-darknet (un nœud darknet qui se connecte à des gens qu'il ne connait pas vraiment).
Des solutions sont à l'étude pour compliquer la tâche de l'attaquant sur l'opennet.
[modifier] Attaque par corrélation
La technique consiste à analyser les requêtes d'un nœud auquel on est connecté directement pour essayer de savoir si les requêtes viennent de lui ou s'il ne fait que transmettre celles d'un autre. Pour un fichier de 4Go, il faut 270 000 requêtes. Si une personne à qui on est connecté directement nous demande 13 500 morceaux (les noeuds ayant l'opennet ont 20 connexions), il y a de bonnes chances que la requête vienne de lui.
[modifier] Attaque adaptative
Cela consiste à se faire une idée grossière de l'origine d'une requête (une position approximative sur le cercle) et à s'en approcher petit à petit en établissant de nouvelles connexions. Si l'attaquant arrive à se connecter au noeud à l'origine de la requète, il peut lancer une attaque par corrélation comme indiqué plus haut.
[modifier] Autres attaques
Comme tous les autres logiciels réseau, Freenet peut contenir des failles qui ne sont pas encore découvertes. Le fait que ce soit un logiciel libre garantit simplement qu'elles seront corrigées rapidement une fois découvertes.
[modifier] Flux réseaux et ports utilisés
Note : Le port FNP est différent pour chaque noeud Freenet (choisi aléatoirement à l'installation) afin d'éviter qu'il soit possible de bloquer le réseau simplement en bloquant un port.
[modifier] Pour aller plus loin
Si vous voulez aller plus loin, lisez :
- Distributed routing in Small World Networks, une description du routage dans le Darknet, par Oskar Sandberg.
- Searching in a Small World, la thèse de License d'Oskar Sandberg.
- La vidéo de présentation de Freenet 0.7 faite par Ian Clarke et Oskar Sandberg au Chaos Computer Congress de Berlin, en Décembre 2005.



