2010-08-04 26 views
2

La classe MessageDigest implémente l'algorithme SHA-1 (parmi beaucoup d'autres). L'algorithme SHA-1 permet d'utiliser différentes "graines" ou digests initiaux. Voir SHA-1 PsuedocodeComment définir la graine MessageDigest?

L'algorithme initialise les variables, ou la graine:

Initialize variables: 
h0 = 0x67452301 
h1 = 0xEFCDAB89 
h2 = 0x98BADCFE 
h3 = 0x10325476 
h4 = 0xC3D2E1F0 

Cependant la classe MessageDigest, comme décrit dans le Online Java Manual, ne fournit aucune API pour la définition de ces variables initiales. En fait, il n'indique pas la valeur des variables initiales.

Comment puis-je définir le germe initial pour l'algorithme SHA-1?

Où est un exemple de SHA-1 en Java, EN UTILISANT UNE GRAINE INITIALE?
(je suis à la recherche pour la mise en œuvre SHA-1, à moins que l'exemple utilise MessageDigest avec une graine de rechange initiale.)

+0

viva Extension SHA1! – SDReyes

Répondre

1

La fonction Java ne peut pas être fournie avec un germe initial.

J'ai copié une implémentation C de l'algorithme SHA-1 et l'ai modifié pour permettre le changement des valeurs de départ initiales.

1

Où voyez-vous la nécessité d'une graine dans un condensé SHA-1? Normalement, dans l'algorithme de chiffrement avec un besoin de source de nombres aléatoires, une graine est "nécessaire". Mais dans SHA-1, vous n'utilisez même pas de nombres aléatoires, donc il n'y a pas de graine ou de vecteur initial à définir. Les variables que vous avez mentionnées sont 'hard' (constantes), elles font partie de l'algorithme, pas besoin ou utilisation pour changer les valeurs de h0-4.

+0

Mon application exécute SHA-1 sur un exécutable. L'une des exigences de l'application est de permettre aux utilisateurs de définir la graine initiale de l'algorithme SHA-1. Cela permet à l'utilisateur de vérifier l'exécutable. –

+1

Vous pouvez vérifier un hachage sans modifier la graine initiale. Quelle est la motivation pour changer la graine? Ces constantes font partie de l'algorithme SHA-1: http://www.itl.nist.gov/fipspubs/fip180-1.htm Il est à noter que vous ne devriez jamais essayer de modifier les algorithmes de cryptage et de hachage sans vraiment vraiment vraiment sachant ce que vous faites, car vous pouvez effectivement annuler les avantages de sécurité que l'algorithme a fournis. –

1

Je recommande d'utiliser un sel à la place d'une graine pour les fonctions de hachage de la famille MessageDigest. Un sel est appliqué, par exemple, en ajoutant les octets de sel à l'entrée.

L'ajout d'un sel est également plus puissant que la définition directe des valeurs de germe car, en plus de modifier l'état interne du hachage, le sel ne peut pas perturber l'alignement avec dont l'entrée est introduite dans la fonction de hachage.

+0

Malheureusement, les sels ne faisaient pas partie des exigences. L'exigence était spécifiquement de pouvoir changer la valeur de la graine. Merci pour la technique de toute façon. –