Aller au contenu

Fonction de hachage avec et sans clé#


Introduction aux fonctions de hachage#


Enjeux des fonctions de hachage#

  • Définition : Transformer une entrée de taille variable en une sortie de taille fixe
  • Propriétés : Résistance aux collisions, résistance à la préimage, résistance à la seconde préimage
  • Applications : Vérification d'intégrité, empreintes numériques, stockage sécurisé de mots de passe, authentification, preuve d'existence
  • Irréversibilité : Difficulté à retrouver l'entrée à partir de la sortie (hash)

Exemple d'utilisation#

  • Empreintes numériques pour les fichiers :
    • Les fonctions de hachage permettent de créer une empreinte unique pour chaque fichier. Si un fichier est modifié, même légèrement, son empreinte changera considérablement. Cela permet de détecter rapidement les modifications non autorisées ou la corruption accidentelle des données.
  • Tables de hachage pour les structures de données :
    • Les fonctions de hachage sont utilisées pour créer des tables de hachage, qui sont des structures de données permettant des opérations de recherche, d'insertion et de suppression très rapides. Les tables de hachage convertissent les clés en indices de tableau à l'aide d'une fonction de hachage, ce qui permet d'accéder directement à l'emplacement mémoire correspondant.

Exemple d'utilisation (2)

  • Hachage pour les réseaux pair-à-pair (P2P) :
    • Les fonctions de hachage sont utilisées dans les réseaux pair-à-pair pour créer des identifiants uniques pour les ressources et les nœuds du réseau. Cela permet de localiser et de distribuer les ressources efficacement dans le réseau, ainsi que de vérifier l'intégrité des données partagées entre les pairs. Un exemple est l'utilisation des fonctions de hachage dans le réseau BitTorrent pour générer les infohash qui identifient de manière unique chaque torrent.
  • Preuve de travail : Utilisation des fonctions de hachage pour valider les transactions et créer de nouveaux blocs dans les systèmes de blockchain, comme Bitcoin

Fonctions de hachage SANS clé#


MD5 : Fonctions de hachage obsolètes en raison de vulnérabilités#

  • Ancienne fonction de hachage créée en 1992.
  • Produit des hachages de 128 bits.
  • De nombreuses vulnérabilités et collisions ont été découvertes, rendant MD5 insécurisé et obsolète.
  • Ne convient pas pour les applications de sécurité.
  • Commandes openssl pour SHA-1 (non recommandée) :
    • openssl dgst -md5 fichier.txt

SHA-1 : Fonctions de hachage obsolètes en raison de vulnérabilités#

  • Conçu en 1995, successeur de MD5.
  • Produit des hachages de 160 bits.
  • Des attaques et des collisions ont également été trouvées, remettant en question sa sécurité.
  • Son utilisation est déconseillée pour les applications de sécurité.
  • Commandes openssl pour SHA-1 (non recommandée) :
    • openssl dgst -sha1 fichier.txt

SHA-2 : Famille de fonctions de hachage (SHA-224, SHA-256, SHA-384, SHA-512)#

  • Basé sur la structure de Merkle-Damgård, utilisant des opérations de compression pour réduire la taille des données. SHA-2 est une évolution de SHA-1 et partage une conception similaire.
  • Bien qu'il n'y ait pas de vulnérabilités connues permettant des attaques pratiques, certaines faiblesses théoriques dans la structure de Merkle-Damgård pourraient éventuellement être exploitées.
  • Offre généralement une performance légèrement meilleure que SHA-3 sur du matériel conventionnel, en particulier pour les petites entrées de données.
    • Commande openssl : openssl dgst -sha256 fichier.txt

SHA-3 : Suite de fonctions de hachage améliorées (SHA3-224, SHA3-256, SHA3-384, SHA3-512)#

  • Utilise l'algorithme Keccak, qui est basé sur une structure différente appelée "sponge construction". Cette structure permet d'absorber et de compresser les données d'entrée de manière différente par rapport à SHA-2.
  • Étant donné que sa conception est distincte de celle de SHA-2, SHA-3 présente une résistance différente aux attaques, y compris une meilleure résistance aux attaques par collision.
  • Peut offrir une meilleure performance sur du matériel spécifique, tel que le matériel de calcul parallèle, en raison de sa conception.

    • Commande openssl : openssl dgst -sha3-256 fichier.txt

