begin process at 2012 02 13 01:02:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > CRYPTAGE PUISSANT 128 BITS QUASI-INCASSABLE(ALGORITHME BAPTISÉ XES)

CRYPTAGE PUISSANT 128 BITS QUASI-INCASSABLE(ALGORITHME BAPTISÉ XES)


 Information sur la source

Note :
9,86 / 10 - par 7 personnes
9,86 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité Niveau :Initié Date de création :18/12/2003 Date de mise à jour :19/12/2003 12:50:13 Vu / téléchargé :8 006 / 1 113

Auteur : KaViDee

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

 Description

Cliquez pour voir la capture en taille normale
J'ai eu envie il y a environ une semaine de m'essayer a la cryptologie :)
Après avoir trouvé plusieurs infos intérréssantes je me suis lancé dans un algorithme que j'ai imaginé en cours de français :P et que j'ai par la suite arrangé.

Je vous présente donc l'algorithme XES (X-Encryption System):
Cryptage symétrique
Non linéaire
Non redondant
Non cyclique
Etc...

Voici le procédé de cryptage:
l'algo prend des blocs de 128 bits (16 caractères) qu'il place dans une matrice 4*4. Des changements de place sont ensuite effectués, un autre changement est ensuite fait, j'appelle ça la "serpentisation" car ça déplace les caractères comme un serpent :D
Si la chaine a crypter < 16 octets, ce qui manque est remplacé par des espaces.
Chaque caractère va ensuite subir un cryptage complexe qui dépend de plusieurs paramètres.
Puis le bloc est crypté :)

Pour mieux comprendre, regardez la CAPTURE

Un texte crypté est arrondi a un multiple de 16, par exemple un texte de 23 octets donnera un cryptage de 32 octets mais un texte de 32 octets donnera un cryptage de 32 octets

Quelques exemples de cryptage:
Clé: A
Chaine: AAAAAAAAAAAAAAAA
Sortie: OÉê.ÜZÕÿH¢T3íù"5çYù·|pCäÎÈ?

Clé: AA
Chaine: AAAAAAAAAAAAAAAA
Sortie: åù"Su^ï£ÛfòDÁº(|
Q?%VíeVå'¶kB]

Clé: B
Chaine: AAAAAAAAAAAAAAAA
Sortie: =µauâ"rÌ-~jÆÝÈ-»ix<sÏÇ(Pc1¥æÇ"

