Les cryptosystèmes RSA et AES-256

Comprendre comment fonctionnent les cryptosystèmes modernes RSA et AES-256 pour échanger des messages confidentiels

Laurent Ott

Cette documentation propose d'expliquer comment fonctionnent les cryptosystèmes modernes RSA et AES-256, permettant l'échange de données confidentielles. Une application jointe, développée en VBA sous Excel, met en pratique les notions qui seront étudiées.

Vous pouvez déposer vos commentaires dans cette discussion.

- Titre : Les cryptosystèmes RSA et AES-256

- Auteur : Laurent Ott

- Parution : 1 octobre 2025

- Mise à jour : 19 novembre 2025

- Licence : Le contenu de cet article est rédigé par Laurent Ott et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Voir également :

- Tome 1 - Des bases de la programmation à l'algorithme de classement rapide QuickRanking

- Tome 2 - Des bases de la programmation en mode graphique à la programmation d'un jeu d'arcade en VBA et Microsoft Excel

- Tome 3 - Problème du Voyageur de commerce - Une méthode d'approximation basée sur des principes simples

- Tome 4 - Un algorithme de chiffrement/déchiffrement des cellules pour une meilleure confidentialité

- Tome 5 - Sentinelle - Une application qui veille sur vos classeurs sensibles - Exemples d'utilisations des tableaux de données et des requêtes SQL en VBA

- Tome 6 - Apprendre la programmation de nouvelles fonctions Excel pour l'utilisateur

- Comprendre la méthode de factorisation du Crible Quadratique

- Programmation en VBA de menus personnalisés pour Excel

- Manipuler les données des bases Access depuis Excel

- Transfert des fichiers volumineux sous Outlook

- Algorithme ECM de factorisation par les courbes elliptiques

- Un classeur Excel multi-utilisateur

- Compresser/décompresser des fichiers au format ZIP

- Fonctions en VBA pour gérer les Tableaux Structurés d’Excel

- Des fonctions en VBA pour générer des courriels par les balises HTML

- MsgBox_Perso : une boîte de message personnalisée

- Utiliser une collection ArrayList à plusieurs dimensions

- Fonctions en VBA pour gérer de gros volumes de données

- Les cryptosystèmes RSA et AES-256

Sommaire

- I. Introduction

- II. La théorie

- II-A. Le cryptosystème RSA

- II-B. Le cryptosystème AES-256

- II-C. En résumé

- III. La pratique

- III-A. La gestion des clés RSA

- III-A-1. Générer des clés RSA

- III-A-2. Communiquer une clé de chiffrement

- III-A-3. Ajouter une nouvelle clé de chiffrement

- III-A-4. Renommer une clé

- III-A-5. Supprimer une clé

- III-A-6. Partager une clé privée

- III-A-7. Ajouter une clé privée reçue

- III-B. Chiffrer un message ou un fichier

- III-C. Déchiffrer un message ou un fichier

- III-D. Échanger plusieurs messages

- IV. Conclusion

- V. Remerciements

- VI. Le fichier joint

- VII. ANNEXE

- VII-A. Générer un mot de passe aléatoire

- VII-B. Note sur la génération des nombres premiers

- VII-C. Générer des clés RSA courtes

- VII-D. Modifier l'image de fond d'écran

I - Introduction

Dans cette autre documentation, je reprenais les notions de base de la cryptologie pour expliquer pourquoi il est nécessaire, pour échanger des informations confidentielles, d’avoir un mot de passe qui reste secret (ça, c’est une évidence) mais aussi, afin de se prémunir des attaques qui permettraient de le casser : qu’il soit aléatoire ; d’une longueur significative ; et surtout renouvelé à chaque chiffrement.

En résumé, le point faible d’un tel cryptosystème (dit symétrique) est la difficulté à communiquer avec un mot de passe différent à chaque échange. D’où l’existence des fameuses valises diplomatiques renfermant des listes sans fin de mots de passe.

Le cryptosystème asymétrique RSA a révolutionné ces pratiques en apportant une solution originale pour échanger des mots de passe, car il se base sur deux clés : une pour chiffrer ; l’autre pour déchiffrer.

Nous allons étudier son principe de fonctionnement, puis comment utiliser les mots de passe ainsi échangés, avec le cryptosystème AES-256, lui aussi réputé pour sa robustesse.

