betagouv / rdv-service-public

Prise de RDV pour les services publics
https://rdv.anct.gouv.fr
GNU Affero General Public License v3.0
17 stars 2 forks source link

[RGPD & Sécurité] Mise à jour de la politique de mots de passe #4229

Open victormours opened 5 months ago

victormours commented 5 months ago

ℹ️ Contexte

Nous avons actuellement des contraintes assez simples sur les mots de passe :

Ces contraintes déterminent l'entropie du mot de passe, qu'on peut considérer comme un score de sécurité du mot de passe (plus l'entropie est élevée, plus le mot de passe est difficile à deviner).

La CNIL a publié des recommandations sur les politiques de mots de passe, qui fixent les seuils minimum d'entropie minimum suivants :

Mécanismes de restriction des comptes

Par mécanisme de de restriction des comptes, la CNIL entend tous les mécanismes qui font qu'on limite le nombre d'essais sur un mot de passe. Ils citent ces exemples : Temporisation d'accès au compte après plusieurs échecs ; Nombre maximal de tentatives autorisées dans un délai donné ; "Captcha" ;Blocage du compte après 10 échecs assorti d'un mécanisme de déblocage choisi en fonction des risques d'usurpation d'identité et d'attaque ciblé par déni de service.

Tous les mécanismes de ce genre ont le même problème : ils facilitent les attaques de déni de service. Par exemple si on met une limite à 10 tentatives en 24h, et qu'après on bloque le compte, n'importe quel attaquant qui connait l'adresse mail d'un utilisateur peut faire 10 tentatives avec des mauvais mots de passe, et bloquer le compte de l'utilisateur.

La recommandation de Charles Capelli était de ne pas en mettre en place, je pense qu'il a raison.

❓ Définition du problème

Politique de mots de passe trop faible

D'après l'outil de vérification de politique de mots de passe de la CNIL, notre entropie est à 39, ce qui est insuffisant.

L'article de la CNIL donne plusieurs politiques qui répondent à la contrainte d'une entropie de 80 :

Exemple 1 : les mots de passe doivent être composés d'au minimum 12 caractères comprenant des majuscules, des minuscules, des chiffres et des caractères spéciaux à choisir dans une liste d'au moins 37 caractères spéciaux possibles.

Exemple 2 : les mots de passe doivent être composés d'au minimum 14 caractères comprenant des majuscules, des minuscules et des chiffres, sans caractère spécial obligatoire.

Exemple 3 : une phrase de passe doit être utilisée et elle doit être composée d’au minimum 7 mots.

C'est pas toujours exactement cohérent avec l'outil de vérification de politique de mots de passe de la CNIL (il indique 71 pour le premier exemple), mais je pense que c'est raisonnable de se base là dessus (c'est aussi ce qu'on trouve la la délibération officielle dont l'article est tiré).

Mise à jour des mots de passe historiques trop faibles

Les mots de passe n'étant pas stockés en clair, on ne peut pas déterminer quels sont les mots de passe existants qui ne respectent pas les nouvelles contraintes. On est donc obligés de faire la vérification au moment de la connexion, et de demander à mettre à jour le mot de passe à ce moment si c'est nécessaire.

💡 Solution envisagée

Découper en deux parties : mise à jour des contraintes, puis mise à jour des mots de passe (qu'on pourra aussi découper en plusieurs parties)

Questions en suspend

victormours commented 5 months ago

pour les travaux précédents sur ce sujet, voir https://github.com/betagouv/rdv-service-public/issues/3624

victormours commented 5 months ago

Vu avec Mehdi et Téo : on prend la politique suivante :

exemple 1 les mots de passe doivent être composés d'au minimum 12 caractères comprenant des majuscules, des minuscules, des chiffres et des caractères spéciaux à choisir dans une liste d'au moins 37 caractères spéciaux possibles.

On en profite pour essayer de passer au dsfr pour les pages de créations de compte et de connexion : c'est assez découplé du reste.

victormours commented 5 months ago

Le dsfr donne un bon exemple de composants de création de mot de passe : https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/mot-de-passe