ENIGMA 2015... la suite ;-)





Clé secrète (*) :
Message à chiffrer/déchiffrer :
(*) plus la clef est longue plus le chiffrage est sûr. Une clef aussi longue que votre message rend le chiffrage absolument impossible à décoder de manière certaine.


Résultat :



Le principe

L'idée m'est venue en lisant l'article sur la machine Enigma, c'est un chiffrement de type substitution polyalphabétique

    Alors... comment ça marche? (à lire avec la voix de Michel Chevalet)
  1. Tout d'abord le message est encodé en base 64 (le cryptage/décryptage a lieu sur cet encodage). Cela permet d'encoder tout et n'importe quoi sans se soucier du type des caractères rencontrés
  2. A la clé est ajoutée la somme de ses valeurs ordinales. Cette nouvelle clé est mélangée aléatoirement(*) en fonction de son propre contenu. L'intérêt réside dans le changement total du message chiffré dès qu'un seul caractère de la clé change.
  3. La première lettre de cette nouvelle clé est convertie en chiffre
  4. Il y a un alphabet composé de 65 lettres (correspondant à tous les caractères présents dans l'encodage base 64) :
    	'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
    	'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
    	'0','1','2','3','4','5','6','7','8','9','+','/','='
    	
    Cet alphabet est mélangé aléatoirement(*) avec en paramètre le nombre obtenu à partir de la première lettre de la clé
  5. Puis il y a une substitution lettre à lettre :
    par exemple "a"=>"d","b"=>"s","c"=>"h", etc.
  6. Puis on recommence avec le 2ième caractère du texte et le 2ième caractère de la cle. Mais le nouveau(?) principe est qu'avant chaque substitution de chaque lettre, pour éviter les séquences, le tableau est re-mélangé à partir du mélange précédent et avec nombre correspondant à la nouvelle position de la clé en paramètre. Chaque caractère du message est donc encodé avec un alphabet différent.
  7. Pour le décodage, on fait exactement la même chose : mélange de la clé, mélange du tableau, décodage du premier caractère, mélange du tableau, décodage du 2nd caractères, etc. puis desencodage de la base 64
(*) aléatoirement mais toujours de la même façon grâce à mt_srand()



Inconvénient : l'encodage en base 64 augmente d'environ 30% la taille du message.


Le challenge

Début du challenge : 21/05/2015
Un paquet de carambars au premier qui pourra déchiffrer ces 2 messages (chiffrés avec la même clé) :
=hWakMWl77VkbixJcpWfUaJasNg6ay+umpiqUpC=3QhN6yiNDB=ZYi1zcDuXrWwBDC/hBl/e9jl0Nvs2dFENSW31f7jZOK1IcvEASkMKc7MLdPZm5t0GSeZ5iSqo7oy26QVmtKx8k=

=hk=dU17oCVDPZ6SHeCPpYkKbad6PNxOzdOnJ8wH0lhYAHiNL4B4nqUaZ6smNWNeBfjIaK78IuVsFKg6BPZH2JgDf0PZhJIAMpXnSoNQghIcjbQ=5e3M/yMDt5eZM=g7rKL/LkpmAy9ouvzOVCZF6NVQFMRlsSIuQlWW5fEZgo2Gjhvx2iDDxUCi2F53C8K=CkyGAmjdqRzCZWpzEo8HoG4FQ5QDs+0radjcyRGm5H2f3P3joKl9a8PDJjKgIrG1jzW1l7k7WO5W7i8/whNs4rRipeZzYCItVSjnZBXN1u=+aH1cYK7FDf+Q++ofDR1rPPBDt8sIBMiy7ELYNtilN5jELfZtrb5hn/kKAVYOMeH5toN=cNj0GVi=jBCoQ5B=mhn2Pesxl0hDS1C6oKmx9fxzNxlrY=iYij8D6=

Pour info, la clé est un hash md5 du style 3118b474586c6e133b8a196a1e21e230 , donc de 32 caractères.
Je vous donne cette info pour vous dire que la clef se répète, que ce n'est pas un masque jetable. Mais il y a quand même 4x1038 possibilités. Cette clé n'est pas stockée sur ce serveur et les messages non plus d'ailleurs ;-)
Je voudrai savoir si ce chiffrage est suffisamment costaud pour être utilisé dans la vie de tous les jours ou s'il est facilement cassable.
Pour obtenir l'algorithme (qui se trouve dans le source de cette page), il suffit de cliquer sur le bouton ci-dessous. Vous pouvez me contacter ici.