FreeToGenerate.com

AES-256-GCM dans votre propre navigateur. La phrase secrète ne quitte pas l’onglet, et la page dit exactement ce que cela protège et ce que cela ne protège pas.

Chiffrer dans une page web ne vous protège pas de la page elle-même. Dès que quelqu’un vous vise réellement, utilisez un logiciel que vous avez installé et que vous pouvez auditer.

Aussi disponible en : English · Español · Português · العربية

Crypter un texte en ligne

Chiffrement par phrase secrète en AES-256-GCM, exécuté par votre propre navigateur, avec les paramètres inscrits dans le résultat et les limites inscrites sur la page.

Qu’est-ce que le chiffrement d’un texte ?

Chiffrer un texte, c’est le transformer de sorte que seule une personne détenant la bonne clé puisse le relire. Cet outil le fait avec une phrase secrète que vous choisissez : vous saisissez un message, vous saisissez une phrase secrète, et vous obtenez une seule ligne de texte qui ne veut rien dire pour qui n’a pas cette phrase. Recollez cette ligne plus tard avec la même phrase et le message d’origine revient à l’identique.

Un mot sur le vocabulaire, parce qu’il compte ici : en français, on chiffre un texte et on le déchiffre ; « crypter » est un anglicisme que tout le monde tape dans un moteur de recherche mais que la profession considère comme fautif, et « décrypter » veut dire tout autre chose, à savoir casser un message sans posséder la clé. C’est précisément ce que cet outil rend difficile.

L’algorithme est AES-256-GCM, le choix standard pour ce travail, intégré à tous les navigateurs. GCM est un mode authentifié, ce qui importe plus qu’il n’y paraît : il ne se contente pas de cacher le message, il détecte aussi la moindre modification. Changez un seul bit du texte chiffré et le déchiffrement refuse net, au lieu de vous rendre une bouillie d’apparence plausible.

Or une phrase secrète n’est pas une clé, et c’est dans cet écart que se loge presque toute l’ingénierie intéressante. AES-256 veut une clé de 256 bits uniformément aléatoire ; vous, vous voulez taper quelque chose dont vous vous souviendrez. Combler cet écart est le rôle d’une fonction de dérivation de clé, et ici c’est PBKDF2 avec 600 000 itérations de HMAC-SHA256, le chiffre que publie l’OWASP dans sa Password Storage Cheat Sheet. Tout s’exécute dans votre navigateur via la Web Crypto API. Rien n’est envoyé et il n’y a pas de compte.

Comment l’utiliser

  1. Choisissez Chiffrer et saisissez votre message. N’importe quel texte convient : accents, arabe, chinois et émojis survivent à l’aller-retour, parce que le texte est converti en octets UTF-8 avant même que l’algorithme ne le voie.
  2. Saisissez une phrase secrète, puis appuyez sur Chiffrer. Une brève pause suit, le temps de dériver la clé ; cette pause est précisément la mesure de sécurité, et l’outil vous indique combien de millisecondes elle a réellement pris sur votre machine. Copiez la ligne obtenue et conservez-la ou envoyez-la comme bon vous semble.
  3. Pour la relire, passez en Déchiffrer et collez la ligne. Saisissez la même phrase secrète et appuyez sur Déchiffrer. En cas d’échec, l’outil vous le dira mais ne pourra pas vous dire si la phrase était fausse ou si le texte a été modifié : les deux cas sont réellement indiscernables, pour une raison expliquée plus bas.

Le navigateur n’offre qu’une seule fonction de dérivation, et c’est celle que l’OWASP classe dernière

Voici la partie que presque aucun outil ne raconte, et qu’il vaut mieux dire telle quelle plutôt que d’enjoliver. La Web Cryptography API du W3C, la spécification derrière la cryptographie intégrée aux navigateurs, définit exactement quatre algorithmes capables de dériver une clé : ECDH, X25519, HKDF et PBKDF2. Deux d’entre eux servent à se mettre d’accord sur une clé entre deux parties, et HKDF est conçu pour une matière déjà uniformément aléatoire, ce qu’une phrase humaine n’est assurément pas. Il en reste un : PBKDF2.

