Skip to content

Chiffrement

Henri edited this page Nov 22, 2015 · 1 revision

Les mécanismes cryptographiques

Les communications SSL

Peps n'autorise que les communications utilisant les algorithmes définis par TLS V1.2. Tous les algorithmes de TLS V1.2 sont autorisés. Les versions SSL et TLS antérieures à V1.2 seront interdites.

Concernant le certificat utilisé, il devra avoir les caractéristiques suivantes :

  • Une durée de validité ne dépassant pas 3 ans
  • Une taille de clé de 4096 bits au minimum
  • Un algorithme de signature SHA256 avec un chiffrement RSA

Les chiffrements des messages et pièces jointes

Les messages et les pièces jointes sont chiffrés permettant ainsi d'assurer la confidentialité et l'intégrité de bout en bout des informations. Les informations transitant et stockées ainsi à l'intérieur de Peps ne sont pas en clair. Uniquement l'expéditeur et les destinataires peuvent déchiffrer les informations.

Le chiffrement des messages et des pièces jointes est réalisé coté client afin de garantir une meilleure sécurité des éléments échangés. La librairie de cryptographie utilisée est implémentée en JavaScript : TweetNaCl.

La gestion des clés

Les clés des utilisateurs

Chaque utilisateur a deux types de clé, une clé secrète et une clé maître.

La clé secrète est générée à la création du compte de l'utilisateur et immuable. Les caractéristiques de cette clé, nommée User Secret Key, sont:

- Algorithm= curve25519-xsalsa20-poly1305
- Secret key length= 32
- Public key length= 32
- Nonce length= 24
- Overhead length= 16

La clé maître est une clé dérivée du mot de passe de l'utilisateur en utilisant l'algorithme PBKDF2. Cette clé est utilisée uniquement pour chiffrer la clé secrète et la transmettre à l'utilisateur. Les caractéristiques de cette clé, nommée User Master Key, sont :

- Algorithm= xsalsa20-poly1305
- Key length= 32
- Nonce length= 24
- Overhead length= 16

Les clés d'équipe

Les clés d'équipe sont utilisées lors de partage de ressources entre les membres de la même équipes, ceci permet de ne chiffrer les ressources qu'une seul fois pour tous les membres. Cette clé est générée coté serveur et envoyée à chaque membre en utilisant la User Master Key de chaque membre.

Les caractéristiques de cette clé, nommée Team Secret Key, sont :

- Algorithm= curve25519-xsalsa20-poly1305
- Secret key length= 32
- Public key length= 32
- Nonce length= 24
- Overhead length= 16

Les clés des ressources.

Deux types de ressource sont prises en compte : les messages et les fichiers.

Les messages chiffrés utilisent une clé générée coté client et partagée (chiffrée) ensuite avec tous les destinataires. Les caractéristiques de cette clé, nommée Message Secret Key, sont :

- Algorithm= curve25519-xsalsa20-poly1305
- Secret key length= 32
- Public key length= 32
- Nonce length= 24
- Overhead length= 16

Les documents chiffrés utilisent deux clés, une permettant le chiffrement du document (Le document est découpé puis chaque morceau est chiffré), l'autre permettant de chiffrer la clé de chiffrement du fichier. Les caractéristiques de la clé de chiffrement du fichier, nommée File AES Key, sont:

- Algorithm= AES-CBC-256
- Key length= 32
- IV length= 16

Les caractéristiques de la clé utilisée pour chiffrer la File AES Key, nommée File Secret Key, sont:

- Algorithm= curve25519-xsalsa20-poly1305
- Secret key length= 32
- Public key length= 32
- Nonce length= 24
- Overhead length= 16

Principe de fonctionnement

Peps dispose de deux mécanismes de base pour le chiffrement des données.

Envoi d'un message

L'utilisateur désirant envoyer un message à un groupe génère une paire de clé (Message Secret Key) permettant le chiffrement du message. La clé publique servira, coté client, afin de chiffrer le message, et la clé privé sera envoyer aux autre membres afin de pouvoir déchiffrer le message.

La clé privée sera au préalable chiffrée en utilisant, soit la clé du groupe (Team Secret Key), soit la clé du/des destinataires (User Secret Key). Dans le cas où le message a plusieurs destinataires, l'usage de la clé d'équipe permet de chiffrer la clé du message une seule fois au lieu de chiffrer cette clé autant de fois qu'il y a de destinataires.

Coté destinataire, la clé privée du message est déchiffrée puis utilisée pour déchiffrer à son tour le message.

Envoi d'une pièce jointe

L'utilisateur désirant envoyer un fichier à un groupe génère deux clés. La première permet de chiffrer le document (utilisant la File AES Key) et la seconde permet de chiffrer la File AES Key (File Secret Key).

Le fichier est découpé en morceaux (ou "chunks"), qui sont chiffrés puis envoyés au serveur afin d'être redistribués. Pour chaque chunk, des nonces sont générés et intégrés aux chunks afin d'éviter le rejeu.

La clé File AES Key est chiffrée en utilisant la File Secret Key. En l'état, seul le créateur du fichier est capable de lire le fichier.

La clé File Secret Key sera ensuite chiffrée selon le même principe que les messages (soit avec la clé d'équipe, soit pour chaque destinataire comme indiqué dans la section précédente) et distribuée aux différents destinataires.

Chaque destinataire procède alors en quatre étapes :

  1. Il récupère tous les chunks chiffrés.
  2. Il déchiffre la File Secret Key.
  3. Il déchiffre la File AES Key.
  4. Il déchiffre chacun des chunks puis reconstitue le contenu du fichier.