J'ai vu ton exemple et je vois ce que tu voulais faire. Je pensais, plutôt que de ré-utiliser un message déjà connu, proposer un tableau avec les correspondances lettre->code chiffré pour les minuscules (soit 26 colonnes), fournir un message chiffré et demander au lecteur de constater par lui-même que juste avec ces 26 codes il peut déjà presque tout comprendre.
De deux choses l'une. Soit tu écris le message déchiffré en notation hexadécimale, auquel cas chaque caractère correspond à deux chiffres : dans 53616c7574, le premier caractère est 53 (= S), le second est 61 (= a), le troisième est 6c (= l), etc. Soit tu écris le message déchiffré en notation décimale, auquel cas, chaque caractère correspond à $x \cdot 256^i$ : dans 358116783476, le dernier caractère est 116, le quatrième est 117, le troisième est 108, le deuxième est 97, le premier est 83, parce que $358116783476 = 83 \cdot 256^4 + 97 \cdot 256^3 + 108 \cdot 256^2 + 117 \cdot 256^1 + 116 \cdot 256^0$. Je reconnais volontiers que c'est très enquiquinant. J'utilise la base 10 parce qu'elle est plus familière pour les lecteurs, mais dès lors qu'on travaille avec un PC (par exemple, pour la notation des caractères), il est beaucoup plus confortable de travailler en base 16 voire 256.
Pour le condensat, je verrai demain comment je peux caser ça.
On ne peut pas chiffrer de nombre supérieur à $N$. Par conséquent, si je choisis un $N$ à peine supérieur à $2^{32}$, comme c'est le cas dans cette section-là, je ne peux chiffrer que 32 bits d'information à la fois, puisque qu'un entier non-signé codé sur 32 bits sera compris entre 0 et $2^{32} - 1$. Par conséquent, si mon message prend plus de 32 bits de place, je dois le découper en tronçons de 32 bits et chiffrer chaque tronçon l'un après l'autre. C'est exactement ce qu'on faisait au début en chiffrant chaque caractère un à un : on découpait le message en tronçons de 8 bits (même si avec $N = 5141$, en fait, on pourrait chiffrer 16 bits).
J'ai peur qu'un résumé en fin de partie soit vraiment redondant. On donne une première fois l'explication sous forme de petite histoire généraliste avec Adalbéron et compagnie. Puis on donne l'explication une seconde fois à travers un exemple comcret, avec de vrais nombres. Si on ajoutait un résumé, cela reviendrait à donner trois fois la même explication dans chaque section.
En effet, le second sert juste à la signature. Mais il est irremplaçable. Ebroïn peut tout à fait envoyer à Brunehaut un message d'insultes chiffré par AES et la clé AES chiffrée par RSA : il manquera toujours un moyen d'être certain de l'identité de l'expéditeur d'un message donné. En fait, la signature par clé privée peut être utilisée même dans un contexte où les messages sont publics. Pense à tous les sites où tu peux poster un commentaire sans être identifié (blogs, PEBKAC, etc.) : n'importe qui peut prendre n'importe quel pseudo. Par exemple, Brunehaut ouvre un blog, donne l'adresse à tout le monde, Ebroïn laisse un commentaire (public !!) avec le pseudo « Adalbichou » où il dit que le texte est à chier et que les couleurs du site sont dégueulasses. Adalbéron peut prouver que ce n'était pas lui en signant ses vrais commentaires (publics, toujours) avec sa clé privée. Faudra que je fasse un paragraphe là-dessus dans la section idoine.
Il pourrait être judicieux de préciser les étapes : chiffrement "symétrique" du message, chiffrement "asymétrique" de la clé, signature…
Les étapes sont pourtant indiquées assez clairement !
- Il chiffre son message à l'aide de l'algorithme symétrique AES et de la clé « 4891e674ff312b9519df3245b7d1c3ff ». Pour la petite histoire, il s'agit du condensat MD5 de « Brunehaut, je te kiffe ! ». Le résultat (découpé en tronçons de 32 bits et en notation hexadécimale, pour plus de clarté) est le suivant : « 7bd19a87 3c0f39a5 d7656446 d1d5007a 21757f1d 3a36fd25 97c527cf 5f03f75d ».
- Il réalise un condensat par Adler-32 de son message (4d23075c), qu'il signe à l'aide de sa fonction de déchiffrement : « c8c43b7e » (en hexadécimal, encore).
- Il découpe la clé qu'il a utilisé pour AES en tronçons de 32 bits et les chiffre à l'aide de la clé publique de Brunehaut : « 1bc83cd40 1bcb41456 1c1936f3f fa66823f » (en hexadécimal, toujours).
Et s'il y a un doute, la procédure de déchiffrement de Brunehaut est encore plus claire puisqu'il n'y a pas les calculs.
Cela dit, il pourrait sans doute être bien que je fasse un résumé des principales fonctions dont doit disposer une implémentation de RSA, mais dans la quatrième partie, alors.