Comment utiliser AES_ENCRYPT correctement?
Je suis en train d'utiliser le chiffrement AES (AES_ENCRYPT dans MySQL) pour les mots de passe, mais je suis venu avec un tas de problèmes différents.
C'est la requête SQL que j'utilise pour enregistrer un nouvel utilisateur dans la base de données:
INSERT INTO user VALUES (
'15',
'John',
'Doe',
'123 Fake St.',
AES_ENCRYPT('mypassword', 'mysalt'),
'mysalt'
)
Où le sel est une chaîne de caractères aléatoires dans un cas réel.
Il fonctionne très bien. Je veux dire, je suis en mesure de récupérer le mot de passe original. Dans cet exemple, AES_DECRYPT(user.password, 'mysalt') WHERE user.id = 15
récupère mypassword
. Mais j'ai peut-être oublié certaines choses.
- Est-il sécuritaire pour enregistrer le sel avec le mot de passe? Hormis la sécurité par l'obscurité chose.
- Quel est le meilleur format pour stocker le mot de passe haché? Je suis en utilisant
VARBINARY mais la chaîne stockée ressemble8�p�����_�Z�\
. - Et enfin, combien de temps doit le mot de passe et durée de la
le sel?
Grâce
Vous ne voulez pas crypter les mots de passe, vous voulez de hachage cryptographique avec une coûteuse de l'algorithme de comme PBKDF2, bcrypt, ou de scrypt — security.stackexchange.com/a/6415/27154
J'ai posé cette question il y a longtemps. Aujourd'hui, j'utilise PHPass, qui utilise bcrypt si je me souviens bien.
J'ai posé cette question il y a longtemps. Aujourd'hui, j'utilise PHPass, qui utilise bcrypt si je me souviens bien.
OriginalL'auteur federico-t | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
Généralement, il n'y a pas de réel besoin pour inverser crypter un mot de passe. Avoir la capacité inhérente diminue la sécurité du système. Au lieu de cela, utilisez un irréversible de la fonction de hachage. Je suggère SHA-256 (ou plus) qui crée une chaîne de caractères résultat:
J'ai aussi frustrés en vrac "rainbow tables" de toute utilisation par roulement dans les autres données toujours connu lors de la validation du mot de passe le temps.
SHA2
nécessite MySQL 5.5 ou une version ultérieure. Si vous utilisez une version antérieure,SHA1()
est presque aussi bon, et généralement beaucoup mieux queMD5
,AES
, etc.Si vous utilisez un sel, il doit y avoir un moyen de savoir ce que c'est à la vérification du mot de passe le temps. Le stockage c'est une manière assez facile. Aussi, si vous utilisez ma suggestion d'inclure
username
etid
, un sel est beaucoup moins important. Sans, un unique sel de la valeur par l'utilisateur est fortement recommandé. Sinon, un seul arc-en-ciel de ce tableau peut être utilisé pour tous les utilisateurs.OriginalL'auteur wallyk
Veuillez envisager d'utiliser un hachage de mot de passe au lieu d'un hachage cryptographique. Les objectifs sont différents. Voir https://security.stackexchange.com/a/6415/25424 pour plus d'info. Mot de passe cadres, comme ce sont mentionnés sur https://stackoverflow.com/a/6337021/516813 prendre soin de beaucoup de détails pour vous comme le salage.
OriginalL'auteur chacham15
Vous ne devriez pas simplement crypter le mot de passe dans la base de données, mais de stocker une présentation du mot de passe dans la base de données.
Voir cette question pour la longue explication.
OriginalL'auteur Kimvais