Excuse-moi pour cette question qui va bien au-delà du cours, j'en ai conscience.
Toutefois, pour ceux qui se poseraient la question comme moi.
J'ai trouvé toutes mes réponses sur :
- https://fr.wikipedia.org/wiki/Salage_(cryptographie)
En fait le sel n'a pas besoin d'être plus secret que le hash du mot de passe lui-même. Il est donc stocké à côté, sur la même ligne dans la BDD sous la forme :
identifiant | hachage(mot de passe + salage) | salage
bcryptjs fait du salage dynamique, donc un nouveau salage est généré pour chaque mdp et stocké sur la même ligne. L'objectif du salage est en fait de rendre plus difficile et longue les attaques fréquentielles. Typiquement les attaques utilisant les tables arc-en-ciel (rainbow tables). Car du coup les rainbow tables doivent être regénérées avec le sel pour chaque ligne de la bdd... .
Je connaissais bien le principe du salage, mais en fait j'avais mal compris le réel gain apporté par cela. Donc ma question initiale est résolue.