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 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 Je ne connais pas le cas en particulier, je rebondissais juste sur l'assertion apparemment comme quoi les utilisateurs pouvaient utiliser les mêmes mots de passe. C'est justement pour ca que chaque mot de passe doit être stocké après application d'un algorithme (ex: PBKDF2) qui accepte en entrée une partie variable et "aléatoire" ( le sel).
@nicofrand Ne pas oublier le point numéro 1 : utiliser les mécanismes cryptographiques selon leur préconisations. Ça fait que, même si on ne comprend pas pourquoi il faut le faire, on reste à l'abris.
Mais effectivement, vous pouvez faire comme vous voulez, et ne pas suivre les recommandations. Mais du coups la sécurité s'en trouvera affaiblie.
@pmevzek @bnjbvr
@kmk
Non mais je vois pas en quoi le fait que le sel soit privé diminuerait la sécurité du même système (hormis pour plusieurs utilisateurs/ instance).
Par contre dans notre cas précis (attaque ciblant un fichier/utilisateur en particulier), le fait que ce soit publique me semble + préjudiciable.
Bref on tourne en rond, je vais m'arrêter là et on verra selon les propositions éventuelles sur le forum.
@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.
@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é ?