web-dev-qa-db-fra.com

Le "vrai sel" est-il le même que les "vecteurs d'initialisation"?

Dans la question sur sel réel contre faux , les réponses décrivent comment le sel réel "perturbe l'algorithme de chiffrement". Je sais à peu près comment fonctionnent les vecteurs d'initialisation; est-ce le même concept, ou quelque chose de complètement différent?

38
Bryan Agee

Un sel et un vecteur d'initialisation sont principalement la même chose dans ce qui suit sens: ce sont des données publiques, qui doivent être générées à nouveau pour chaque instance (chaque mot de passe haché, chaque message crypté). Un sel, c'est pouvoir utiliser plusieurs fois le même mot de passe sans ouvrir de failles; ou, si vous préférez, empêcher un attaquant de partager les coûts d'attaque par mot de passe au cas où le même mot de passe aurait pu être utilisé sur plusieurs instances - c'est tout ce que tables précalculées (Rainbow) sont à propos. Le but d'un IV dans, disons, le cryptage symétrique avec CBC, est de tolérer l'utilisation de la même clé pour crypter plusieurs messages distincts.

Le nom "vecteur d'initialisation" fait allusion à un processus répétitif sur un état interne donné, le IV étant ce à quoi l'état est initialisé. Par exemple, la fonction de hachage MD5 est définie comme l'action répétée d'une fonction de compression qui prend en entrée l'état actuel (128 bits) et le bloc de messages suivant (512 bits), et sort la prochaine valeur d'état; au début, l'état est initialisé à une valeur conventionnelle qui s'appelle "IV". En ce sens, la plupart des "sels" utilisés dans le traitement des mots de passe ne sont pas des "vecteurs d'initialisation". Mais c'est un peu une surinterprétation de l'expression.

Pourtant, nommer les choses est surtout une question de tradition. Un "sel" est une sorte de IV qui:

  • participe au traitement d'un mot de passe;
  • doit être distinct pour chaque instance de traitement (il ne peut pas s'agir d'une valeur conventionnelle fixe);
  • n'a besoin que d'unicité ("ce n'est pas répété"), pas de sélection uniforme parmi l'espace des sels possibles (bien que la sélection aléatoire uniforme soit une bonne façon et pas cher pour obtenir l'unicité avec une probabilité écrasante, en supposant que les sels sont assez longs).

Les détails (comment le sel/IV est exactement inséré et à quel moment dans l'algorithme) sont un hareng rouge.

46
Thomas Pornin

La réponse ci-dessus est correcte lorsque "sel" est discuté dans le contexte des mots de passe. Cependant, le terme "sel" est également utilisé pour d'autres utilisations de valeurs aléatoires mais non secrètes.

Pour un traitement très rigoureux du sel, relatif aux extracteurs aléatoires, lisez Extraction cryptographique et dérivation de clés: le schéma HKDF . Il existe une théorie sur la raison pour laquelle l'utilisation du sel est obligatoire pour obtenir des extracteurs génériques de caractère aléatoire - bien que cela ne soit pas très pertinent dans le cas des mots de passe.

3
Nakedible