web-dev-qa-db-fra.com

Pourquoi utiliser SHA1 pour hacher des secrets lorsque SHA-512 est plus sécurisé?

Je ne veux pas que ce soit un débat, mais j'essaie de comprendre la raison technique derrière laquelle tant d'applications utilisent SHA1 pour hacher des secrets, alors que SHA512 est plus sécurisé. C'est peut-être simplement pour une compatibilité descendante.

Outre la plus grande taille évidente (128 caractères contre 40) ou de légères différences de vitesse, y a-t-il une autre raison pour laquelle les gens utilisent la première?

En outre, SHA-1, je crois, a été craqué pour la première fois par un processeur de magnétoscope il y a des années. Quelqu'un a-t-il déjà craqué 512 (peut-être avec un souffleur de feuilles), ou est-il toujours sûr d'utiliser sans salage?

36
orokusaki

La plupart des utilisations de SHA-1 sont destinées à l'interopérabilité: nous utilisons SHA-1 lorsque nous implémentons des protocoles où SHA-1 est obligatoire. La facilité de développement est également prise en compte: les implémentations SHA-1 dans divers langages et environnements de programmation sont plus courantes que les implémentations SHA-512.

De plus, même si la plupart des utilisations des fonctions de hachage n'ont pas de problèmes de performances (au moins, aucun problème de performances où la fonction de hachage est le goulot d'étranglement), il existe certaines architectures où SHA-1 est beaucoup plus efficace que SHA-512. Prenons un routeur Linksys de base: il utilise un processeur dérivé de Mips, cadencé à 200 MHz. Une telle machine peut être reprogrammée, par ex. avec OpenWRT (un petit Linux pour les systèmes embarqués). En tant que routeur, il dispose d'un réseau rapide (100Mbit/s). Supposons que vous souhaitiez hacher certaines données (par exemple dans le cadre d'un logiciel VPN - un routeur semble être un bon candidat pour exécuter un VPN). Avec SHA-1, vous obtiendrez environ 6 Mo/s en utilisant le processeur complet. C'est déjà bien inférieur à la bande passante du réseau. SHA-512 ne vous donnera pas plus de 1,5 Mo/s sur la même machine. Sur un tel système, la différence de performances n'est pas négligeable. De plus, si j'utilise SHA-1 sur mon routeur Linksys pour certains protocoles de communication, la machine à l'autre extrémité de la liaison devra également utiliser SHA-1.

La bonne nouvelle est qu'il y a une compétition en cours pour sélectionner une nouvelle fonction de hachage standard, nommée SHA- . Certains des candidats concurrents offrent des performances similaires à SHA-1, ou même un peu mieux, tout en offrant une sortie 512 bits et sont (probablement) aussi sûres que SHA-512.

43
Thomas Pornin

SHA1 et SHA512 sont des fonctions de hachage. Si vous les utilisez comme hachage cryptographique, c'est peut-être une bonne raison d'utiliser SHA512; cependant, il existe des applications qui utilisent ces fonctions simplement pour identifier des objets. Par exemple, Git utilise SHA1 pour distinguer à moindre coût les objets. Dans ce cas, parce que la possibilité de collision entre deux documents est incroyablement faible avec SHA1, il n'y a vraiment aucune justification pour l'espace supplémentaire requis de SHA512 lorsque SHA1 est plus qu'adapté à la tâche.

En termes de hachages cryptographiques et le choix d'utiliser un sel ou non, vous pourriez être intéressé par la lecture Don't Hash Secrets . Même avec SHA512, l'utilisation d'un sel est une bonne idée (et ce n'est pas cher non plus, alors pourquoi ne pas le faire?), Car vous pouvez deviner les mots de passe les plus recherchés et voir s'ils ont le même hachage, mais l'auteur souligne que HMAC est un mécanisme plus sûr. Dans tous les cas, vous devrez déterminer les coûts associés au temps + espace supplémentaire et les coûts associés à la possibilité d'une violation, et déterminer à quel point vous voulez être paranoïaque. Comme l'a récemment découvert Microsoft, les mots de passe changeant constamment sont un gaspillage d'argent et ne sont pas payants , donc bien que la paranoïa soit généralement bonne en matière de sécurité, vous devez vraiment faire le calcul pour déterminer si cela a du sens ... les gains de sécurité l'emportent-ils sur le temps et les coûts de stockage?

25

Si vous avez besoin de hacher quelque chose rapidement, ou si vous avez seulement besoin d'un hachage 160 bits, vous utiliserez SHA-1.

Pour comparer rapidement les entrées de base de données, vous pouvez prendre 100 champs et en faire un hachage SHA-1, ce qui donne 160 bits. Ces 160 bits sont des valeurs 10 ^ 50ish.

S'il est peu probable que j'aie plus d'une infime fraction de 10 ^ 50e valeurs, il est plus rapide de hacher simplement ce que j'ai avec l'algorithme plus simple et plus rapide.

3
Dean J