Clé: AAAA
Chaine: AAAAAAAAAAAAAAAA
Sortie: øñc|ãLÙÄL.?uW¡S`¡²ñP, }»Èo¢.4

Clé: cryptage
Chaine: Ceci est un exemple de cryptage avec l'algorithme XES
Sortie: o«=ØÚ~øë®+¬]o> z^BÔædGáZ@(qAØ-j¹0'ûdæód é,
î&³f`ø(:


Pour tester son efficacité je met quiconque au défi de me décrypter ce texte et
de me donner la clé(vous avez un avantage: l'algorithme ;):
{
ìâcZV¡3¼ Aßçï'Á#ûä8MD]ÓÕªÖ¦IAMñBõ£·ý¿3 ÆÒ"f£î.`.ôÔQýt !¤SØ#~ú! 4 ç?J!æÿ°,? Åä#,®tYÛ+`Ôe\þeÏJl-0Þ)¬,O¦¤
ÑBnt cñùÞTz¢½s"ª>yÄ0áâ0öbûTæ8:

, 3~üYº<¢F
}
ATTE NTION: VBFrance déforme un peu les caractères donc vous ne pourrez rien faire avec le texte ci dessus, le message crypté se trouve dans le Fichier A LIRE.txt du ZIP

Source

  • Tout la magie est dans le zip lol
Tout la magie est dans le zip lol

 Conclusion

Je cherche quelqu'un qui serais capable de traduire mon algo en C# ou en C++ mais plus en C# que C++. Voila l'annonce est faite :P

Pour toute amélioration à propos du code, je suis preneur :)

Vos critiques sont les bienvenues (positives ou négatives. mais pas trop négatives non plus :P)

KaViDee

Normalement, plus de bugs...

 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 du même auteur

Source avec Zip Source avec une capture MORPION+CHAT EN RÉSEAU:TIC'CHAT'TOE, POUR JOUER AU TIC TAC T...
Source avec Zip Source avec une capture MSN GAMES PATCHER:DÉBLOQUE TOUS LES JEUX DANS MSN MESSENGER ...
Source avec Zip Source avec une capture MSGBOX CREATOR PAS COMME LES AUTRES(GÉNÉRER DU CODE COLORISÉ...
Source avec Zip Source avec une capture MOBILE REPERTORY 1.0(SAUVER LE RÉPERTOIRE DE SON PORTABLE DA...
Source avec une capture GÉRER LES PIECES EURO DES 15 PAYS:SAUVEGARDE DE LA COLLECTIO...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) CHIFFREMENT XOR PLUS ROBUSTE par dheroux
Source avec Zip CRYPTAGE MARANT par alpha5
Source avec Zip ACCÈS PAR MOT DE PASSE À FEUILLE EXCEL par mimiZanzan
Source avec Zip CRYPTER-DÉCRYPTER UN TEXTE - TEXTE CRYPTÉ UNIQUEMENT EN MAJ... par Saintache
Source avec Zip Source avec une capture FOLDER PROTECTION par hackoo

Commentaires et avis

Commentaire de lumesh le 18/12/2003 18:48:44

Domage que je n'ai plus VB6 je me serais tenté une traduction ://
si c ke des fonctions dans un module, et si tu as un peu de temps
mets le en RTF et propose le ds le ZIP ...
JE c pas si jen serait capable mais ca vaut le cp de tenter ....

Commentaire de KaViDee le 18/12/2003 19:01:34

Done! Enjoy :D
mais t'aurais pu quand meme ouvrir le .cls dans un notepad lol

Commentaire de JcDuss le 18/12/2003 19:21:28

KaViDee a dit : "vous avez un avantage: l'algorithme ;)"

c'est justement là qu'on peut voir si un algo est puissant

par ex: le rsa, le principe est facile, mais ca suffit pas a decrypter sans clé

Commentaire de KaViDee le 18/12/2003 19:30:41

c'est justement pour ça que je veux voir si il est fiable ;) héhé

Commentaire de Xya le 18/12/2003 19:43:22

&gt;seul point faible: il ajoute des espaces au texte décrypté si la taille du texte non crypté n'est pas un multiple de 16

La technique standard de padding (ajouter des données pour arriver à des blocs de taille fixe) est d'ajouter x octets de valeur x à la fin des données, s'il manque x octets pour faire un nombre rond de blocs.  S'il y a un nombre rond de blocs, on ajoute un bloc complet avec comme valeur la taille du bloc  (ici 16 octets avec la valeur 16).

Après le decryptage, il suffit de lire le dernier octet décrypté et de retirer x octets aux données, où x est la valeur du dernier octet:


Données claires (entrée):
F6 A5 0C 78 69 ED
On ajoute le padding, il manque 10 octets (0A en hexa):
F6 A5 0C 78 69 ED 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
On crypte (ici des valeurs aléatoires, c'est juste pour montrer le fonctionement)
D6 45 39 F6 00 A9 BD F9 9F 04 78 AD 39 2F 8B 12
On décrypte (on ne connait pas la longueur des données initialies)
F6 A5 0C 78 69 ED 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
On retire 0A octets à la fin du bloc:
F6 A5 0C 78 69 ED

Sinon balèze l'algo comme premier essai !

Et pour adapter ton algo en C# j'essaierai bien,  le code n'a pas l'air trop long. Ca pourrait être sympa aussi de le faire en style .net, genre dériver SymmetricAlgorithm, CryptoStream & co, pour après crypter des fichiers ou des transmissions de sockets à la volée :)

Xya

Commentaire de KaViDee le 18/12/2003 19:50:54

ça a l'air pas mal cette technique mais il n'y a pas de risques de "manger" des octets sur un texte qui utiliserais les meme caractères que le padding ?!
J'espere que tu vois ce que je veux dire
Sinon j'essairai de faire ça mais pas ce soir, trop la flemme :p
en tk merci pour la remarque et si t'arrive a la traduire en C# envoie moi la webmaster@kavidee-concept.fr.st :)

Commentaire de BruNews le 18/12/2003 20:05:19 administrateur CS

Pourquoi plutot C# que C ou ASM, si est tres bon ton algo vaut mieux en faire une dll en code compile le + rapide possible.
Ne te semble pas ?

Commentaire de Xya le 18/12/2003 20:09:31

Aucun risque de 'manger' des caractères, on enlève exactement le même nombre de caractères que l'on ajoute. Et comme on ajoute le padding à la fin, aucun risque de confondre le padding avec les données. Le seul risque c'est de décrypter avec une mauvaise clef, les derniers caractères ne sont plus le padding original, c'est pour ça qu'il faut tester pour enlever le padding que la dernière valeur &lt; ou = taille du bloc.

Si on crypte un texte qui a pour dernier caractère le caractère du padding,  on obtient toujours le texte original puisque on enlève un certain nombre de caractères identiques et non pas tous les caractères identiques à celui de la fin, qui le précèdent:

Données claires (entrée):
F6 A5 0C 78 69 0A
On ajoute le padding, il manque 10 octets (0A en hexa):
F6 A5 0C 78 69 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
On crypte
45 39 F6 00 04 78 AD A9 BD F9 9F  39 2F 8B 12 D6
On décrypte (on ne connait pas la longueur des données initialies)
Ici il y a 11 caractères 0A mais on en retire que 10, comme 0A = 10 en décimal:
F6 A5 0C 78 69 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
On retire 0A octets à la fin du bloc:
F6 A5 0C 78 69 0A
Il reste toujours notre caractère 0A final.

Sinon pour tes fonctions BinShiftL et BinShiftR, c'est bien des rotations de bits en gardant les bits 'qui sortent' ou c'est juste un décalage normal?

Décalage de 2 bits vers la gauche
10111010 devient 11101000
Rotation de 2 bits vers la gauche
10111010 devient 11101010

Ca pourrait être simplifié en C#, comme C# a son propre opérateur de décalage, on pourrait éviter de convertir la valeur d'un octet en binaire pour faire la rotation ou le décallage.

Xya

Commentaire de KaViDee le 18/12/2003 20:21:31

Brunews-&gt; D'accord avec toi, mais c'est d'un point de vue personnel, j'apprend le C# en ce moment et ça m'intéresse plus.
D'un autre coté en ce qui concerne la rapidité t'as pas tort c'est pour ça que j'aimerais les 2 traductions ;)

Xya-&gt;Dans mon cas c'est rotation (désolé si j'ai pas employé les bons termes). Et pour le padding c'est bon j'ai tout bien compris :) je fais ça le + vite possible ;)

