begin process at 2012 05 27 15:16:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CRYPTAGE DECRYPTAGE RSA 32 BITS (C++/MFC)

CRYPTAGE DECRYPTAGE RSA 32 BITS (C++/MFC)


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :09/06/2004 Date de mise à jour :11/06/2004 11:41:31 Vu / téléchargé :13 559 / 2 133

Auteur : newic500

Ecrire un message privé
Site perso
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce logiciel permet d'assurer les taches suivantes:
- generation d'une paire de cles de 9 à 32 bits
- crackage d'une paire de cles de 9 à 32 bits
- Cryptage/decryptage d'un texte
- Chargement/Sauvegarde du texte crypté/décrypté

Ce code est le resultat d'un projet de maths pour l'info. ne vous en servez pas pour crypter vos documents, une clé 32 bits est plus rapide à cracker qu'à creer...
Servez vous en uniquement pour comprendre comment marche le cryptage

UN RAPPORT EST JOINT DANS LE ZIP
il comporte une explication mathématique et du code source, ainsi qu'un mode d'emploi....
Toutefois, il ne s'agit que d'une version light: la version complete peut etre trouvé sur http://perso.efrei.fr/~viallee/Projets

BUGS
Ne cryptez pas des caracteres avec des accents... En fait, c'est à cause de l'ASCII 256 (la logique qu'on a utilisé pour le cryptage) et l'interface (+65000 caracteres possibles)

Source

  • le code est present dans le Zip. Il est à compiler avec Visual C++ 6. A cause des MFC, il ne se compile pas avec les VC .Net :(
le code est present dans le Zip. Il est à compiler avec Visual C++ 6. A cause des MFC, il ne se compile pas avec les VC .Net :(

 Conclusion

Ce programme a été programmé dans le cadre de projet de mathématiques pour l'informatique par des P2 de l'EFREI. Il a été réalisé par Florian ERNOULT et Eric VIALLE (moi meme)

http://perso.efrei.fr/~viallee - http://perso.efrei.fr/~ernoult

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

Commentaires et avis

Commentaire de Stormy le 09/06/2004 22:11:34

Franchement très impréssionant! C'est vrai qu'une clé RSA est particulièrement faible sous 256/512 bits mais votre programme qui se limite à 32 bits est une bonne méthode pour comprendre le principe ++

Commentaire de DeAtHCrAsH le 10/06/2004 09:56:38

Pour info, actuellement les cryptage les plus évolué utilisé en informatique pour le net, sont des clés SSL 128bits.
Récemment, un groupes de chercheurs européen on pu décrypter en 3 mois une clé de 512bits créer par une boite allemande ...

C'est dire si le RSA 32bits est encore très utilisé dans le cryptage de données!

A++ et bonne continuation ...

Samir

Commentaire de Kirua le 10/06/2004 14:41:11

"éles librairies standard du langage C++ ne permettent au maximum que des clefs de 32 bits."

et les unsigned long ? c'est sur 64 bits pour une architecture 32 bits (win32 typiquement puisque tu utilises les MFC).

je suppose que ton rapport est à rendre. dans la mesure du possible, si tu ne l'as pas encore rendu, fais le relire par qq un d'autre pour l'ortho! c'est pas catastrophique, mais il y en a qq unes qui font tache ;-) j'vais pas t'embeter avec ça ici, mais ça me paraît important :)

pour le reste, j'ai parcouru le dossier, mais je manque de connaissances en math pr vrmnt comprendre, malheureusement :/

Commentaire de BruNews le 11/06/2004 00:20:45 administrateur CS

Kirua > sur win32 int ou long c'est idem 32 bits, que soit signe ou non.

Commentaire de cosmobob le 11/06/2004 02:37:14

Deathcrash : "C'est dire si le RSA 32bits est encore très utilisé dans le cryptage de données!"
ben heureusement que non, un RSA 32 bits se casse en moins d'un millieme de seconde... les meilleurs algo de factorisation (crible quadratique) sont en n^(1/4), alors t'imagines pour n= 2^32... ca fait que 256 itérations !! d'ailleurs meme le crible d'Eratosthène factorise un entier de 32 bits en un temps tres court (< 1/1000e seconde)
pour info les clés utilisées pour les serveurs qui gerent les annuaires de clés publiques sont en général de 2048 bits. avec les méthodes actuelles, et en supposant que la vitesse des ordinateurs évolue dans le futur comme dans le passé, il faudrait plusieurs millers (millions?) d'années pour casser une clé de 2048 bits

Commentaire de Kirua le 11/06/2004 07:46:26

et les double? c'est sur 32 ou 64 bits? parce que sinon je vois pas la différence avec un float ...

Commentaire de LordBob le 11/06/2004 09:23:32

tres bon programme !!!

Commentaire de BruNews le 11/06/2004 09:32:45 administrateur CS

float : 32 bits
double : 64 bits par defaut au niveau du C (80 en interne).

Commentaire de newic500 le 11/06/2004 11:00:15

En relisant mon livre de C++, les unsigned long font 32 bits en standard. Toutefois, nous avons utilisé des unsigned _int64, qui est un type non standard défini par microsoft....

Sinon, vous n'avez qu'a tester le module de crackage de clefs (menu "Cles"), pour vous rendre compte qu'une cle 32 bits n'est pas sure. Par contre, si la clef public et la clef privée sont inconnues, je pense que c'est beaucoup plus compliqué a decrypter.
Pour info, je crois que les cles pour SSH sont des cles 768 bits.

Commentaire de cosmobob le 11/06/2004 17:04:36

la clé publique est par nature connue de tous. seule la clef secrete est cachée...

Commentaire de TeLeTUbIz le 13/06/2004 16:01:09

Effectivement sous VC il existe les __int64 qui sont des ENTIERS de 64 bits. Les doubles ne sont pas utilisables car imprécis.
Le mieux est d'utiliser un objet BigInt (une classe peut être trouvée sur CPPFrance elle permet d'utiliser des nombres d'une taille illimitée (sauf qd y'a plus de mem), de faire les opérations classiques (+ - / * affectation, décalage des bits, exponentielle modulaire, et contient un générateur aléatoire).

