background
Savoir-faire Linux recrute
Nous travaillons à un monde plus libre
Rejoignez-nous

red_hat_partnerLe Centre de formation de Savoir-faire Linux, partenaire certifié Red Hat, organise cet été une session de formation RHCSA (Administrateur système certifié Red Hat) qui donnera lieu à une certification.

Cette formation s’adresse aux administrateurs de systèmes qui ont de 1 à 3 ans d’expérience à temps plein en tant qu’administrateur Linux.

Pour plus détails concernant les prix et conditions de cette formation, contactez-moi par courriel (formation(a)savoirfairelinux.com) ou par téléphone (514-276-5468 poste 348). Merci!

Photo de la salle de formation Aaron Swartz.

Logo OpenStack KiloLa nouvelle version d’OpenStack est sorti le 30 avril 2015. Elle se nomme Kilo. Avec 20 millions de lignes de code, 23 756 membres et près de  500 compagnies engagés dans le projet dans 162 pays, OpenStack est en 2015 la référence en matière d’infonuagique privée (voir mes billets précédents).

Vous en doutez?

Lire la suite de ce billet dans le blogue de Direction informatique Lien.

* Billets précédents : OpenStack : de quoi parle-t-on exactement? et Infonuagique privée : la flexibilité d’Amazon à un coût réduit avec OpenStack.

Joint the Ring!Je suis très emballé par une initiative dont Savoir-faire Linux est le fer de lance et qui vise le marché de la communication sécurisée. Le problème majeur, c’est essentiellement qu’il n’y a pas de réelle confidentialité possible tant qu’un serveur ou un service centralisé est en mesure de surveiller et mesurer vos communications. Big Brother surveille toujours! Or, les fournisseurs des solutions actuelles exigent que vous vous connectiez à leur service afin d’alimenter leur modèle de revenus tel que la vente de publicité ou de l’imposition de frais d’utilisation.

Fidèles à nos engagements originels de soutenir et développer le logiciel libre, Savoir-faire Linux développe une plate-forme de communication qui ne nécessite pas de serveur centralisé pour communiquer, laissant ainsi le contrôle et la confidentialité entre les mains de l’utilisateur.

En adoptant la technologie DHT (Distributed Hash Table ou « Table de hachage distribuée ») qui est utilisée par les réseaux de partage de fichiers comme BitTorrent, la plate-forme crée son propre réseau sécurisé sur Internet sur lequel elle distribue des fonctions d’annuaire, d’authentification et de chiffrement à tous les systèmes qui s’y connectent. C’est pourquoi nous l’avons appelée Ring.

Vous vous demandez peut-être maintenant :

« OK, ça a l’air cool mais concrètement, ça veut dire quoi pour moi? »

Jetons donc un œil à quelques-uns des avantages :

  • Comme il n’y a pas de serveur centralisé, personne ne peut vous suivre à la trace et la plate-forme ne sera jamais hors service.
  • Vous contrôlez à qui vous donnez votre clé d’identification; sans la connaître, impossible de vous joindre.
  • Ce logiciel libre est gratuit et placé sous licence GPL.
  • Il ne nécessite aucune configuration ni aucun mot de passe.
  • Tout est chiffré — la communication point à point est chiffrée pour le clavardage, la vidéoconférence et les appels vocaux avec le standard de chiffrement AES 128.
  • Il est disponible sur plusieurs plates-formes  : Linux, Mac, Windows, iOS, Android, et potentiellement plus.

Rejoignez Ring!Imaginez un logiciel libre de communication multimédia tellement ergonomique et immédiat qu’il ne requiert ni configuration spéciale, ni compte en ligne, ni mot de passe. Imaginez qu’il soit construit à partir des dernières technologies pair à pair (P2P), sécurisé avec les meilleurs standards de chiffrement, et que vous puissiez l’utiliser gratuitement, sans frais de licence, pour échanger de la voix et de la vidéo avec un ou plusieurs correspondants. Ce logiciel vient de naître. Il s’appelle Ring et en est à sa toute première version alpha.

Voici quelques précisions techniques recueillies auprès de Guillaume Roguez, consultant senior en logiciel libre chez Savoir-faire Linux et directeur du projet.

