Difference between revisions of "VT2017 Telehash"

From air
Jump to navigation Jump to search
 
(10 intermediate revisions by the same user not shown)
Line 34: Line 34:
   
   
Chaque application dispose d'une liste (mesh) de liens connectés aux machines accessibles les plus proches. Chaque machine est identifiée par un '''hashname''' généré par plusieurs itérations d'un algorithme SHA-256 sur une chaîne de caractères initiale de 52 bits. Un un plusieurs ensembles de clés publiques et privées pour les futurs échanges. Lorsqu'une machine se connecte à un hôte distant, elle partage ses clés publiques, afin de chiffrer les messages qui lui seront adressés.
+
Chaque application dispose d'une liste (mesh) de liens connectés aux machines accessibles les plus proches. Chaque machine est identifiée par un '''hashname''' généré par plusieurs itérations d'un algorithme SHA-256 sur une chaîne de caractères initiale de 52 bits. Le principe d'attribution de ces identifiants repose sur les tables de hachage distribuées proposées par [https://en.wikipedia.org/wiki/Kademlia Kademlia], permettant ainsi une meilleure gestion de la topologie du réseau, et donc des liens plus rapides entre les pairs. Un un plusieurs ensembles de clés publiques et privées pour les futurs échanges. Lorsqu'une machine se connecte à un hôte distant, elle partage ses clés publiques, afin de chiffrer les messages qui lui seront adressés.
   
 
Ces données sont ensuite stockées dans un fichier Json. Les messages sont également véhiculés sous cette forme très lisible de structuration de données.
 
Ces données sont ensuite stockées dans un fichier Json. Les messages sont également véhiculés sous cette forme très lisible de structuration de données.
Line 47: Line 47:
   
 
* Une première couche gérant l'ensemble de la sécurité et du chiffrage des messages
 
* Une première couche gérant l'ensemble de la sécurité et du chiffrage des messages
* Une seconde couche assurant les échanges, avec la mise en place le support de nombreux standards tels qu'UDP, TCP, HTTP...
+
* Une seconde couche assurant les échanges, avec la mise en place de nombreux standards tels qu'UDP, TCP, HTTP...
   
 
De nombreuses implémentations de patterns d'échange sont ensuite utilisables : Stream, Publish-Subscribe, REST etc.
 
De nombreuses implémentations de patterns d'échange sont ensuite utilisables : Stream, Publish-Subscribe, REST etc.
  +
  +
===Utilisation===
  +
Pour comprendre comment utiliser Telehash, partons d'un exemple de code disponible sur le Github de TelehashJs.
  +
Le code présenté ci-dessous est disponible [https://github.com/telehash/telehash-js/blob/master/examples/echo/client.js Ici].
  +
  +
# Dans un premier temps, un fichier de configuration est chargé à partir de la fonction '''load(String)'''. Il permet d'initialiser le hashname (l'identifiant) du client, ainsi que ses clef privées et publiques. Si ce fichier n'existe pas, la méthode '''generate()''' sera appelée, et générera ces informations dans le fichier précisé en paramètre de load(). Cette fonction retourne une Mesh (un endpoint utilisé par l'application) qui sera utilisée par la suite.
  +
# La méthode de "découverte" du réseau est autorisée via la fonction '''mesh.dicover(true)''', permettant à l'application de se faire connaître du réseau.
  +
# Une machine ou un routeur connecté au réseau peut créer un lien à tout moment à l'application, qui à travers la fonction '''mesh.accept()''' récupérera le hashname de la-dite machine.
  +
# Après avoir récupéré le lien vers cette machine distante ('''var link = mesh.link(from);''') il est possible d’interagir avec. Ici le client ouvre un Stream afin de communiquer un message à intervalle régulier auprès de la machine faisant office de serveur (les autres applications clientes ne recevront pas les messages).
  +
  +
==Évalutations et comparaisons==
  +
  +
Telehash est certes une technologie performante et innovante. Rapide à mettre en place de part sa simplicité d'utilisation et ses nombreux langages d'implémentations, elle fournit un moyen stable, rapide et sécurisé de partager des données sur un réseau P2P. Léger, le code est facilement exportable pour des applications embarquées.
  +
  +
Cependant elle manque cruellement de visibilité, et également désormais d'activité (dernière mise à jour en date : Mars 2015). Bien qu'une version stable soit actuellement disponible, de nombreuses fonctionnalités ont été laissées inachevées lors de la version 3.
  +
  +
{| class="wikitable"
  +
!
  +
! hashname
  +
! link
  +
! uri
  +
! routing
  +
! streams
  +
! sockets
  +
! udp
  +
! tcp
  +
! http
  +
! tls
  +
! webrtc
  +
! bluetooth
  +
|-
  +
| node.js
  +
| ✓
  +
| ✓
  +
| ✍
  +
| ✓
  +
| ✓
  +
| ✓
  +
| ✓
  +
| ✓
  +
| ✓
  +
| ✍
  +
| ✍
  +
|
  +
|-
  +
| browser js
  +
| ✓
  +
| ✍
  +
|
  +
|
  +
|
  +
|
  +
|
  +
|
  +
| ✍
  +
|
  +
| ✍
  +
|
  +
|-
  +
| c - unix
  +
| ✓
  +
| ✓
  +
| ✍
  +
| ✍
  +
| ✍
  +
| ✍
  +
| ✓
  +
| ✓
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| c - embedded
  +
| ✓
  +
| ✓
  +
| ✍
  +
|
  +
| ✍
  +
| ✍
  +
| ✍
  +
| ✍
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| go
  +
| ✓
  +
| ✓
  +
|
  +
|
  +
|
  +
|
  +
| ✓
  +
|
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| python
  +
| ✓
  +
| ✍
  +
|
  +
|
  +
|
  +
|
  +
| ✍
  +
|
  +
|
  +
|
  +
|
  +
|
  +
|}
  +
  +
[https://github.com/telehash/telehash.github.io/blob/master/v3/README.md Référence - Github Telehash.io]
  +
  +
De plus, depuis quelques temps, des outils tels que Resilio Sync (BitTorent Sync) ont su apporter leur propre approche aux problèmes de sécurité au sein d'un réseau P2P.
  +
Également, beaucoup de projets commencés se basant sur Telehash qui semblaient très prometteurs comme The Locker Project ne sont plus accessibles, ce qui traduit peut-être un déclin de cette technologie. Pourtant, la technologie de Jeremie Miller reste toujours accessible à tout développeur et ce gratuitement, ce qui reste à ce jour sa plus grande force.
   
 
=Références=
 
=Références=
Line 57: Line 177:
 
# Github de TelehashJs - [https://github.com/telehash/telehash-js Lien]
 
# Github de TelehashJs - [https://github.com/telehash/telehash-js Lien]
 
# Conférence de la première version de Telehash et The Locker Project - [https://www.infoq.com/presentations/A-P2P-Digital-Self-with-TeleHash Lien]
 
# Conférence de la première version de Telehash et The Locker Project - [https://www.infoq.com/presentations/A-P2P-Digital-Self-with-TeleHash Lien]
  +
# The Locker Project - [https://en.wikipedia.org/wiki/Locker_(software) Lien]
 
# Réflexion de Jeremy Miller concernant Telehash - [https://github.com/quartzjer/TeleHash/wiki/My-Understanding-of-the-TeleHash-Protocol Lien]
 
# Réflexion de Jeremy Miller concernant Telehash - [https://github.com/quartzjer/TeleHash/wiki/My-Understanding-of-the-TeleHash-Protocol Lien]
 
# Page Wikipedia des réseaux P2P - [https://en.wikipedia.org/wiki/Peer-to-peer Lien]
 
# Page Wikipedia des réseaux P2P - [https://en.wikipedia.org/wiki/Peer-to-peer Lien]

Latest revision as of 00:42, 16 October 2017

Présentation

Logo-telehash.png
  • Sujet : Telehash - Protocole de distribution P2P sécurisé
  • Auteur : Gilles Bonhoure
  • Enseignants : Didier Donsez et Georges-Pierre Bonneau

Résumé

Telehash est un protocole de communication entre machines connectées sur un même réseau (P2P). Il assure un chiffrage des données entre une machine émettrice jusqu'à réception, sans qu'un tier ne puisse avoir accès aux informations véhiculées. Cette technologie est compatible avec de nombreuses application et de nombreux supports machine de par ses multiples implémentations (7 langages) et sa légèreté d'implémentation. Depuis son premier prototypage en 2010, trois versions ont vu le jour, dont la dernière mise à jour remonte à 2014 (et un build correctif en 2015).

  • Mots clef : Protocole ; Pair-à-Pair ; Sécurité ; Réseaux

Abstract

Telehash is a lightweight secure mesh networking (P2P) technology. It ensures encrypted communication between endpoints where data is ever revealed to third parties. It is suitable for many usages of different machines due to it's many implementations (7 languages). Since the first prototype in 2010, three versions of this protocol have been released until 2014 (stable build in 2015).

  • Keywords : Protocol ; Peer-to-Peer ; Privacy ; Networks

Synthèse

Motivations

De nos jours, les échanges de données sont de plus en plus fréquents, et conserver / partager des informations sensibles est le nouveau challenge de ces dernières années. De plus, de nombreux utilisateurs souhaiteraient s'affranchir des serveurs centralisés afin de partager leurs fichiers. Des technologies permettant de connecter des machines au sein d'un réseau de machines distribuées existent déjà, c'était le cas du très connu BitTorrent. Cependant la composante sécurité n'était pas assurée sur ce genre de technologies, Telehash se veut une solution à ce genre de lacunes. Ainsi en 2010 Jeremie Miller (github.com/quartzjer) propose un premier prototype de Telehash, qui se veut une solution innovante à toutes ces problématiques.

La technologie Telehash

Telehash se veut le plus flexible possible. L'idée étant qu'une instance d'application soit en mesure de communiquer le plus simplement possible avec n'importe qu'elle autre instance d'application ou n'importe quel appareil. Sa légèreté permet son déploiement sur n'importe quel objet connecté même pour des connexions limitées. De plus, Telehash inclut de nombreux outils permettant de déployer facilement une application basée sur un modèle de réseau social, incluant un système d'amis, de flux, de notifications etc. permettant la mise en place rapide d'applications de cette envergure.

Principe

Mesh-telehash.png

Schéma de de communication Telehash entre plusieurs applications - Documentation de Telehash


Chaque application dispose d'une liste (mesh) de liens connectés aux machines accessibles les plus proches. Chaque machine est identifiée par un hashname généré par plusieurs itérations d'un algorithme SHA-256 sur une chaîne de caractères initiale de 52 bits. Le principe d'attribution de ces identifiants repose sur les tables de hachage distribuées proposées par Kademlia, permettant ainsi une meilleure gestion de la topologie du réseau, et donc des liens plus rapides entre les pairs. Un un plusieurs ensembles de clés publiques et privées pour les futurs échanges. Lorsqu'une machine se connecte à un hôte distant, elle partage ses clés publiques, afin de chiffrer les messages qui lui seront adressés.

Ces données sont ensuite stockées dans un fichier Json. Les messages sont également véhiculés sous cette forme très lisible de structuration de données.

Conception

La technologie est en fait une couche supplémentaire aux couches réseaux déjà existantes.

Archi-telehash.png

Schéma de l'architecture en couche - Documentation de Telehash


  • Une première couche gérant l'ensemble de la sécurité et du chiffrage des messages
  • Une seconde couche assurant les échanges, avec la mise en place de nombreux standards tels qu'UDP, TCP, HTTP...

De nombreuses implémentations de patterns d'échange sont ensuite utilisables : Stream, Publish-Subscribe, REST etc.

Utilisation

Pour comprendre comment utiliser Telehash, partons d'un exemple de code disponible sur le Github de TelehashJs. Le code présenté ci-dessous est disponible Ici.

  1. Dans un premier temps, un fichier de configuration est chargé à partir de la fonction load(String). Il permet d'initialiser le hashname (l'identifiant) du client, ainsi que ses clef privées et publiques. Si ce fichier n'existe pas, la méthode generate() sera appelée, et générera ces informations dans le fichier précisé en paramètre de load(). Cette fonction retourne une Mesh (un endpoint utilisé par l'application) qui sera utilisée par la suite.
  2. La méthode de "découverte" du réseau est autorisée via la fonction mesh.dicover(true), permettant à l'application de se faire connaître du réseau.
  3. Une machine ou un routeur connecté au réseau peut créer un lien à tout moment à l'application, qui à travers la fonction mesh.accept() récupérera le hashname de la-dite machine.
  4. Après avoir récupéré le lien vers cette machine distante (var link = mesh.link(from);) il est possible d’interagir avec. Ici le client ouvre un Stream afin de communiquer un message à intervalle régulier auprès de la machine faisant office de serveur (les autres applications clientes ne recevront pas les messages).

Évalutations et comparaisons

Telehash est certes une technologie performante et innovante. Rapide à mettre en place de part sa simplicité d'utilisation et ses nombreux langages d'implémentations, elle fournit un moyen stable, rapide et sécurisé de partager des données sur un réseau P2P. Léger, le code est facilement exportable pour des applications embarquées.

Cependant elle manque cruellement de visibilité, et également désormais d'activité (dernière mise à jour en date : Mars 2015). Bien qu'une version stable soit actuellement disponible, de nombreuses fonctionnalités ont été laissées inachevées lors de la version 3.

hashname link uri routing streams sockets udp tcp http tls webrtc bluetooth
node.js
browser js
c - unix
c - embedded
go
python

Référence - Github Telehash.io

De plus, depuis quelques temps, des outils tels que Resilio Sync (BitTorent Sync) ont su apporter leur propre approche aux problèmes de sécurité au sein d'un réseau P2P. Également, beaucoup de projets commencés se basant sur Telehash qui semblaient très prometteurs comme The Locker Project ne sont plus accessibles, ce qui traduit peut-être un déclin de cette technologie. Pourtant, la technologie de Jeremie Miller reste toujours accessible à tout développeur et ce gratuitement, ce qui reste à ce jour sa plus grande force.

Références

  1. Site de Telehash - Lien
  2. Documentation Telehash v3 - Lien
  3. Organisation Telehash sur Github - Lien
  4. Github de TelehashJs - Lien
  5. Conférence de la première version de Telehash et The Locker Project - Lien
  6. The Locker Project - Lien
  7. Réflexion de Jeremy Miller concernant Telehash - Lien
  8. Page Wikipedia des réseaux P2P - Lien
  9. Page Wikipedia de Resilio Sync - Lien