Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPTAGE ASYMÉTRIQUE SIMPLE


Information sur la source

Description

Cliquez pour voir la capture en taille normale
Après avoir quelque peu critiqué les codes sur le cryptage, on m'a demandé de faire un exemple ... le voici

Un cryptage asymétrique utilise deux clés (ou plus, peu importe) : une privée et une publique

La clé privée est détenue par le receptionneur du message qui pourra ainsi décrypter le message que l'emmeteur à codé avec une autre clé, dite publique.

La clé publique est calculée a partir de la clé privée, et on ne peut pas retrouver la clé privée a partir de la clé publique. C'est le principe de RSA par exemple.

En dehors de la sécurité accrue par rapport a un cryptage "simple" ou symétrique, il y a, du fait meme de cet algorithme, et aussi a cause du VB, des limites a ce programme... Je les met de suite :
- chaque message crypté a environ 8× la taille du message d'origine
- j'ai mis une séparation claire (le petit ; ) entre les lettre cryptées, ce qui permettrais de faciliter une eventuelle tentative de décodage
- le programme est limité a de petits nombres (or plus les nombres sont grands, plus la sécurité augmente) a cause du type Long de VB (limité à 32 bits)

Tout ca pour dire...ce n'est pas RSA, ce n'est pas infaillible. Mais par rapport au XOR ou autres, y'a pas photo :)
 

Conclusion

Le principe mathématique pour ceux que ca intéresse :

soit une suite b(b0, b1, b2, b3, ..., b6, b7) de nombres entiers tels que b(i) soit supérieur à la somme de ses prédécesseurs

P doit etre plus grand que la somme de tous les b. Q doit etre premier avec P.

P, Q et b constituent la partie privée du code.

soit a(a0, a1, a2, a3, ..., a6, a7) de nombres entiers tels que a(i) = kP +Qb(i) avec k un entier quelconque.

a consitue la clé privée.

On transmet donc uniquement la clé publique, qui permet de crypter, et on garde (précieusement :P) la clé privée et le couple P, Q

Pour crypter, on décompose un nombre K en binaire (ex "A" = 41 = 0101001) puis on crée le code R tel que R = K(0)a(0) + K(1)b(1) ....

R représente donc le chiffre (ou la lettre) K codé avec la clé publique.

Pour décrypter, il faut donc le message crypté R, la clé privée b et le couple P, Q

On calcule u et v tels que Pu + Qv = 1.
On calcule H, reste de la division Rv/P

On a alors H = K(0)b(0) + K(1)b(1) + ...
Et b(i)> a tous ses prédecesseurs

Si H - b(7) > 0 alors c(7) = 1
Si H - b(6) > 0 alors c(6) = 1 ...

On finit par obtenir c(c0, c1, c2, c3, ...) qui est la représentation binaire du message d'origine, dans notre exemple, 0101001 = "A"...

C'est assez simple, rapide, et relativement sûr :)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de sunny le 07/10/2004 09:27:55

Pas mal, mais tout n'est pas clair, par ex :
Pour crypter, on décompose un nombre K en binaire (ex "A" = 41 = 0101001) puis on crée le code R tel que R = K(0)a(0) + K(1)b(1) ....et la suite K(2)a(2) ou b(2)

Ensuite on a Pu + Qv = 1 , pas assez d'info pour résoudre l'équation à moins de choisir u ou v au hasard.
( si v=0 est-ce que cela marche ?)
u sert à quoi car il n'apparait pas dans la suite des explications

Je vais regarder le code pour voir !!

signaler à un administrateur
Commentaire de tbbuim1 le 07/10/2004 16:00:56

Bien, mais tu n'as fait qu'appliquer un principe mathématique. Hors dans mon cas, j'avais fait ce programme exclusivement pour crypter mes messages sous msn. Ce que tu auras du mal à faire car ton programme augmente de trop la taille du message d'origine et tu seras donc limité par msn qui coupera ton message! >:(  Et ce dernier sera donc perdu en partie ou en totalité :'( En revanche, tu y gagnes en sécurité, point très positif.
Pas mal, pas mal, tu as bien retenu tes courts de maths ^^ je te mets 8 car ce n'est pas parfait, mais c pas du kk non plus :p

signaler à un administrateur
Commentaire de vlad2i le 07/10/2004 18:45:05

tbbuim1> C'est effectivement une simple démonstration technique, je ne cherches pas a te concurrencer, ni d'ailleurs à l'utiliser pour msn !

sunny>"A" = 65 en ASCII = 41 en hexadecimal = 00101001 en binaire
Alors R = K(0)×a(0) ... = (le dernier chiffre binaire)×a(0) +(l'avant dernier)×a(1) ...

Pu + Qv = 1 ... c'est le théorème de Bezout, utilisé dans mon programme :) donc il y a assez d'informations (c qd meme pas des maths de niveau sup c une simple equation du premier degré !)

Valà
Vlad

signaler à un administrateur
Commentaire de echoupe le 27/10/2004 11:10:50

Votre code est très intéressant et assez robuste à mon avis. Toutefois, J'aimerais savoir au cas où on éliminerais le caractère <;> lors du cryptage, comment faudrait-il modifier le code du décrypteur? et aussi quel traitement préalable peut-on appliquer au texte crypté afin de s'assurer de sa validité lors du décryptage?
En attendant je vous donnerais bien un 8/10.

signaler à un administrateur
Commentaire de vlad2i le 27/10/2004 18:26:16

Tout premièrement, la représentation que j'ai faite de la sortie (xxxxxx; xxxxxx; xxxxxx ....) est une représentation hexadécimale, donc 255 serait FF, 65535 FFFFF ... si j'ai mis les <;> c'est pour séparer les différents "chiffres" du code. Dans une implémentation plus "professionelle", on aurait plutot tendance a encoder ce chiffre sous forme d'un entier binaire (65534 = chr$(255) & chr(254)) qui réduit de beaucoup la taille et a l'avantage de séparer plus discrètement (par exemple si tu utilises toujours 4 octets pour encoder un chiffre, plus besoin de mettre explicitement un <;>)

Donc pour répondre clairement à la question, avant de modifier le décrypteur, il faut déjà que je sache comment se présente la sortie de l'encrypteur. Si le nombres de caractères est fixe pour chaque chiffre, alors on pourra se passer des <;> dans le cas contraire je ne vois pas comment :)

Pour s'assurer de la validité du message, on peut placer un MD5 (crypté il assurerait une validité totale, décrypté il peut etre un risque si on connait la taille du message) je peux te donner des exemples.

Robuste, on peut le supposer, étant donné que l'on travaille avec des chiffres, des combinaisons de grands chiffres - la faillibilité du programme réside justement dans la taille des chiffres. Ici, bridé par le type Long de Visual Basic , j'ai du me contenter de "petits" entiers et il s'avère que, meme si le code ici est plus robuste (a coup sur) qu'un Vigenère, XOR (voire DES :P) il n'en reste pas moins discutable face à Rijndael, RSA ...

Dans la théorie, tu peux utiliser de très grands entiers. RSA multiplie des facteurs premiers, et la difficulté pour le casser tient dans la factorisation de grands nombres, forcément d'autant plus longue que le nombre est grand. Mon code additionne plusieurs grands entiers en combinaison. On ne peut pas retrouver directement le code comme avec RSA, mais mon code aurait peut etre, je le suppose, une faiblesse face aux attaques différencielles (cad si on connait un message et sa forme cryptée en ayant le crypteur en libre accès)

Une réponse un peu complexe mais la plus complète possible je l'espère.

Vlad

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,16 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.