En tant qu'utilisateurs de services en ligne, on doit souvent faire le choix entre la véritable confidentialité de nos données personnelles et l’opportunité d’utiliser des services simples et personnalisés.

C'est un choix que nous ne devrions pas avoir à faire. C'est pourquoi Qwant lance en version alpha une nouvelle technologie open-source appelée Masq by Qwant. Elle permet aux utilisateurs de stocker les données personnelles utilisées par les applications localement sur leur appareil.

Nous avons fait de Qwant Maps le premier de nos services à utiliser Masq by Qwant. Masq by Qwant permet de stocker des données de localisation lorsque vous voulez que Qwant Maps se souvienne de votre domicile ou de votre lieu de travail, sans que Qwant ou un tiers n'accède à ces informations. Pour ajouter ces emplacements favoris sur Qwant Maps, l’utilisateur peut activer Masq by Qwant et créer un profil local en quelques clics seulement.

Fonctionnement de Masq avec Qwant Maps

Interactions entre Masq by Qwant et Qwant Maps

Lors de la première activation de Masq depuis Qwant Maps, une base de données est créée et repliquée entre Qwant Maps et Masq. Les deux instances de cette base sont synchronisées en temps réel quand une fenêtre Masq et une fenêtre Maps sont ouvertes en même temps. La synchronisation s’effectue à travers une connexion chiffrée et décentralisée grâce au protocole WebRTC.

Pour protéger les données de la base, Masq génère automatiquement une clé de chiffrement AES de 128 bits* qui sera transmise à Qwant Maps à chaque activation de Masq. Cette clé est utilisée par Qwant Maps pour chiffrer toutes les données stockées dans la base avec l’algorithme AES-GCM. La clé n’est pas stockée de manière persistante par Qwant Maps, elle est donc perdue à chaque désactivation de Masq. Les données ne seront plus accessibles sur Qwant Maps jusqu’à une nouvelle activation qui permettra de récupérer la clé de chiffrement. Pour mieux comprendre le fonctionnement et l'interet de ce service, explorons plus en détail le fonctionnement du chiffrement des données et l'échange de pair-à-pair via le protocole webRTC.

Chiffrement des données dans Masq

La clé de chiffrement est stockée de manière persistante par Masq. Les données stockées par Masq by Qwant sont chiffrées sur l’appareil de l’utilisateur en utilisant l’algorithme de chiffrement AES-GCM, avec une clé AES 128 bits appelée MasterKey (MK). La MK est protégée à son tour par une clé KEK (Key Encryption Key), issue du mot de passe de l'utilisateur (à l’aide de la fonction de dérivation PBKDF2).
Le tout offre une solution de chiffrement de bout en bout, ce qui garantit que personne, y compris Qwant, ne peut accéder à vos données. Par conséquent en cas d’oubli, il est impossible pour Masq by Qwant de générer un nouveau mot de passe pour vous.

Qu'est ce que le protocole webRTC ?

Toutes les communications entre Qwant Maps et Masq passent par le protocole WebRTC dont le but est de permettre la communications pair-à-pair. Pour en savoir plus : fr.wikipedia.org/wiki/WebRTC

Etablissement de la connexion pair-à-pair

Les deux appareils voulant communiquer doivent tout d’abord s’échanger les informations nécessaires à l’établissement d’une connexion directe. Ils utilisent pour cela un serveur de signalisation utilisé comme point de rendez-vous, les 2 pairs s’y connectent et s’échangent les informations tels que l’IP et le port à travers lequel l’autre pair pourra se connecter.

NAT et STUN

Lorsque le client se trouve derrière un NAT, il ne connait pas forcément l’IP publique à travers laquelle l’autre pair pourra se connecter à lui. Il utilise alors un serveur STUN (hébergé par Qwant dans notre cas) qui lui permet de découvrir le type de NAT derrière lequel il se trouve ainsi que l’IP publique et le port que le NAT lui a associé.

Le client pourra alors envoyer cette information à l’autre pair à travers le serveur de signalisation.

NAT symétrique et TURN

Dans le cas d’un client se trouvant derrière un NAT de type symétrique, l’IP/port externe dépend non seulement de l’IP/port d’origine mais également de l‘IP/port de destination.

Ce qui implique qu’un client A se trouvant derrière un NAT symétrique qui effectuerait une requête au STUN pour connaitre son IP/port publique recevra celle associée au STUN en tant que destination. Cet IP/port ne pourra donc pas être utilisé par un client B pour se connecter au client A, le routeur considérera la connexion comme invalide.

La solution pour permettre une connexion sera alors de passer par un serveur qui va relayer les données chiffrées, le serveur TURN (hébergé par Qwant pour Masq). Un client A se trouvant derrière un NAT symétrique se connecte au relai qui lui alloue un IP/port que le client A pourra alors proposer au client B comme étant son IP/port.

WebRTC entre Qwant Maps et Masq by Qwant

Dans la plupart des cas, Masq by Qwant et Qwant Maps vont communiquer en WebRTC à travers le réseau local. Il s’échangeront donc leur IP locale à travers le serveur de signalisation pour établir une connexion.

Dans certains cas la connexion WebRTC à travers le réseau local est interdite, par exemple dans le navigateur Safari. La connexion devra alors passer par le réseau public et utilisera donc le STUN ou le TURN selon les cas.

Projet open-source

Le développement du projet est ouvert à la communauté open-source. Chacun peut vérifier le code et soumettre des idées d'améliorations ou reporter des bugs.

  • Masq-app : l'application web que les utilisateurs ouvrent pour créer leurs profils local et pour gérer les différentes applications associées.
    github.com/QwantResearch/masq-app
  • Masq-lib : la bibliothèque que les développeurs peuvent utiliser pour interagir avec Masq-app. Masq-lib permet aux développeurs d'activer Masq, d'exiger des autorisations pour accéder aux données personnelles et d'envoyer des données à stocker par Masq-app.
    github.com/QwantResearch/masq-lib

Quel avenir pour ce nouveau service ?

Aujourd’hui le service est présenté dans sa version Alpha et se limite à la synchronisation des favoris, ou POI, sur Qwant Maps. Les données chiffrées sont ainsi synchronisées sur les appareils que l’utilisateur choisit et circulent en toute sécurité grâce au protocole webRTC et son architecture décentralisée. Les données sont par ailleurs chiffrées une deuxième fois à travers le protocole webRTC durant l’échange.

Dans une prochaine version Masq pourra proposer la synchronisation entre différents appareils. L’utilisateur pourra alors retrouver son profil et ses données sur tous ses appareils pour l'ensemble des services proposés par Qwant.

Cet article a été écrit par l'équipe Masq by Qwant : Charlotte, Geoffrey, Levent et Sujeeban.  

*La taille de la clé de chiffrement AES n'est pas un choix définitif, nous allons déterminer une taille de clé en fonction des différents benchmarks qui vont être réalisés (compromis sécurité/performance). Il est important de rappeler qu'une clé de 128 bits permet d'avoir une sécurité suffisante aujourd'hui.