HashMask Lite version 0.1

Secure Hash Encryption (Chiffrement par Hachage Sécurisé)

Principe de base

L'idée de base est de produire un chiffrement de taille sensiblement égale au fichier chiffré, et qui soit insensible à toute autre attaque que celle de la force brute (en rendant la cryptanalyse impossible), et ce en respectant une taille de clé maximum de 256 bits. Le volume des données chiffrées devra être de taille sensiblement équivalente au volume des données à chiffrer.

Principe de fonctionnement :

Création d'une clé de 64 bits, 128 bits, ou 256 bits :

La clé ne devra contenir que des caractères ASCII "imprimables" afin qu'elle puisse être écrite manuellement.

On crée une clé composée de caractères imprimables (92 caractères dans la table ascii standard), de préférence alphanumériques :

Ce qui nous donnera pour chaque fichier clé :

Possibilité d'utilisation d'une passphrase composée de caractères imprimables (minimum 8 caractères) en remplacement d'une clé générée aléatoirement.

Chiffrement en fonction d'une clé

  1. Construction d'un masque-clé à partir d'un hash SHA-256

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

    SHA-256 ( [Hash précédent] + clé) = masque intermédiaire

    Exemple :

    Clé : Le lutin bleu

    Hash initial = SHA-256 (Le lutin bleu)

    Soit : d23f77d0cccea53562137203914257dd25a492dce0db4206d9be5de06cf7ec44

    Ce hash initial n'est cependant pas utilisé pour masquer le clair, il sert simplement de chaine de base pour le masque intermédiaire.

    Masque intermédiaire = SHA-256(d23f77d0cccea53562137203914257dd25a492dce0db4206d9be5de06cf7ec44Le lutin bleu) =

    947961d1b85703c0b918a06a70507f3d4e3a948f0b3cd61cb652a661a48a143b

    Ce premier hash devient celui utilisé pour le calcul de la suite du masque qui est :

    SHA-256(947961d1b85703c0b918a06a70507f3d4e3a948f0b3cd61cb652a661a48a143bLe lutin bleu) = eef73a3c5405cf2747e9d1084aea7e97022a1e19a9f34a97c17f98d61bc171e2

    et ainsi de suite, autant de fois que nécessaire pour obtenir un masque intermédiaire qui fait au minimum le double du clair à chiffrer. Afin d'éviter de stocker en mémoire un masque aléatoire faisant le double du clair, le traitement des données se fera par blocs de 64 caractères (la longueur d'un hash SHA-256).

    On découpe ensuite les caractères du masque par séries de deux caractères. On utilise alors la valeur de chaque paire (2 chiffres hexadécimaux) pour obtenir le code Ascii du caractère qui va constituer le masque définitif.

    Exemple :

    Hash : 947961d1b85703c0b918a06a70507f3d4e3a948f0b3cd61cb652a661a48a143b

    Paires : 94, 79, 61, d1, b8, 57, 03, c0, ...

    chr(94) = "^"

    chr(79) = "O"

    chr(61) = "="

    chr(d1) = "Ñ"

    chr(b8) = "¸"

    Masque définitif = ^O=Ѹ...

    Ainsi le masque va se construire progressivement tout en étant dépendant de la clé fournie au départ. Chaque hash généré servira donc à masquer 32 caractères du clair. On va donc générer au total : (taille du clair divisé par 32) hachages successifs différents.

  2. Chiffrement par masque clé

    On opère simplement un XOR sur les caractères du contenu "clair" et ceux du masque définitif.

    Clair xor Masque = Chiffré

    Et pour le déchiffrement

    Chiffré xor Masque = Clair

Sécurité

Extrait de Wikipédia (en italique) :

Le chiffrement par la méthode du masque jetable consiste à combiner le message en clair avec une clé présentant les caractéristiques très particulières suivantes :

Le masque doit être une suite de caractères au moins aussi longue que le message à chiffrer.

Les caractères composant le masque doivent être choisis de façon totalement aléatoire.

Chaque " masque ", ne doit être utilisée qu'une seule fois (d'où le nom de masque jetable).

L'intérêt considérable de cette méthode de chiffrement, c'est que si les trois règles ci-dessus sont respectées strictement, le système offre une sécurité théorique absolue, comme l'a prouvé Claude Shannon en 1949.

Avec Hashmask,

La clé produit bien un masque aussi long que le message à chiffrer.

Les caractères composant le masque sont dépendants d'une formule SHA-256 qui génère un hash aléatoire et unique.

Chaque masque n'est utilisé qu'une seule fois (à condition de changer de clé à chaque utilisation).

Seul celui qui connaît la clé peut reconstruire le masque et il est impossible (en mai 2012) de remonter du masque vers la clé. La seule attaque possible est donc une attaque par force brute sur la clé.

En simplifiant l'échange des masques sans sacrifier vraiment à la sécurité, le système Hashmask peut se synchroniser à partir d'une passphrase. On peut imaginer que les deux correspondants définissent la clé comme étant la dernière phrase prononcée dans le JT de France 2 par exemple... Ou le titre du dernier post sur tel ou tel forum bien précis... Pas besoin de se cacher pour lire ou écouter. L'idée est que la clé soit accessible par tous, à condition de savoir où chercher et comment filtrer. Quelque chose qui change tous les jours.