Enfin, précisons que l'utilisation de RSA est soumise à certaines règles. Il existe une faille connue dans RSA qui permet de décrypter un message sans passer par le cassage de la clé.
Les détails ici: http://www.bibmath.net/crypto/chasseur/erreurrsa.php3

Enfin, une puissance de 2048 bits est censé tenir jusqu'en 2059 selon les lois de croissance de la puissance de l'informatique (privée et publique).

Je conseil ce site http://www.bibmath.net/crypto/ pour tous ceux qui veulent en savoir plus sur la crypto: crypto, arithmétique, hachage, discussion, stégano, histoires; mais aussi de nombreuses connaissances pour comprendre ce que signifie 2048 bits et comment calcul t-on cette puissance sosu différent algorithme. De plus, pour ceux qui font des maths, il y'a une partie appronfondie de théorie et des nouvelles méthodes: factorisation par courbes éliptiques, utilisatoin de la physique quantique, méthode de crypt-analyse, génération de très grands nombres premiers, mathématiques probabilistes, divers raisonnemets, etc...

Commentaire de newic500 le 13/06/2004 16:16:04

Le cahier des charges de mon projet stipulait des petits nombres, mais j'ai voulu mettre du beurre dans mes epinards en faisant des grands nombres.
J'ai testé deux classes sur CPPFrance gerant les grands nombres
L'une avait un bug à l'affichage (rajouts de 0),...
Une autre fonctionnait bien.... mais pour des petits nombres.  J'ai essayé de faire une puissance modulaire avec des nombres avec une precision superieur à 16 bits, le resultat etait faux :(

Il existe par contre des bibliotheques GNU qui gerent parfaitement les grands nombres (je m'excuse, je ne me souviens plus de leurs noms), et qui sont de plus tres rapides (car comportant des portions en assembleur).
Par contre elles sont plus lourdes a mettre en place qu'une classe...

Commentaire de rob85 le 26/02/2005 03:26:52

génial ! on voit qu'il y a eu du boulot et j'en remercie les auteurs !

@+ Rob

Commentaire de Kirua le 26/02/2005 22:27:05

Je relis à l'instant votre rapport (devant moi aussi réaliser un travail sur RSA) et je constate ceci:

"Cette fonction prend en entrée le nombre à tester ainsi qu’une variable devant stocké le nombre de division nécessaire pour déterminer si le nombre à tester est premier. Elle renvoie ensuite 0 ou 1 selon que le nombre est déterminé premier ou non.
Le principe est le suivant : on prend la racine du nombre à tester, puis on effectue un modulo de cette racine par 1, 3, 5, etc. jusqu’à ce que l’on atteigne la racine ou bien que le n du mod n soit inférieur au dernier résultat obtenu. Des que le modulo vaut 0, la condition n’est plus remplie et on sort de la boucle, du coup on renvoie la dernière valeur trouvée qui indique si il y a eu un diviseur trouvé."

En réalité, il ne faut diviser que par les nombres premiers de 1 à la racine carrées du nombre, or le nombre en question est compris entre 0 et 2^32-1, sa racine carrée vaut donc 65535 au maximum, ce qui fait que tu ne dois générer les nombres premiers que de 1 à 65535. Avec l'algorithme d'Eratosthène bien optimisé, cela prend un temps trop petit pour être calculé ... ça vaut le coup, non? :)

Commentaire de TeLeTUbIz le 26/02/2005 22:54:45

Pas maaaaaaaaal !!!

Commentaire de SilverEleven le 25/03/2005 22:53:36

J'aime beaucoup la manière dont vous transcoder une chaîne de caractère en un nombre :D.

