Fonctionnement

Comment Crocodile garde vos conversations pour vous

Une visite de l’architecture et du protocole en mots simples. Chaque chapitre commence par l’idée ; ouvrez « Sous le capot » pour les détails techniques.

Chapitre 1

Quatre types d’acteurs

Crocodile répartit le travail pour que seules les personnes avec qui vous parlez voient vos mots, et que les éléments gérés par des inconnus ne les voient jamais.

Votre appli

Elle garde vos clés, chiffre tout ce que vous envoyez et déchiffre ce que vous recevez. Votre historique de messages vit ici et nulle part ailleurs.

Connaît : Tout ce que vous envoyez et recevez : c’est à vous.

L’hôte

Dans chaque salon vocal ou espace, l’appli d’un membre est élue pour transmettre le trafic chiffré aux autres. C’est un membre comme les autres.

Connaît : Les adresses IP des membres et qui parle, jamais ce qui se dit.

Les serveurs de coordination

Des standards tenus par des bénévoles : ils conservent les profils et les espaces, disent qui est en ligne et choisissent les hôtes. Ils se relient en un seul réseau.

Connaît : Les profils, les adhésions et qui est en ligne, jamais ce qui se dit.

L’annuaire

Un annuaire des serveurs de coordination, pour que les nouvelles applis sachent par où commencer. Il ne sait rien des gens.

Connaît : Seulement la liste des serveurs.

Chapitre 2

Votre compte est une clé, pas un mot de passe

Quand vous installez Crocodile, votre appli crée sur votre ordinateur un secret aléatoire de 32 octets. Il en découle deux clés : une pour signer ce que vous publiez et une pour recevoir des messages chiffrés. Votre identifiant est une empreinte de la clé de signature.

Comme l’identifiant est calculé à partir de la clé, un serveur ne peut pas glisser une autre clé et se faire passer pour vous. Il n’y a ni mot de passe à voler, ni réinitialisation qu’un support pourrait se laisser extorquer. Le secret vous est montré une fois sous forme de clé de récupération et reste sur vos appareils, chiffré par le trousseau de votre système.

Sous le capot
  • La graine de 32 octets donne une clé de signature Ed25519 et une clé de chiffrement X25519. L’identifiant correspond aux 26 premiers caractères de base32(SHA-256(clé publique de signature)).
  • Chaque appareil publie un enregistrement d’appareil signé avec un lot de préclés (X25519 + ML-KEM-768) renouvelé chaque semaine. Les anciens secrets de préclés sont supprimés après un délai de grâce.
  • Les numéros de sécurité permettent à deux personnes de comparer leurs clés par un autre canal, comme dans d’autres messageries sécurisées.
  • Les données locales (identité, préclés, historique) sont chiffrées au repos avec une clé protégée par le trousseau du système d’exploitation.

Chapitre 3

Trouver le serveur le plus rapide

Votre appli télécharge la liste des serveurs de coordination depuis l’annuaire, mesure le temps de réponse de chacun et se connecte au plus rapide. Le deuxième reste en réserve : si votre serveur disparaît, l’appli bascule aussitôt.

Avant toute chose, le serveur prouve son identité, et l’appli et le serveur conviennent de clés pour cette connexion. Dès lors, même les métadonnées qu’ils échangent sont chiffrées, en plus du HTTPS, donc cela fonctionne aussi en toute sécurité sur un serveur à la maison.

Sous le capot
  • L’annuaire liste chaque serveur, signé par ce même serveur, avec une adresse masquée. Les applis vérifient la signature avant d’utiliser une entrée.
  • Le message d’accueil signé du serveur contient une nouvelle offre d’échange de clés hybride (X25519 + ML-KEM-768). L’appli la vérifie avec la clé de l’annuaire, répond et signe la transcription. Chaque trame suivante est chiffrée en AES-256-GCM et complétée par du remplissage.
  • Les serveurs répondent aussi au STUN sur deux ports : les applis découvrent ainsi leur adresse publique et leur type de NAT sans interroger Google ni Cloudflare.

Chapitre 4

Des serveurs qui ne peuvent pas mentir sur vous

Votre profil, les espaces que vous créez, leurs invitations et la liste des membres sont de petits enregistrements signés par leur auteur. Les serveurs les stockent et les partagent, et chaque serveur comme chaque appli vérifie les signatures. Un serveur peut refuser de transmettre un enregistrement, mais il ne peut ni le modifier ni l’inventer.

Les serveurs de coordination se trouvent les uns les autres et forment un réseau maillé. Chaque enregistrement est conservé par quelques serveurs choisis par hachage, qui se recopient les changements : le réseau continue de fonctionner si l’un d’eux tombe.

