Cryptographie

Aperçu

La solution Parsec implique de nombreux concepts cryptographiques afin par exemple de permettre les échanges de clés entre les utilisateurs d’un même espace de travail, ou l’ajout d’un nouvel utilisateur sans impliquer d’autres clés privées que celles que le nouvel utilisateur se crée ainsi que celles de l’administrateur l’invitant.

Un utilisateur (user) peut posséder un ou plusieurs terminaux (devices) qu’il peut utiliser de manière transparente, et il est en capacité à tout moment d’ajouter de nouveaux terminaux depuis n’importe lequel de ses terminaux.

Une organisation peut être mise en route sans que l’administrateur du serveur ne puisse prendre connaissance de sa clé root.

Dans cette section, les mécanismes permettant à Parsec d’atteindre ce niveau de confidentialité Zero-Trust seront rapidement expliqués (dans ce contexte, Zero-Trust signifie qu’aucune confiance n’a à être placée dans le backend pour que la solution soit sécurisée).

Création d’une organisation

  1. L’administrateur du serveur de métadonnées enregistre le nom de l’organisation et obtient un jeton d’initialisation de l’organisation qu’il transmet à la personne désignée pour être le premier administrateur de l’organisation.

  2. L’application crée sur le poste de ce premier administrateur de l’organisation une clé pour l’organisation (ORG_ROOT_SIG_S_KEY, ORG_ROOT_SIG_P_KEY), une clé d’utilisateur (USER_ENC_S_KEY, USER_ENC_P_KEY) et une clé de terminal (DEVICE_SIG_S_KEY, DEVICE_SIG_P_KEY). L’application certifie les clés publiques de l’utilisateur et de l’appareil avec la clé de signature de l’organisation et les télécharge sur le backend. De plus, seule la partie publique de la clé racine de l’organisation (ORG_ROOT_SIG_P_KEY) est téléchargée dans le serveur de métadonnées, la partie secrète est intentionnellement oubliée, ce qui la rend irrécupérable.

Création d’un nouvel utilisateur

La création d’un nouvel utilisateur ne peut se faire que par un utilisateur existant, déjà enregistré dans l’organisation et ayant le profil Administrateur. Considérons le cas où Alice est Administrateur et veut rajouter Bob :

  1. Alice signale au back-end que Bob est invité au sein de l’organisation en transmettant son adresse e-mail.

  2. Le serveur de métadonnées envoie un e-mail à Bob avec une URL d’invitation qui contient l’ID d’organisation et un identifiant unique du canal d’invitation.

  3. Alice et Bob effectuent un échange de clé Diffie Hellman (DH) authentifié :
    1. Alice et Bob créent des clés asymétriques éphémères et échangent les parties publiques en utilisant le serveur de métadonnées comme canal de transmission pour déduire une clé secrète partagée dans le style de DH.

    2. Pour empêcher un serveur de métadonnées malveillant de modifier le canal DH (attaque man-in-the-middle), Alice et Bob authentifient leur clé secrète partagée à l’aide du protocole Short Authentication String (SAS). Chaque partie communique verbalement un jeton SAS que son homologue doit valider parmi un ensemble de jetons (conformément aux recommandations de la littérature scientifique ).

  4. Bob génère ses clés d’utilisateur (USER_ENC_P_KEY, USER_ENC_S_KEY) et de terminal (DEVICE_SIG_P_KEY, DEVICE_SIG_S_KEY) et utilise le canal authentifié pour communiquer leurs parties publiques à Alice.

  5. Alice signs those two keys with the help of her private key (DEVICE_SIG_S_KEY) and upload those certified keys to the metadata server. Since each user key is signed by a device registered in the organization and the one of the first user is signed by the root key (ORG_ROOT_SIG_S_KEY), re-validating the signature trust-chain, a client is able to verify that a key has been added to Parsec by a legitimate terminal and can be considered as valid. Each user is attributed an email address at its creation in order to reflect his correspondence to a natural person. For a given email address, it exists at least one non-revoked user in the organization. This way a compromised user can be replaced (i.e. revocation of the existing user then creation of a new user with the same email address), while enabling other users to find him with the same email address.

Création d’un nouveau terminal

La création d’un nouveau terminal fonctionne de manière similaire à celle d’un nouvel utilisateur à ceci près que le nouveau terminal n’a pas à créer de clé d’utilisateur (USER_ENC_P_KEY, USER_ENC_S_KEY) mais c’est au terminal existant de lui transmettre cette information de manière sécurisée. Le même mécanisme DH authentifié décrit dans la section précédente est utilisé. La nouvelle clé de terminal est certifiée de manière identique en utilisant la clé de signature de terminal existante (DEVICE_SIG_S_KEY) avant d’être envoyé vers le serveur de métadonnées.

Gestion de la lecture d’un fichier

Le client PARSEC tente de privilégier l’accès local aux données lors de la lecture de fichier. Cela n’est pas toujours possible et la consultation du serveur de métadonnées peut s’avérer obligatoire.

La lecture d’un fichier est illustré dans la Figure suivante :

Lecture de fichier avec Parsec
  1. Si le client Parsec ne possède pas le File Manifest en local, il s’authentifie auprès du serveur de métadonnées pour le lui demander ;

  2. Le serveur de métadonnées s’assure que le client a le droit d’y accéder et le lui envoie le cas échéant le File Manifest ;

  3. Le client Parsec déchiffre le manifest résultant et en vérifie la signature (à noter que la phase de récupération de la clé publique du terminal ayant signé le manifest est analogue au mécanisme présenté dans le chapitre dédié à la gestion des utilisateurs/terminaux) ;

  4. Le client Parsec peut alors retrouver tous les blocs nécessaires à la lecture du fichier ;

  5. Dans le cas des blocs non présents en local, le client Parsec les demandes au serveur de métadonnées. Une fois récupérés, le client Parsec les déchiffre et vérifie leur hash ;

  6. Finalement le client recombine les blocs déchiffrés pour former le contenu du fichier demandé.

L’utilisateur interagit avec les fichiers en utilisant ses logiciels tiers classiques. Les données sont dans un premier temps stockées sur le disque dur de la machine, cela pour des questions de performance et de résilience ainsi que pour permettre de fonctionner en mode hors ligne. Dans un second temps, le client Parsec envoie les modifications au serveur de métadonnées.

L’historisation permet à l’utilisateur de lister toutes les versions de tel fichier particulier, et de restaurer le contenu à une version précédente.

Gestion des espaces de travail et du contrôle d’accès

Afin de pouvoir stocker des fichiers, l’utilisateur doit d’abord créer un espace de travail en sauvegarder les informations d’accès (identifiant WS_ID et clé symétrique de chiffrement WS_ENC_KEY) dans son User Manifest.

Le partage d’un espace de travail consiste en deux opérations :

  1. Fournir les données d’accès (WS_ID et WS_ENC_KEY) au Manifest de l’espace de travail. Cela est réalisé au moyen d’un mécanisme d’envoi de messages chiffrés entre utilisateurs et traité automatiquement par le client Parsec. Le nouvel utilisateur stocke alors ces informations dans son Manifest utilisateur ;

  2. Informer le serveur de métadonnées qu’un nouvel utilisateur peut lire (et le cas échéant modifier) les éléments reliés à l’espace de travail donnée.