Chiffrement / Signature RSA
ChiffreChiffrement RSA-OAEP et signature RSASSA-PKCS1-v1_5 avec Web Crypto. Générez une paire ou collez une clé PEM.
Sur cette page
Qu’est-ce que RSA ?#
RSA est la cryptographie asymétrique : elle fonctionne avec une paire de clés appariées au lieu d’une clé partagée unique. Une clé publique peut être distribuée à quiconque — son seul rôle est de verrouiller des données et vérifier des signatures. Une clé privée reste avec vous et est la seule chose capable de déverrouiller des données chiffrées avec la clé publique, ou de produire une signature que n’importe qui peut vérifier. Cette séparation est ce qui permet à deux parties n’ayant jamais partagé de secret d’échanger des messages confidentiels et de prouver leur authenticité.
Cette page couvre les quatre opérations pour lesquelles RSA est habituellement utilisé, toutes via le moteur Web Crypto natif du navigateur :
- Chiffrer / Déchiffrer utilisent RSA-OAEP avec SHA-256 — le schéma moderne à remplissage authentifié. Un court message chiffré avec la clé publique ne peut être relu qu’avec la clé privée.
- Signer / Vérifier utilisent RSASSA-PKCS1-v1_5 avec SHA-256 — le schéma de signature le plus interopérable, celui que la plupart des JWT et des chaînes X.509 utilisent encore.
- La génération de clés produit des paires de 2048, 3072 ou 4096 bits avec un exposant public de 65537, exportées en PEM standard (SubjectPublicKeyInfo pour la clé publique, PKCS#8 pour la clé privée).
RSA est délibérément limité aux courtes charges utiles. Avec RSA-2048 et SHA-256, le plus grand message que vous pouvez chiffrer est d’environ 190 octets ; pour plus gros, utilisez l’outil symétrique et protégez sa clé avec RSA à la place.
Mode d’emploi#
- Générez une paire. Choisissez une taille de clé (2048 / 3072 / 4096) et cliquez sur Générer une paire de clés. Deux boîtes en lecture seule se remplissent : la clé publique et la clé privée, toutes deux en PEM. Copiez chacune en lieu sûr — la clé privée est ce que vous ne devez jamais partager.
- Choisissez un mode : Chiffrer, Déchiffrer, Signer ou Vérifier.
- Mettez la bonne clé dans le champ Clé selon le mode :
- Chiffrer → collez la clé publique.
- Déchiffrer → collez la clé privée.
- Signer → collez la clé privée.
- Vérifier → collez la clé publique.
- Saisissez le message. Pour Vérifier, collez aussi la signature (base64) dans le champ signature.
- Lancez. La ligne d’état rapporte le résultat — pour Vérifier, elle indique explicitement si la signature est valide ou invalide.
Principales fonctionnalités#
- Deux algorithmes, une paire de clés. Le même PEM fonctionne pour le chiffrement OAEP et la signature PKCS#1, parce que Web Crypto prend l’algorithne à l’import.
- Sortie PEM standard. Les clés publiques sont SPKI, les clés privées sont PKCS#8 — les formats que tout langage et toute plateforme lisent nativement.
- Exposant public 65537. La valeur universellement choisie ; assez petite pour être rapide, assez grande pour éviter les faiblesses connues.
- Signatures interopérables. RSASSA-PKCS1-v1_5 est le format qu’attendent les JWT réels, la signature de code et les chaînes de certificats.
- Zéro téléversement. Génération de clés, chiffrement et signature s’exécutent tous localement dans votre navigateur ; la clé privée ne touche jamais un serveur.
Exemple détaillé#
Cliquez sur Générer une paire de clés avec 2048 sélectionné. La boîte de clé publique se remplit avec un bloc PEM de cette forme :
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lignes de base64)
-----END PUBLIC KEY-----
La boîte de clé privée se remplit avec un bloc -----BEGIN PRIVATE KEY----- plus long. Basculez maintenant sur Chiffrer, collez la clé publique dans le champ Clé, saisissez handshake: 0x4F2A comme message, et lancez. La sortie est un seul bloc base64 d’environ 344 caractères — exactement 256 octets de texte chiffré RSA-2048, encodés en base64.
Basculez sur Déchiffrer, collez la clé privée dans le champ Clé, déposez ce bloc dans le champ message, et lancez : le handshake: 0x4F2A d’origine revient. Pour la signature, le même flux avec Signer produit une signature base64 de 344 caractères que Vérifier confirmera valide contre la clé publique — et signalera invalide si vous modifiez un seul caractère du message au préalable.
FAQ#
Pourquoi RSA ne peut-il chiffrer que de courts messages ?#
RSA opère sur des nombres modulo la taille de clé. Avec RSA-2048 vous disposez d’un bloc de 256 octets, et le remplissage OAEP consomme 2 * longueurHachage + 2 octets (98 pour SHA-256), laissant 190 octets pour le message lui-même. C’est par conception — RSA est fait pour les clés et les signatures, pas pour les données en masse. Le modèle standard est « hybride » : chiffrez les données en masse avec AES (utilisez l’outil symétrique), puis chiffrez uniquement la clé AES avec RSA.
2048, 3072 ou 4096 bits ?#
2048 est la référence actuelle et reste considérée adéquate pour la plupart des usages. 3072 correspond à peu près à une force symétrique de 128 bits ; 4096 est le choix conservateur pour des clés que vous voulez voir durer une décennie ou plus. Chaque palier coûte du temps réel à la génération et à chaque opération, avec des rendements de sécurité décroissants.
Quelle est la différence entre chiffrer et signer ?#
Le chiffrement concerne le secret : la clé publique verrouille, la clé privée déverrouille. La signature concerne l’authenticité : la clé privée crée la signature, la clé publique la vérifie. Ils utilisent la même paire de clés mais des algorithmes différents (OAEP contre PKCS#1) et répondent à des questions différentes — « n’importe qui peut-il lire ceci ? » contre « le détenteur de cette clé a-t-il réellement produit ceci ? ».
Ma clé privée est-elle envoyée quelque part quand je la génère ou l’utilise ?#
Non. Génération, chiffrement, déchiffrement, signature et vérification sont toutes effectuées dans la page par Web Crypto. Les blocs PEM n’existent que dans votre onglet de navigateur ; rien n’est transmis. Si vous manipulez une clé privée de production, générez-la dans un environnement que vous contrôlez plutôt que de la coller dans une page web.