Sous le capot
  • Enregistrements : profil, liste d’amis scellée, espace, invitation, membre, appareil et note. Chacun a un auteur autorisé à l’écrire ; la validation (signature, autorité, version « le dernier qui écrit gagne ») est identique côté serveurs et clients.
  • Les listes d’amis sont chiffrées pour les seuls appareils de leur propriétaire, et les demandes d’ami circulent sous forme de notes scellées qui ne nomment pas l’expéditeur : les serveurs ne savent pas qui est ami avec qui.
  • Chaque enregistrement appartient aux premiers serveurs d’un anneau de hachage cohérent pour son fragment. Les propriétaires répliquent les écritures, rattrapent leur retard grâce à des curseurs de séquence et transmettent les enregistrements quand des serveurs arrivent ou partent.

Chapitre 5

Un ami héberge, un remplaçant attend

Quand des gens rejoignent un salon vocal ou ouvrent un espace, le serveur de coordination examine la connexion de chacun (l’ouverture de son réseau, son débit montant, son ordinateur, s’il est sur batterie) et élit comme hôte le membre le mieux placé. Le suivant est le remplaçant.

Tout le monde se connecte à l’appli de l’hôte, qui transmet le son chiffré. Pour alléger la charge, elle ne transmet à chaque auditeur que les quelques personnes qui parlent le plus fort. Elle n’a jamais le son en clair : elle ne fait que déplacer des paquets scellés.

Si l’hôte part ou devient injoignable, le remplaçant prend le relais et tout le monde s’y reconnecte, généralement avant que quiconque ne s’en aperçoive.

Sous le capot
  • L’hôte fait tourner une petite SFU (selective forwarding unit) dans son appli. Chaque membre ouvre une connexion WebRTC vers elle, avec une piste audio montante, cinq emplacements descendants pour les intervenants et un canal de données.
  • Les emplacements sont attribués selon l’en-tête de niveau audio RFC 6464 (« last-N »), avec des numéros de séquence réécrits pour que chaque emplacement reste un flux continu.
  • Offres et réponses sont signées avec les clés d’identité sur la session, l’époque, les deux identifiants et l’empreinte DTLS : un serveur de coordination ne peut pas s’intercaler.
  • Chaque changement d’hôte incrémente un numéro d’époque ; les offres périmées sont ignorées. Les membres qui n’atteignent pas l’hôte le signalent, et dès que la moitié est d’accord, le remplaçant prend le relais.

Chapitre 6

Un chiffrement en couches

Tout est chiffré sur votre appareil avant de le quitter, et seules les personnes de la conversation ont les clés. Voici ce qui arrive à un message en chemin.

Un message, quatre couches

Votre appli signe le message pour que les autres puissent prouver qu’il vient de vous, le complète pour que sa longueur ne révèle rien, le chiffre avec une clé que seuls les membres de la conversation possèdent, puis l’envoie par une connexion elle-même chiffrée. Quiconque se trouve entre les deux ne voit que des octets brouillés d’une taille standard.

Prêt pour les ordinateurs quantiques

Les clés sont échangées par un hybride de X25519, une méthode classique éprouvée, et de ML-KEM-768, la nouvelle norme post-quantique. Un attaquant devrait casser les deux. C’est important, car quelqu’un pourrait enregistrer aujourd’hui du trafic chiffré et attendre qu’un ordinateur quantique le déchiffre.

Des clés qui avancent

La clé de chaque membre tourne comme un cliquet : après chaque message, elle est remplacée par la suivante d’une chaîne qui ne va que vers l’avant, et l’ancienne est supprimée. Qui vole une clé aujourd’hui ne peut pas lire les messages d’hier. Toutes les 30 minutes, et à chaque départ, tout le monde repart d’une nouvelle chaîne à partir de nouvelles clés aléatoires : une clé volée cesse donc vite de servir.

La voix, trame par trame

Votre voix est chiffrée en petites trames, une cinquantaine par seconde, juste après le micro et avant d’atteindre le réseau. Une trame qui ne peut pas être chiffrée est abandonnée, jamais envoyée en clair. La voix circule à débit constant : la taille des paquets ne révèle pas ce que vous dites.

Sous le capot
  • Les secrets par paire (distribution des clés d’expéditeur, synchronisation de l’historique, liaison d’appareils, canaux avec les serveurs) combinent X25519 et ML-KEM-768 (FIPS 203) via HKDF-SHA256.
  • Les clés d’expéditeur ont deux chaînes HKDF : la chaîne texte avance après chaque message, la chaîne audio toutes les 30 secondes. Les clés sont remplacées toutes les 30 minutes et à chaque départ, et ne sont envoyées qu’aux appareils dont l’appli a elle-même vérifié l’adhésion à partir d’enregistrements signés.
  • Voix : un worker Encoded Transform chiffre chaque trame Opus en AES-256-GCM avec un suffixe authentifié de type SFrame (identifiant de clé, génération, compteur).
  • Texte : signé par l’auteur (Ed25519), complété selon Padmé, chiffré avec la chaîne texte.
  • Les boîtes scellées destinées à un appareil utilisent sa préclé actuelle et sont signées par l’expéditeur : même les messages pour des appareils hors ligne bénéficient de la confidentialité persistante.