Commentaire de BruNews le 18/12/2003 20:32:59 administrateur CS

Alors voyez tous ensemble, si est si bon que cela on en fera une dll en ASM version turbo.

Commentaire de KaViDee le 18/12/2003 20:52:52

Voila j'ai fais le Padding mais il reste un problème:
si la longueur de la chaine a crypter est un multiple de 16 et que le dernier caractère est compris entre 1 et 16 en hexa ça va enlever entre 1 et 16 caractères au décryptage :/

As-tu une solution ?

Commentaire de KaViDee le 18/12/2003 20:59:00

C'est bon j'ai trouvé :D

Commentaire de KaViDee le 18/12/2003 21:08:20

Non, toujours un problème mais cette fois c'est si la chaine à crypter est un multiple de 16 et si le dernier caractère est "1".
Pour "1111111111111111" il me sort "111111111111111" soit un caractère de moins qu'au départ.
Et là, je ne vois plus de solution... :-/

Commentaire de JcDuss le 18/12/2003 21:14:25

xya a dit : "S'il y a un nombre rond de blocs, on ajoute un bloc complet avec comme valeur la taille du bloc  (ici 16 octets avec la valeur 16)."

donc si ca tombe tout pile a 16 t'en remets 16 de plus

Commentaire de KaViDee le 18/12/2003 21:46:57

Wow c'était compliqué mais j'y suis arrivé !!
La source est a jour :) Enjoy...

Commentaire de Xya le 18/12/2003 22:05:08

Désolé KaviDee, j'ai pas pu repondre à temps parce que j'etais en train de manger  et ça s'est éternisé :)

Sinon j'ai commencé à adapter ton algo en C#, pour l'instante je vise 'faire exactement la même chose qu'en VB' puis je verrai après pour le mettre au goût du C#, c'est à dire par exemple pour les rotation utiliser d'abord BinToVal et ValToBin.

