Langue : Français

tools / rsa

rsa/

Chiffrez avec une clé publique RSA et déchiffrez avec la clé privée, ou chiffrez avec la clé privée et déchiffrez avec la clé publique. Padding, format de la clé, format d'entrée / de sortie et jeu de caractères sont réglables, et vos clés ne quittent jamais le navigateur.

Texte clair

Clé

Texte chiffré

Historique

Chaque chiffrement ou déchiffrement réussi est enregistré automatiquement. Les 20 derniers sont conservés, uniquement dans le navigateur de cet appareil. Les clés ne sont jamais enregistrées, mais le texte clair déchiffré l'est : sur un ordinateur partagé, videz l'historique quand vous avez terminé.

AES, DES et RSA : ce que c'est et en quoi ils diffèrent

AES et DES sont des chiffrements symétriques : la même clé chiffre et déchiffre, comme une clé unique qui ferme et ouvre la porte. Ils sont rapides et conviennent aux gros volumes de données ; la difficulté est de transmettre cette clé à l'autre partie en toute sécurité.

DES est un ancien standard des années 1970 dont la clé effective ne fait que 56 bits : du matériel dédié ou des grappes d'ordinateurs peuvent aujourd'hui la retrouver par force brute. Il ne sert donc que pour dialoguer avec d'anciens systèmes qui l'utilisent encore. AES a remplacé DES comme standard. Il utilise des clés de 128, 192 ou 256 bits, n'a aucune attaque pratique connue à ce jour et reste le choix par défaut pour chiffrer des données.

RSA est asymétrique : il y a une paire de clés. La clé publique peut être donnée à n'importe qui et sert à chiffrer ; la clé privée reste chez vous et sert à déchiffrer, comme une boîte aux lettres où tout le monde peut glisser un courrier mais que vous seul pouvez ouvrir. Pas besoin de convenir d'une clé commune à l'avance, mais RSA est lent et ne peut chiffrer que quelques centaines d'octets à la fois. Les systèmes réels combinent souvent les deux : RSA chiffre une clé AES générée au hasard pour l'autre partie, et AES chiffre les données elles-mêmes.

Quelle quantité de données RSA peut-il chiffrer en une fois ?

RSA ne peut chiffrer qu'un petit bloc de données à la fois, limité par la taille de la clé et le padding. Avec PKCS1Padding, la limite est la taille de la clé en octets moins 11, soit 245 octets pour une clé de 2048 bits. Avec OAEP, c'est la taille de la clé en octets moins deux fois la longueur du hachage, moins 2, soit 190 octets pour une clé de 2048 bits avec SHA-256. Les données plus longues sont généralement chiffrées avec AES, et RSA sert à chiffrer la clé AES.

Correspondance avec les noms Cipher de Java

Les noms de padding correspondent au Cipher de Java : pour RSA/ECB/PKCS1Padding, choisissez PKCS1Padding ; pour RSA/ECB/OAEPWithSHA-256AndMGF1Padding, choisissez la troisième option, car Java utilise SHA-1 pour MGF1 par défaut ; si vous définissez des hachages personnalisés avec OAEPParameterSpec, choisissez OAEPPadding et sélectionnez séparément le hachage OAEP et le hachage MGF1. Les jeux de caractères suivent aussi les règles de Java : par exemple, l'UTF-16 est encodé en big-endian avec un FE FF au début.

Pourquoi le texte chiffré est-il différent à chaque fois ?

Au chiffrement avec une clé publique, PKCS1Padding comme OAEP ajoutent des octets aléatoires au padding : le même texte donne donc un texte chiffré différent à chaque fois, et chacun se déchiffre avec la clé privée. C'est normal. Le chiffrement par clé privée utilise un padding fixe, son résultat est donc toujours le même. OAEP ne fonctionne que pour le chiffrement par clé publique et le déchiffrement par clé privée.

Formats de clé pris en charge

Les clés PEM peuvent être BEGIN PUBLIC KEY, BEGIN RSA PUBLIC KEY, BEGIN PRIVATE KEY ou BEGIN RSA PRIVATE KEY, et vous pouvez aussi coller seulement le corps en Base64. Une clé hex est le même contenu en hexadécimal. Les clés privées protégées par mot de passe doivent d'abord être déchiffrées. Avec le type de clé réglé sur clé publique, vous pouvez aussi coller une clé privée : sa partie publique sera utilisée.

Questions fréquentes

Que faire quand le déchiffrement échoue avec « la clé ne correspond pas, le type de clé ou le padding est incorrect » ?

Vérifiez trois choses à tour de rôle. Premièrement, que la clé est bien la paire de la clé publique utilisée pour chiffrer, car un contenu chiffré avec une clé publique ne peut être ouvert que par la clé privée correspondante. Deuxièmement, le type de clé doit être réglé sur clé privée. Troisièmement, le padding doit correspondre à celui de l'émetteur ; avec OAEPPadding, le hachage OAEP et le hachage MGF1 doivent aussi correspondre. Enfin, vérifiez le format d'entrée, car confondre hex et base64 fait aussi échouer le déchiffrement.