Je cite : "Ensuite, la fonction découpe par groupe de 3 chiffres en partant par la fin le nombre décrypté. Ce groupe de 3 chiffres représente la valeur ASCII d’un caractère."

Donc, sois la chaîne de caractère "ABC" dont les valeurs ASCII sont 65 66 67. Le nombre représenté sera donc 065066067. Hum, ça fait peur.

Faut pas réfléchir en décimal, mais dans une autre base. Pourquoi ne pas avoir utiliser l'octal ou l'héxadécimal, voir même une base de 2^8 pour transcoder une chaîne de caractère en un nombre. Parce que sincèrement, la méthode que vous utilisez est très (très) mauvaise, d'autant plus que vous perdez énormément de place. A la place d'avoir un nombre de (65066067) 8 chiffres, avec une base de 256, j'ai 4276803 soit 7 chiffres. Certes ce n'est pas beaucoup à cette échelle, mais allez travailler avec des mégas :).

J'avoue que lors de la première lecture, j'ai été tellement surpris que je me suis dit que c'était moi qui avait mal compris : c'était tellement gros. Mais non, c'est bien une erreur.

Commentaire de Kirua le 25/03/2005 23:09:50

C'est juste une question d'affichage, le programme travaille sur les valeurs binaires, non?

Commentaire de newic500 le 10/06/2005 15:00:51

Oui, c'est juste une question d'affichage (on utilise pas de DCB).

Commentaire de clem0338 le 03/08/2005 11:32:09

Je viens de télecharger le prog, jusqu'a la pas de probleme, très bien fais (j'irai même jusqu'à dire que ca fais pro :) ). Bonne continuation @+

J'enverrais les critiques plus tard ...... si le coeur m'en dit.

@+

Commentaire de dtcube le 15/11/2005 15:41:28

Comparer des clefs ssl 128 bits et des clefs rsa est un non sens. SSL concerne le chiffrement symetrique, RSA est un chiffrement asymetrique.

Pour faire simple, dans le cadre symetrique le secret --appele la clef secrete-- sert a CHIFFRER (et non crypter qui n'est pas francais) et a DECHIFFRER (et non decrypter qui a un autre sens). Dans le cadre asymetrique, deux clefs existent, une publique l'autre privee. La publique sert a CHIFFRER et la privee a DECHIFFRER. Comme les noms l'indique : seule la clef privee doit etre secrete.

Quoi qu'il en soit RSA avec des entiers de 32 bits ne peut avoir qu'une utilie pedagogique. Precisons qu'il y a egalement une difference entre le principe implemente ici et un <<vrai>> systeme utilisant ce principe tel qu'on peut le trouver dans OAEP par exemple.

Pour conclure je conseile : http://fr.wikipedia.org/wiki/Portail:Cryptologie .
Notamment :
http://fr.wikipedia.org/wiki/Cryptographie_asymétrique
et
http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman

Dtcube

Commentaire de TeLeTUbIz le 15/11/2005 18:20:37

Non, ca n'est certainement pas un non sens. C'est comme ca que l'on mesure la puissance d'un codage(*). En fait, on calcul seulement le temps nécessaire au cassage en force brute. Pour cela, on suppose (ou vérifie, c'est au choix) que l'algorithme est sûr (ie: il n'existe pas ou très peu d'algorithmes permettant de raccourcir le calcul).

Sinon, tout à fait d'accord: WikiPedia propose un très bon portail de cryptologie (peut être pas aussi complet que d'autres ressources, mais c'est lui qui en concentre le plus).
Dommage qu'il manque parfois tout les aspects mathématiques derrière.

Commentaire de dtcube le 17/11/2005 11:19:30

Helas, non Teletubiz. C'est un non sens. Puisqu'il faut etre technique soit : pour les chiffrements symetriques, le nombre de bits de la clef mesure exactement le nombre de clefs possible, e.g. 128 -> 2^128 clefs. Pour les algo asymetriques ce n'est plus le cas. Dire que RSA a une clef de 1024 bits ne signifie par qu'on a choisi une clef parmi 2^1024. Cela serait de toute facon une inepsie. Conclusion : la taille de la clef n'a pas la meme signification. Corolaire : comparer les tailles entre algo symetrique et asymetrique n'a pas de sens. cdfq.

Une autre maniere de presenter les choses est la suivante : sur un algo symetrique, la methode la plus bete possible, l'attaque par force brute, demande effectivement de tester 2^128 clefs. Pour un algo asymetrique, on ne peut pas essayer toutes les clefs de 2^1024 bits puisque certaines ne sont pas valable (e.g. dans le cas de RSA pas un produit de nombre premier). L'attaque par force brute, dans le sens essai de toutes les clefs valables, n'est plus directement la taille de la clef

Commentaire de Kirua le 18/11/2005 19:43:12

un éclaircissement bien utile, merci :)

Commentaire de mimimi21 le 09/05/2009 20:52:59

j ai telecharger le ZIP mais je ne sais pas comment l executer avec le DEV-C++
pouvez vous m aider svp?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales