• chevron_right

      Cryptocat, ou le piège du client magique

      Timothée Jaussoin · Wednesday, 6 April, 2016 - 19:35 edit · 6 minutes

    Il y a quelques jours je suis tombé sur un article annonçant la sortie de la nouvelle mouture du client de messagerie sécurisé Cryptocat. Je ne m'étais jamais réellement penché sur ce client car il faisait, selon moi, partie des dizaines d'autres clients surfant sur la vague des messageries instantanées chiffrées sorties suite aux révélations d'E.Snowden. J'ai donc voulu creuser un peu et voir de quoi il était composé.

    Comme vous le savez peut-être, je travaille moi-même sur un client de messagerie "sociale" appelée Movim exploitant le protocole XMPP. J'essaye, au travers de ce projet, de montrer aux gens qu'il est parfaitement possible de créer une solution à la fois sécurisée, standard et décentralisée tout en offrant une interface agréable et simple à comprendre. Petite précision toutefois: Movim ne possède pas (encore, mais j'y travaille) de fonctionnalité de chiffrement de bout en bout. Néanmoins il est possible de faire ce genre de chiffrement sur XMPP de façon standard et compatible avec des technologies standardisées comme OTR et le récent OMEMO (c'est d'ailleurs cette norme que j'ai décidé d'implémenter dans Movim).

    La chose que je trouve dommage avec tous ces services et clients c'est qu'ils ne sont pas compatibles entre eux. Pourtant il existe aujourd'hui plusieurs clients XMPP proposant la norme OTR et OMEMO mais qui ne sont malheureusement pas si connus et médiatisés que les autres. Je mentionnerais en particulier l'excellent Conversations (sur Android) dont l'équipe est à l'origine de la norme OMEMO (qui est elle-même une implémentation de la norme Axolotl dans XMPP, notamment utilisée sur le client Signal).

    Étant un peu curieux par nature je me suis plongé dans le code source de la nouvelle version de ce cher Cryptocat pour regarder un peu ce qu'il a dans le ventre.

    Ni une, ni deux, je clone le dépôt sur ma machine et je commence à explorer le code.

    Première surprise !

    Avant même d'ouvrir le moindre fichier j'avais déjà un petit sourire en coin en voyant le nom de certains d'entre eux dans le répertoire src/js/.

    axolotl.js
    omemo.js
    xmpp.js
    

    Tiens, tiens, tiens. Un petit tour sur la page Security du site me confirme bien ça. Cryptocat utilise XMPP comme transport et OMEMO comme méthode de chiffrement. Le reste du blabla n'est rien d'autre qu'une réexplication de la norme Axolotl sans pour autant la mentionner.

    Donc Cryptocat est un client XMPP, en Javascript, avec la norme OMEMO par dessus.

    XMPP…

    Je ne me suis pas particulièrement penché sur la partie chiffrement du projet, j'avoue ne pas avoir assez de compétences en cryptographie pour offrir une critique constructive et je pense que l'auteur du projet est bien plus expérimenté que moi là dessus. Je salue par ailleurs sa volonté de transparence à ce propos. Néanmoins je commence à bien connaitre le protocole XMPP et je sais que son point fort est la possibilité d'interconnecter les serveurs entre eux et de laisser le choix du serveur à utiliser aux utilisateurs.

    L'interconnexion est une fonctionnalité que j'estime nécessaire car d'une part, elle permet aux utilisateurs d'avoir le choix du serveur sur lequel ils iront déposer leurs données et d'autre part, elle décentralise les points d'échange du réseau (et rend ainsi plus difficile la censure et l'écoute du réseau).

    Après avoir regardé plus en détails le fichier xmpp.js j'ai enfin la confirmation de ce dont je me doutais jusque là.

    jid: username + '@crypto.cat',
    server: 'crypto.cat',
    

    Oui, il y a bien un serveur XMPP écrit en dur dans le code source du projet.

    Explorons un petit peu le serveur crypto.cat

    Le site XMPP IM Observatory nous retourne une note de A pour la sécurité du serveur, ici rien à dire. Par contre je découvre que l'interconnexion avec les autres serveurs du réseau n'est pas autorisée. La connexion entre le client Javascript et le serveur se fait au moyen d'un Websocket et le serveur XMPP est un serveur Prosody tout bête.

    Cryptocat n'est donc pas qu'une application de chat offerte par Nadim Kobeissi, mais aussi un service centralisé auquel les utilisateurs sont contraints de se connecter (sauf s'ils changent le code source du client, ce qui est possible, mais combien le feront ?).

    Précisions sur le chiffrement de bout en bout dans XMPP

    Le chiffrement de bout en bout est une très grande avancée dans l'anonymisation des données échangées. Néanmoins il ne permet pas tout. Sur XMPP par exemple il faut savoir que OTR et OMEMO ne chiffrent que le contenu des messages et pas la signalisation qui les accompagne (certains diront les métadonnées). Mais que pouvons nous trouver dans ces métadonnées ? Et bien l'identifiant de l'émetteur et du destinataire du message mais aussi beaucoup d'autres choses pouvant êtres sensibles. Une page sur le Wiki de Reporters Sans Frontieres résume plutôt bien tout ça. Ces informations peuvent être conservées dans des historiques et journaux sur les serveurs XMPP.

    En choisissant de centraliser son service sur un seul et unique serveur (qui semble être hébergé dans le datacenter d'OVH à Roubaix) l'auteur de Cryptocat a aussi fait le choix de concentrer l'intégralité du trafic de sa plateforme sur un seul et unique point du réseau Internet.

    Cela me serait égal si toutes ces informations étaient précisées sur le site du projet, au moins de façon temporaire si l'objectif à terme était de permettre la connexion à d'autres serveurs XMPP. Mais je trouve vraiment dommage qu'il ait tu ces informations.

    Petit bonus, qu'en est-il de la v1 de Cryptocat ?

    Même si je salue le fait d'utiliser des normes comme XMPP et OMEMO dans Cryptocat, j'ai quand même jeté un œil à la première version du projet pour voir sur quelle architecture il s'était basé.

    Sans grande surprise la première version se base également sur XMPP et OTR. Néanmoins elle permettait de changer le serveur XMPP sur lequel le client se connectait. J'espère donc qu'il sera également possible de faire la même chose sur la seconde version.

    Pas de quoi s'inquiéter donc ?

    Oui, pour le moment pas de quoi crier au scandale mais je souhaiterais que Nadim soit aussi transparent sur l'architecture de son projet que sur les méthodes de chiffrement qu'il utilise au sein de son application.

    Je pense qu'il est aussi important d'informer les utilisateurs de comment sont protégées leurs messages mais aussi par où et comment ceux-ci sont acheminés.

    Dernière petite question, pourquoi vouloir à tout prix fermer la plateforme alors que XMPP permet nativement l'interconnexion avec les autres réseaux ?

    En bref, si vous voulez avoir les mêmes fonctionnalités que Cryptocat, plus tous les avantages de XMPP (interconnexion, gestion de l'historique, profiles, notifications, accusés de réception…) tournez vous vers des clients comme Conversations ou Gajim (et bientôt Movim concernant le chiffrement je vous promet !).

    That's all folks !

    • At chevron_right

      Tor messenger

      motius · pubsub.gugod.fr / atomtest · Saturday, 7 November, 2015 - 23:00 · 3 minutes

    Bonjour à tous ! Aujourd'hui on va faire un tout petit tour du côté de la messagerie électronique instantanée, et puis des innovations apportées par le projet Tor. La messagerie électronique, vous en utilisez probablement tous les jours. Il y a Facebook chat (et leur application Messenger), Google H...

    Bonjour à tous !

    Aujourd'hui on va faire un tout petit tour du côté de la messagerie électronique instantanée, et puis des innovations apportées par le projet Tor.

    La messagerie électronique, vous en utilisez probablement tous les jours. Il y a Facebook chat (et leur application Messenger), Google Hangouts, Skype de Microsoft, etc. Mais vous pouvez choisir des moyens décentralisés pour ça. XMPP est un protocole qui permet ça.

    XMPP en très très gros

    Pour faire simple, XMPP est un protocole qui permet de s'échanger des messages ayant un certain format via un serveur qui relaie les messages.

    Il y a donc une liste de serveurs XMPP, et une liste de clients pouvant s'y connecter. Aujourd'hui, on va parler d'un nouveau client qui vient de sortir : Tor-messenger.

    Tor-messenger

    Comme je l'ai dit, Tor-messenger est un nouveau client XMPP (entre autres, il permet aussi de se connecter à IRC, Google Talk, Facebook Chat, et un service de Yahoo, et un de Twitter), c'est-à-dire qu'installer et lancer tor-messenger sur votre ordinateur va vous permettre de converser avec vos amis et connaissances utilisant XMPP ou IRC, ou Google Talk, ou Facebook Chat, etc.

    Tor-messenger ((en), page d'annonce et de téléchargement) est un fork du logiciel libre InstantBird créé par Mozilla. C'est le projet Tor qui l'a adapté aux besoins de ses utilisateurs pour que Tor-messenger se connecte automatiquement via le réseau Tor.

    Voici une capture d'écran de mon utilisation de Tor-messenger (XMPP + IRC) :

    tor-messenger

    Tor-messenger : ajout de compte, fenêtre de contacts, fenêtre de clavardage, cliquez pour agrandir.

    Le gros avantage, c'est que sous GNU/Linux, il n'est pas nécessaire d'installer Tor-messenger, il suffit de décompresser la tarball avec :

    tar xvfJ tor-messenger-linux\*\_en-US.tar.xz

    et exécuter le script start-tor-messenger ou start-tor-messenger.desktop (pas exécuté dans un terminal, le second) dans le répertoire Messenger.

    Ce qui change

    En en parlant autour de moi, j'ai eu des réactions comme :

    • Ça change tout !
    • Mais qu'est-ce que ça change ?

    Pour tout le monde, sur les grandes plateformes du web

    Eh bien voyons cela. A priori ça ne change pas grand chose, puisque lorsque vous parlez à votre réseau de connaissances sur Facebook ou Google, fondamentalement, vous êtes toujours connecté à votre compte, et il y a toujours les logs. Ce qui change, c'est que passer par Tor empêche à la plateforme que vous utilisez sache où vous vous trouvez.

    Ce qui pourrait changer à long terme

    Ce que je vais écrire est complètement spéculatif, et un petit peu optimiste, mais bon, allons-y. Il est possible que la nouvelle génération vive avec deux types d'identités :

    • celle fournie à l'État ;
    • une grande quantité de pseudos sur internet, bien dissociés les uns des autres, et du nom réel.

    On aurait alors --- selon cette hypothèse --- des plateformes qui deviennent aveugles face à leurs utilisateurs. Elles auraient toujours le contenu, etc. mais perdrait un grand bout de l'identification des gens.

    Le problème que cela résoud est facile à représenter.

    Lorsqu'une personne s'inscrit sur Facebook, elle va presque automatiquement faire ami-ami avec ses proches --- famille et amis --- et ses intérêts. Alors que d'autres réseaux sociaux fonctionnent différemment, comme Reddit (mon compte), Imgur, SoundCloud, etc.

    Prendre l'habitude de toujours utiliser une multitude de pseudos sur internet amenuise le ciblage publicitaire, le tracking, le profilage, etc.

    Ce qui change beaucoup, maintenant

    Pour ceux qui utilisent régulièrement leur propre serveur XMPP décentralisé, ça permet en plus d'anonymiser leurs connexions.

    En récapitulant brièvement ce qu'il se passe pour ces utilisateurs :

    • ils ont un serveur XMPP décentralisé ;
    • leur logiciel Tor-messenger :
      • passe par le réseau Tor par défaut ;
      • impose le chiffrement par défaut ;
    • fait du chiffrement OTR (Off-The-Record messaging).

    Leurs communications sont donc très bien protégées, dans le sens où elles sont protégées contre beaucoup d'attaquants éventuels, et avec des algorithmes de bonne qualité.

    Motius

    • Ha chevron_right

      Tor messenger

      motius · pubsub.gugod.fr / hashtagueule · Saturday, 7 November, 2015 - 23:00 · 3 minutes

    Bonjour à tous ! Aujourd'hui on va faire un tout petit tour du côté de la messagerie électronique instantanée, et puis des innovations apportées par le projet Tor. La messagerie électronique, vous en utilisez probablement tous les jours. Il y a Facebook chat (et leur application Messenger), Google H...

    Bonjour à tous !

    Aujourd'hui on va faire un tout petit tour du côté de la messagerie électronique instantanée, et puis des innovations apportées par le projet Tor.

    La messagerie électronique, vous en utilisez probablement tous les jours. Il y a Facebook chat (et leur application Messenger), Google Hangouts, Skype de Microsoft, etc. Mais vous pouvez choisir des moyens décentralisés pour ça. XMPP est un protocole qui permet ça.

    XMPP en très très gros

    Pour faire simple, XMPP est un protocole qui permet de s'échanger des messages ayant un certain format via un serveur qui relaie les messages.

    Il y a donc une liste de serveurs XMPP, et une liste de clients pouvant s'y connecter. Aujourd'hui, on va parler d'un nouveau client qui vient de sortir : Tor-messenger.

    Tor-messenger

    Comme je l'ai dit, Tor-messenger est un nouveau client XMPP (entre autres, il permet aussi de se connecter à IRC, Google Talk, Facebook Chat, et un service de Yahoo, et un de Twitter), c'est-à-dire qu'installer et lancer tor-messenger sur votre ordinateur va vous permettre de converser avec vos amis et connaissances utilisant XMPP ou IRC, ou Google Talk, ou Facebook Chat, etc.

    Tor-messenger ((en), page d'annonce et de téléchargement) est un fork du logiciel libre InstantBird créé par Mozilla. C'est le projet Tor qui l'a adapté aux besoins de ses utilisateurs pour que Tor-messenger se connecte automatiquement via le réseau Tor.

    Voici une capture d'écran de mon utilisation de Tor-messenger (XMPP + IRC) :

    tor-messenger

    Tor-messenger : ajout de compte, fenêtre de contacts, fenêtre de clavardage, cliquez pour agrandir.

    Le gros avantage, c'est que sous GNU/Linux, il n'est pas nécessaire d'installer Tor-messenger, il suffit de décompresser la tarball avec :

    tar xvfJ tor-messenger-linux\*\_en-US.tar.xz

    et exécuter le script start-tor-messenger ou start-tor-messenger.desktop (pas exécuté dans un terminal, le second) dans le répertoire Messenger.

    Ce qui change

    En en parlant autour de moi, j'ai eu des réactions comme :

    • Ça change tout !
    • Mais qu'est-ce que ça change ?

    Pour tout le monde, sur les grandes plateformes du web

    Eh bien voyons cela. A priori ça ne change pas grand chose, puisque lorsque vous parlez à votre réseau de connaissances sur Facebook ou Google, fondamentalement, vous êtes toujours connecté à votre compte, et il y a toujours les logs. Ce qui change, c'est que passer par Tor empêche à la plateforme que vous utilisez sache où vous vous trouvez.

    Ce qui pourrait changer à long terme

    Ce que je vais écrire est complètement spéculatif, et un petit peu optimiste, mais bon, allons-y. Il est possible que la nouvelle génération vive avec deux types d'identités :

    • celle fournie à l'État ;
    • une grande quantité de pseudos sur internet, bien dissociés les uns des autres, et du nom réel.

    On aurait alors --- selon cette hypothèse --- des plateformes qui deviennent aveugles face à leurs utilisateurs. Elles auraient toujours le contenu, etc. mais perdrait un grand bout de l'identification des gens.

    Le problème que cela résoud est facile à représenter.

    Lorsqu'une personne s'inscrit sur Facebook, elle va presque automatiquement faire ami-ami avec ses proches --- famille et amis --- et ses intérêts. Alors que d'autres réseaux sociaux fonctionnent différemment, comme Reddit (mon compte), Imgur, SoundCloud, etc.

    Prendre l'habitude de toujours utiliser une multitude de pseudos sur internet amenuise le ciblage publicitaire, le tracking, le profilage, etc.

    Ce qui change beaucoup, maintenant

    Pour ceux qui utilisent régulièrement leur propre serveur XMPP décentralisé, ça permet en plus d'anonymiser leurs connexions.

    En récapitulant brièvement ce qu'il se passe pour ces utilisateurs :

    • ils ont un serveur XMPP décentralisé ;
    • leur logiciel Tor-messenger :
      • passe par le réseau Tor par défaut ;
      • impose le chiffrement par défaut ;
    • fait du chiffrement OTR (Off-The-Record messaging).

    Leurs communications sont donc très bien protégées, dans le sens où elles sont protégées contre beaucoup d'attaquants éventuels, et avec des algorithmes de bonne qualité.

    Motius

    • At chevron_right

      Le droit, la justice et internet.

      motius · pubsub.gugod.fr / atomtest · Saturday, 19 September, 2015 - 22:00 · 12 minutes

    Bonjour à tous ! L'épée contre le bouclier symbolise un éternel équilibre dans une guerre, mais à la fin, qui gagne ? Aujourd'hui je vous propose d'aller jeter un coup d'œil du côté d'un de nos outils favoris : l'internet, ses monts et merveilles, et le reste... La plupart d'entre vous êtes familier...

    Bonjour à tous !

    L'épée contre le bouclier symbolise un éternel équilibre dans une guerre, mais à la fin, qui gagne ? Aujourd'hui je vous propose d'aller jeter un coup d'œil du côté d'un de nos outils favoris : l'internet, ses monts et merveilles, et le reste...

    La plupart d'entre vous êtes familiers des concepts que je vais décrire dans cette première partie, mais elle me semble essentielle afin que l'on parte d'une base commune.

    Quelques définitions...

    Je vais essayer d'être suffisamment clair pour qu'il vous soit inutile de suivre les liens indiqués dans l'article, cependant je les inclus à toutes fins utiles.

    Internet : Il s'agit d'un réseau physique reliant des machines. En gros des tuyaux transportant de l'information, normalement sans en modifier le contenu (donnée). Schématiquement, il n'existe que deux objets sur internet :

    • des ordinateurs ;
    • des "câbles" (fibre optique, réseau cuivre, antennes 3G, 4G, ...).

    Internet est en fait un réseau de réseaux : chaque opérateur internet (FAI) construit son bout de réseau, qu'il interconnecte ensuite aux autres (il y a pas mal de questions de taille d'opérateur, de gros sous, d'organisation des réseaux, mais on va faire simple). L'étymologie du mot internet décrit cela : il s'agit d'une interconnexion (inter) de réseaux (network).

    Cela dit, dans tout cet article, une représentation schématique à peu près équivalente d'internet sera utilisée (vous pouvez cliquer pour afficher les images taille réelle dans un nouvel onglet) :

    schema_internet

    Représentation d'un réseau physique de machines. Schéma simplifié d'internet. CC-BY-SA

    Web : réseau virtuel de machines. Ce réseau utilise l'infrastructure qu'est l'internet. Il est constitué de deux types d'objets :

    • les machines client-web. Celles-ci peuvent demander du contenu (via le protocole HTTP) ;
    • les machines serveur-web. Celles-ci proposent du contenu.

    Il est tout à fait possible pour une machine d'être à la fois client-web et serveur-web. Le web peut être vu comme une sous-partie d'internet, tous les ordinateurs connectés pouvant théoriquement proposer et demander du contenu. Le web est un réseau virtuel.

    Protocole : manière qu'ont plusieurs ordinateurs de communiquer. HTTP est un protocole du Web. De manière non-exhaustive, les protocoles incluent HTTP/HTTPS, FTP, BitTorrent, SSH...

    Serveur : une machine qui propose du contenu ou service. Exemples, un serveur web propose des pages web (via le protocole HTTP/HTTPS), alors qu'un serveur proxy effectue des requêtes à votre place de telle sorte qu'il semble que c'est lui et non pas vous qui a effectué la recherche.

    Client : une machine qui demande du contenu ou service. La majorité des internautes ne sont que clients.

    Donnée : de l'information. (Volontairement court : une méta-donnée est de la donnée, et peut très bien être considérée comme de la donnée pure, selon le contexte).

    Méta-donnée : de l'information à propos d'une information ou personne, objet... Exemple : les métadonnées d'une image sont :

    • la date ;
    • l'heure ;
    • le type d'appareil photo ;
    • la géolocalisation (éventuellement).

    Ce concept est complexe. En effet si une image passe sur internet, les métadonnées des paquets IP sont les adresses IP source et destination (etc.), et les métadonnées de la photo sont des données sur internet.

    Chiffrement : Le fait de transformer une donnée numérique à l'aide d'algorithmes mathématiques afin de la rendre indéchiffrable pour quiconque en dehors de la personne à qui la donnée est destinée.

    Déchiffrement : le fait d'obtenir les données en clair à partir du flux chiffré.

    Décryptage : opération qui consiste à essayer de casser le chiffrement protégeant de la donnée.

    Empreinte (hash) : suite de caractère identifiant de manière unique de la donnée à l'aide d'un algorithme. Les algorithmes utilisés actuellement sont : MD5 (vraiment obsolète, et déconseillé), SHA-1 (en voie d'obsolescence depuis 2015, le plus utilisé), SHA-2 (assez peu utilisé), ou SHA-3 (usage vraiment marginal).

    Signature : le fait d'authentifier les données. Cette opération se fait en deux temps : le serveur réalise une empreinte des données, puis il signe l'empreinte. Vérifier l'intégrité des données consiste à effectuer l'empreinte et vérifier la signature.

    Comment les mathématiques contournent le droit.

    Comme d'habitude, je vais essayer de présenter les faits le plus objectivement possible (ce qui sera assez facile, étant donné qu'il s'agit d'abord d'un sujet technique) puis émettre une opinion - bien personnelle, comme toujours - que je vous encourage à critiquer dans les commentaires.

    Le fil de cet article sera le suivant :

    • tout d'abord, je vais présenter les principes du réseau d'anonymisation (ici tor que la majorité d'entre vous connaît) ;
    • puis les principes mathématiques des techniques de chiffrement puissant de nos communications (PFS, OTR, GPG/OpenPGP/PGP...) ;
    • et enfin les principes mathématiques pour rendre improuvable l'existence d'une donnée (utilisés par TrueCrypt, CypherShed, VeraCrypt).

    (En fait l'idée de nouvelles possibilités à l'aide des mathématiques n'est pas nouvelle :  le principe du VPN ou du chiffrement permet de s'abstraire du risque d'un réseau non sécurisé en soi...)

    Du réseau d'anonymisation

    Un petit schéma aidera à mettre les idées au clair, mais pas si vite ! Rien ne vaut un petit parallèle avec ce que vous connaissez déjà...

    Lorsque vous chargez une page web en HTTP (flux non-chiffré, non-signé) il se passe ça :

    http

    Trafic HTTP (Web). Requête, réponse. CC-BY-SA.

    La suite d’événement est :

    • le client parle au serveur (connexion) ;
    • le serveur dit "je parle HTTP" ;
    • le client demande la page web identifiée de manière unique par une URL ;
    • le serveur répond :
      • "200 OK", s'il l'a, puis la transmet ;
      • "404 Error", s'il ne l'a pas (la très fameuse "Erreur 404" que tout le monde connaît, et facile à obtenir, il suffit de demander une page qui n'existe pas à un serveur).

    De même, demander une page web en HTTPS, ça se représente comme ça :

    https

    Trafic HTTPS (Web). Requête, réponse. CC-BY-SA.

    La suite d’événement est presque identique :

    • le client parle au serveur (connexion) ;
    • le serveur dit "Je parle HTTPS" ;
    • le client demande en HTTPS l'URL ;
    • le serveur répond :
      • "200 OK", s'il l'a, puis l'envoie
      • "404 Error", sinon.

    Deux différence entre HTTP et HTTPS, avec HTTPS :

    • le trafic est chiffré (impossible de lire) ;
    • le trafic est signé (impossible d'altérer le contenu, s'il était modifié, le client jetterait les paquets IP et les redemanderait).

    Eh bien utiliser tor, ça ressemble à ça (décrit ici par le projet tor) :

    tor0

    Trafic tor. CC-BY-SA.

    C'est-à-dire que tor fonctionne comme s'il y avait au minimum (parce qu'il peut y avoir plusieurs nœuds milieu en théorie) trois proxy (ou intermédiaires) entre nous et le serveur que l'on interroge.

    Tor est ainsi un réseau virtuel de machines serveur appelées "nœud". Il y a trois type de nœuds :

    • entrant ;
    • milieu ;
    • sortant.

    Le trafic ressemble donc à ceci :

    tor01

    Apparence du trafic avec tor. CC-BY-SA.

    Une représentation complète de l'internet avec du trafic tor serait :

    tor](https://hashtagueule.fr/assets/2015/09/tor.png)

    Trafic tor sur internet. CC-BY-SA.

    Utiliser le réseau tor permet donc un anonymat de très grande qualité, en effet :

    • le FAI qui relie l'abonné ne voit que du trafic, qu'il peut identifier comme étant du trafic tor, même en HTTP ;
    • le serveur ne sait pas qui a demandé sa page ou son service ;
    • le nœud d'entrée ne connait que l'utilisateur, pas le contenu (même en HTTP) ;
    • le relais milieu ne connaît que ses voisins (ou les relais milieu...) ;
    • le nœud sortie connaît le nœud milieu et le serveur interrogé, et voit :
      • soit du trafic HTTPS indéchiffrable ;
      • soit le trafic HTTP demandé, en clair.

    Ainsi l'utilisation de tor, par le grand anonymat qu'il permet, empêche de relier un utilisateur au trafic qu'il a demandé.

    L'utilisation de tor fait donc disparaître les informations liées à une connection : les métadonnées.

    Une communication irrémédiablement chiffrée

    Une communication chiffrée, une clef de chiffrement. Une idée gargantuesque consiste à enregistrer, au niveau d'un État, tout le trafic chiffré qui passe, et de l'analyser après, avec plusieurs idées derrière la tête :

    • on trouvera peut-être des failles dans les protocoles de chiffrement actuels ;
    • les utilisateurs perdront/divulgueront peut-être leur clef ;
    • dans le cas d'une enquête légale, on demandera les clefs de chiffrement.

    Eh bien les beaux jours des clefs perdues sont terminés (ou presque). En effet, dans un échange de clefs de type Diffie-Hellman :

    • même si l'on perd les clefs ayant servit à un échange chiffré ;
    • même si tout le trafic chiffré a été enregistré,

    la conversation ne sera pas déchiffrable. Expliquons le procédé.

    Il s'agit d'un échange de clefs de chiffrement au travers d'un réseau non sécurisé (internet) sans divulgation d'information. Pour le décrire, je vais procéder comme Wikipédia, à l'aide de couleurs :

    • Alice possède une couleur secrète A, et tire au hasard une couleur A' ;
    • Bob possède une couleur secrète B, et tire au hasard une couleur secrète B',

    puis :

    • Alice mélange A et A', qui donne A'' ;
    • Bob mélange B et B' qui donne B'',

    puis

    • Alice envoie A'' sur le réseau ;
    • Bob envoie B'' sur le réseau,

    ces couleurs peuvent être "entendues" (par un tiers espionnant) sur le réseau, si le réseau est enregistré, puis :

    • Alice mélange B'' avec A'', et obtient C = (A + A' + B + B')
    • Bob mélange A'' avec B'', et obtient (A + A' + B + B') = C !

    Ainsi :

    • Alice et Bob ont réussi à créer un couleur C inconnue pour le réseau ;
    • De plus, cette couleur est temporaire : Alice et Bob ont tiré pour cette communication A' et B' ;
    • En enfin, cerise sur le gâteau, on ne peut pas déchiffrer la conversation sans avoir à la fois A' et B', qui sont supprimées par Alice et Bob, puisqu'il s'agit de clefs temporaires. Même si l'on obtenais B' de Bob, il manquerait toujours A'.

    En conclusion, Alice et Bob ont un moyen de communiquer qui empêche le déchiffrement a posteriori. Au niveau du réseau, la reconstitution de l'échange est devenue impossible.

    Cette fonctionnalité s'appelle PFS (Perfect Forward Secrecy : confidentialité persistante) pour le web, OTR (Off-The-Record Messaging : messagerie confidentielle) pour la messagerie instantanée (utilisant par exemple le protocole XMPP).

    Ici, ce sont les données de la conversation qui disparaissent.

    Information, existes-tu ?

    Un autre recours de l'enquête est la perquisition : physiquement aller voir l'information. Dernière déception pour les tenants du contrôle, ça n'est plus possible. Un mécanisme appelé "déni-plausible" consiste à pouvoir cacher si bien une donnée qu'il devient impossible de faire la preuve de son existence. Plongée dans les profondeurs du mystère...

    Ces technologies sont très fortement associées à des logiciels, et à une actualité liée (probablement) à la NSA, mais à hashtagueule on a prévu de rester, donc on va faire court, quitte à revenir là-dessus sur une prochaine news. Je parlerai indifféremment de TrueCrypt (et ses descendants VeraCrypt, CypherShed, et j'en passe) comme synonyme du déni-plausible pour la clarté de l'article, mais ces logiciels permettent bien plus.

    Rien ne vaut un exemple : TrueCrypt permet de créer des volumes chiffrés, ainsi :

    • Ève crée un volume A de 100 Go de données personnelles, chiffré avec une clef α ;
    • elle crée un sous-volume E de 100 Mo de données très confidentielles, chiffrées avec une clef ε.

    Si quelqu'un accède à cet ordinateur, il verra le volume A chiffré, et ne pourra pas accéder aux données. Si ce quelqu'un est la justice, elle peut l'obliger légalement (même article que plus haut) à lui donner accès à ses clefs de chiffrement. Il lui suffit de ne donner que la clef α à la justice, et elle ne verra que le volume A de 100 Go (moins 100 Mo). Le sous-volume chiffré sera toujours inaccessible, et qui plus est, il ressemblera toujours à des données aléatoires, comme avant le déchiffrement de A. (Les données de E ne sont pas protégées contre la destruction, mais c'est une autre affaire).

    Ainsi, l'existence de données dans E n'est pas prouvable, et il est même plausible qu'il n'y ai rien à cet endroit. C'est comme cela que l'on peut cacher des données.

    En conclusion

    Vous m'avez probablement vu arriver avec mes gros sabots, mais je vais quand même récapituler :

    • on peut stocker une information sans qu'elle ne soit jamais accessible que par son propriétaire (3ème paragraphe) ;
    • il est possible pour deux personnes de communiquer sans que leur trafic ne soit jamais déchiffrable (décryptable, c'est une autre affaire) (2ème paragraphe) ;
    • il est possible pour deux ordinateurs de communiquer sans qu'aucun acteur du réseau ne le sache (1er paragraphe).

    La totalité de la conversation a donc disparu des radars : les métadonnées de la conversation, le contenu de la conversation, et la copie locale sauvegardée.

    Tout ceci est possible, là, maintenant, avec des logiciels open-source (ou libres) dont le code source (c'est-à-dire l'application logicielle de la formule mathématique, avant d'être traduite en langage ordinateur) est disponible au téléchargement (vous utilisez peut-être de la PFS avec hashtagueule.fr sans le savoir).

    La conclusion (personnelle, vous le rappelez-vous ?), c’est qu’on ne peut gagner le volet numérique de la guerre contre le terrorisme par les seules voies législatives ("When you have a hammer, everything looks like a nail" ;-) ).

    Encore un dernier exemple (fictif celui-là) pour illustrer le pire des cas : un groupe terroriste qui est la tête-pensante, cherchant à radicaliser des jeunes, en vue d'en faire des terroristes. Son outil numérique ultime consiste à faire une solution logicielle reprenant les trois concepts, de faire le tout de manière décentralisée, et d'automatiser le processus de distribution.

    Les derniers points que j'ai survolé :

    • le côté open-source donne l'assurance du code qui est exécuté ;
    • le côté décentralisé délivre de la nécessité d'un tiers (pour les mails, le chat...)

    La vraie conclusion est qu'il ne faut pas faire de bêtises en matière de numérique, parce que tout ce que j'ai écrit n'est qu'une compilation d'informations publiquement disponibles sur internet, et maintes fois redondées.

    N'hésitez pas à commenter et donner votre avis dans la section commentaires !

    Motius

    • Ha chevron_right

      Le droit, la justice et internet.

      motius · pubsub.gugod.fr / hashtagueule · Saturday, 19 September, 2015 - 22:00 · 12 minutes

    Bonjour à tous ! L'épée contre le bouclier symbolise un éternel équilibre dans une guerre, mais à la fin, qui gagne ? Aujourd'hui je vous propose d'aller jeter un coup d'œil du côté d'un de nos outils favoris : l'internet, ses monts et merveilles, et le reste... La plupart d'entre vous êtes familier...

    Bonjour à tous !

    L'épée contre le bouclier symbolise un éternel équilibre dans une guerre, mais à la fin, qui gagne ? Aujourd'hui je vous propose d'aller jeter un coup d'œil du côté d'un de nos outils favoris : l'internet, ses monts et merveilles, et le reste...

    La plupart d'entre vous êtes familiers des concepts que je vais décrire dans cette première partie, mais elle me semble essentielle afin que l'on parte d'une base commune.

    Quelques définitions...

    Je vais essayer d'être suffisamment clair pour qu'il vous soit inutile de suivre les liens indiqués dans l'article, cependant je les inclus à toutes fins utiles.

    Internet : Il s'agit d'un réseau physique reliant des machines. En gros des tuyaux transportant de l'information, normalement sans en modifier le contenu (donnée). Schématiquement, il n'existe que deux objets sur internet :

    • des ordinateurs ;
    • des "câbles" (fibre optique, réseau cuivre, antennes 3G, 4G, ...).

    Internet est en fait un réseau de réseaux : chaque opérateur internet (FAI) construit son bout de réseau, qu'il interconnecte ensuite aux autres (il y a pas mal de questions de taille d'opérateur, de gros sous, d'organisation des réseaux, mais on va faire simple). L'étymologie du mot internet décrit cela : il s'agit d'une interconnexion (inter) de réseaux (network).

    Cela dit, dans tout cet article, une représentation schématique à peu près équivalente d'internet sera utilisée (vous pouvez cliquer pour afficher les images taille réelle dans un nouvel onglet) :

    schema_internet

    Représentation d'un réseau physique de machines. Schéma simplifié d'internet. CC-BY-SA

    Web : réseau virtuel de machines. Ce réseau utilise l'infrastructure qu'est l'internet. Il est constitué de deux types d'objets :

    • les machines client-web. Celles-ci peuvent demander du contenu (via le protocole HTTP) ;
    • les machines serveur-web. Celles-ci proposent du contenu.

    Il est tout à fait possible pour une machine d'être à la fois client-web et serveur-web. Le web peut être vu comme une sous-partie d'internet, tous les ordinateurs connectés pouvant théoriquement proposer et demander du contenu. Le web est un réseau virtuel.

    Protocole : manière qu'ont plusieurs ordinateurs de communiquer. HTTP est un protocole du Web. De manière non-exhaustive, les protocoles incluent HTTP/HTTPS, FTP, BitTorrent, SSH...

    Serveur : une machine qui propose du contenu ou service. Exemples, un serveur web propose des pages web (via le protocole HTTP/HTTPS), alors qu'un serveur proxy effectue des requêtes à votre place de telle sorte qu'il semble que c'est lui et non pas vous qui a effectué la recherche.

    Client : une machine qui demande du contenu ou service. La majorité des internautes ne sont que clients.

    Donnée : de l'information. (Volontairement court : une méta-donnée est de la donnée, et peut très bien être considérée comme de la donnée pure, selon le contexte).

    Méta-donnée : de l'information à propos d'une information ou personne, objet... Exemple : les métadonnées d'une image sont :

    • la date ;
    • l'heure ;
    • le type d'appareil photo ;
    • la géolocalisation (éventuellement).

    Ce concept est complexe. En effet si une image passe sur internet, les métadonnées des paquets IP sont les adresses IP source et destination (etc.), et les métadonnées de la photo sont des données sur internet.

    Chiffrement : Le fait de transformer une donnée numérique à l'aide d'algorithmes mathématiques afin de la rendre indéchiffrable pour quiconque en dehors de la personne à qui la donnée est destinée.

    Déchiffrement : le fait d'obtenir les données en clair à partir du flux chiffré.

    Décryptage : opération qui consiste à essayer de casser le chiffrement protégeant de la donnée.

    Empreinte (hash) : suite de caractère identifiant de manière unique de la donnée à l'aide d'un algorithme. Les algorithmes utilisés actuellement sont : MD5 (vraiment obsolète, et déconseillé), SHA-1 (en voie d'obsolescence depuis 2015, le plus utilisé), SHA-2 (assez peu utilisé), ou SHA-3 (usage vraiment marginal).

    Signature : le fait d'authentifier les données. Cette opération se fait en deux temps : le serveur réalise une empreinte des données, puis il signe l'empreinte. Vérifier l'intégrité des données consiste à effectuer l'empreinte et vérifier la signature.

    Comment les mathématiques contournent le droit.

    Comme d'habitude, je vais essayer de présenter les faits le plus objectivement possible (ce qui sera assez facile, étant donné qu'il s'agit d'abord d'un sujet technique) puis émettre une opinion - bien personnelle, comme toujours - que je vous encourage à critiquer dans les commentaires.

    Le fil de cet article sera le suivant :

    • tout d'abord, je vais présenter les principes du réseau d'anonymisation (ici tor que la majorité d'entre vous connaît) ;
    • puis les principes mathématiques des techniques de chiffrement puissant de nos communications (PFS, OTR, GPG/OpenPGP/PGP...) ;
    • et enfin les principes mathématiques pour rendre improuvable l'existence d'une donnée (utilisés par TrueCrypt, CypherShed, VeraCrypt).

    (En fait l'idée de nouvelles possibilités à l'aide des mathématiques n'est pas nouvelle :  le principe du VPN ou du chiffrement permet de s'abstraire du risque d'un réseau non sécurisé en soi...)

    Du réseau d'anonymisation

    Un petit schéma aidera à mettre les idées au clair, mais pas si vite ! Rien ne vaut un petit parallèle avec ce que vous connaissez déjà...

    Lorsque vous chargez une page web en HTTP (flux non-chiffré, non-signé) il se passe ça :

    http

    Trafic HTTP (Web). Requête, réponse. CC-BY-SA.

    La suite d’événement est :

    • le client parle au serveur (connexion) ;
    • le serveur dit "je parle HTTP" ;
    • le client demande la page web identifiée de manière unique par une URL ;
    • le serveur répond :
      • "200 OK", s'il l'a, puis la transmet ;
      • "404 Error", s'il ne l'a pas (la très fameuse "Erreur 404" que tout le monde connaît, et facile à obtenir, il suffit de demander une page qui n'existe pas à un serveur).

    De même, demander une page web en HTTPS, ça se représente comme ça :

    https

    Trafic HTTPS (Web). Requête, réponse. CC-BY-SA.

    La suite d’événement est presque identique :

    • le client parle au serveur (connexion) ;
    • le serveur dit "Je parle HTTPS" ;
    • le client demande en HTTPS l'URL ;
    • le serveur répond :
      • "200 OK", s'il l'a, puis l'envoie
      • "404 Error", sinon.

    Deux différence entre HTTP et HTTPS, avec HTTPS :

    • le trafic est chiffré (impossible de lire) ;
    • le trafic est signé (impossible d'altérer le contenu, s'il était modifié, le client jetterait les paquets IP et les redemanderait).

    Eh bien utiliser tor, ça ressemble à ça (décrit ici par le projet tor) :

    tor0

    Trafic tor. CC-BY-SA.

    C'est-à-dire que tor fonctionne comme s'il y avait au minimum (parce qu'il peut y avoir plusieurs nœuds milieu en théorie) trois proxy (ou intermédiaires) entre nous et le serveur que l'on interroge.

    Tor est ainsi un réseau virtuel de machines serveur appelées "nœud". Il y a trois type de nœuds :

    • entrant ;
    • milieu ;
    • sortant.

    Le trafic ressemble donc à ceci :

    tor01

    Apparence du trafic avec tor. CC-BY-SA.

    Une représentation complète de l'internet avec du trafic tor serait :

    tor](https://hashtagueule.fr/assets/2015/09/tor.png)

    Trafic tor sur internet. CC-BY-SA.

    Utiliser le réseau tor permet donc un anonymat de très grande qualité, en effet :

    • le FAI qui relie l'abonné ne voit que du trafic, qu'il peut identifier comme étant du trafic tor, même en HTTP ;
    • le serveur ne sait pas qui a demandé sa page ou son service ;
    • le nœud d'entrée ne connait que l'utilisateur, pas le contenu (même en HTTP) ;
    • le relais milieu ne connaît que ses voisins (ou les relais milieu...) ;
    • le nœud sortie connaît le nœud milieu et le serveur interrogé, et voit :
      • soit du trafic HTTPS indéchiffrable ;
      • soit le trafic HTTP demandé, en clair.

    Ainsi l'utilisation de tor, par le grand anonymat qu'il permet, empêche de relier un utilisateur au trafic qu'il a demandé.

    L'utilisation de tor fait donc disparaître les informations liées à une connection : les métadonnées.

    Une communication irrémédiablement chiffrée

    Une communication chiffrée, une clef de chiffrement. Une idée gargantuesque consiste à enregistrer, au niveau d'un État, tout le trafic chiffré qui passe, et de l'analyser après, avec plusieurs idées derrière la tête :

    • on trouvera peut-être des failles dans les protocoles de chiffrement actuels ;
    • les utilisateurs perdront/divulgueront peut-être leur clef ;
    • dans le cas d'une enquête légale, on demandera les clefs de chiffrement.

    Eh bien les beaux jours des clefs perdues sont terminés (ou presque). En effet, dans un échange de clefs de type Diffie-Hellman :

    • même si l'on perd les clefs ayant servit à un échange chiffré ;
    • même si tout le trafic chiffré a été enregistré,

    la conversation ne sera pas déchiffrable. Expliquons le procédé.

    Il s'agit d'un échange de clefs de chiffrement au travers d'un réseau non sécurisé (internet) sans divulgation d'information. Pour le décrire, je vais procéder comme Wikipédia, à l'aide de couleurs :

    • Alice possède une couleur secrète A, et tire au hasard une couleur A' ;
    • Bob possède une couleur secrète B, et tire au hasard une couleur secrète B',

    puis :

    • Alice mélange A et A', qui donne A'' ;
    • Bob mélange B et B' qui donne B'',

    puis

    • Alice envoie A'' sur le réseau ;
    • Bob envoie B'' sur le réseau,

    ces couleurs peuvent être "entendues" (par un tiers espionnant) sur le réseau, si le réseau est enregistré, puis :

    • Alice mélange B'' avec A'', et obtient C = (A + A' + B + B')
    • Bob mélange A'' avec B'', et obtient (A + A' + B + B') = C !

    Ainsi :

    • Alice et Bob ont réussi à créer un couleur C inconnue pour le réseau ;
    • De plus, cette couleur est temporaire : Alice et Bob ont tiré pour cette communication A' et B' ;
    • En enfin, cerise sur le gâteau, on ne peut pas déchiffrer la conversation sans avoir à la fois A' et B', qui sont supprimées par Alice et Bob, puisqu'il s'agit de clefs temporaires. Même si l'on obtenais B' de Bob, il manquerait toujours A'.

    En conclusion, Alice et Bob ont un moyen de communiquer qui empêche le déchiffrement a posteriori. Au niveau du réseau, la reconstitution de l'échange est devenue impossible.

    Cette fonctionnalité s'appelle PFS (Perfect Forward Secrecy : confidentialité persistante) pour le web, OTR (Off-The-Record Messaging : messagerie confidentielle) pour la messagerie instantanée (utilisant par exemple le protocole XMPP).

    Ici, ce sont les données de la conversation qui disparaissent.

    Information, existes-tu ?

    Un autre recours de l'enquête est la perquisition : physiquement aller voir l'information. Dernière déception pour les tenants du contrôle, ça n'est plus possible. Un mécanisme appelé "déni-plausible" consiste à pouvoir cacher si bien une donnée qu'il devient impossible de faire la preuve de son existence. Plongée dans les profondeurs du mystère...

    Ces technologies sont très fortement associées à des logiciels, et à une actualité liée (probablement) à la NSA, mais à hashtagueule on a prévu de rester, donc on va faire court, quitte à revenir là-dessus sur une prochaine news. Je parlerai indifféremment de TrueCrypt (et ses descendants VeraCrypt, CypherShed, et j'en passe) comme synonyme du déni-plausible pour la clarté de l'article, mais ces logiciels permettent bien plus.

    Rien ne vaut un exemple : TrueCrypt permet de créer des volumes chiffrés, ainsi :

    • Ève crée un volume A de 100 Go de données personnelles, chiffré avec une clef α ;
    • elle crée un sous-volume E de 100 Mo de données très confidentielles, chiffrées avec une clef ε.

    Si quelqu'un accède à cet ordinateur, il verra le volume A chiffré, et ne pourra pas accéder aux données. Si ce quelqu'un est la justice, elle peut l'obliger légalement (même article que plus haut) à lui donner accès à ses clefs de chiffrement. Il lui suffit de ne donner que la clef α à la justice, et elle ne verra que le volume A de 100 Go (moins 100 Mo). Le sous-volume chiffré sera toujours inaccessible, et qui plus est, il ressemblera toujours à des données aléatoires, comme avant le déchiffrement de A. (Les données de E ne sont pas protégées contre la destruction, mais c'est une autre affaire).

    Ainsi, l'existence de données dans E n'est pas prouvable, et il est même plausible qu'il n'y ai rien à cet endroit. C'est comme cela que l'on peut cacher des données.

    En conclusion

    Vous m'avez probablement vu arriver avec mes gros sabots, mais je vais quand même récapituler :

    • on peut stocker une information sans qu'elle ne soit jamais accessible que par son propriétaire (3ème paragraphe) ;
    • il est possible pour deux personnes de communiquer sans que leur trafic ne soit jamais déchiffrable (décryptable, c'est une autre affaire) (2ème paragraphe) ;
    • il est possible pour deux ordinateurs de communiquer sans qu'aucun acteur du réseau ne le sache (1er paragraphe).

    La totalité de la conversation a donc disparu des radars : les métadonnées de la conversation, le contenu de la conversation, et la copie locale sauvegardée.

    Tout ceci est possible, là, maintenant, avec des logiciels open-source (ou libres) dont le code source (c'est-à-dire l'application logicielle de la formule mathématique, avant d'être traduite en langage ordinateur) est disponible au téléchargement (vous utilisez peut-être de la PFS avec hashtagueule.fr sans le savoir).

    La conclusion (personnelle, vous le rappelez-vous ?), c’est qu’on ne peut gagner le volet numérique de la guerre contre le terrorisme par les seules voies législatives ("When you have a hammer, everything looks like a nail" ;-) ).

    Encore un dernier exemple (fictif celui-là) pour illustrer le pire des cas : un groupe terroriste qui est la tête-pensante, cherchant à radicaliser des jeunes, en vue d'en faire des terroristes. Son outil numérique ultime consiste à faire une solution logicielle reprenant les trois concepts, de faire le tout de manière décentralisée, et d'automatiser le processus de distribution.

    Les derniers points que j'ai survolé :

    • le côté open-source donne l'assurance du code qui est exécuté ;
    • le côté décentralisé délivre de la nécessité d'un tiers (pour les mails, le chat...)

    La vraie conclusion est qu'il ne faut pas faire de bêtises en matière de numérique, parce que tout ce que j'ai écrit n'est qu'une compilation d'informations publiquement disponibles sur internet, et maintes fois redondées.

    N'hésitez pas à commenter et donner votre avis dans la section commentaires !

    Motius