OMEMO

De Wiki JabberFR
Révision datée du 15 décembre 2024 à 12:54 par Neox (discussion | contributions) (→‎Gestion des appareils et PEP : ajout des informations par appareil (Gajim))
Aller à la navigation Aller à la recherche

Fonctionnement d'OMEMO

OMEMO est un protocole de chiffrement hybride, à double ratchet, utilisé par le protocole XMPP (XEP-0384). Il combine des mécanismes asymétriques (comme Diffie-Hellman) et symétriques (comme AES) pour sécuriser les communications. Ce chiffrement est basé non pas sur l'identité mais sur les appareils connectés au compte de la personne utilisant ce chiffrement : chaque appareil impliqué dans une conversation gère ses propres clés. Le stockage des données nécessaires au chiffrement, par exemple les clés publiques, se fait sur les serveurs XMPP via le protocole PEP (Personal Eventing Protocol, XEP-0163).

Principes fondamentaux

OMEMO repose sur l'idée que le chiffrement des communications est géré intégralement par les clients. Les serveurs ne jouent qu’un rôle de stockage et de relais pour les données publiques nécessaires, notamment via PEP.


Chaque appareil génère une paire de clés asymétriques (publique/privée) :

  • La clé publique est partagée avec les contacts et stockée sur le serveur XMPP.
  • La clé privée reste secrète et n’est jamais partagée.


Chaque appareil génère périodiquement une pair de clés asymétriques de session :

  • La clé publique est partagée avec le client de la personne destinaire.
  • La clé privée reste secrète.


Chaque message est chiffré avec une clé de chiffrement symétrique, dont le secret est échangé avec les appareils de la personne destinataire via le chiffrement de session.


Si une personne possède plusieurs appareils (par exemple, un téléphone et un ordinateur), chacun des appareils génèrent leurs propres clés publiques. Les clés publiques de tous les appareils sont accessibles via le serveur XMPP, les clés de session sont uniquement échangées entre appareils.

Fonctionnement technique

1. Avant d’envoyer un message, chaque appareil impliqué échange ses clés publiques via PEP :

  • Alice et Bob récupèrent les clés publiques de leurs appareils respectifs via leurs serveurs XMPP.
  • Ces clés permettent de dériver une clé partagée.

2. Lorsque Alice et Bob commencent à échanger des messages, leurs appareils calculent une clé de session à l’aide de l’algorithme Diffie-Hellman :

  • Ce mécanisme est déclenché lors de l’échange initial, à l’ajout d’un nouvel appareil, ou après la révocation d’une clé compromise.
  • La clé de session garantit la confidentialité persistante (forward secrecy) : même si un attaquant intercepte une clé privée, les messages futurs ne pourront pas être déchiffrés, car une nouvelle paire de clés est périodiquement générée.

3. À partir de la clé Diffie-Hellman, une clé symétrique est dérivée pour chaque message :

  • Une nouvelle clé est calculée pour chaque message à l'aide d'une fonction de hachage.
  • Cela garantit que chaque message est chiffré avec une clé unique, même dans une conversation continue.


En résumé, on a trois types de clés :

  • Clé d’appareil : utilisée pour identifier chaque appareil et échanger les clés publiques.
  • Clé Diffie-Hellman de session : établie pour garantir la confidentialité persistante.
  • Clé de message : dérivée symétriquement pour chaque message.

Gestion des appareils et PEP

Les clés publiques d’appareil sont stockées sur le serveur XMPP dans des nœuds PEP, permettant aux comptes de récupérer les clés publiques même lorsque leurs appareils sont hors ligne.

Le client est responsable de la gestion des nœuds PEP, et des incohérences ou bogues dans cette gestion peuvent entraîner des problèmes.

Ajout d’un nouvel appareil

Lorsqu’un nouvel appareil est ajouté :

  • Ses clés publiques doivent être publiées dans le PEP.
  • L’appareil est initialement dans un état non approuvé pour les autres personnes, sauf si c'est le premier appareil (dans le cas de la confiance aveugle).
  • Il doit être approuvé manuellement pour pouvoir fonctionner avec OMEMO.

Gestion des appareils dans les clients

Les clients modernes offrent une interface pour :

1. Voir et gérer les clés associées à un compte.

2. Approuver ou révoquer des appareils (via un système de boucliers colorés) :

  • Vert partiel : confiance aveugle (approbation automatique, par exemple).
  • Vert plein : clé approuvée.
  • Rouge : clé non approuvée.
  • Orange : nouvel appareil en attente d'approbation.

3. Une option pour "supprimer les appareils" qui force tous les appareils à republier leurs clés publiques, ce qui peut résoudre des incohérences.

Gajim (version antérieure à 1.8.0)

À ce stade, Gajim nécessitait une extension pour gérer le chiffrement OMEMO (nommée gajim-omemo). Le paramétrage se faisait donc dans les paramètres de l'extension.

Pour se rendre dans la zone de paramétrage OMEMO, il faut naviguer à travers Plugin > OMEMO et cliquer sur la roue crantée.

Gajim (version ultérieure à 1.8.0)

Depuis la version 1.8.0, Gajim intègre directement OMEMO. Pour gérer les appareils, il suffit donc de se rendre dans les paramètres de compte.

Pour ce faire, il faudra naviguer dans Comptes > Gérer les comptes puis sélectionner un compte. On se trouve alors dans les paramètres de comptes, et l'onglet Chiffrement (OMEMO) est visible. Cliquer dessus affichera l'ensemble des paramètres d'appareils.

Note : pour gérer le chiffrement par défaut, regardez l'onglet Confidentialité.

Conversations

(TODO)

Dino

(TODO)

Problèmes courants

1. Si l’échange initial de clés échoue, il est impossible de dériver les clés symétriques, rendant les messages illisibles.

2. Restaurer un compte XMPP sur deux appareils avec la même clé privée peut perturber le chiffrement, car cela casse le mécanisme de rotation des clés (ratchet).

3. Les anciens clients ou ceux bogués peuvent mal gérer le stockage des clés dans le PEP, provoquant des problèmes de synchronisation.

Comparaison avec Matrix (Olm/Megolm)

OMEMO diffère du chiffrement de Matrix sur plusieurs points :

  • OMEMO utilise des clés distinctes par appareil, alors que Matrix partage les clés entre les périphériques. Cela permet à Matrix de récupérer les messages passés sur un nouvel appareil approuvé.
  • Dans Matrix, les groupes utilisent une clé partagée entre tous les participants (Megolm), ce qui réduit la confidentialité persistante. OMEMO, en revanche, chiffre chaque message de manière indépendante.

Documentation supplémentaire

Pour plus d’informations, consultez la documentation officielle de la norme OMEMO dans la XEP-0384 : https://xmpp.org/extensions/xep-0384.html