Comment Ring est-il né et quelles sont ses caractéristiques fondamentales?

Guillaume RoguezRing est l’évolution d’un ancien projet, SFLPhone, qui a mûri au cours des dix dernières années et qui reposait sur l’ancien concept des données centralisées. Le changement des technologies et du monde en général a été le cadre directeur de ce logiciel : nous avons complètement réécrit les couches profondes et décidé de le doter de caractéristiques si nouvelles et révolutionnaires que nous devions en changer le nom.

Le concept essentiel est la décentralisation. Ring implémente le DHT : une technologie permettant d’identifier et d’obtenir l’adresse IP de clients connectés à un système réparti en réseau. Du coup, il n’est plus nécessaire de passer par un serveur centralisé sous protocole SIP ou AIX2 pour localiser et appeler un correspondant — même si nous avons conservé ces options de protocole dans le logiciel pour ceux que cela intéresse.

En mode DHT, chaque compte Ring est identifié sur le réseau par une empreinte numérique personnelle communément appelée « hash », un code unique de 40 lettres et chiffres, lié à un certificat d’identification et à une paire de clés asymétriques pour le chiffrement de ses communications. Il s’enregistre lui-même en distribuant son identité non pas à un mais à des « serveurs » équivalents, chaque machine agissant en effet comme serveur d’identité pour les autres. Ces machines peuvent apparaître, disparaître et être remplacées par d’autres à tout moment. La table des hashs contenant l’ensemble des identités des utilisateurs connectés et leurs adresses IP à un instant donné est répartie entre toutes leurs machines.

Pour recourir à une analogie simple, disons que cela se passe un peu comme dans une rue d’un quartier résidentiel. On connaît ses voisins, mais pas les voisins des voisins de ses voisins. Pourtant, il sera facile de les trouver en interrogeant un premier voisin qui en interrogera un autre, et ainsi de suite. Différence notable : les réseaux numériques sont beaucoup plus rapides et efficaces que le bouche à oreilles. (rires)

Peut-on réellement parler de totale confidentialité?

Oui, dans la mesure où cette question est ramenée là où elle résidait auparavant, soit au niveau humain. Quand vous communiquez avec quelqu’un, vous le faites avec confiance envers cette personne. Ring fait en sorte que cette confiance soit conservée et fiable.

Technologiquement, le chiffrement est basé sur le système bien connu des clés asymétriques, avec clé publique et clé privée. Ring utilise cette dernière pour chiffrer les communications sortantes. La clé privée n’est stockée que sur votre machine et n’en sort jamais : vous seul en posséder la copie. Même si une entité quelconque interceptait les paquets de données que vous échangez, vous pouvez être certain qu’elles ne pourra pas en tirer profit.

Un autre aspect très important de la sécurité, c’est le fait que Ring est un logiciel libre sous licence GPLv3. Son code source réside sur les serveurs publics de Savoir-faire Linux. Celui de ses dépendances logicielles est disponible sur les serveurs publics de leurs communautés respectives. Bref, tout est libre, tout est accessible, tout est transparent!

L’utilisateur avancé peut d’ailleurs nous aider à corriger les problèmes : nous acceptons volontiers les contributions. On s’attend à ce que les gens nous fassent part de ce qui ne va pas afin qu’on le corrige, mais ils peuvent aussi le corriger eux-mêmes et nous soumettre leurs correctifs. C’est ce que l’on faisait déjà avec SFLPhone et cela fonctionne très bien.

Quels systèmes d’exploitation Ring supporte-t-il et quelle est sa feuille de route?

Fin avril, nous avons ouvert au public une version alpha, encore très embryonnaire, pour les systèmes 64 bits basée sur Linux (Ubuntu 14.04/14.10 et Fedora 20/21) et Mac OSX. Nous l’avons bien entendu déjà testée à l’interne et avec quelques geeks ici et là, mais nous devons vérifier si tout se passe bien sur un grand réseau distribué. On s’attend à recevoir beaucoup de commentaires et à devoir corriger quelques problèmes. C’est précisément le but de cette première version.