Que faire quand le format de la clé est refusé, ou que le message dit que CERTIFICATE n'est pas pris en charge ?

Vérifiez d'abord que « Format de la clé » correspond à ce que vous avez collé : choisissez pem pour un texte commençant par -----BEGIN et hex pour une longue suite hexadécimale ; en cas d'erreur, un message indique généralement vers quoi basculer. Le PEM doit contenir une clé publique ou privée RSA, et un certificat (BEGIN CERTIFICATE) ne peut pas être utilisé directement ; vous pouvez d'abord en extraire la clé publique avec openssl x509 -in cert.pem -pubkey -noout. Quand un certificat et une clé sont collés ensemble, le bloc de clé est repéré automatiquement.

Ma clé privée a un mot de passe et le message demande de la déchiffrer d'abord. Que faire ?

Les clés privées protégées par mot de passe ne sont pas prises en charge (BEGIN ENCRYPTED PRIVATE KEY, ou une ligne Proc-Type: 4,ENCRYPTED dans l'en-tête PEM). Retirez d'abord le mot de passe sur votre propre machine, puis collez la clé, par exemple avec openssl rsa -in fichier-original -out nouveau-fichier, en saisissant le mot de passe à l'invite. Le fichier obtenu est une clé privée non protégée : manipulez-le avec précaution quand vous avez terminé.

Le message dit que le contenu dépasse la limite. Combien de caractères chinois puis-je chiffrer ?

La limite se compte en octets, pas en caractères. Une clé de 2048 bits avec PKCS1Padding autorise au plus 245 octets, et un caractère chinois occupe 3 octets en UTF-8, soit environ 81 caractères ; avec le jeu de caractères GBK, un caractère occupe 2 octets, soit environ 122. Au chiffrement, une fois la clé collée, le panneau Clé affiche « max. N octets par chiffrement » pour la clé et le padding actuels. En cas de dépassement, une erreur s'affiche, et l'outil ne découpe pas automatiquement le contenu en blocs.

Comment déchiffrer des données chiffrées avec JSEncrypt ou Web Crypto dans le navigateur ?

JSEncrypt utilise PKCS1Padding et produit du Base64 : choisissez donc PKCS1Padding ici et réglez le format d'entrée sur base64. Le RSA-OAEP de Web Crypto dans le navigateur utilise un même hachage pour OAEP et MGF1 : choisissez donc OAEPPadding ici et réglez le hachage OAEP et le hachage MGF1 sur la même valeur, par exemple SHA256 pour les deux. Dans les deux cas, réglez le type de clé sur clé privée.

Que signifient « Le texte chiffré est plus long que la clé » et « hors plage pour cette clé » ?

Un texte chiffré RSA a la longueur de la clé en octets : 256 octets pour une clé de 2048 bits, soit 512 caractères en hex, jamais plus. Au déchiffrement, le panneau Clé affiche « Texte chiffré : N octets » à côté de son titre ; comparez-le au nombre d'octets indiqué à côté de l'entrée. Un texte chiffré plus long que la clé signifie généralement un mauvais format d'entrée ou du contenu copié en trop ; une valeur hors plage signifie que le texte chiffré n'a pas été chiffré avec la clé publique associée à cette clé : utilisez la bonne clé.

Le chiffrement par clé privée et le déchiffrement par clé publique peuvent-ils servir à signer et vérifier ?

Pas directement. Le chiffrement par clé privée applique ici simplement la clé privée à votre entrée avec PKCS1Padding, sans aucun hachage, alors qu'une signature comme SHA256withRSA hache d'abord les données puis enveloppe le hachage dans une structure fixe (DigestInfo). Déchiffrer ici une signature standard avec la clé publique donne donc cette structure, pas le texte d'origine. Pour signer ou vérifier, utilisez une bibliothèque ou un outil qui prend en charge des algorithmes comme SHA256withRSA.

Que stocke l'historique, et est-il envoyé quelque part ?

Il reste uniquement dans le localStorage du navigateur de cet appareil et n'est jamais envoyé : le code de la page ne fait aucune requête réseau. Une entrée est ajoutée après chaque chiffrement ou déchiffrement réussi, 20 sont conservées au maximum, et rien n'est enregistré si l'entrée ou le résultat dépasse 20 000 caractères. Une entrée contient les paramètres, l'entrée et le résultat, plus une empreinte de 8 caractères dérivée de la clé (les 8 premiers caractères hex du SHA-256 du module, affichés après le # dans chaque entrée, qui permettent de savoir s'il s'agit de la même clé), mais jamais la clé elle-même : après avoir cliqué sur « Charger », vous devez donc coller à nouveau la clé. Le texte clair déchiffré est enregistré : sur un ordinateur partagé, cliquez sur « Vider l'historique » quand vous avez terminé.