On réfléchit à notre fonctionnalité d'import/export et au futur avec le multi-utilisateurs. Si la sécurité c'est votre truc, on a besoin de vous !
@kmk Oui, c'est pour chiffrer, on utilise ce sel pour générer la clé de chiffrement : https://framagit.org/kresusapp/kresus/-/blob/master/server/controllers/all.ts#L178-191
@bnjbvr Pouquoi ne pas simplement utiliser une fonction de dérivation de clé « normale » comme PBKDF2 par exemple ?
Ah ben c'est justement ce qui est fait 🙂
Du coups reste la question : pourquoi ne pas mettre le sel en clair en préfixe du message chiffré ?
@bnjbvr Et d'ailleurs… Le sel devrait être tiré au hazard À CHAQUE utilisation de PBKDF pas une unique fois.
@kmk c'était une contribution externe, j'en ai aucune idée :D
Donc le sel doit être unique, mais ensuite on peut l'inclure dans le message, sans avoir besoin de le cacher ?
@bnjbvr Oui.
@nicofrand
1, De manière générale il est recommandé d'utiliser les outils cryptographiques selon leurs recommandations,
2, PBKDF2 nécessite un sel, donc il faut en fournir un,
3, PBKDF2 dit que le sel permet de produire beaucoups de clés à partir d'un mot de passe,
4, si on utilise toujours le même sel alors un attaquant peut pré-calculer des clés et par la suite les essayer exhaustivement et rapidement sur des textes secrets,
@nicofrand Non, il ne peut pas la PRÉ-calculer. Il est obligé d'avoir le texte secret pour calculer les clés
@bnjbvr
@nicofrand C'est pas grave. Le point le plus important est le point 1 : utiliser les outils cryptographiques selon leurs recommandations. B-)
@bnjbvr
@nicofrand Mais pour comprendre l'utilité du sel, il faut penser à un attaquant qui va vouloir déchiffrer des milliers de textes chiffrés avec des mots de passe potentiellement différents. Plusieurs documents et plusieurs victimes.
@bnjbvr
@nicofrand
Peu probable… De se faire attaquer, d'avoir plusieurs documents chiffrés ou d'avoir plusieurs utilisateurs ?
@nicofrand
Euh… Par définition un mot de passe ne doit PAS être commun. Et toujours par définition un sel est connu (par opposition à secret).
@bnjbvr
@nicofrand @kmk @bnjbvr Un sel permet justement d'assurer que 2 fois le même mot de passe seront chiffrés (hashés) différemment. Parce que toute la crypto est déterministe: même entrée => même sortie. Le sel permet d'introduire des variations. Une bonne définition lue un jour: la cryptographie nécessite des mathématiques solides et de l'aléatoire pour nous sauver.
@nicofrand @kmk @bnjbvr Si dans le contexte de JSON, il y a aussi des standards pour le chiffrement. Ca ne signifie pas qu'on ne peut pas faire autrement évidemment mais ca reste des bonnes lectures de départ. C'est le système JOSE. Cf RFC 7516 et 7520 notamment.
@pmevzek et t'as pas un TLDR plutôt ? :p Tout le monde peut pas devenir expert, on cherche de l'aide, on voudrait des solutions simples et concrètes, pas deux RFC et une aura de mystère :p
@bnjbvr Ah ok, non alors, sorry, TL;DR et crypto dans la même phrase, je passe. La "bonne" alternative alors est d'utiliser la bonne bibliothèque qui fait tout bien avec les bonnes valeurs par défaut pour empêcher les développeurs pressés de faire de mauvais choix. Mais choisir la bonne bibliothèque n'est pas TL;DR non plus, il faut soit comprendre ce qui se passe en dessous soit avoir 100% confiance dans la recommendation d'un tiers. Désolé d'être intervenu alors, bonne chance dans la suite.
@bnjbvr Il doit surtout être (cryptographiquement) aléatoire
@bnjbvr Le nombre d'itérations (100000) me semble démesurément grand. Il me semble que les valeurs recommandées sont plutôt de l'ordre du millier.
@kresus vivement le multi utilisateurs !
@kresus la piste 2 est pas mal mais on pourrais simplifier. On génére un sel différent pour chaque user, on peut l'utiliser pour l'algo d'identification (si user exist alors hash = crypt(user+pass+sel)) un truc du genre. Et lors d'un export/import le sel est import/export aussi. Ça évite que l'user ne connaisse 2 mot de passe et on garde le sel. Je ne connais pas kresus (je vais peut être essayer) et peut être que ça posera un problème d'algo... Ou pas... Just an idea
@kresus Est-ce que la raison pour laquelle Kresus utilise ce sel est documenté quelquepart ?
Dans les usages traditionnels du sel, le sel est *inclus* avec le texte haché ( https://en.wikipedia.org/wiki/Salt_(cryptography) ) et le nonce avec le texte chiffré (https://en.wikipedia.org/wiki/Cryptographic_nonce )