2010-03-03 7 views
0

Je voudrais juste vos commentaires sur quelque chose.question de génération de sel et hash

Fondamentalement, j'ai une valeur appelée $ uniqueID qui est = ID + Première lettre du prénom + Première lettre du nom + la chaîne « CAN »

je puis transformé $ uniqueID en une valeur de sel comme suit $ salt = sha1 ($ uniqueID);

J'ai ensuite transformé le mot de passe de l'utilisateur en une valeur de hachage en utilisant md5().

J'ai ensuite stocké ces deux valeurs seperatley dans une base de données en utilisant les types de données corrects. Je me demandais simplement si ce serait un moyen sûr de sécuriser deux types de validation de l'utilisateur? La validation du mot de passe serait faite par l'utilisateur et le $ uniqueID serait fait via un script. Je n'offrirai pas de service pour vous rappeler votre mot de passe, vous devrez en créer un nouveau.

J'ai également implémé quelques secuirty pour les sessions.

+1

Un sel ne doit pas être utilisé comme ID et vice versa. – Gumbo

+0

est-ce que je devrais changer l'identification à la date enregistrée? –

+0

Le sel devrait être aléatoire. – Matchu

Répondre

1

En général, un sel est une valeur aléatoire unique pour chaque donnée pour laquelle il est utilisé. Cela signifie que chaque utilisateur doit avoir son propre sel aléatoire et unique qui est utilisé lors du hachage de son mot de passe. Et n'utilisez aucune information utilisateur pour générer un sel.

Vous pouvez, par exemple, utiliser rand et uniqid pour générer un sel aléatoire et unique pour chaque utilisateur:

$salt = uniqid(rand(), true); 

Ce sel serait à la fois unique et aléatoire.

+0

Non, juste pseudo-aléatoire avec une faible entropie. – Tower

0

Je vous recommande d'utiliser sha1 sur le champ $uniqueID et le mot de passe.

Assurez-vous également de sel votre champ de mot de passe.

En outre, il est à noter que les hachages à sens unique peuvent arriver à la même valeur à partir de différentes entrées. Comme le souligne Gumbo, si vous envisagez d'utiliser $uniqueID comme identifiant unique, vous rencontrerez des problèmes. (Donc ne le faites pas ;-)

Si vous voulez utiliser uniqueID comme clé de session, alors vous voudrez au moins vérifier la collision avant de l'utiliser. Voir Zend.Session, CodeIgniter->session et Kohona::Session

+0

comment devrais-je sel le champ de mot de passe? –

+0

De la même manière que vous salez le champ 'ID' ... un salt est une entrée supplémentaire qui est ajoutée à la chaîne d'entrée avant qu'elle ne soit hachée. (Il peut être réparé, généré ou les deux). Donc vous pouvez utiliser 'sha1 (" myS4lt ". $ Mot de passe." In3cr4ckEr! ")' J'utiliserais simplement un salt fixe, car vous invalideriez les mots de passe si vous autorisiez les utilisateurs à changer leurs noms et salés avec des initiales. –

+0

Alors serais-je, mieux utiliser juste sha1 pour le mot de passe et en laissant $ uniqueID comme une chaîne normale? Je considère mettre plus de sécurité dans les sessions pour valider si un utilisateur est le vrai utilisateur? –