Follow

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 !

community.kresus.org/t/exports

@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é ( en.wikipedia.org/wiki/Salt_(cr ) et le nonce avec le texte chiffré (en.wikipedia.org/wiki/Cryptogr )

@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 ?

@kmk @bnjbvr Dans le contexte d'un export de données (JSON mais peu importe) et non d'un mot de passe, on peut s'attendre à ce que chaque export soit différent, donc qu'on ne puisse pas trop utiliser de rainbow table ou truc du style dessus ? Dans ce cas quel est l'intérêt du sel ?

@kmk @bnjbvr

Actuellement on a un JSON comme ça : `{encrypted: true, data: "encryptedjson"}`. On pourrait donc imaginer ajouter une propriété `salt` (qui nous faciliterait la vie pour déchiffrer à l'import) : `{encrypted: true, salt: 'randomthingygeneratedonexport', data: "encryptedjson"}`?

@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,

@bnjbvr

@kmk @bnjbvr

Merci pour cette réponse ! Mais pour le point 4, si le sel est fourni avec le texte secret, un attaquant peut toujours pré-calculer des clés ? Donc ça réduit l'intérêt ?

@nicofrand Non, il ne peut pas la PRÉ-calculer. Il est obligé d'avoir le texte secret pour calculer les clés
@bnjbvr

@kmk @bnjbvr Je ne vois pas la différence entre avoir toujours le même sel (= le connaître) et avoir le sel à disposition en clair :/…

@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

@kmk @bnjbvr Oui, ce qui est un cas relativement peu probable dans notre configuration.

Merci !

@nicofrand
Peu probable… De se faire attaquer, d'avoir plusieurs documents chiffrés  ou d'avoir plusieurs utilisateurs ?

@bnjbvr

@kmk @bnjbvr D'avoir des milliers de documents chiffrés, a priori. J'imaginais donc + probable une attaque sur un seul fichier. Et si on ignore le sel, même avec un mot de passe commun, ça me paraissait + sûr qu'avec un sel connu ?

@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

@kmk
Je suis bien d'accord pour les mots de passe mais les utilisateurs font un peu ce qu'ils veulent, à leurs dépens.

OK pour le sel, merci.
@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.

@pmevzek
@kmk @bnjbvr

Oui mais on parle ici de fichiers qui ont peu de chances d'être identiques d'un utilisateur à un autre. Et actuellement le sel n'est connu que de l'admin de l'instance.

Show newer
Show newer

@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 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

Sign in to participate in the conversation
TUTUT DELIRE PARTY

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!