Bonjour tout le monde !
J'ai travaillé sur un projet de chiffrement XOR il y a un moment. Malheureusement à cause de la mort du disque dur j'ai tout perdu, code compris ^^J'ai donc décidé d'éventuellement recoder ce projet, en y apportant quelques petits plus.
Dans ce projet je générais une clé aléatoirement (avec un rand borné entre 0 et 255 car je gérais les caractères avec un unsigned char) de la même taille que le message (code de vernam) ce qui assurait une sécurité minimale normalement.Cependant, j'ai décidé de refaire la même chose avec un détail en plus pour "améliorer l'aléatoire".J'ai choisi d'appliquer un polynôme à chaque caractère de la clé générée grâce à rand.Le polynôme sera géré par une liste chaînée et l'utilisateur entrera le coefficient et la puissance de chaque monôme, ensuite le calcul sera fait, puis pris au modulo 255 pour obtenir un nouveau caractère. Ceci sera fait pour chaque caractère de la clé obtenue via rand, pour obtenir une clé qui sera normalement plus "aléatoire" car c'est l'utilisateur qui entrera son polynôme. Bien entendu, il ne faudra pas des polynômes "simples" (linéaires par exemple, du style y = 3x + 1), il faudra plus compliqué.Pour cela j'ai pensé aux polynômes d'interpolation de Lagrange (j'ai fait un peu de math...). C'est tout simplement trouver un polynôme qui satisfait les conditions qu'on veut. Par exemple le polynôme qui vaut 0 en 0, 10 en 1, -3.7 en 2, 0 en 3 et - 1 en 4 est défini par la fonction f : x -> (-79/30)x^4 + (453/20)x^3 - (1841/30)x^2 + (1027/20) x
On peut calculer ça à la main c'est pas très difficile (mais c'est un peu fastidieux) ou utiliser ce site par exemple : http://homeomath.imingo.net/lagrange.htmBref, on veut avoir un polynôme irrégulier si je peux dire, pas simple.Biensûr en utilisant ça on va arrondir (si on n'obtient pas un nombre entier) puis appliquer le modulo 255 pour obtenir le nouveau caractère de la nouvelle clé sensée être un peu plus aléatoire.
Voilà, autrement, le chiffrement sera possible via la console ou depuis un fichier, etc.
J'ai aussi pensé à donner à l'utilisateur la possibilité de "binariser" un texte. Bref, faire exactement la même chose qu'ici : http://www.binaryhexconverter.com/as...nary-converter , avec le padding désactivé.Le défaut est qu'en binarisant un fichier, on obtiendra un nouveau fichier huit fois plus gros, mais ce n'est pas très grave.Pourquoi je veux faire ça.... ? C'est sympa visuellement c'est tout... est-ce vraiment utile, je ne sais pas.On pourrait très bien chiffrer XOR vernam (avec la clé un peu plus aléatoire obtenue avec un polynôme quelconque qu'on a choisit) et ensuite binariser le fichier obtenu.
Voilà voilà... j'espère que je n'ai pas trop mal expliqué... ^^
Pouvez-vous me donner votre avis sur mon idée d'appliquer un polynôme pour "améliorer" l'aléatoire ?Celà améliore-t-il vraiment l'aléatoire (au lieu de simplement faire le rand et fini...) ? Est-ce vraiment utile de faire ça sachant que le vernam est déjà pas mal puisqu'on peut obtenir absolument tous les types de messages possibles, qu'ils aient du sens ou pas, on a donc du 255^x possibilités, où x est la taille du message cherché et aussi la taille du message chiffré... C'est quand même sécurisé ? Après j'ai pensé à "améliorer" un peu l'aléatoire car je sais que quand on génère une série de nombres, avec des analyses on peut prévoir les nombres qui sont générés... donc je voulais pouvoir éviter ça en faisant intervenir quelque chose de vraiment aléatoire qui est un polynôme choisi par l'utilisateur pour modifier la clé.
Merci d'avance![]()
Partager