Un truc à faire dès que ton algo est stable c'est  de faire une fonction pour  avoir des 'vecteurs tests' pour pouvoir s'assurer que la version VB et la version C# (ou les autres versions)  donnent bien des résultats identiques.
Faire des vecteurs tests ce serait crypter plusieurs textes avec une même clée précise:

Clé "xyz"
Pour "KaViDee" on a "afdjç_hG"
Pour "XES" on a "ksjd"
...

Xya

Commentaire de KaViDee le 18/12/2003 22:13:16

Po grave, pendant ce temps j'ai réglé l'algo est c'est bon il est stable ;)
Je sais pas si t'a retéléchargé le zip en tout cas si c'est pas le cas fais le ya plusieurs "nouveautés" dans le code a cause du padding.
Merci à toi et tiens moi au courant :)

Commentaire de gabchampagne le 19/12/2003 00:22:37

c'est très bien. Ce que j'aimerais vraiment voir, c'est un algorithme de cryptage &gt; 128. Là, ca serait puissant. C'est hot. Je te conseil de montrer sur des sites spécialisés.

Commentaire de gabchampagne le 19/12/2003 00:37:32

J'ai effectué des modification (Minimes) à ton code :
1- Création de l'évènement Finish
2- Création de l'évènement progress pour éviter d'avoir à aller modifier la classe :
Utilisation --&gt; public withevents ToCrypt as  XES

pi dans form_initialize :
set ToCrypt=new XES

pi dans unload :
set ToCrypt=nothing

Et j'ai enlever tous les Dim ToCrypt as XES

Commentaire de gabchampagne le 19/12/2003 01:15:33

j'ai aussi inclu quelque chose pour crypter/décrypter un fichier seulement avec des apis

Commentaire de Mindiell le 19/12/2003 10:58:33

Desole gabchampagne, mais en france c'est interdit de faire du cryptage &gt; 128... :)

Je vais tenter moi aussi de le decrypter...

Commentaire de KaViDee le 19/12/2003 12:21:41

gabchampagne-&gt; merci pour les modifs, pourrais tu me les envoyer à webmaster@kavidee-concept.fr.st ?
je vais voir ce que tu as fais ;)

Commentaire de kha le 19/12/2003 12:27:55

Salut !
Tout d'abord bravo pour ce code !

Mais qq petites remarques : je pense qu'avant de dire qu'il est quasi incassable il faudrait le tester dans des cas réels et essayer de le casser pr voir si c'est possible.
Je trouve que c'est trop périodique : par exemple si tu utilise la clé "a" et le texte "abcdefghijklmno" (15 char. pour en obtenir 16 cryptés) et que apres tu mets le texte "abcdefghijklmnoabcdefghijklmno" (30 char pr en obtenir 32 cryptés) il y a des blocs (du a ton code comme tu fais des matrices de 4x4). apres, en rajoutant un "p" a la fin, tu vois que ca ne change pas bcp...
a mon avis il est facilement crackable, au moins par une algo bruteforce mais bon... je v essayer on verra.

sinon ya un bug :
si tu utilise la clé "a" pour crypter la chaine "bbbbbbbbbbbbbbb" et que tu decrypte ce que tu obbtient avec la meme cle, tu n obtient pas 15 "b" mais "bbbb". j ai pas encore vu ton code en detail donc j ai pas vu ou est le pb.

Commentaire de Mindiell le 19/12/2003 12:46:41

kha,
tout est craquable, il suffit de trouver la bonne clef :)

KaViDee,
Pour le test a decrypter, tu l'as remis a neuf avec ton nouveau padding ou pas ???

Commentaire de KaViDee le 19/12/2003 12:52:13

Oui je viens juste de refaire une MAJ a cause du bug que je viens de corriger :)
Désolé pour le changement.
Voila normallement ya pu de bugs :)

Commentaire de Warny le 19/12/2003 16:04:59

Si tu as sorti ça tout seul chapeau !!!
sinon, cet algorithme existe déjà : il s'agit de la deuxième étape du rijndael ou AES (sur 3) qui est le futur remplaçant du des-3
comme le fait remarqué kha, ton algorithme est périodique (code une chaine de 256 bit à 0 et tu verras la faiblesse)
voici l'explication, note que c'est assez complexe, l'explication inclus aussi les attaques possibles : http://home.ecn.ab.ca/~jsavard/crypto/co040401.htm
Sinon, pour interdire le cassage sur le dernier bloc, tu devrais positionner des octets qui t'indiquent la taille du fichier crypté (pas regroupés au début, sinon on cherchera à casser le début en fonction de la taille du fichier) et mettre n'importe quoi à la fin. Eventuellement, dans les conditions que je t'ai données, tu peux rajouter un petit nombre aléatoires de blocs à la fin qui ne servent à rien.
Bonne crypto...