Par la suite, nous aborderons la phase bêta en y ajoutant des fonctionnalités plus avancées et avec deux objectifs principaux :

  • Premièrement, la fréquence. Nous voulons en effet être très proches des retours et des besoins de la communauté. Nous offrirons donc des mises à jour fréquentes.
  • Deuxièmement, l’interopérabilité. Nous allons travailler sur les plate-formes mobiles comme Android et, parallèlement, sur un portage Windows qui est déjà bien avancé.

Il est en effet dans la logique et les valeurs du logiciel libre de rendre nos outils accessibles au plus grand nombre de personnes possible. Nous avons donc développé Ring en gardant constamment à l’esprit le fait qu’il devait être portable sur un maximum d’architectures. On pense bien entendu aux ordinateurs de bureau et aux plate-formes mobiles, mais aussi (et peut-être même surtout) aux systèmes embarqués qui vont devenir, avec l’Internet des objets, des plate-formes très sensibles dans les années à venir.

» Propos recueillis par ring:6a8da1380eb39e06d76634944384022ca92da937

Adrien Béraud encryptedLe besoin de systèmes distribués publics efficaces se fait de plus en plus pressant alors que grandit chaque jour l’influence des géants du Net qui centralisent plus que jamais l’information et les communications. Un paradoxe, alors qu’Internet offre aux nœuds du réseau la possibilité inédite de se contacter directement, sans point de traitement centralisé.

C’est pour répondre à cette problématique que nous avons développé OpenDHT, une bibliothèque logicielle sous licence libre implémentant une table de hachage distribuée et intégrant un certain nombre d’innovations importantes. OpenDHT est en effet au cœur du système de communication décentralisé Ring.

Le DHT (table de hachage distribuée) est une classe de systèmes distribués permettant d’accéder, depuis tout nœud du réseau, à un dictionnaire partagé (paires clévaleur) dont les données sont réparties entre les participants. Les réseaux DHT actuellement les plus populaires, tel Mainline DHT (BitTorrent), sont utilisés pour le partage de fichiers de pair à pair. Sur ces réseaux, la clé est l’identifiant du fichier torrent, aussi appelé « lien Magnet », et les valeurs sont les adresses IP des seeders, c’est à dire les clients partageant le torrent.

OpenDHT

OpenDHT est un projet de réseau DHT léger et robuste en C++11 proposant une interface simple à utiliser pour les développeurs d’applications. Inspiré à l’origine de la bibliothèque DHT développée par Juliusz Chroboczek et utilisée, par exemple, par le client BitTorrent Transmission, OpenDHT inclus un certain nombre d’innovations importantes.

OpenDHT offre la possibilité de stocker tout type de données — pas seulement des adresses IP — avec une limite par valeur de 64 Ko. Il offre également une fonction d’écoute (listen), permettant à un nœud d’être informé des changements de valeurs concernant une clé. Le besoin de ces fonctionnalités cruciales pour le projet Ring nous ont poussé à créer OpenDHT, avec la contrepartie de rendre son protocole incompatible avec le réseau DHT Mainline de BitTorrent.

La fonction listen est par exemple utilisée dans Ring pour permettre de recevoir des appels ou des messages, même pour des ordinateurs situés derrière des NATs. En conjonction avec la technologie ICE, OpenDHT permet alors l’établissement de connections pair à pair de manière robuste.

OpenDHT est publié sur GitHub sous licence GPL version 3. Commentaires et correctifs sont les bienvenus. Un début de documentation est aussi disponible ici.

OpenDHT se veut simple à utiliser, réduisant ainsi le coût et la difficulté du développement des applications qui en tirent parti.

Ainsi, lancer un nouveau nœud sur le port local 4222, puis se connecter au réseau à travers un nœud connu est aussi simple que trois lignes de C++ :

dht::DhtRunner node; node.run(4222, dht::crypto::generateIdentity(), true);
node.bootstrap("bootstrap.ring.cx", "4222");

Stocker une valeur quelconque sur le réseau est alors possible en une unique ligne de code :

node.put("ma_clé", std::vector<uint8_t>(5, 10));

