betagouv/rdv-service-public

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

Opened this issue · 3 comments

ℹ️ Contexte

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

  • il doivent faire au minimum 12 caractères
  • ils ne doivent pas faire partie des mots de passe français les plus fréquemment utilisés (d'après l'outil Richelieu, qui est recommandé par la CNIL)
  • il n'y a pas de règles sur les caractères spéciaux, les majuscules/minuscules ou les chiffres.

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 :

  • 80 si on n'a pas de mécanismes de restriction des comptes
  • 50 si on en a

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

  • Quelle politique est-ce qu'on choisit ?
  • Quelle interface lors de la création/modification d'un mot de passe pour expliquer les contraintes ?
  • Quelle interface côté agent pour un mot de passe historique trop faible ?
  • Quelle interface côté usager pour un mot de passe historique trop faible ?
  • Est-ce qu'on surveille le taux de mots de passe non conformes ?

pour les travaux précédents sur ce sujet, voir #3624

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.

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