Voir aussi#

  • BLAKE2 : Fonction de hachage rapide et parallélisable (BLAKE2s, BLAKE2b)
    • Commande pour BLAKE2b : openssl dgst -blake2b512 fichier.txt
  • MurmurHash : Fonction de hachage non cryptographique, rapide et conçue pour les applications de hachage général
  • CityHash : Fonction de hachage non cryptographique développée par Google, optimisée pour les chaînes de caractères de longueur variable Utilisation courante : hachage rapide des chaînes de caractères dans les applications de performance élevée
  • Usage dans TLS : Garantir l'intégrité des données échangées

Fonctions de hachage AVEC clé (HMAC)#


Principe général#

  • Définition : Combinaison d'une fonction de hachage et d'une clé secrète
  • Objectif : Associer une clé secrète à la fonction de hachage pour renforcer la sécurité
  • Propriétés : Authentification de messages, vérification d'intégrité
  • Fonctionnement : Enveloppe d'une fonction de hachage, clé secrète partagée
  • Avantages de l'HMAC :
    • Résistance aux attaques par collisions : Difficulté à trouver deux messages ayant le même HMAC
    • Résistance à la préimage : Difficulté à trouver un message ayant un HMAC donné
    • Résistance à la seconde préimage : Difficulté à trouver un autre message ayant le même HMAC
  • Choix de la fonction de hachage :
    • Utiliser des fonctions de hachage sécurisées et résistantes aux collisions (SHA-2, SHA-3)
    • HMAC-MD5, HMAC-SHA-1 : Exemples d'HMAC utilisant des fonctions de hachage moins sécurisées
  • Sécurité de la clé : Importance de choisir une clé secrète suffisamment longue et aléatoire
  • HMAC vs. MAC : HMAC est une implémentation spécifique de Message Authentication Code (MAC) utilisant des fonctions de hachage

Exemple avec SHA-256 : HMAC-SHA-256#

  • Combinaison de la fonction de hachage SHA-256 et d'une clé secrète
    • Format : HMAC(Key, Message) = Hash(Key ⊕ opad, Hash(Key ⊕ ipad, Message))
    • "opad" et "ipad" : Constantes définies pour le calcul HMAC
  • Commande openssl : openssl dgst -sha256 -hmac "clé_secrète" fichier.txt Comparaison avec d'autres MACs : HMAC plus résistant aux attaques cryptanalytiques que d'autres MACs basés sur des fonctions de hachage ou des chiffrements symétriques Utilisation en pratique : Services web, authentification d'API, intégrité des communications sécurisées Outils en ligne et bibliothèques pour calculer HMAC : Librairies de cryptographie (OpenSSL, libsodium), outils en ligne de confiance (hmacgenerator.net)

Utilisation des fonctions de hachage dans TLS#

  • Garantir l'intégrité des données : Empêcher la modification non détectée des messages
  • Authentification des messages : S'assurer de l'origine et de la validité des messages échangés
  • Signature numérique : Combinaison de fonctions de hachage et d'algorithmes de signature pour authentifier les certificats
  • Pseudorandom Function (PRF) : Générer des clés et du matériel cryptographique à partir d'un secret partagé
    • Utilisation de HMAC et de fonctions de hachage spécifiques (ex : HMAC-SHA-256)
  • Finished messages : Les messages de fin de connexion utilisent des fonctions de hachage pour vérifier l'intégrité de la session
  • Attaques et vulnérabilités : Comprendre les risques liés à l'utilisation de fonctions de hachage obsolètes ou vulnérables dans TLS
  • Évolution de TLS : Prise en charge des fonctions de hachage les plus récentes et les plus sécurisées dans les nouvelles versions de TLS (TLS 1.3)