← Retour au portfolio

Outil de cybersécurité · cryptographie expliquée

Laboratoire de cryptographie

SHA-256, AES et RSA écrits à la main, sans bibliothèque, pour voir ce qui se passe à l'intérieur : les tours de calcul, l'état d'AES après chaque étape, la génération d'une clé RSA. Chaque résultat est comparé en direct à celui du module de chiffrement du navigateur (Web Crypto). On voit aussi pourquoi une petite clé RSA se casse en une fraction de seconde, et combien de temps tiendrait un mot de passe face à une attaque. Implémentations pédagogiques : elles ne doivent pas servir à protéger de vraies données.

Message

SHA-256 …

Une empreinte de 256 bits (64 caractères hexadécimaux), quelle que soit la taille du message. Impossible de revenir au message à partir de l'empreinte, et impossible en pratique de trouver deux messages qui ont la même.

Effet avalanche

On change un seul bit du message (le dernier caractère) : environ la moitié des 256 bits de l'empreinte changent.

À l'intérieur : les 64 tours sur le premier bloc de 512 bits

À chaque tour, les huit registres a à h sont mélangés avec un mot W du message et une constante K (issue des racines cubiques des premiers nombres premiers). Les registres en rouge viennent d'être recalculés (a et e) ; les autres sont décalés d'un cran.

Toutes les fonctions sont écrites à la main dans crypto.js : SHA-256 (FIPS 180-4), HMAC, PBKDF2 (RFC 8018), AES-128 (FIPS 197) en modes CBC et CTR, RSA avec les grands entiers du langage (BigInt), test de primalité de Miller-Rabin, Euclide étendu et rho de Pollard. Les résultats sont vérifiés en direct contre Web Crypto, le module de chiffrement du navigateur, et dans les tests contre le module crypto de Node.

Ces implémentations ne sont pas protégées contre les attaques par canaux auxiliaires (temps de calcul, cache) et le RSA est sans rembourrage : c'est un outil pour comprendre, pas pour protéger. Rien de ce qui est tapé ne quitte la page.