Cryptage RSA

Fermé
benygel Messages postés 29 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 24 mars 2013 - 19 mai 2012 à 12:51
 benygel - 20 mai 2012 à 12:07
Bonjour,

Je viens de réaliser un programme permettant le cryptage/décryptage RSA.
J'ai cependant un problème.
Par définition on sait que le message numérique initial et le message numérique final ont tous les 2 le même reste dans la division par n (n = pq). Cependant, les messages eux-même ne sont pas forcément égaux (il faudrait auquel cas que le message numérique initial soit inférieur à n).
Par conséquent, je n'ai pas de problème pour crypter des messages jusqu'à 100 caractères, mais il m'est impossible de crypter un fichier classique.

Est-ce que quelqu'un saurait comment remédier à ce problème?

Merci d'avance
Cordialement

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
19 mai 2012 à 16:45
Bonjour;

Qu'est-ce qui vous pose problème ? Il suffit de considérer le fichier binaire comme une succession de bit. En regroupant x bits (x dépendant de n=pq), vous pouvez appliquer le chiffrement. Pour info, on dit chiffrer et non crypter.
0
benygel Messages postés 29 Date d'inscription samedi 23 avril 2011 Statut Membre Dernière intervention 24 mars 2013
Modifié par benygel le 19/05/2012 à 17:06
Mes algorithmes manipulent uniquement des grands nombres et non des bits. J'aimerais donc chiffrer (merci pour l'info ;-) ) un fichier de caractères de taille quelconque.

Pour le passage en message numérique, j'utilise le code ascii, ainsi chaque caractère est assimilé à son code sur 3 chiffres (je ne sais pas s'il existe d'autres méthodes qui seraient plus efficaces?), puis j'applique l'algorithme RSA.

Si je comprends bien, pour résoudre le problème, il me faudrait découper le messages en paquets de même taille, chacun de longueur inférieure à n.

Merci pour ton aide
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
19 mai 2012 à 17:28
<ital>Pour le passage en message numérique, j'utilise le code ascii, ainsi chaque caractère est assimilé à son code sur 3 chiffres (je ne sais pas s'il existe d'autres méthodes qui seraient plus efficaces?), puis j'applique l'algorithme RSA./ital>
Très mauvaise méthode. Cela équivaut à faire un simple chiffrement par substitution.

Il faut considérer le découpage par bit. Tu as calculé ton n. Tu connais donc la taille maximum du mot que tu peux chiffrer.
0
Je comprends pas trop ce que tu veux dire par découpage par bits, alors que je n'utilise que des entiers.
En quoi est-ce une mauvaise méthode de numériser le message via la tables ascii. Il faut bien que j'utilise une bijection entre les caractères et les entiers, puisque mon message se compose de caractères et que mes opérateurs de RSA traite sur des entiers.

Si par exemple, je veux chiffrer le mot "bonjour", il faut que je le numérise avant de calculer le modulo de son exponentiation. D'après ce que tu me dis, il vaudrait mieux que je le numérise en bits? Si oui, comment faut-il que je m'y prenne?

Excepté cela, je suis d'accord que connaissant n, je ne peux chiffrer que des messages de valeur inférieure à n
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
20 mai 2012 à 11:30
Rien de mieux qu'un exemple pour chiffrer "Bonjour".
Avec le code ascii en hexa, on trouve :
42 6F 6E 6A 6F 75 72
Avec ta méthode, ton message chiffré sera : f(42) f(6F) f(6E) f(6A) f(6F) f(75) f(72). Grosso modo, à chaque lettre tu auras un code unique. Du coup, cela revient à un chiffrement par substitution dont le niveau de sécurité vaut rien.

Avec une bonne méthode, tu chiffres les blocs les plus grands. On admet que tu as une clé de 1024 bits. Si tu convertis tout en binaire, tu verras que t'obtiens un nombre avec 56 bits (7 octets). Tu peux le chiffrer en intégralité. Tu chiffreras donc f(426F6E6A6F7572).

En terme de sécurité, il y a une nette différence.
0
Ah ok, je comprends mieux ce que tu veux dire.

Cependant, je pense que je m'étais mal exprimé sur ma façon de chiffrer.
J'utilise des nombres premiers de 150 chiffres (en décimal), donc n a environ 300 chiffres.
De là, vu qu'en décimal, chaque caractère se code sur 3 chiffres, je peux donc chiffrer au maximum des blocs de 100 caractères. Je chiffre donc bien f(Bonjour) en un bloc et non f(B)f(o)f(n)...

Dans ce cas là, c'est correct, non?
0