La clé utilisée sera alors le condensat SHA1 du texte ma_clé. La valeur sera une suite de 5 octets valant 10.

Récupérer par la suite cette valeur depuis un autre nœud sera alors aussi simple que :

node.get("ma_clé", [](const
std::vector<std::shared_ptr<dht::Value>>& values) { for (const auto& value :
values) std::cout << "Valeur trouvée: "<< *value << std::endl; return true;
});

Les DHT : un peu de théorie

Dans le type de réseau DHT le plus populaire (Kademlia), utilisé par OpenDHT, chaque nœud (programme participant) du réseau possède un identifiant unique uniformément distribué dans l’espace des identifiants — un espace de 160 bits, dans notre cas.

De même, chaque donnée stockée sur le réseau est caractérisée par un identifiant : sa clé. Les clés sont uniformément distribuées dans le même espace de 160 bits que les identifiants de nœud. Plusieurs valeurs peuvent partager une même clé.

L’opérateur binaire XOR (⊕) est défini comme l’opérateur de distance entre clés, ou entre clés et identifiants de nœud. Pour rappel, le résultat de XOR est vrai si les deux opérandes ont des valeurs booléennes distinctes. Ceci implique que le résultat du XOR de deux clés de 160 bits représente la « distance binaire » entre ces clés : A ⊕ A = 0 pour toute clé A. Pour deux clés distinctes A et B avec X = A ⊕ B, le nombre de bits à zéro au début de X sera égal au nombre de bits communs au début de A et B.

Cette propriété intéressante offre la possibilité de partitionner la table de routage de chaque nœud en utilisant un arbre binaire. Chaque nœud maintient à jour, en effet, une table de routage incluant principalement les nœuds voisins (au sens de l’opérateur de distance XOR introduit ci-dessus).

Fig. 1. Pour trouver le nœud R possédant les valeurs pour la clé H, le nœud S contacte A, le nœud plus proche de H dans sa table de routage. La réponse de A inclut l’adresse IP de B, maintenant le plus proche de H dans la table de S et qui est donc contacté, et ainsi de suite.

Une donnée, c’est-à-dire une paire clé-valeur (K, V), sera alors stockée sur les L nœuds les plus proches de la clé K (avec typiquement L=8). Tout nœud connaissant K pourra alors retrouver V par un algorithme itératif qui l’amènera à contacter des nœuds dont l’identifiant est de plus en plus proche de K (fig. 1).

Les requêtes incluent la clé K et la réponse de chaque nœud comprend une liste des autres nœuds connus les plus proches de K. La valeur V sera alors retrouvée en seulement O(log(N)) itérations, N représentant le nombre de nœuds sur le réseau.

Cryptographie

Tout comme Internet, les DHT publiques sont par nature des réseaux non-fiables. Ils impliquent de faire confiance à un grand nombre d’autres programmes au hasard sur le réseau pour stocker des données.

Plutôt que de tenter de rendre le protocole robuste à tout type de nœud malveillant, ce qui serait illusoire, l’approche d’OpenDHT est de considérer le réseau lui-même comme non digne de confiance et de construire par dessus une couche optionnelle de cryptographie à clé publique, utilisant l’infrastructure standard PKCS, et permettant de vérifier l’auteur et l’intégrité du message (signature) et de le chiffrer grâce aux certificats publiques publiés sur le réseau DHT.

Connaissant l’identifiant de la clef publique contact_id d’un contact, stocker sur le réseau DHT une donnée chiffrée pour ce contact est aussi simple que :

node.putEncrypted("ma_clé", contact_id, value);

La couche de cryptographie, ou couche d’identité, va alors récupérer, de manière transparente, le certificat du contact, utiliser la clef publique pour chiffrer la donnée, puis la stocker sur le réseau. Cette couche va, également de manière transparente, vérifier la signature des données signées reçues. Si la vérification échoue, la donnée n’est pas présentée à l’application. De même, seules les données chiffrées qu’il est possible de déchiffrer sont remontées à l’application.

Ring utilise ces opérations de cryptographie pour échanger de manière sécurisée les invitations, les initiations d’appels et messages privés. Le réseau est alors vraiment utilisé comme un point de rencontre public.