Implémentation

Détails sur l’implémentation des échanges de message et de l’utilisation de la cryptographie

Page précédente : Spécifications

Page suivante : Fonctionnalités

Attention : cette page contient des formules en LaTeX qui ne sont pas correctement supportées sur le site web, pour une meilleure expérience veuillez consultez la page sur Github.

Sommaire

Prérequis

Diagrammes de séquence

Les échanges entre les clients et le serveur du gestionnaire de mots de passe sont spécifiés pour répondre à des problématiques de sécurité précises. Voici une présentation plus détaillée des informations contenues dans les échanges récurrents dans l’utilisation du gestionnaire avec les considérations cryptographiques.

Séquence d’enregistrement

register sequence diagram full

Découverte des clients et chiffrement avec le serveur

client discovery server encryption diagram full

Envoi de messages entre clients

client messages diagram full

Format des trames

Le gestionnaire de mots de passe est composé de deux couches : l’échange de messages entre les clients et le serveur fournit une couche de service qui est utilisée par les messages entre clients pour être transportés et chiffrés de bout en bout.

La couche de service du gestionnaire de mots de passe repose sur la couche session du modèle OSI, toutes les trames qui suivent sont donc encapsulées dans des messages TLS et surviennent après le handshake TLS, c’est-à-dire après la récupération du certificat du serveur et la création d’un secret partagé entre le serveur et chaque client. Tous les messages entre les clients et le serveur sont chiffrés entre le client et le serveur, et entre les clients pour les messages de la couche chiffrée, sauf mention contraire.

Requêtes de la couche service (client vers serveur)

Réponses de la couche service (serveur vers client)

Messages de la couche application (entre clients)

Ces messages sont indépendants de la couche service décrite ci-dessus, si bien que les trames échangées entre clients sont identiques qu’elles soient transmises via le serveur ou via un autre moyen comme le Bluetooth, le QR Code ou le protocole ICE.

Champs des trames

Dans chaque trame, le type est composé de 8 bits, il sert à déterminer le sens d’un message et d’en déduire la syntaxe pour le lire. Le premier bit sert à différencier les messages à destination du protocole ICE et ceux du gestionnaire de mots de passe. Le deuxième bit permet de distinguer les messages de la couche service et les messages de la couche chiffrée de bout en bout. Le troisième bit différencie les requêtes et les réponses au sein de chaque couche. Les cinq autres bits servent à préciser le type de trame parmi les messages possibles au regard des trois premiers bits, ce qui représente 32 types de messages possibles par protocole, par couche et par sens requête / réponse.

Dans les trames de types Info ou Erreur, le code est composé de 8 bits : le premier bit permet de différencier les informations et les erreurs. Pour les erreurs, le deuxième bit différencie les erreurs qui sont la faute du client et les erreurs qui sont la faute du serveur, de la même manière que le protocole HTTP, et le troisième bit permet d’indiquer si l’erreur est inattendue ou pas, afin de distinguer les problèmes survenus lors du traitement du message (dus à une mauvaise implémentation) et les erreurs justifiées, en cas de d’erreur du client ou d’indisponibilité du service pour cause de facteur extérieur, comme une attaque ou une panne par exemple. Le cinq autres bits servent à préciser le type d’information ou d’erreur, soit 32 codes possibles.

Dans toutes les trames, lorsqu’un champ est de taille variable, il est précédé d’un champ précisant sa longueur. Si l’utilisation d’une couche inférieure TLS, TCP ou UDP permet de prédire la taille des trames, ces champs longueurs ne seront pas utiles, sauf s’il y en a plusieurs dans une seule trame.

Support du protocole ICE

En plus des trames décrites au-dessus, le serveur et les clients accepteront les messages du protocole ICE. Le serveur fera également office de serveur STUN et TURN, afin respectivement de communiquer aux clients leur adresse publique et d’échanger leurs données entre eux. Les implémentations du serveur et des clients devront répondre aux RFC 8445, 8489 et 8656. Les messages seront précédés du champ type comme décrit plus tôt.