cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 2007
-
28 mai 2003 à 17:27
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 2016
-
27 août 2009 à 04:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 27 août 2009 à 04:58
On peut donc utiliser la cryptanalyse linéaire sur ton algo, cad écrire les équations de M[X, Y] et en déduire des biais de ton algo ... et la cryptanalyse par hypothèse, comme supposer que c'est par exemple un fichier crypté par un utilisateur peu averti, qui aurait utilisé comme mot de passe "toto1234", autrement dit les 245 octets suivants de la clef sont à zéro, etc ...
Cordialement, Bacterius !
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 22:07
Effectivement la cryptanalyse différentielle est plus compliquée ...
Pour l'exemple plus haut, si tu parles de vigenère, oui, sinon, je ne sais pas. Peut-être qu'en écrivant les équations de M[X, Y], on peut au final retrouver des propriétés qui marchent, etc ... pour au final retrouver une bonne partie de la clef.
Aussi, si on suppose que le dernier octet de la clef est 0, on peut (par exemple, je n'en sais rien), retrouver le 124 octet, etc ...
Cordialement, Bacterius !
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 août 2009 à 22:01
Ah oui je vois ce que tu veux dire. En fait, la seule originalité de cette méthode c'est qu'elle ne restitue pas le message dans le bon ordre. Et en théorie c'est sensé rendre les choses beaucoup plus difficile pour le cryptanalyste. En particulier, c'est sensé mieux résister aux méthodes différentielles.
D'ailleurs, si je ne me trompe pas, sur l'exemple dont tu parles plus haut, est-ce que tu peux en déduire quoi que ce soit sur la clef? :-P
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 16:31
Après il y a plusieurs techniques :
- cryptanalyse par hypothèse : on suppose que le dernier octet de la clef est à 0 (souvent le cas pour un mot de passe, qui a des mots de passe de 255 caractères ici ?)
et bien d'autres.
Mais là il faut d'abord écrire les équations de chaque M[X, Y]
Cordialement, Bacterius !
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 15:28
Cryptanalyse différentielle.
Prenons comme exemple le chiffre de Vigenère. Sa seule faiblesse, c'était la répétition de la clef. Graçe à cette répétition, on peut observer des redondances dans le message crypté, et on peut ainsi déterminer petit à petit la clef (l'approcher, puis brute-forcer les combinaisons restantes).
Là, tu donnes des prises supplémentaires pour le cryptanalyste. Evidemment, aucun de nous deux ne s'étant penché sur la question, cela paraît absurde, mais les maths n'ont pas dit leur dernier mot !
Cordialement, Bacterius !
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 août 2009 à 15:25
De rien, mais je n'ai pas compris pourquoi le cryptanalyste trouverait ça gentil?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 15:13
C'est gentil pour le cryptanalyste, merci Forman :p
Cordialement, Bacterius !
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 août 2009 à 15:05
C'est normal que le texte ne change pas s'il est composé d'une seule lettre. Les données sont cryptées en "mirroir" par rapport à elles-mêmes, or le mirroir de 'A' c'est 'A' justement...
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 15:00
Bon pour la fileview, j'ai remplacé par des vieux compos Win 3.1.
Quelque chose me chiffonne néanmoins avec ton cryptage, quand je prends un texte composé de 256 lettres "A", le cryptage ne modifie rien, et ne fait qu'ajouter 128 espaces au début (avec la clef "Thomas").
Et donc, si je comprends bien, chaque fonction récursive Rec, une fois arrivée à son terme (N 0, Test False), va modifier M[X, Y], et l'algorithme est tel que les 256 octets de la matrice seront modifiés ? Ce qui est dommage, c'est que la récursivité est bien définie dans ce cas, et l'on peut représenter sous forme d'équation, chaque expression de M[X, Y] (puisque la profondeur N de la récursivité est déterminée : 4, ce qui permet une dérécursification plus simple).
En tout cas merci pour ces précisions, je vais me lancer. Je te tiendrai au courant, et je vais lire le wiki sur la courbe de Péano.
Cordialement, Bacterius !
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 août 2009 à 14:41
Pour l'unité manquante (fileview), je ne la retrouve pas. Il faut dire que le code commence à dater!
Le cryptage proprement dit travaille sur des mots de 256 octets, mais ce pourrait être plus (avec une machine moderne). L'idée c'est de ne pas crypter les données dans l'ordre du fichier, mais de les parcourir dans un ordre différent qui dépend à la fois de la clef de cryptage et des données elles-mêmes. De la même façon que la courbe de Peano permet de parcourir un carré (sauf que c'est déterministe dans ce cas-là). La programmation récursive me semble tout indiquée pour ce genre de traitements, puisqu'on est en train de faire un parcours fractal des données. La dérécursifier n'apporterait à mon avis que peu de choses en termes d'efficacité.
Ca répond à tes questions?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 03:44
Et puis pourras-tu m'expliquer l'algo un peu plus en détails ? Je constate que la fonction "rec" (celle sur laquelle je vais bosser) s'appelle 256 fois par bloc (j'hésite avec "test", mais il semble, à priori, que ça soit une recursivité exponentielle 4^N soit 4^4) ... ce que je comprends :
1. pour chaque bloc de 256 octets, les données du fichier sont copiées dans la matrice M.
2. on envoie la matrice M à "rec".
3. Dans "rec", tant que le paramètre N (profondeur de la récursivité) est supérieur à 0, on va :
- diviser R par 2 (donc 16, 8, 4, 2, 1)
- appeller la fonction "code" modulo 24 et attribuer à C cette valeur
- pour A entre 0 et 3, on va :
- récupérer la valeur de la table de substitution avec comme paramètre A et C
- selon cette dernière valeur, appeller de nouveau "rec" avec des paramètres divers
4. Dès que N arrive à 0 :
- si test = true, alors on définit "lastcode", sinon on fait quelques opérations puis on définit "lastcode".
5. Enfin, on réécrit la matrice une fois modifiée (qui en fin de compte ne l'est qu'une fois, mais éparpillée sur plusieurs fonctions "rec" récursives), dans le fichier destination.
Je ne m'attarde pas sur "derec", cette fonction ne m'intéresse pas, puisque une fois la clef trouvée pour "rec", je peux l'appeller directement :p
Pourrais-tu m'expliquer les raisons qui t'ont poussé à coder l'algorithme récursivement, et de cette façon ? Merci d'avance :)
Cordialement, Bacterius !
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 24 août 2009 à 03:20
Il ne reconnaît pas l'unité FileView ni sous D6 ni sous D7 ... j'aimerais bien pouvoir tester le cryptage car je cherche à effectuer une cryptanalyse de ton algorithme (récursif à ce que je vois). J'aurai besoin de voir le résultat du cryptage, ça m'aiderait pas mal.
Cordialement, Bacterius !
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 28 mai 2003 à 17:27
Heu, çà semble pas mal mais j'ai rien compris au code... Faut dire aussi que j'ai pas vraiment regardé, juste survolé... J'imprime çà avec coloration du code puis on verra ce soir o_O
Par contre çà m'intéresse pas mal, tu pourrais me donner des explications ou un site sur ce genre de cryptage (francophone ou anglophone, peu importe) ?
27 août 2009 à 04:58
Cordialement, Bacterius !
24 août 2009 à 22:07
Pour l'exemple plus haut, si tu parles de vigenère, oui, sinon, je ne sais pas. Peut-être qu'en écrivant les équations de M[X, Y], on peut au final retrouver des propriétés qui marchent, etc ... pour au final retrouver une bonne partie de la clef.
Aussi, si on suppose que le dernier octet de la clef est 0, on peut (par exemple, je n'en sais rien), retrouver le 124 octet, etc ...
Cordialement, Bacterius !
24 août 2009 à 22:01
D'ailleurs, si je ne me trompe pas, sur l'exemple dont tu parles plus haut, est-ce que tu peux en déduire quoi que ce soit sur la clef? :-P
24 août 2009 à 16:31
- cryptanalyse par hypothèse : on suppose que le dernier octet de la clef est à 0 (souvent le cas pour un mot de passe, qui a des mots de passe de 255 caractères ici ?)
et bien d'autres.
Mais là il faut d'abord écrire les équations de chaque M[X, Y]
Cordialement, Bacterius !
24 août 2009 à 15:28
Prenons comme exemple le chiffre de Vigenère. Sa seule faiblesse, c'était la répétition de la clef. Graçe à cette répétition, on peut observer des redondances dans le message crypté, et on peut ainsi déterminer petit à petit la clef (l'approcher, puis brute-forcer les combinaisons restantes).
Là, tu donnes des prises supplémentaires pour le cryptanalyste. Evidemment, aucun de nous deux ne s'étant penché sur la question, cela paraît absurde, mais les maths n'ont pas dit leur dernier mot !
Cordialement, Bacterius !
24 août 2009 à 15:25
24 août 2009 à 15:13
Cordialement, Bacterius !
24 août 2009 à 15:05
24 août 2009 à 15:00
Quelque chose me chiffonne néanmoins avec ton cryptage, quand je prends un texte composé de 256 lettres "A", le cryptage ne modifie rien, et ne fait qu'ajouter 128 espaces au début (avec la clef "Thomas").
Et donc, si je comprends bien, chaque fonction récursive Rec, une fois arrivée à son terme (N 0, Test False), va modifier M[X, Y], et l'algorithme est tel que les 256 octets de la matrice seront modifiés ? Ce qui est dommage, c'est que la récursivité est bien définie dans ce cas, et l'on peut représenter sous forme d'équation, chaque expression de M[X, Y] (puisque la profondeur N de la récursivité est déterminée : 4, ce qui permet une dérécursification plus simple).
En tout cas merci pour ces précisions, je vais me lancer. Je te tiendrai au courant, et je vais lire le wiki sur la courbe de Péano.
Cordialement, Bacterius !
24 août 2009 à 14:41
http://fr.wikipedia.org/wiki/Courbe_de_Peano
Pour l'unité manquante (fileview), je ne la retrouve pas. Il faut dire que le code commence à dater!
Le cryptage proprement dit travaille sur des mots de 256 octets, mais ce pourrait être plus (avec une machine moderne). L'idée c'est de ne pas crypter les données dans l'ordre du fichier, mais de les parcourir dans un ordre différent qui dépend à la fois de la clef de cryptage et des données elles-mêmes. De la même façon que la courbe de Peano permet de parcourir un carré (sauf que c'est déterministe dans ce cas-là). La programmation récursive me semble tout indiquée pour ce genre de traitements, puisqu'on est en train de faire un parcours fractal des données. La dérécursifier n'apporterait à mon avis que peu de choses en termes d'efficacité.
Ca répond à tes questions?
24 août 2009 à 03:44
1. pour chaque bloc de 256 octets, les données du fichier sont copiées dans la matrice M.
2. on envoie la matrice M à "rec".
3. Dans "rec", tant que le paramètre N (profondeur de la récursivité) est supérieur à 0, on va :
- diviser R par 2 (donc 16, 8, 4, 2, 1)
- appeller la fonction "code" modulo 24 et attribuer à C cette valeur
- pour A entre 0 et 3, on va :
- récupérer la valeur de la table de substitution avec comme paramètre A et C
- selon cette dernière valeur, appeller de nouveau "rec" avec des paramètres divers
4. Dès que N arrive à 0 :
- si test = true, alors on définit "lastcode", sinon on fait quelques opérations puis on définit "lastcode".
5. Enfin, on réécrit la matrice une fois modifiée (qui en fin de compte ne l'est qu'une fois, mais éparpillée sur plusieurs fonctions "rec" récursives), dans le fichier destination.
Je ne m'attarde pas sur "derec", cette fonction ne m'intéresse pas, puisque une fois la clef trouvée pour "rec", je peux l'appeller directement :p
Pourrais-tu m'expliquer les raisons qui t'ont poussé à coder l'algorithme récursivement, et de cette façon ? Merci d'avance :)
Cordialement, Bacterius !
24 août 2009 à 03:20
Cordialement, Bacterius !
28 mai 2003 à 17:27
Par contre çà m'intéresse pas mal, tu pourrais me donner des explications ou un site sur ce genre de cryptage (francophone ou anglophone, peu importe) ?
@++