Vous trouverez, en pièce jointe, une application développée en VBA sous Excel qui met en pratique les concepts qui sont abordés dans les chapitres qui suivent.
Cette application est destinée à un usage récréatif ; dans un cadre professionnel, respectez les consignes de votre entreprise et utilisez les outils de chiffrement qu’elle met à votre disposition.

II - La théorie

Cette partie est consacrée au principe de fonctionnement des cryptosystèmes RSA et AES-256 (le premier permettant d'échanger un mot de passe, le second de chiffrer et déchiffrer un message avec ce mot de passe).

II-A - Le cryptosystème RSA

Le cryptosystème asymétrique RSA (nommé par les initiales de ses trois inventeurs, Ronald Rivest, Adi Shamir, Leonard Adleman) utilise deux clés : une pour chiffrer ; l’autre pour déchiffrer.

Exemple :
Alice génère deux clés. La clé pour chiffrer (nous verrons plus loin pourquoi elle est dite publique) est communiquée à Bob, qui va s’en servir pour chiffrer le mot de passe qu’il utilisera dans son message secret. Alice utilise la seconde clé, dite privée car gardée secrète, pour déchiffrer le mot de passe que Bob lui renvoie chiffré.

L’échange du mot de passe s’est fait en toute sécurité, car si la clé publique a été interceptée par un pirate, il pourra certes envoyer un message chiffré à Alice, mais il ne pourra pas déchiffrer le message envoyé par Bob à Alice : parce que les deux clés sont liées mathématiquement entre elles !

Explication :
Pour définir les clés, on prend deux nombres premiers au hasard. Par exemple p = 17 et q = 11.
On calcule leur produit : n = 17 x 11 = 187.
Puis la valeur de l'indicatrice d'Euler en n : φ(n) = (p-1) x (q-1) = (17-1) x (11-1) = 160.
On choisit un entier inférieur à φ(n) et qui est premier avec φ(n) : e = 7.
Enfin on calcule l'inverse de e modulo φ(n) : d = (φ(n)+1) / e = (160+1) / 7 = 23.
Cela donne la clé publique constituée de n et e (187, 7) et la clé privée constituée de n et d (187, 23).
Soit un alphabet où A=1, B=2, C=3, etc.
Pour chiffrer « C » nous utilisons la clé publique dans la formule suivante : Code = reste de (3e/n).
Soit le reste de 3^7/187 = 2187 - (Entier(2187/187) x 187) = 130.
Pour déchiffrer « 130 » nous utilisons la clé privée dans la formule suivante : Lettre = reste de (130d/n).
Soit le reste de 130^23/187 = 3, qui correspond à « C ».

Pourquoi ce cryptosystème est si fiable :
Un pirate, qui connait la clé publique, intercepte le cryptogramme « 130 ».
Pour le déchiffrer, il doit appliquer la formule : Lettre = reste de (130d/n).
Il connait « n », qui vaut 187, et « e » qui vaut 7.
Mais il lui manque « d », qui est ((p-1) x (q-1) + 1) / e.
Donc il lui manque les deux nombres premiers « p » et « q » qui constituent « n ».
Et c'est là toute la difficulté, car il n'existe (actuellement) aucune méthode pour factoriser rapidement un grand nombre (au moins 200 chiffres) pour retrouver les deux nombres premiers qui le composent.

Vous comprenez désormais pourquoi la clé pour chiffrer est dite publique, même si, dans l’idéal, elle ne doit pas être divulguée.
Notez qu’elle peut être réutilisée plusieurs fois, contrairement au mot de passe qui doit être renouvelé à chaque échange.

Le cryptosystème RSA utilise des mathématiques complexes et manipule des nombres à plusieurs centaines de chiffres, ce qui demande des temps de traitement importants. Il n’est donc employé que pour chiffrer et déchiffrer le mot de passe qui sera utilisé dans un cryptosystème symétrique, et surtout pas pour l’ensemble du message secret, ou d’un fichier, car ça prendrait trop de temps.

Par convention, le mot de passe sera de 32 caractères (256 bits) aléatoires. Il servira pour chiffrer et déchiffrer le message confidentiel, par un cryptosystème symétrique rapide et robuste : le cryptosystème AES-256.

II-B - Le cryptosystème AES-256

Un passage sur Internet vous rassurera sur les qualités du cryptosystème AES-256 : rapidité et robustesse.

J’ai glané un code en VBA qui permet de l’implémenter (les sources sont documentées dans le module « AES_Rijndael » du classeur joint). N’ayant pas les compétences pour vous en dire plus sur l’algorithme, je passe la main à l’Intelligence Artificielle :

« Voici une explication simple et claire du fonctionnement du cryptosystème AES-256, pensée pour un public curieux mais novice.
AES signifie Advanced Encryption Standard.
Le 256 indique que la clé utilisée pour chiffrer les données fait 256 bits de long, soit un nombre de combinaisons astronomique : 2^256 possibilités — plus que le nombre d’atomes dans l’univers observable.
AES-256 est un algorithme de chiffrement symétrique (même clé pour chiffrer et déchiffrer).

Étapes du chiffrement AES-256 :
Les données sont découpées en blocs de 128 bits (16 octets).
Chaque bloc passe par 14 transformations successives, appelées rounds :
1. SubBytes : chaque octet est remplacé par un autre via une table secrète (S-box).
2. ShiftRows : les lignes du bloc sont décalées.
3. MixColumns : les colonnes sont mélangées pour diffuser l’information.
4. AddRoundKey : une sous-clé est ajoutée au bloc.
Ces étapes rendent les données méconnaissables, même si elles contiennent des motifs répétitifs.

Et la clé de 256 bits ?
Elle ne sert pas directement à chiffrer. Elle est utilisée pour générer plusieurs sous-clés, une pour chaque round. C’est comme si on utilisait 14 versions différentes de la clé pour brouiller les données à chaque étape. »

II-C - En résumé

Les étapes pour chiffrer un message sont les suivantes :

- un mot de passe aléatoire est généré ;

- le message confidentiel est chiffré par AES-256 avec ce mot de passe ;

- le mot de passe est chiffré par RSA avec la clé publique ;

- puis ajouté en en-tête du cryptogramme.

Pour déchiffrer :

- le mot de passe chiffré est extrait de l'en-tête du cryptogramme ;

- il est déchiffré par RSA avec la clé privée ;

- puis utilisé par AES-256 pour déchiffrer le reste du cryptogramme.

Maintenant que vous maitrisez les principes de fonctionnement des cryptosystèmes RSA et AES-256, voyons plus en détail leur utilisation dans l’application jointe…

III - La pratique

Cette partie est consacrée à la mise en pratique de ce que nous venons d'étudier, avec une application développée en VBA pour Excel, qui permet d'échanger des messages secrets, mais aussi des fichiers.

Voici un aperçu de son menu :

En résumé...

Bob doit envoyer un message confidentiel à Alice :

- (1) Alice génère deux clés RSA (voir III-A-1), conserve la clé privée de déchiffrement et communique à Bob la clé publique de chiffrement (voir III-A-2) ;

- (2) Bob enregistre cette clé (voir III-A-3) ;

- (3) et peut désormais chiffrer son message (voir III-B) ;

- (4) Alice déchiffre le cryptogramme reçu avec la clé privée (voir III-C).

Le chiffrement RSA

La phase préparatoire, qui consiste à générer les clés RSA (1) et à enregistrer la clé publique (2), n'est exécutée qu'au premier contact. Par la suite la clé publique est réutilisée (3) et (4).

III-A - La gestion des clés RSA

Le menu « Gestion des clés » regroupe les formulaires nécessaires à la génération des clés RSA, leur communication, leur suppression.

III-A-1 - Générer des clés RSA

Pour qu’Alice puisse lire les messages secrets de Bob, il faut avant tout qu’elle génère les deux clés RSA, et qu’elle communique à Bob la clé publique de chiffrement.

Le formulaire est disponible depuis le menu « Gestion des clés / Générer de nouvelles clés ».

Cliquez sur « Calculer » pour lancer le traitement qui va rechercher deux nombres premiers pour calculer la clé privée et la clé publique.
Renseignez l’identifiant qui permettra de sélectionner la clé privée lors du déchiffrement. Dans notre exemple Alice va saisir « Bob ».
Et cliquez sur « Enregistrer les clés ».

La clé privée (qui servira au déchiffrement) et la clé publique (qui servira au chiffrement), sont enregistrées dans le classeur Excel.
La clé publique est mémorisée dans le presse-papiers, prête à être communiquée par le moyen qui vous semble le plus sûr.
Rassurez-vous, en cas de mauvaise manipulation, il existe une autre façon de récupérer la clé publique pour la diffuser. C'est ce que nous allons voir au chapitre suivant.

- Alice peut modifier la clé publique communiquée et prévenir Bob que le premier chiffre n’est pas 5 mais 6 : un pirate qui l’intercepterait, et n’étant pas dans la confidence, ne pourrait pas l’exploiter.
- La génération des clés prend environ 5 minutes. Pensez à en générer d’avance, que vous nommerez « Clé disponible », pour en avoir sous la main en cas d’urgence.

Cette application, à but uniquement récréatif, utilise deux nombres premiers de 100 chiffres, soit une clé publique de 200 chiffres.
Sachez qu'en 2005 une clé de 200 chiffres (soit 663 bits) a été cassée. Le dernier record semble être celui de 2020 avec une clé de 250 chiffres (soit 829 bits).
La norme préconise l'usage d'une clé de 1 024 bits (309 chiffres), voire 2 048 bits (617 chiffres). L'application jointe peut être paramétrée pour générer une clé de 309 chiffres, mais sa génération prendra 20 minutes au lieu de 5 minutes, c'est pourquoi je n'ai pas retenu cette solution.

III-A-2 - Communiquer une clé de chiffrement

À tout moment vous pouvez communiquer une clé publique pour permettre au destinataire de vous envoyer des messages codés. C'est utile, par exemple, lorsque vous changez d'interlocuteur.

Le formulaire est disponible depuis le menu « Gestion des clés / Communiquer une clé de chiffrement ».

Sélectionnez la clé concernée (cliquez sur « + » pour ouvrir l’arbre de sélection et descendre jusqu'au niveau de l'identifiant).
Cliquez sur « Valider la sélection » pour copier la clé publique dans le presse-papiers.
Et communiquez-la par le moyen qui vous semble le plus sûr.

III-A-3 - Ajouter une nouvelle clé de chiffrement

Bob reçoit la clé publique d'Alice pour chiffrer des messages. Il doit l'enregistrer dans l'application...

Le formulaire est disponible depuis le menu « Gestion des clés / Ajouter une clé de chiffrement reçue ».

Bob copie-colle la clé de chiffrement envoyée par Alice. Il saisit l’identifiant pour la reconnaitre facilement dans le cas où il a plusieurs correspondants. Et valide la clé pour l’enregistrer dans l’application.

III-A-4 - Renommer une clé

Vous avez préparé une clé disponible pour un prochain usage, il est temps de lui affecter un correspondant.

Le formulaire est disponible depuis le menu « Gestion des clés / Renommer une clé ».

Sélectionnez la clé concernée (cliquez sur « + » pour ouvrir l’arbre de sélection et descendre jusqu’au niveau de l'identifiant).
Cliquez sur « Valider la sélection ».
Saisissez l’identifiant de votre choix.
Cliquez sur « Enregistrer le nouvel identifiant ».

III-A-5 - Supprimer une clé

Si vous n'envisagez plus de communiquer avec un correspondant, supprimer les clés RSA utilisées permet de sécuriser vos échanges, au cas où votre ordinateur serait piraté par un individu les ayant stockés dans l'attente de trouver la faille qui lui permettra de les déchiffrer.

Le formulaire est disponible depuis le menu « Gestion des clés / Supprimer une clé ».

Sélectionnez la clé concernée (cliquez sur « + » pour ouvrir l’arbre de sélection et descendre jusqu’au niveau de l'identifiant).
Cliquez sur « Valider la sélection » pour effacer la clé de l’application.

III-A-6 - Partager une clé privée

Dans notre exemple, Bob peut envoyer des photos chiffrées à Alice en toute sécurité.
Pour que Margaux puisse elle aussi voir ces photos, il faudrait qu'elle communique à Bob une clé publique de chiffrement, et que Bob lui envoie une seconde version des photos, chiffrées cette fois avec cette autre clé. Ce qui n'est pas pratique.

Nous allons simplifier cela : Alice, qui connait bien Margaux, va partager avec elle sa clé privée (vous savez maintenant comment elle peut le faire sans crainte des pirates), que Margaux va enregistrer. Ainsi, Bob n'a qu'un seul envoi à faire, en mettant en destinataires Alice et Margaux, qui pourront déchiffrer les photos avec la même clé privée.

Le formulaire est disponible depuis le menu « Gestion des clés / Gestion des clés privées / Partager une clé privée ».

Sélectionnez la clé concernée (cliquez sur « + » pour ouvrir l’arbre de sélection et descendre jusqu'au niveau de l'identifiant).
Cliquez sur « Valider la sélection » pour copier la clé privée de déchiffrement dans le presse-papiers.
Et communiquez-la par le moyen qui vous semble le plus sûr.

III-A-7 - Ajouter une clé privée reçue

La suite logique est donc que Margaux enregistre la clé privée d'Alice.

Le formulaire est disponible depuis le menu « Gestion des clés / Gestion des clés privées / Ajouter une clé privée reçue ».

Margaux copie-colle la clé privée de déchiffrement envoyée par Alice.
Elle saisit l’identifiant et valide la clé pour l’enregistrer dans l’application.

III-B - Chiffrer un message ou un fichier

Vous devez disposer d’au moins une clé de chiffrement, reçue de votre correspondant, pour pouvoir chiffrer un message ou un fichier.

1 - Si vous ne disposez que d’une clé, celle-ci est reprise automatiquement, sinon vous devrez en choisir une en cliquant sur « Sélectionnez la clé que vous a communiquée le destinataire pour chiffrer vos messages ». Notez que la dernière clé utilisée est reprise par défaut.

2 - Saisissez, ou collez, le texte en clair qu’il faut chiffrer.
3 - Vous pouvez lancer le correcteur orthographique (la grammaire n’est pas gérée), les mots en majuscule ne sont pas analysés.
4 - Si besoin, sélectionnez un fichier à chiffrer.
5 - Cliquez ici pour chiffrer le texte et le fichier. Le cryptogramme est copié automatiquement dans le presse-papiers. Il s’affiche en bas (7). Si un fichier était à chiffrer, l’extension « AES » est ajoutée au fichier chiffré et le lien s’affiche en (8).
6 - Si vous disposez d’Outlook, vous pouvez générer automatiquement un message qui reprend le cryptogramme dans le corps du message (en bleu) et ajoute le fichier en pièce jointe.

Vous remarquerez que le cryptogramme (7) contient une série de chiffres qui se terminent par « @ ». Cette partie correspond au mot de passe généré automatiquement par AES-256, puis transformé en un grand nombre avant d'être chiffré par RSA.
Vous n'avez donc pas besoin de vous casser la tête pour définir un mot de passe original : AES-256 s'en charge.
La suite du cryptogramme correspond au message en clair chiffré par AES-256 avec le mot de passe.

III-C - Déchiffrer un message ou un fichier

Vous devez disposer d’au moins une clé de déchiffrement, pour pouvoir déchiffrer un message ou un fichier reçu de votre correspondant.

1 - Si vous ne disposez que d’une clé, celle-ci est reprise automatiquement, sinon vous devrez en choisir une en cliquant sur « Sélectionnez la clé pour déchiffrer les messages de votre correspondant ». Notez que la dernière clé utilisée est reprise par défaut.

2 - Collez le texte chiffré qu’il faut déchiffrer.
3 - Si besoin, sélectionnez le fichier à déchiffrer.
4 - Cliquez ici pour déchiffrer le texte et le fichier. Le texte en clair est copié automatiquement dans le presse-papiers. Il s’affiche en bas (6).
Si un fichier était à déchiffrer, le lien s’affiche en (7). Vous pouvez copier le lien dans le presse-papiers, ou ouvrir le fichier.
5 - La gomme efface les textes en clair et vide le presse-papiers.

Vous retrouvez dans l'en-tête du cryptogramme (2) le mot de passe généré par AES-256 puis chiffré par RSA.
La première étape, la plus longue (environ 7 secondes), est de déchiffrer par RSA ce très grand nombre, pour en extraire le mot de passe.
La seconde, pour déchiffrer par AES-256 le message secret codé avec ce mot de passe, est bien plus rapide, quelle que soit la taille du message, ou du fichier joint.

III-D - Échanger plusieurs messages

Si Bob désire envoyer d'autres messages confidentiels à Alice, il réutilise la clé publique. Il n'est pas nécessaire d'en générer une nouvelle à chaque échange, car la méthode est fiable.

Si Alice souhaite répondre à Bob, elle lui demande une clé publique de chiffrement, qu'elle enregistre et utilise pour chiffrer ses messages. Que Bob déchiffre avec sa clé privée.

Faites attention lorsque vous déchiffrez un fichier pour le consulter, puis le supprimez.
Car lorsque vous supprimez un fichier (même si vous videz la « corbeille »), il n’est en fait qu'effacé de la table du système d’exploitation qui gère l’emplacement des fichiers (la « Master File Table »). Les octets du disque dur ne sont pas remis à zéro et un logiciel de récupération peut, dans certains cas, les restaurer.

Deux astuces pour éviter que vos secrets ne soient découverts :
- utiliser un logiciel qui nettoie le disque dur des emplacements libres (comme CCleaner) ;
- utiliser un logiciel qui détourne une partie de la mémoire disponible de l’ordinateur pour simuler un disque dur virtuel (comme Miray RAM Drive) et travailler sur cette partition éphémère (une fois l’ordinateur éteint, la mémoire s’efface et les données disparaissent à tout jamais, sans laisser la moindre trace).

IV - Conclusion

Nous avons présenté le principe de fonctionnement de deux cryptosystèmes célèbres qui travaillent ensemble pour échanger nos messages secrets :

- RSA, qui est un cryptosystème asymétrique, permet d'échanger un mot de passe en toute sécurité, via un modèle mathématique complexe et chronophage ;

- AES-256, qui est un cryptosystème symétrique, permet de chiffrer et déchiffrer rapidement un message avec ce mot de passe.

L'application jointe met en pratique ces principes.
Mais, comme indiqué dans l'introduction, cette application ne doit être utilisée que pour un usage récréatif.
Dans un cadre professionnel, respectez les consignes de votre entreprise et utilisez les outils de chiffrement qu’elle met à votre disposition.

Si cela vous intéresse, vous trouverez dans le fichier joint les codes sources en VBA (non détaillés ici car ce n'est pas le but de cette documentation) que vous adapterez à votre langage de programmation pour développer votre propre application.

Bonne programmation.
Laurent OTT.
2025.

V - Remerciements

Je remercie gaby277, User, Cristelle, pour leurs nombreux conseils et apports à cette documentation, et f-leb pour sa correction orthographique.
Ainsi que toute l’équipe de Developpez.com qui participe à la maintenance du site.

VI - Le fichier joint

Le fichier Cryptosysteme.xlsm est l'application étudiée.
Vous devez disposer d'une version d'Excel 2010 ou supérieure (de préférence en 64 bits).
Au premier lancement, une alerte sécurité vous demandera de confirmer les macros.

Vous pouvez accéder au code source par la combinaison [Alt]+[F11].

Des clés RSA sont enregistrées pour servir d'exemple, elles devront être supprimées par la suite.

Dans certains cas, pour ouvrir le classeur il faudra débloquer sa sécurité en modifiant ses propriétés (depuis l'explorateur Windows, sélectionnez le fichier puis clic droit) :

VII - ANNEXE

Retrouvez ici des astuces, qui doivent restées confidentielles, bien entendu.

VII-A - Générer un mot de passe aléatoire

Générer un mot de passe aléatoire est plus compliqué qu’il n’y parait.
La fonction « Rnd », que le VBA fournit, ne renvoie qu’un nombre pseudo-aléatoire avec un cycle de génération de 16 777 216 graines. Dit autrement, elle ne peut fournir qu’un peu plus de 16 millions de combinaisons différentes. Ce qui rend le mot de passe facilement cassable, car il suffit de les tester une à une. Vous comprendrez mieux en analysant le pseudocode de la fonction « Rnd » qui ressemble à ceci :

Graine = (MULTIPLIER x Graine + INCREMENT) Mod MODULO
Rnd = Graine / MODULO

Avec :
MULTIPLIER = 1 140 671 485
INCREMENT = 123 456 (ou le chiffre de votre choix)
MODULO = 16 777 216

Une fois le cycle terminé, la fonction reprend au début du cycle.
Ci-dessous un code qui le démontre, où la première colonne affiche le cycle, et la seconde la valeur renvoyée :

Extrait du résultat de la fonction RND

Démonstration avec un mot de passe de 32 caractères généré par la fonction « Rnd », que l’on pense aléatoire :

Function GeneratePassword() As String
Randomize Timer * 100
For i = 1 To 32
GeneratePassword = GeneratePassword & Chr(Int(Rnd() * 26) + 65) ' lettres A-Z
Next i
End Function

La fonction « GeneratePassword » va renvoyer, par exemple : « DWGJIUCDMNUTVAYQIHDKEPBJOBYAWJID »

Cette combinaison est retrouvée (en quelques secondes) en parcourant les 2^24 possibilités du cycle :

Sub CrackPassword()
For Graine = 1 To 16777216
Randomize Graine
Test = ""
For i = 1 To 32
Test = Test & Chr(Int(Rnd() * 26) + 65)
Next i
If Test = "DWGJIUCDMNUTVAYQIHDKEPBJOBYAWJID" Then
MsgBox "Mot de passe retrouvé ! Graine : " & Graine
Exit Sub
End If
Next Graine
End Sub

Cette fonction est donc déconseillée en cryptologie, car elle ne génère pas assez de combinaisons.
Il est possible d’utiliser un autre générateur de nombre pseudo-aléatoires, comme l’algorithme Wichmann-Hill qui a un cycle de génération de 6 953 607 871 644 graines, mais cela ne résout pas fondamentalement le problème.

Heureusement, Windows met à notre disposition l’API « BCryptGenRandom », qui me semble plus sûre pour renvoyer un nombre aléatoire.

Dans l’application jointe, elle sera employée pour générer les nombres premiers de 100 chiffres qui constituent les clés RSA ; et à chaque échange de message secret, un mot de passe de 32 caractères de 4 bits (compris entre 0 à 9, A à F), soit 16^32 combinaisons ; ainsi que par le cryptosystème AES-256 pour générer son vecteur aléatoire de 16 chiffres.

VII-B - Note sur la génération des nombres premiers

Comme vu dans l’introduction, nous avons besoin de deux grands nombres premiers pour constituer les clés de chiffrement et de déchiffrement.

Il n’existe pas en VBA (et dans de nombreux langages de programmation) de fonctions mathématiques natives pour manipuler des nombres de 100 chiffres. J’ai dû glaner sur Internet les fonctions qui traitent les grands nombres en chaînes de caractères et réalisent les opérations arithmétiques nécessaires, ainsi que le test de primalité Miller-Rabin pour déterminer si un nombre est premier ou pas.

En principe, une fois un grand nombre impair choisi aléatoirement, il suffit de boucler en l’incrémentant de 2 tant qu’il n’est pas premier.

Mais j’ai apporté ma touche :
J’ai appliqué une formule (personnelle) pour multiplier par deux la probabilité d’obtenir un nombre premier :
Avec C = (Pi x Pk) / 5
Où les Pi sont des nombres premiers distincts successifs supérieurs à 2 et différents de 5, et n un entier supérieur à 2, alors Int(1/3 Cn) + Int(2/3 Cn) + 1 à une probabilité d’être un nombre premier supérieur à 1 / ln(Cn) - 1.
Ainsi, quand « C » vaut (3 x 7 x 11 x 13 x 17) / 5, la probabilité d’obtenir un nombre premier est multipliée par 2,22. Car sont ôtés du tirage les nombres divisibles par 3, 7, 11, 13, 17, et 5.

Le calcul des clés est identique à celui repris dans l’introduction, le choix de « e », conformément aux recommandations, est priorisé sur les valeurs 65 537, 257 et 97.

VII-C - Générer des clés RSA courtes

Vous remarquerez à l'usage que, si chiffrer un message est extrêmement rapide, le déchiffrer prend beaucoup plus de temps. Car déchiffrer le mot de passe, en en-tête du cryptogramme, avec une clé de 200 chiffres nécessite des traitements mathématiques chronophages. Si cette clé publique est si longue, c'est pour se prémunir des attaques au cas où elle est connue des pirates.
Mais si la clé publique peut être communiquée en toute sécurité, et gardée secrète, il n'est plus nécessaire qu'elle soit si longue. Une clé de seulement 20 chiffres réduit considérablement le temps de traitement du déchiffrement, tout en garantissant une bonne sécurité contre les attaques par la force brute.

Vous pouvez générer des clés RSA courtes, de 20 chiffres, en maintenant la touche [Majuscule] enfoncée lorsque vous cliquez sur le bouton [Calculer] du formulaire disponible depuis le menu « Gestion des clés / Générer de nouvelles clés ».

VII-D - Modifier l'image de fond d'écran

L'application dispose de cinq images de fond d'écran. Vous pouvez les faire défiler en maintenant la touche [Majuscule] enfoncée lorsque vous cliquez sur une image.
Mais vous pouvez aussi les changer pour installer les images qui vous plaisent, avec la touche de fonction [F12].