HMK
CHIFFREMENT
PAR FLOT A BASE
DE HACHAGE SECURISE
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
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
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 à laide le lintéraction de deux clés différentes. Lune delle est définie par lutilisateur et lautre 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 dun 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 nest pas exploitable pour le déchiffrement dun 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 dintégrité du fichier déchiffré est faite automatiquement au déchiffrement.Elle garantie lauthenticité du document transmis.
8- La clé définie entre deux utilisateurs na 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 davoir 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 ?