Cryptographie : que sont les algorithmes de hachage et à quoi servent-ils ?
Une fonction de hachage cryptographique est un algorithme mathématique qui transforme toutes les données entrantes en une série de caractères de sortie, de longueur fixe ou variable, selon l’algorithme de hachage que nous utilisons. Dans les algorithmes de hachage avec une longueur de sortie fixe, cette longueur sera la même quelle que soit la taille des données d’entrée. Les algorithmes de hachage spécialement conçus pour protéger les mots de passe sont souvent variables. Aujourd’hui, dans RedesZone, nous allons vous expliquer tout ce que vous devez savoir sur les hachages.
A quoi servent les hachages ?
Les hachages cryptographiques sont principalement utilisés pour protéger les mots de passe et non pour les stocker en clair dans une base de données . Si vous avez déjà lu sur les fonctions de hachage, il s’agissait probablement de leur utilisation principale, de protéger les mots de passe pour éviter de les stocker en texte clair. Imaginez que les cybercriminels soient capables de violer un service et de voler sa base de données, si les mots de passe n’étaient pas hachés, leurs identifiants seraient immédiatement exposés.
Pour vérifier que nous avons correctement saisi un mot de passe stocké dans une base de données (le hachage de la clé est stocké), il s’agit d’appliquer l’algorithme de hachage au mot de passe saisi et de le comparer avec celui stocké, s’il s’agit du idem, la clé est correcte, si différente, la clé est fausse. Cette procédure est utilisée dans tous les systèmes d’exploitation, sites Web avec authentification utilisateur/mot de passe, etc.
Si jamais vous devez récupérer ou réobtenir votre mot de passe à partir d’un service en ligne, vous devrez le réinitialiser, car même le service lui-même ne pourra pas vous fournir le mot de passe en clair, mais ne stockera que le hachage du mot de passe . Si, dans un service, vous avez demandé à récupérer le mot de passe et qu’ils vous l’offrent en clair, cela signifie qu’ils sont stockés de cette façon et qu’il n’est pas sûr d’utiliser ce service. Bien que les mots de passe 123456 typiques aient des hachages bien connus, dès que nous mettrons une clé forte, elle ne sera dans aucun système de hachage en ligne, et nous devrons le casser nous-mêmes avec des outils comme Hashcat entre autres.
Toutes les utilisations des algorithmes de hachage ne concernent pas les mots de passe, les fonctions de hachage cryptographique sont également utilisées pour détecter les logiciels malveillants , elles peuvent être utilisées pour détecter différentes chansons ou films protégés par le droit d’auteur et créer des listes noires. Il existe également des listes publiques de logiciels malveillants, appelées signatures de logiciels malveillants, sont constituées de valeurs de hachage de parties entières ou de petites parties de logiciels malveillants. Ainsi, si d’une part, un utilisateur détecte un fichier suspect, il peut consulter ces bases de données de hachage publiques, et ainsi, savoir s’il s’agit d’un fichier malveillant ou s’il ne présente aucun danger, à son tour, en d’autre part, ils sont également utilisés par les antivirus pour détecter et bloquer les logiciels malveillants en comparant les hachages de leurs propres bases de données et celles publiques dont nous parlons.
Une autre utilisation importante des fonctions de hachage cryptographique est d’ assurer l’intégrité des messages . La façon de les utiliser à cette fin est de vérifier les hachages créés avant et après la transmission des données , de cette façon, si les hachages sont totalement identiques cela signifiera que la communication a été sécurisée et que les données n’ont pas été altérées, sinon , quelque chose s’est mal passé et les données obtenues à la fin de la communication ne sont pas les mêmes que celles qui ont été émises au début.
Maintenant que nous savons tout sur les fonctions de hachage, voyons quelles sont les plus utilisées aujourd’hui.
SHA2
A ses débuts, l’algorithme SHA (Secure Hash Algorithm ou Secure Hash Algorithm) a été créé par la NSA et le NIST dans le but de générer des hachages ou codes uniques basés sur un standard. En 1993, le premier protocole SHA est né, également appelé SHA-0, mais il n’a guère été utilisé et n’a pas eu beaucoup d’impact. Quelques années plus tard, une variante améliorée plus robuste et sécurisée, SHA-1, a été publiée, qui a été utilisée pendant de nombreuses années pour signer des certificats numériques SSL / TLS pour des millions de sites Web. Quelques années plus tard, SHA-2 a été créé, qui a quatre variantes en fonction du nombre de bits de sortie, ce sont SHA2-224, SHA2-256, SHA2-384 et SHA2-512 . Actuellement, pour des raisons de sécurité, SHA1 n’est plus utilisé, mais il est fortement recommandé d’utiliser SHA2 ou SHA3 (au sein de la famille SHA).
Opération SHA2
Les algorithmes de hachage ne fonctionnent que dans un sens, nous pouvons générer le hachage de n’importe quel contenu, ou l’empreinte digitale, mais avec le hachage ou l’empreinte digitale, il n’y a aucun moyen de générer le contenu initial. La seule façon de le faire est par dictionnaire ou par force brute, il pourrait donc nous falloir des milliers d’années (actuellement) pour obtenir les informations initiales.
Parmi les nombreuses et différentes façons de créer des hachages, l’algorithme SHA2-256 est l’un des plus utilisés grâce à son équilibre entre sécurité et vitesse, c’est un algorithme très efficace et a une haute résistance aux collisions, quelque chose de très important pour maintenir la sécurité . de cet algorithme de hachage. Pour qu’un algorithme de hachage soit sécurisé, aucune collision ne doit être connue. Par exemple, la méthode de vérification des Bitcoins est basée sur SHA2-256.
Caractéristiques des différents types de SHA2
- Taille de sortie : c’est la taille des caractères qui formeront le hachage.
- Taille de l’état interne : c’est la somme de hachage interne, après chaque compression d’un bloc de données.
- Taille du bloc : c’est la taille du bloc manipulé par l’algorithme.
- Taille maximale du message : c’est la taille maximale du message sur lequel on applique l’algorithme.
- Longueur du mot : c’est la longueur en bits de l’opération que l’algorithme applique à chaque tour.
- Interactions ou tours : c’est le nombre d’opérations que l’algorithme effectue pour obtenir le hachage final.
- Opérations supportées : ce sont les opérations effectuées par l’algorithme pour obtenir le hachage final.
SHA-256
Il a une taille de sortie de 256 bits, une taille d’état interne de 256 bits, une taille de bloc de 512 bits, la taille de message maximale qu’il peut gérer est de 2 64 – 1, la longueur de mot est de 32 bits et le nombre de tours appliqués est de 64, ainsi que les opérations appliquées au hachage sont +, et, ou, xor, shr et rot. La longueur du hachage est toujours la même, quelle que soit la taille du contenu que vous utilisez pour générer le hachage : qu’il s’agisse d’une seule lettre ou d’une image ISO de 4 Go, le résultat sera toujours une séquence de 40 lettres et chiffres.
SHA2-384
Cet algorithme est différent en termes de caractéristiques, mais son fonctionnement est le même. Il a une taille de sortie de 384 bits, une taille d’état interne de 512 bits, une taille de bloc de 1024 bits, la taille de message maximale qu’il peut gérer est de 2 128– 1, la longueur du mot est de 64 bits et le nombre de tours appliqués est de 80, ainsi que les opérations appliquées au hachage sont +, et, ou, xor, shr et rot. Cet algorithme est une version plus sécurisée que SHA2-256, car plus de cycles d’opérations sont appliqués et il peut également être appliqué sur des informations plus complètes. Cet algorithme de hachage est couramment utilisé pour vérifier l’intégrité et l’authenticité des messages dans les réseaux privés virtuels. Un aspect négatif est qu’il est un peu plus lent que SHA2-256, mais dans certaines circonstances, cela peut être une très bonne option pour l’utiliser.
SHA2-512
Comme dans tous les SHA2, le fonctionnement est le même, ils ne changent qu’une caractéristique. Il a une taille de sortie de 512 bits. Toutes les autres fonctionnalités sont les mêmes que SHA2-384. 512 bits de taille d’état interne, 1024 bits de taille de bloc, 2 128 – 1 pour la taille maximale du message, 64 bits de longueur de mot et 80 est le nombre de tours qui lui sont appliqués. Cet algorithme applique également les mêmes opérations à chaque tour +, et, ou, xor, shr et rot.
SHA2-224
Nous n’avons pas commenté cet algorithme en tant que principal, car son frère aîné (SHA2-256) est beaucoup plus utilisé, car la différence de calcul entre les deux est risible et SHA2-256 est beaucoup plus standardisé. Nous mentionnons cela parce que, au moins jusqu’à présent, aucune collision n’a été trouvée pour cet algorithme, ce qui en fait une option sûre et utilisable.
Dans le tableau suivant, nous pourrons vérifier beaucoup mieux les différences entre tous les algorithmes en fonction de leurs caractéristiques.
Vous verrez que les algorithmes de hachage MD5, SHA-0 et SHA-1 apparaissent auparavant dans le tableau , nous les avons laissés de côté car, bien qu’ils aient été utilisés il y a longtemps, des collisions ont déjà été trouvées et ce n’est plus sûr pour les utiliser , donc dans SHA2, dans toutes ses variantes, et SHA3 sont actuellement utilisés.
Pour clarifier le concept de collision et le comprendre correctement, nous expliquons qu’en informatique, une collision de hachage est une situation qui se produit lorsque deux entrées différentes d’une fonction de hachage produisent la même sortie.
SHA-3
SHA3 est le plus récent algorithme de hachage de la famille SHA, il a été publié par le NISH en 2015, mais il n’est pas encore largement utilisé. Bien qu’il fasse partie de la même famille, sa structure interne est assez différente. Ce nouvel algorithme de hachage est basé sur la «construction en éponge» . La construction de cette éponge est basée sur une fonction aléatoire ou permutation aléatoire de données, elle permet de saisir n’importe quelle quantité de données et de générer n’importe quelle quantité de données, de plus, la fonction est pseudo-aléatoire par rapport à toutes les entrées précédentes. Cela permet à SHA-3 d’avoir une grande flexibilité, l’objectif est de remplacer SHA2 dans les protocoles TLS ou VPN typiques qui utilisent cet algorithme de hachage pour vérifier l’intégrité des données et leur authenticité.
SHA-3 est né comme une alternative à SHA2, mais pas parce que l’utilisation de SHA-2 n’est pas sûre, mais parce qu’ils voulaient avoir un plan B en cas d’attaque réussie contre SHA2, de cette façon, à la fois SHA-2 et SHA- 3 coexistera Pendant de nombreuses années, en effet, SHA-3 n’est pas utilisé massivement comme il l’est avec SHA-2.
Fonctionnement et caractéristiques
SHA-3 utilise une construction « éponge », les données sont « absorbées » et traitées pour afficher une sortie de la longueur souhaitée. Dans la phase d’absorption des données, l’opération XOR est utilisée puis transformée en fonction de permutation. SHA-3 nous permet d’avoir des informations supplémentaires, pour protéger la fonction de hachage des attaques d’extension, ce qui se produit avec MD5, SHA-1 et SHA-2. Une autre caractéristique importante est qu’il est très flexible, permettant de tester des attaques cryptanalytiques et de l’utiliser dans des applications légères. Actuellement SHA2-512 est deux fois plus rapide que SHA3-512, mais ce dernier pourrait être implémenté via du matériel, pour lequel alors pourrait être tout aussi rapide et encore plus rapide.
Algorithmes de hachage KDF
La différence entre KDF (Key Derivation Function) et une fonction de hachage de mot de passe est que la longueur avec KDF est différente, alors qu’une fonction de hachage de mot de passe aura toujours la même longueur de sortie. Selon que l’on hache des clés de chiffrement ou des mots de passe stockés dans une base de données, il est conseillé d’utiliser certains algorithmes de hachage ou d’autres. Par exemple, dans le cas de mots de passe stockés, il est recommandé que l’algorithme de hachage prenne un temps de, par exemple, 5 secondes à calculer, mais qu’il soit alors très robuste et très coûteux à déchiffrer.
Les développeurs moins expérimentés qui ne connaissent pas toutes les possibilités des algorithmes de hachage KDF penseront que les fonctions de hachage cryptographique génériques unidirectionnelles, de longueur fixe et résistantes aux collisions telles que SHA2-256 ou SHA2-512 sont meilleures, sans réfléchir à deux fois sur le possible problème qu’ils peuvent avoir. Le problème avec les hachages de longueur fixe est qu’ils sont rapides, cela permet à un attaquant de déchiffrer le mot de passe très rapidement avec un ordinateur puissant. Les hachages de longueur variable sont plus lents, ce qui est idéal pour que les pirates de mots de passe prennent plus de temps à obtenir.
La communauté crypto s’est réunie pour introduire des fonctions de hachage conçues spécifiquement pour les mots de passe, où un « coût » est inclus. Les fonctions de dérivation clés ont également été conçues avec un « coût ». S’appuyant sur des fonctions de dérivation de clés basées sur des mots de passe et des fonctions de hachage spécialement conçues pour les mots de passe, la communauté a conçu divers algorithmes à utiliser pour la protection par mot de passe.
Les algorithmes les plus populaires pour protéger les mots de passe sont :
- Argon2 (KDF)
- crypté (KDF)
- bcrypt
- PBKDF2 (KDF)
La principale différence entre un KDF et une fonction de hachage de mot de passe est que la longueur avec les KDF est arbitraire et que les hachages de mot de passe typiques comme MD5, SHA-1, SHA2-256, SHA2-512 ont une sortie de longueur fixe.
Pour le stockage des mots de passe, la menace est que la base de données de clés soit divulguée sur Internet et que les pirates de mots de passe du monde entier travaillent sur les hachages de la base de données pour récupérer les mots de passe.
Prenant comme exemple le stockage de mots de passe dans une base de données, lorsque l’on se connecte pour accéder à un site internet, il est toujours nécessaire que le hachage de la clé se fasse rapidement, afin de ne pas avoir à attendre sans pouvoir y accéder, mais ceci suppose un Le problème est qu’il pourrait être craqué plus rapidement, surtout si nous utilisons la puissance des GPU avec Hashcat.
bcrypt, sha256crypt, sha512crypt et PBKDF2
Dans le tableau suivant, vous trouverez une comparaison de plusieurs algorithmes de hachage largement utilisés, avec leur coût correspondant dans un seul tableau. Vous verrez que la ligne verte est surlignée où un facteur de travail possible pourrait signifier passer 0,5 seconde à hacher le mot de passe, ce qui est une assez bonne relation, et une ligne rouge où un facteur de travail possible pourrait signifier passer 5 secondes complètes à créer un mot de passe -clé de cryptage basée sur la clé, ce qui est mauvais pour la perte d’efficacité
Notez que pour bcrypt, cela signifie que pour le hachage du mot de passe, un facteur de 13 fournirait un coût d’environ 0,5 seconde pour crypter le mot de passe, tandis qu’un facteur de 16 approcherait un coût d’environ 5 secondes pour créer un mot de passe basé sur une clé. Pour sha256crypt, sha512crypt et PBKDF2, cela semble être respectivement d’environ 640 000 et 5 120 000 itérations.
crypter
Quand on pense à passer au scrypt, c’est parce que les choses deviennent un peu plus difficiles. Avec bcrypt, sha256crypt, sha512crypt et PBKDF2, notre coût est entièrement un facteur de charge du processeur, plus la puissance de traitement est élevée, plus l’efficacité de l’algorithme est élevée. Le mauvais côté est qu’ils sont toujours victimes de FPGA et d’ASIC spécifiques à un algorithme. Pour lutter contre cela, un coût de mémoire peut être inclus. Avec scrypt, nous aurons un coût à la fois en CPU et en RAM.
Dans le tableau suivant, vous pouvez voir une comparaison avec différentes valeurs de coût.
Ces tests ont été réalisés avec un seul processeur quad-core CPU, nous avons essayé de limiter le coût « p » à 1, 2 et 4. L’utilisation de la RAM a également été limitée et ainsi ne pas avoir à interrompre le reste des actions en cours qui étaient en cours. Par conséquent, le coût « r » a été limité à 4, 8 et 16 multiplié par 128 octets (512 octets, 1024 octets et 2048 octets).
Argon2
Argon2 a deux versions différentes : Argon2d et Argon2i ; la première dépend de la donnée (d) et la seconde est indépendante de la donnée (i). Le premier est censé être résistant au cracking du GPU, tandis que le second est censé être résistant aux attaques par canal latéral. En d’autres termes, Argon2d conviendrait au hachage de mots de passe , tandis qu’Argon2i conviendrait à la dérivation de clés de chiffrement .
Argon2 a un coût CPU et un coût RAM, les deux sont gérés séparément. Le coût du processeur est géré par des itérations standard, comme avec bcrypt ou PBKDF2, et le coût de la RAM est géré en augmentant spécifiquement la mémoire. Lorsqu’ils ont commencé à tester cet algorithme, il a été constaté que la simple manipulation des itérations ressemblait beaucoup à bcrypt, mais à son tour, le temps total nécessaire pour calculer le hachage pouvait être affecté par la simple manipulation de la mémoire. En combinant les deux, il a été constaté que les itérations affectaient davantage le coût du processeur que de la RAM, mais que les deux avaient une part importante du temps de calcul, comme le montrent les tableaux ci-dessous. Comme avec scrypt, il a également un coût de parallélisation,
La remarque à prendre en compte dans ce processus de paramétrage est que le coût de la RAM varie entre 256 KiB et 16 MiB, en plus du nombre d’itérations et du coût de comptage du processeur. Au fur et à mesure que nous augmentons la RAM utilisée dans le paramétrage, nous pouvons réduire notre coût d’itération. Comme nous avons besoin de plus de threads pour travailler sur le hachage, nous pouvons réduire encore plus cette itération. Ainsi, les deux concepts couverts font que, indépendamment, vous essayez de cibler 0,5 seconde pour une connexion par mot de passe interactive et 5 secondes complètes pour la dérivation de la clé de chiffrement basée sur le mot de passe.
conclusion
Nous pouvons résumer l’utilisation de ces algorithmes de hachage comme suit : lors du hachage des mots de passe, que ce soit pour les stocker sur disque ou pour créer des clés de chiffrement, il convient d’utiliser des codes cryptographiques basés sur des mots de passe, spécialement conçus pour le problème posé. Les fonctions de hachage à usage général de quelque nature que ce soit ne doivent pas être utilisées, en raison de leur vitesse. De plus, ils ne doivent pas implémenter leur propre algorithme d'»étirement de clé», tel que le hachage récursif de leur résumé de mot de passe et une sortie supplémentaire.
Par conséquent, si nous prenons en compte le fait que, si l’algorithme a été conçu spécifiquement pour gérer les mots de passe et que le coût est suffisant pour couvrir les besoins, le modèle de menace et l’adversaire, nous pouvons dire sans aucun doute que nous le faisons bien. . En fait, nous ne nous tromperons pas si nous choisissons l’un d’entre eux, nous devons simplement être clairs sur l’utilisation que nous allons lui donner, afin d’éviter tout algorithme qui n’est pas spécifiquement conçu pour les mots de passe, ce qui renforcera la sécurité d’entre eux.
Maintenant que vous avez une idée claire de quels algorithmes sont utilisés aujourd’hui, nous avons expliqué le fonctionnement de chaque algorithme et même les coûts de traitement afin que nous puissions être clairs sur lequel utiliser en fonction de la situation. Ce qui est devenu clair, c’est qu’ils sont tous utilisés pour un objectif commun clair, notre protection, à la fois les algorithmes fixes basés sur le hachage et les variables sont utilisés pour protéger l’information, car comme vous le savez, l’information c’est le pouvoir. Grâce à eux, nos mots de passe, fichiers et transmissions de données sont à l’abri de tout agent extérieur qui voudrait les connaître.