Bonjour, je viens présenter un algo de cryptage de mon cru pour vous demander votre avis. Vous trouverez l'essentiel sur cette page : http://ashaku.free.fr/mudi.php c'est-à-dire un formulaire d'essai et un lien pour télécharger les sources du projet (PHP).

L'idée du truc, c'est de manipuler un objet quadri-dimensionnel : le tesseract. Le message clair est entré dans cet objet (un caractère par "case" du tesseract) puis on effectue des rotations sur lui, ce qui "mélange" les cases et donc les valeurs (imaginez un rubrik's cube). Il suffit de lire les cases du tesseract dans l'ordre pour obtenir le message chiffré.


Diagramme d'utilisation des classes pour chiffrer un message.

Le principal acteur du chiffrement est donc la fonction "permuter()" de l'objet "hypercube". Je ne développerais pas ici ce mécanisme pour plutôt me concentrer sur l'algo qui le met en œuvre. Que pensez-vous de cette méthode ? Vous semble-t-elle fiable ? Quelles failles évidentes m'ont échappé selon vous ?

Ce projet est toujours en développement chez moi. Même si j'ai débuggé une version stable, je bute toujours sur quelques problèmes :
- la méthode étant symétrique, il faut transmettre la clé. J'ai ajouté un module pour crypter cette dernière et l'insérer dans le message mais de manière assez naïve pour l'instant. De plus, ca nécessite que l'émetteur et le récepteur se soient mis d'accord sur le format de ce cryptage.
- le format de restitution du message chiffré : au début, je renvoyais une version texte de l'information mais -interface web oblige- certains caractères spéciaux provoquaient des erreurs lors du POST. Je renvoie donc maintenant les valeurs hexadécimales des caractères chiffrés.
- les caractères du message d'origine ne sont bien évidement pas utilisés directement. Avant de les insérer dans l'hypercube, je les convertit en hexa ou en binaire. Le premier permet de traiter de plus grandes chaines, le deuxième fournit un meilleur codage. Lequel utiliser ?
- pour pouvoir insérer un message dans un cube, il faut que celui-ci soit suffisamment grand (logique) je comble ensuite les cases restantes avec des valeurs aléatoires. Ce qui fait que plus la taille du message est éloignée d'une taille max pour un cube (1, 8, 27, ... ) plus le message chiffré contiendra de données parasites.
Le problème, c'est que l'inverse est vrai. Ainsi, la chaine "aaaaaaaa" ne sera quasiment pas modifiée par le chiffrement. En effet, je vais remplir un cube de "6" et de "1" (61 étant la représentation hexa du caractère "a") puis permuter tous ces "6" et ces "1" avant de relire le cube ... qui me restituera une série de "6" et de "1" :/