Chapitre 7

Quand une connexion directe est impossible

Certains réseaux, comme les pare-feu stricts d’entreprises ou d’universités, bloquent les connexions directes entre ordinateurs. Crocodile vous prévient quand c’est le cas, et vous pouvez choisir de laisser un serveur de coordination relayer votre trafic.

Le relais transmet des paquets déjà chiffrés de bout en bout : il voit leur taille et leur rythme, pas leur contenu. L’autorisation dure une heure à la fois et n’est renouvelée que tant qu’elle reste nécessaire.

Sous le capot
  • Le relais est un TURN standard (RFC 5766) sur le port UDP du serveur de coordination, avec des identifiants de courte durée. Les serveurs limitent le nombre de personnes qui peuvent l’utiliser.
  • À la connexion, l’appli teste son réseau sur deux ports STUN, le classe comme ouvert, limité (NAT symétrique) ou bloqué, et propose le relais si nécessaire.
  • Chaque connexion consigne quatre étapes (offre, réponse, chemin réseau, canal chiffré) : en cas d’échec, l’appli peut dire où.

Chapitre 8

Des messages qui trouvent leur chemin

Aucun serveur ne garde votre historique : ce sont les applis Crocodile qui se passent les messages. Voici ce qui se passe quand vous écrivez à quelqu’un hors ligne.

  1. Il attend avec vous

    Le message entre dans la boîte d’envoi de votre appli et affiche une petite horloge.

  2. Votre ami se connecte

    Dès que vous êtes tous les deux en ligne, votre appli le lui remet, scellé pour son appareil.

  3. Confirmé

    Son appli confirme la réception et l’horloge disparaît. Les membres qui ont manqué des messages dans un espace les rattrapent auprès de l’hôte et du remplaçant.

  4. Ou la boîte aux lettres

    En option, un serveur garde les messages privés jusqu’à 7 jours, scellés pour chaque appareil afin qu’il ne puisse pas les lire, et les supprime une fois remis.

Chapitre 9

Ajouter un ordinateur

Votre nouvel ordinateur affiche un code court. Tapez-le sur un ordinateur où vous êtes déjà connecté, puis vérifiez que les deux écrans affichent le même code de sécurité à six chiffres. S’ils correspondent, votre compte est transféré, chiffré, et le nouvel appareil est prêt.

Le code de sécurité couvre les clés des deux appareils : si quelqu’un tentait d’en substituer une en chemin, les codes différeraient et vous le sauriez.

Glossaire

Les termes que vous croiserez dans les textes sur la sécurité, en une ou deux phrases chacun.

Chiffrement de bout en bout
Seuls l’expéditeur et les destinataires ont les clés. Ce qui transporte le message entre eux, serveurs compris, ne voit que des données brouillées.
Pair à pair
Les applis se connectent directement entre elles au lieu de passer par un serveur central.
Cryptographie post-quantique
Un chiffrement conçu pour résister aux futurs ordinateurs quantiques, qui pourraient casser les méthodes utilisées aujourd’hui par l’essentiel d’internet. ML-KEM est la norme publiée par le NIST en 2024.
Confidentialité persistante
Voler une clé aujourd’hui n’ouvre pas les anciens messages, car les clés qui les ont chiffrés ont été supprimées.
Sécurité post-compromission
Après le vol d’une clé, de nouvelles clés aléatoires remettent vite le voleur dehors. Dans Crocodile, cela se produit en moins de 30 minutes, ou immédiatement quand quelqu’un part.
Signature numérique
Un sceau mathématique fait avec une clé privée. Tout le monde peut le vérifier avec la clé publique, et personne sans la clé privée ne peut le falsifier.
NAT, STUN et TURN
Les box internet cachent les ordinateurs derrière une seule adresse publique (NAT). STUN aide les applis à découvrir leur adresse publique pour se connecter directement ; TURN relaie le trafic quand c’est impossible.
SFU
Une selective forwarding unit transmet le son de chaque intervenant à chaque auditeur sans le mixer ni le décoder. Dans Crocodile, elle tourne dans l’appli de l’hôte.
Métadonnées
Des données sur une conversation plutôt que son contenu : qui parle avec qui, quand et combien. Crocodile chiffre entièrement le contenu et réduit les métadonnées, mais les serveurs en voient encore une partie.

Lire le document d’architecture complet (en anglais)