Or la Password Storage Cheat Sheet de l’OWASP classe les fonctions de hachage de mots de passe par ordre de préférence, et sans ambiguïté : Argon2id d’abord, puis scrypt, puis bcrypt, et PBKDF2 en quatrième position. Elle recommande PBKDF2 spécifiquement pour le cas où la conformité FIPS-140 est exigée, ce qui est un motif réglementaire et non cryptographique. Autrement dit, le navigateur ne laisse à une page web qu’une seule option, et c’est celle que l’OWASP place en dernier.

Si PBKDF2 ferme la marche, c’est qu’il n’est pas coûteux en mémoire. Son travail est du calcul pur, exactement la forme de travail qu’une carte graphique exécute par milliers en parallèle. Argon2id a été conçu pour coûter cher en mémoire autant qu’en temps, afin de réduire l’avantage que le matériel donne à l’attaquant. Faire entrer Argon2id dans un navigateur suppose de télécharger une compilation WebAssembly, un coût bien réel payé à chaque visite pour une page qui ne servira peut-être qu’une fois.

Cet outil emploie donc PBKDF2 au chiffre publié par l’OWASP, et le dit, au lieu de laisser croire que le choix relève du mérite. Si vous protégez une chose pour laquelle l’écart entre PBKDF2 et Argon2id vous importe vraiment, c’est le signe qu’il vous faut un logiciel installé plutôt qu’une page web — exactement la conclusion à laquelle la section des limites arrive par un autre chemin.

Ce que rapportent réellement 600 000 itérations : environ 19 bits

Tous les outils de cette catégorie affichent leur nombre d’itérations, et le nombre est là pour rassurer. Voici ce qu’on n’imprime presque jamais à côté. Exécuter la dérivation 600 000 fois multiplie par 600 000 le coût de chaque essai de l’attaquant. Exprimé comme on exprime d’ordinaire une force cryptographique, cela fait deux puissance 19,19 : le nombre d’itérations tout entier vaut donc environ dix-neuf bits.

Dix-neuf bits, c’est un apport réel et ce n’est pas un gros apport. Cela signifie que quelqu’un capable d’essayer un milliard de phrases par seconde contre une empreinte non protégée retombe à environ mille sept cents par seconde. C’est un obstacle sérieux face à qui tente de deviner une phrase tirée d’un espace vaste, et presque aucun obstacle face à qui parcourt une liste de mots de passe courants. Les itérations déplacent la ligne ; la phrase secrète décide de quel côté vous tombez.

La conséquence pratique, c’est que la phrase secrète fournit l’essentiel de la sécurité et que les itérations ajoutent par-dessus un bonus fixe d’environ dix-neuf bits. Une phrase de quatre mots tirés au hasard d’une longue liste vaut à elle seule bien plus que ce bonus. Une phrase courte, ou figurant dans n’importe quelle fuite de données, reste une phrase courte après 600 000 itérations : le facteur de travail multiplie le coût de chaque essai, il n’augmente pas le nombre d’essais que l’attaquant doit faire.

C’est pour la même raison que l’outil vous montre le temps de dérivation sur votre propre machine. Ce sont votre navigateur et votre matériel qui décident de ce que ces itérations coûtent vraiment, et non un chiffre mesuré ailleurs ; voir le nombre rend l’arbitrage concret au lieu de le laisser abstrait.

Le résultat se décrit lui-même, et c’est voulu

Le texte chiffré tient sur une ligne, en cinq champs séparés par des points : une marque de version, le nombre d’itérations, le sel, le nonce, puis le texte chiffré accompagné de son étiquette d’authentification. Les trois parties binaires sont écrites en base64url, si bien que l’ensemble survit à un collage dans un courriel, une messagerie ou une URL sans que rien ne l’abîme.

Le nombre d’itérations figure dans le résultat délibérément. L’OWASP revoit son chiffre à la hausse à mesure que le matériel progresse : il a déjà bougé plusieurs fois et bougera encore. Un outil qui fige ce nombre dans son code, au chiffrement comme au déchiffrement, perd silencieusement la capacité de relire ses propres anciens résultats le jour où il met cette constante à jour. Comme ici le nombre voyage avec le texte chiffré, ce que vous chiffrez aujourd’hui se déchiffrera encore dans des années, quand la valeur par défaut aura changé. Il en va de même du sel et du nonce : tous deux sont aléatoires, tous deux sont nécessaires au déchiffrement, et tous deux sont donc consignés plutôt que recalculés.

