Quand dois-je utiliser SHA-1 et quand dois-je utiliser SHA-2?
Dans mon application en c#, je suis à l'aide de RSA pour signer les fichiers avant d'être téléchargées dans la base de données de mon entreprise par la personne qui télécharge et ici je dois choisir, SHA-1 ou SHA-2 pour le calcul de la valeur de 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 lorsque que?
EDIT:
Ma question est: Quelle est la différence en termes de performances? et pas sur le plan de la sécurité, comme je sais déjà que SHA-2 est plus solide sûre que SHA-1.
Dans ce Lien une comparaison entre les différents types de SHA-2 notant lors de l'utilisation de SHA-512 et lorsqu'il n'est pas la fin. J'ai besoin d'un argument similaire sur SHA-1 et SHA-2.
Vous devez vous connecter pour publier un commentaire.
L'utilisation de SHA-2. Toujours. SHA-1 est réservé à des situations où SHA-2 ne peut pas être utilisé en raison de problèmes d'interopérabilité avec le code existant.
Il n'y a pas de problème de performance jusqu'à ce que des mesures réelles ont été effectuées. Les fonctions de hachage sont rapides. Dans la plupart des situations, la fonction de hachage de la performance n'a qu'un impact négligeable; de même, la détection, il pourrait s'avérer difficile. La sécurité vient en premier. Depuis faiblesses ont été trouvés dans SHA-1, en utilisant toutefois, elle nécessite une certaine solide justification. À l'aide de l'algorithme SHA-256 ne sera pas remise en cause; c'est le "choix par défaut". Mais si vous utilisez l'algorithme SHA-1, préparez-vous à être critiqué.
Noter qu'il y a quatre fonctions connues comme "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 (SHA-224 la taille de la sortie est de 28 octets, alors que SHA-256 dispose de 32 octets); ils ont les mêmes caractéristiques de performance. De même, SHA-384 et SHA-512 sont de la même fonction, au niveau des performances. SHA-512 utilise 64 bits des opérations arithmétiques et est plus rapide que l'algorithme SHA-256 sur les plates-formes qui offrent 64 bits opcodes; sur les plates-formes 32 bits, l'algorithme SHA-256 sera plus rapide (remarque: sur les 32-bit x86 avec du code natif, il est possible d'utiliser le SSE2 opcodes et leur calcul 64 bits capacités, d'où certains code natif implémentations de l'algorithme SHA-512 sera plus rapide que l'algorithme SHA-256 en mode 32 bits; le code d'OpenSSL n'; mais, autant que je sache, le SHA-512 dans la mise en œuvre .NET est "géré" le code"). Aussi, tous les SHA-* les fonctions de base de granularité, parce qu'ils traitent les données par morceaux: pour SHA-256, les morceaux sont de 64 octets de long, tandis que SHA-512 utilise 128 octets morceaux; lorsque le hachage très court éléments de données, le plus élevé SHA-512 granularité en conséquence réduit ses performances. Enfin, SHA-256 (sur une plate-forme 32 bits) est susceptible de donner plus petit code (c'est à dire utiliser moins de cache L1 sur le CPU).
Donc, en cas de doute, utiliser SHA-256. Si vous prévoyez sur l'utilisation de SHA-1, alors vous devriez doute.
Si vous souhaitez utiliser une fonction de hachage pour un non cryptographique de l'utilisation (c'est à dire les faiblesses ne sont pas un problème pour vous), puis, au lieu de l'algorithme SHA-1, envisager MD4.
SHA-2 est plus forte et mieux adapté à la sécurité des applications sensibles telles que la signature numérique.
SHA-1 est bonne quand vous avez besoin d'un plus court de hachage et de la sécurité n'est pas un problème (par exemple, le fichier de sommes de contrôle).
Edit: algorithme SHA-1 est plus rapide (jusqu'à 10 fois plus rapide que l'algorithme SHA-2 avec 256 bits, et 20 fois plus rapide que l'algorithme SHA-2 à 512 bits - au moins dans le .NET mise en œuvre).
Cependant, il n'est pas vraiment lent: pour le mettre en perspective, vous pouvez vous attendre à de hachage d'un fichier de 100KO avec SHA-2 (256 bits) en quelques millisecondes sur un ordinateur moderne (ou un fichier de 1 mo en quelques dizaines de millisecondes).
Il n'y en a pas vraiment, cela dépend du niveau de sécurité et/ou de la paranoïa désiré. Je voudrais utiliser SHA256 pour toute nouvelle demande, mais cela vient avec l'exigence de suffisamment grande clés RSA qui peuvent gérer l'intégralité d'un SHA256 d'empreintes digitales en tant que charge utile.
SHA2 est plus récente et plus forte de l'algorithme de hachage. La question principale est de savoir si le destinataire est capable de gérer SHA2. Si le destinataire peut le gérer, de déplacements avec SHA2 sans doute.