web-dev-qa-db-fra.com

Quelles sont les différences entre MD5, SHA et RSA?

Les outils MD5 génèrent des valeurs hexadécimales. De la même manière, SHA et RSA produisent-ils ensemble une sortie hexadécimale (ou toute autre)?

Quelles sont les différences entre les algorithmes MD5, SHA et RSA?

43
Kars

Ce n'est pas le type de sortie. Hex est juste la façon dont les données sont formatées - puisque toutes travaillent sur des données binaires, hex a beaucoup de sens.

La partie importante est ce qu'ils font et comment ils le font:

  • MD5 et SHA sont des fonctions de hachage (SHA est en fait une famille de fonctions de hachage) - ils prennent un morceau de données, le compactent et créent une sortie convenablement unique qui est très difficile à émuler avec un autre élément de données. Ils ne chiffrent rien - vous ne pouvez pas prendre MD5 ou SHA sortie et "hacher" pour revenir à votre point de départ. La différence entre les deux réside dans ce que algorithme qu'ils utilisent pour créer le hachage. Notez également que MD5 est maintenant cassé car un moyen a été découvert pour générer facilement des collisions et ne devrait plus être utilisé ni approuvé.

  • RSA est un algorithme de chiffrement asymétrique. Vous disposez de deux clés (privée et publique) et vous pouvez exécuter une fonction avec une clé (chiffrer ou déchiffrer) et inverser avec l'autre clé. La clé que vous utilisez dépend de si vous essayez de faire une signature numérique ou un cryptage.

57
bethlakshmi

MD5 est un fonction de hachage cryptographique. "SHA" est le nom d'une famille de fonctions de hachage; d'abord un "SHA" de courte durée qui a été renommé "SHA-0", puis "SHA-1" a été défini (un best-seller). Plus tard, de nouveaux membres de la famille ont été ajoutés, désignés collectivement comme "SHA-2", et se composant de SHA-224, SHA-256, SHA-384 et SHA-512. Récemment, une nouvelle génération SHA génération a été conçue, appelée "SHA-3" mais aussi "Keccak" (c'était un concours ouvert, Keccak étant le nom de code d'un des candidats, qui a finalement gagné) .

Une fonction de hachage cryptographique est une fonction déterministe entièrement définie qui n'utilise aucune clé secrète. Il prend en entrée un message de longueur arbitraire (un flux de bits, n'importe bits) et produit une sortie de taille fixe. La taille de sortie dépend de la fonction; c'est 128 bits pour MD5, 160 bits pour SHA-1, 256 bits pour SHA-256 ... Tout le monde peut calculer une fonction de hachage donnée sur une entrée donnée, et ils obtiennent tous les mêmes résultats. Les fonctions de hachage sont également appelées digests car elles produisent en quelque sorte une sorte de "somme de contrôle" ou de "résumé" de l'entrée. Les fonctions de hachage robustes doivent être telles que personne ne sait comment les "inverser" ou même trouver deux entrées distinctes qui produisent la même sortie. Ce dernier est appelé une collision et c'est une nécessité mathématique que les collisions existent (puisque la fonction peut accepter beaucoup plus d'entrées distinctes qu'elle ne peut produire de sorties distinctes), mais nous exigeons qu'il soit impossible de trouver même un collision.

MD5 s'est avéré très cassé en ce qui concerne les collisions (nous pouvons produire une collision en quelques secondes de travail sur un PC) et SHA-0 est également cassé à cet égard; SHA-1 est un peu feuilleté; le reste de la famille SHA semble être robuste jusqu'à présent. Comment une fonction de hachage atteint la résistance aux collisions est un peu un miracle puisque la fonction entière est complètement connue, sans valeur secrète; elle mélange trop les données pour que les meilleurs cryptographes découvrent le processus.

RSA est deux algorithmes: un algorithme cryptage asymétrique et un algorithme signature numérique. Bien que les deux algorithmes s'appuient sur le même type de mathématiques, ils sont assez distincts (beaucoup de gens décrivent les signatures comme un "chiffrement avec la clé privée", ce qui est une analogie de faille et au mieux déroutant, alors ne faites pas cela). Les deux algorithmes utilisent clés, c'est-à-dire des éléments de données qui doivent être gardés secrets. Il se trouve que pour les signatures RSA, ce qui est signé n'est pas directement un message donné (une séquence de bits) mais un hash du message: le message est d'abord traité avec une fonction de hachage cryptographique comme SHA-256 et la valeur de hachage est ensuite utilisée. Cela se fait de cette façon car les mathématiques de RSA ne peuvent gérer que des valeurs de taille modérée, quelques centaines de bits au mieux. Les fonctions de hachage cryptographique sont telles que la signature du hachage est aussi bonne que la signature des données d'origine.

De cette façon, les fonctions de hachage RSA et cryptographiques sont souvent utilisées ensemble; mais ce n'est pas du tout la même chose.

Hexadécimal est un moyen de représenter une séquence de bits en une séquence de caractères: hexadécimal utilise des chiffres et des lettres de ' A 'à' F '; chaque caractère code exactement quatre bits ('0' code '0000', '7' code '0111', 'D' code '1101' ...). Any séquence de bits (et en particulier la sortie d'une fonction de hachage) peut être convertie en hexadécimal et inversement. L'hexadécimal est populaire parce que les yeux et le cerveau humains sont bons pour lire les caractères et non pour lire les bits. Les outils de ligne de commande qui calculent les fonctions de hachage cryptographiques sur les fichiers produisent traditionnellement des caractères hexadécimaux pour cette raison. Cependant, rien ne lie intrinsèquement les fonctions de hachage à l'hexadécimal: tout ce qui tient dans un ordinateur d'une manière ou d'une autre est une séquence de bits, et se prête donc à l'hexadécimal; et une sortie de fonction de hachage est juste une séquence de bits, qui peut être encodée de différentes manières, hexadécimal étant juste la manière "traditionnelle" (bien que Base64 soit également souvent rencontré, en particulier lorsqu'il s'agit de bases de données).

35
Thomas Pornin