Ce choix comporte un tranchant qu’il faut nommer, car c’est le genre de chose qu’un format autodescriptif introduit sans prévenir. Si le nombre d’itérations provient du texte collé, alors le texte collé commande la quantité de travail que fait votre navigateur avant même qu’une phrase secrète soit vérifiée, et un texte hostile annonçant mille milliards d’itérations figerait purement et simplement l’onglet. L’outil plafonne donc le nombre qu’il accepte et refuse au-delà plutôt que de se mettre au travail.

Le panneau de détail montre deux autres points. Un sel aléatoire neuf et un nonce aléatoire neuf sont produits à chaque chiffrement, et c’est pourquoi chiffrer deux fois le même message avec la même phrase donne deux résultats entièrement différents : c’est le comportement correct, pas une anomalie. Quant à l’étiquette d’authentification, elle fait 128 bits, soit exactement 16 octets de surcoût. La Web Crypto autorise des étiquettes de 32, 64, 96, 104, 112, 120 ou 128 bits et retient 128 par défaut ; les courtes se falsifient nettement plus facilement, aussi cet outil fixe-t-il le maximum au lieu de s’en remettre à la valeur par défaut.

Limites honnêtes

Chiffrer dans une page web ne vous protège pas de la page web. Le JavaScript qui fait le travail est servi par ce site à chaque chargement, et si ce code devenait un jour malveillant — par une compromission, une dépendance vérolée ou une modification délibérée — il pourrait lire votre phrase secrète et votre texte en clair avant que quoi que ce soit ne soit chiffré. De l’extérieur, vous ne pouvez pas vérifier qu’il ne le fait pas. Ce n’est un défaut ni d’AES ni de cette implémentation : c’est la condition structurelle de la cryptographie faite dans une page servie par autrui, et cela vaut pour tous les outils de chiffrement en navigateur, y compris ceux qui n’en parlent pas.

Ce que cet outil vous apporte réellement, c’est la protection d’un message qui repose ailleurs. Si vous chiffrez une note et la collez dans un courriel, un document partagé, une application de notes ou un historique de conversation, quiconque récupérera ensuite ce texte sans la phrase secrète ne pourra pas le lire. Ce scénario est réel et fréquent, et l’outil le sert bien. Ce qu’il ne peut pas faire, c’est vous protéger d’un adversaire déterminé qui vous vise personnellement, car un tel adversaire dispose de meilleurs moyens que d’attaquer le texte chiffré. Pour ce travail-là, servez-vous d’un logiciel audité que vous avez installé et que vous pouvez vérifier.

Un déchiffrement qui échoue ne peut pas vous dire pourquoi. AES-GCM vérifie l’étiquette d’authentification et signale un résultat unique pour toute discordance, la spécification ne définissant qu’une seule erreur. Une phrase secrète fausse et un unique caractère modifié produisent exactement la même issue, et aucun soin apporté à l’implémentation ne peut les séparer : l’information n’existe tout simplement pas. L’outil le dit au lieu de deviner, car un outil qui prétendrait savoir inventerait sa réponse.

Il n’y a pas de récupération de phrase secrète, et il ne peut pas y en avoir. Rien de votre phrase n’est conservé où que ce soit, ce qui est précisément ce qui donne sa valeur au chiffrement ; la conséquence inévitable est que la perdre revient à perdre le texte définitivement. Enfin, cet outil chiffre du texte et non des fichiers : le message transite par le navigateur en tant que texte, si bien que les pièces jointes binaires sortent de ce que fait cette page.

Pourquoi est-ce gratuit ?

Parce que cela ne coûte rien à faire tourner. Tout ici — la dérivation de la clé, le chiffrement, le déchiffrement — se passe dans votre propre navigateur au moyen de la Web Crypto API qui s’y trouve déjà. Aucune bibliothèque n’est téléchargée, aucun texte n’est envoyé nulle part, et aucun serveur ne voit votre message ni votre phrase secrète, puisqu’aucun serveur n’intervient.

Il n’y a donc ni compte, ni inscription, ni rien réservé derrière l’un ou l’autre, ni filigrane. L’algorithme est l’AES-256-GCM du navigateur lui-même, le chiffre de dérivation vient des recommandations publiées par l’OWASP, et le format est documenté plus haut afin que le résultat ne soit pas otage de la survie de ce site.