Quand dois-je utiliser SHA-1 et Quand dois-je utiliser SHA-2?

dans mon application c#, j'utilise RSA pour signer des fichiers avant d'être téléchargé sur la base de données de mon entreprise par la personne qui est en train de télécharger et ici je dois choisir SHA-1 ou SHA-2 pour calculer le hachage.

Comme tout autre composant de la programmation, je sais qu'il doit y avoir une "utiliser ce ici" et "utiliser" il y pour les deux d'entre eux.

Alors, Lorsque ce? et quand cela?

EDIT:

Ma question Est la suivante: Quelle est la différence par rapport à la performance? et pas en ce qui concerne la sécurité, car je sais déjà que SHA-2 est plus sûr que SHA-1.

Dans ce Lien une comparaison entre différents types de SHA-2 en notant quand utiliser SHA-512 et quand pas à la fin. J'ai besoin d'un argument similaire à propos de SHA-1 et SHA-2.

23
demandé sur Majd 2011-02-15 12:34:12

4 réponses

utilisez SHA-2. Toujours. SHA-1 doit être réservé aux situations où SHA-2 ne peut pas être utilisé en raison de problèmes d'interopérabilité avec le code d'origine.

il n'y a pas de problème de rendement tant que les mesures réelles n'ont pas été effectuées. Les fonctions de hachage sont rapides. Dans la plupart des cas, la performance de la fonction de hachage n'a qu'un impact négligeable; même sa détection pourrait s'avérer difficile. La sécurité passe en premier. Étant donné que des faiblesses ont été relevées dans la méthode SHA-1, son utilisation exige néanmoins une justification solide. L'utilisation de SHA-256 ne sera pas remise en question; c'est le "choix par défaut". Mais si vous utilisez SHA-1, Préparez-vous à être critiqué.

Notez qu'il existe quatre fonctions dites "SHA-2": SHA-224, SHA-256, SHA-384 et SHA-512. SHA-224 et SHA-256 sont la même fonction, sauf pour un paramètre interne (la" valeur initiale") et la taille de sortie (la taille de sortie SHA-224 est de 28 octets, alors que SHA-256 offre 32 octets); ils ont les mêmes caractéristiques de performance. De même, SHA-384 et SHA-512 sont la même fonction performance-sage. SHA-512 utilise des opérations arithmétiques 64 bits et est plus rapide que SHA-256 sur les plateformes qui offrent des opcodes 64 bits; sur les plateformes 32 bits, SHA-256 sera plus rapide (note: sur 32 bits x86 avec le code natif, il est possible d'utiliser les opcodes SSE2 et leurs capacités de calcul 64 bits, donc les implémentations de code natif de SHA-512 seront plus rapides que SHA-256 en mode 32 bits; le code OpenSSL le fait; mais, pour autant que je sache, le SHA-512 la mise en œuvre dans .NET est du "code géré"). En outre, toutes les fonctions SHA - * ont une granularité de base, parce qu'elles traitent les données par morceaux: pour SHA-256, les morceaux sont de 64 octets de long, tandis que SHA-512 utilise des morceaux de 128 octets; en cas de hachage d'éléments de données très courts, la granularité plus élevée de SHA-512 diminue en conséquence ses performances. Enfin, SHA-256 (sur une plate-forme 32 bits) est susceptible de produire du code plus petit (c.-à-d. utiliser moins de cache L1 sur le CPU).

donc, en cas de doute, utilisez SHA-256. Si vous prévoyez sur en utilisant SHA - 1 alors vous devriez douter.

si vous voulez utiliser une fonction de hachage pour un usage non-cryptographique (i.e. les faiblesses ne sont pas un problème pour vous) alors, au lieu de SHA-1, considérez MD4.

63
répondu Thomas Pornin 2011-02-15 12:08:08

SHA-2 est plus robuste et mieux adapté aux applications sensibles à la sécurité telles que la signature numérique.

SHA-1 est bon quand vous avez besoin d'un hachage plus court et la sécurité n'est pas un problème (par exemple, checksums de fichiers).

Edit: l'algorithme SHA - 1 est plus rapide (jusqu'à 10 fois plus rapide que SHA-2 avec 256 bits, et 20 fois plus rapide que SHA-2 avec 512 bits - au moins dans l'implémentation.net).

Toutefois, il n'est pas vraiment lent: pour le mettre en perspective, vous pouvez vous attendre pour hachurer un fichier de 100KB avec SHA-2 (256 bits) en quelques millisecondes sur un ordinateur moderne (ou un fichier de 1MB en quelques dizaines de millisecondes).

3
répondu Joe Albahari 2011-02-15 09:59:24

il n'y a pas vraiment, cela dépend du niveau de sécurité et/ou de paranoïa désiré. J'utiliserais SHA256 pour n'importe quelle nouvelle application, cependant cela vient avec l'exigence de clés RSA suffisamment grandes qui peuvent manipuler une empreinte SHA256 entière comme charge utile.

1
répondu Simon Richter 2011-02-15 09:41:38

SHA2 est un algorithme de hachage plus récent et plus fort. La question principale est de savoir si le destinataire est capable de gérer SHA2. Si le destinataire peut le gérer, - allez avec SHA2 sans doute.

-1
répondu Eugene Mayevski 'Allied Bits 2011-02-15 09:40:39