HMK

CHIFFREMENT

PAR FLOT A BASE

DE HACHAGE SECURISE

 Code secret !

Auteurs:

 Philippe Lheureux et Dimitri Mestdagh

 

1 - Objectif

Produire un masque jetable spécifique à une clé comprise entre 16 et 256 caractères (2048 bits). Le masque crée devra faire au minimum la même longueur que le texte clair, être le plus aléatoire possible et n'être utilisé qu'une seule fois par fichier ou texte chiffré.

2 - Réalisation

Création d'un sélecteur de fichier pour charger le fichier à chiffrer ou à déchiffrer.

Création d'une zone de texte (jusqu'à 256 caractères) pour la saisie de la clé avec création possible de clés complexes 128, 256, 512, 1024, 2048 bits personnalisables.

Création d'un bouton "Enregistrer la clé" pour sauvegarder les clés complexes ou personnalisées.

Exemple de phrase clé simple : " Le lutin et la petite fée des framboises"

Exemple de phrase clé complexe : }<w[X,qmP$i}y/lZUhZ[B'%zj@.:Py}=v~CMeyS#-O':x($zM/@%'1c{[Zc{Fe&g

Exemple de phrase clé complexe personnalisée: }<w[X,qmP$i}y/lZUhZ[B'%zj@.:Py}=v~CMeyS#-O':x($zM/@%'1c{[Zc{Fe&g-superlutin

Prenons l'exemple d'un fichier texte contenant 5000 caractères à chiffrer.

3 - Procédure de chiffrement

Cliquez sur l'image

Au chargement du fichier clair :

Calcul du SHA-256 (du fichier clair concaténé avec la clé) à stocker dans une variable C.

Lecture du nombre de caractères à chiffrer à stocker dans une variable.

Lecture du nombre de caractères de la clé à stocker dans une variable.

La formule retenue pour la création du masque intermédiaire est la suivante.

Création du masque pseudo aléatoire intermédiaire

Celui-ci sera >= au double du nombre de caractères du fichier clair.

Clé="Le lutin et la petite fée des framboises" = 40 caractères

VI ( Vecteur d'initialisation) = création d'une pass-phrase aléatoire complexe de longueur égale à celle de la clé

VI (par exemple)='{sM>#P%]I\qWRBrd3")^V&JagFs3c[K1-U(@Tv9

SHA-512 (Chaine1concaténée avec la clé)=masque intermédiaire

Chaine1=SHA-512(VI concaténé avec la clé) =

SHA-512('{sM>#P%]I\qWRBrd3")^V&JagFs3c[K1-U(@Tv9Le lutin et la petite fée des framboises) =

69f7c1b4c011202916d687857427c16b53ea926aed58098e6cf2ada12392ec6c23155836f5f13d0581c9acb9203207f35651eb15d67ffea01187f1c0f4488064

Début masque intermédiaire = SHA-512(69f7c1b4c011202916d687857427c16b53ea926aed58098e6cf2ada12392ec6c

23155836f5f13d0581c9acb9203207f35651eb15d67ffea01187f1c0f4488064Le lutin et la petite fée des framboises)=

c6b31067acbbe82dd37299fe7a54a3e676cc1d242fcd04d2f21dae3445b30e86c1ab787f78baa4ed4e8a39c908722b761cc1fb32a6f78b1c805b394643a6b537

et ainsi de suite

SHA-512 (hash précédent concaténé avec la clé) =

SHA-512(c6b31067acbbe82dd37299fe7a54a3e676cc1d242fcd04d2f21dae3445b30e86c1ab787f78baa4ed4e8a39c

908722b761cc1fb32a6f78b1c805b394643a6b537Le lutin et la petite fée des framboises)=etc.

Le vecteur d'initialisation, (c'est à dire la pass-phrase aléatoire de même longueur que la clé) n'est utilisé (en combinaison avec la clé) que pour générer la première Chaine1. Les x ( = à ceux de la clé ) premiers caractères du fichier chiffré généré ne seront en fait que le vecteur d'initialisation. Pour le retrouver , il faut connaitre la longueur de la clé.

Avec cette méthode, une même clé pourra chiffrer des dizaines de milliers de fichiers différents avec un risque vraiment minime de générer un masque identique pour deux fichiers. Même le même fichier chiffré avec la même clé donnera toujours des résultats différents.

Création du masque pseudo aléatoire définitif

Le masque définitif est obtenu en substituant chaque paire du masque intermédiaire par son caractère ASCII. Le 1er numéro correspond à la rangée et le deuxième à la colonne.

Exemple :

86= h

66=f

44=D

C, le SHA-256(du fichier clair concaténé avec la clé) est rajouté en entête du clair et un XOR est ensuite effectué entre "C+clair" et le masque pour obtenir le chiffré. Le hash qui servira à la vérification future d'intégrité du fichier transmis est donc chiffré avec le clair)

4- Procédure de déchiffrement

Cliquez sur l'image

Au départ , on lit le nombre de caractères de la clé et on récupère les x premiers caractères du fichier pour reconstituer le Vecteur d'Initialisation . Une fois VI obtenu , la procédure de création du masque pseudo aléatoire est la même que pour le chiffrement.

Un XOR est fait entre le chiffré et le masque pour reconstituer C+Texte Clair. Le hash du fichier clair (C) faisant 64 caractères (exemple : e731910a9b36d550224bc30ef5df9f1086ec9a7ea62ad0f1d96b3767180ad964 ), il est facile de l'extraire.

Une vérification d'intégrité est faite en fin de processus pour s'assurer que le fichier déchiffré est exactement le même que le clair d'origine. Toute modification du chiffré par un attaquant sera détectée.

5 - Dix bonnes raisons d'utiliser HASHMASK-512

1- Le masque pseudo aléatoire servant de masque jetable se construit à l’aide le l’intéraction de deux clés différentes. L’une d’elle est définie par l’utilisateur et l’autre dépend de la création d'une pass-phrase aléatoire complexe de même longueur que la clé.

2- Le masque pseudo aléatoire généré est vraiment très proche d’un masque aléatoire pur et la technique du masque jetable est la seule reconnue comme véritablement incassable.

3- Du fait du vecteur d'initialisation aléatoire, le masque utilisé pour chiffrer un fichier n’est pas exploitable pour le déchiffrement d’un autre fichier crypté avec la même clé utilisateur. Même un même fichier chiffré plusieurs fois avec la même clé produira à chaque fois un résultat différent.

4- Le masque généré est une concaténation de x SHA-512 (fonction de hachage irréversible et non cassée à ce jour)

5- Le poids du fichier en sortie est égal à celui du clair à quelques octets prêts.

6- Le principe de chiffrement hérite de tous les avantages des fonctions de hachage SHA-256 et 512, la moindre modification de la clé ou du vecteur d'initialisation modifie complètement le masque. La moindre modification du chiffré ou du clair est aussi détectée.

7- Une vérification d’intégrité du fichier déchiffré est faite automatiquement au déchiffrement.Elle garantie l’authenticité du document transmis.

8- La clé définie entre deux utilisateurs n’a pas besoin d’être changée à chaque envoi puisque le vecteur d'initialisation différent pour chaque fichier chiffré assure la modification totale du masque pseudo aléatoire.

9- Le chiffrement et le déchiffrement sont très rapides.

10- Le logiciel est simple à utiliser. Son but est d’avoir tous les avantages du masque jetable sans les inconvénients liés à la transmission du masque.

6- A propos de la sécurité

HMK est un principe adaptable. Il peut facilement integrer de nouvelles fonctions de hachage plus sécurisés si SHA-256 et 512 venaient à être cassées. De même , le salage effectué pendant la création du masque intermédiaire peut ré-intégrer VI avec un pas défini. Les variables MI et K peuvent aussi subir des permutations.

Dans tous les cas, la sécurité de cette méthode de chiffrement repose principalement sur la non-réversibilité des fonctions de hachage SHA-256 et SHA-512.

Reste à étudier si le fait de hacher de nombreuses fois le hash du résultat précédent en le salant avec la même clé n'engendre pas au bout d'un moment une redondance dans le masque ainsi crée. Le pari sera gagné si la redondance s'effectue bien après les besoins réels de longueur pour le masque d'un fichier. Avec une fonction comme SHA-512 , cela semble bien être le cas.

Reste à étudier aussi si la concaténation des différents hashs du masque produit vraiment un résultat proche de l'aléatoire. Ce que l'on sait , et c'est bon signe , c'est que le chiffré n'est plus compressible.

7- Version 0.3 online en PHP pour test

Elle est l'oeuvre de Dimitri Mestdagh et vous permettra de tester les fonctionnalités du chiffrement et du déchiffrement avec vos propres fichiers. Un challenge est aussi organisé sur cette page pour essayer de casser HMK.

HMK is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Copyright © 2012 P.Lheureux (lheureux[a]free.fr) & D.Mestdagh (dimitri.mestdagh[a]laposte.net)

8- Des questions ?

Je dis ce que j'en pense ....

Retour au plan du site !