Commentaire de KaViDee le 19/12/2003 16:52:59

Pour ce qui est de l'algo, oui j'ai fais ça tout seul après avoir lu un peu de doc sur la crypto.
Mais qu'entends tu par "coder une chaine de 256 bits à 0" ? à quoi correspond 0 ?
Aurais tu une solution plus ou moins concrète pour consolider l'algo ?? et à quoi ça pourrais servir de mettre la taille du texte ?? juste pour emmeler celui qui essayerais de décrypter ??

Si tu as d'autres conseils qui pourraient le faire évoluer je suis toujours preneur ;)
En tk, merci à toi :)

Commentaire de Warny le 19/12/2003 17:29:30

En fait, le truc c'est de coder une chaine de caractère où tout les caractères à coder ont la valeur null (0x00 en hexa) et correspondent à la taille de ta clef * 2
Si ça crypte sans faire de cycle, c'est que ton codage est bon, sinon, il faut reprendre un peu.

Commentaire de gabchampagne le 19/12/2003 17:51:31

Je vais te l'envoyer. Mais, je ne suis pas sûre que ça va être capable de crypter des fichiers de n'importe quelle taille dans l'état actuel car la mémoire risque d'être surexploitée. Le principe pour Lire/Écrire avec ma classe TextStream est simple.

Commentaire de Golfy le 31/12/2003 11:37:44

Une question aux spécialistes de la cryptologie:
Si on recode une nouvelle fois le message codé, n'est il pas maintenant indéchiffrable ?  

Commentaire de Warny le 01/01/2004 21:40:02

=&gt;Golfy
En fait ça dépend
On peut considerer une fonction de cryptage de la façon suivante :
soit une f une fonction réversible,k une clef,  m une valeur représentant une donnée et x le message codé
On peut écrire
x = f(k, m)
comme f est reversible on a aussi
m = f-1(k, m) (f-1 est la fonction inverse de f)

il existe des cas où f-1 = f (cas de la fonction xor par exemple)
ou plus souvent des cas où f-1(k) = f(-k) (addition)
Si on utlise de telle fonction un codage supplémentaire n'entrainera pas une plus grande complexité du message codé. Je m'explique

dans le premier cas f2(k) = f(f(k)) comme f-1 = f on peut ecrire
f2(k) = f-1(f(k)) = k on revient donc au message
dans le deuxième, on tombe sur une multiplication simlpe de la clef
Dans les deux cas on ne gagne pas en complexité

Dans le cas présenté ici, l'avantage de la substitution (serpentisation) c'est que l'inverse de la fonction n'est pas la fonction elle même et que appliquer plusieurs fois la fonction ne revient pas à modifier la clef pour n'appliquer qu'une fois la fonction.

La réponse à ta question doit avoir une approche mathématique (Renseigne-toi sur la théorie des corps finis). Tout dépend en fait de la (ou des) fonction(s) utilisée(s).

Pour la petite précision ta question est mal posée : si ton message codé une deuxième fois était strictement indéchiffrable ça ne serait pas interressant (vu que plus personne ne pourrait le lire)

Commentaire de Golfy le 04/01/2004 09:03:53

Merci Warny pour ta brillante explication.

Commentaire de Leirn le 20/01/2004 13:32:23

concernant la convertion en c par rapport a c#, je tiens a rappeler ke le c# n est pas tres portable si tu veux aue des non windosiens s interressent a ton code...

Commentaire de Warny le 20/01/2004 13:41:18

Leirn -&gt;
Pour la portabilité, tu vas sur http://www.go-mono.net/ ils s'en chargent (c'est Novell derrière).

Commentaire de azerty25 le 30/08/2004 16:36:52

Peut etre un peu tard mais j'ai essayé, il est d'ailleur très bien ton code, mais quand on met dans la clé le caractere "^", il sort un mot de passe éronné quand on décrypte mais affiche tout de même un morceau de la chaine a crypter

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,139 sec (4)

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