Guides pratiques

Mots de passe dans une application Rails : appliquer la recommandation de la CNIL

Guides pratiques · · Publié le 2026-11-10

Un petit cadenas vert à combinaison de trois chiffres, fermé sur un câble d'acier posé sur une natte tressée grise
Trois molettes de dix chiffres : mille combinaisons, très loin des 80 bits d'entropie demandés. Photo : Fumikas Sagisavas, Wikimedia Commons, CC0.

En France, la politique de mots de passe d'un service en ligne a une référence : la recommandation de la CNIL adoptée en 2022. Elle ne fixe pas un nombre de caractères unique, mais un niveau de robustesse qui dépend des protections mises en place autour du formulaire de connexion. Voici comment la traduire dans une application Rails, avec Devise ou avec l'authentification générée par Rails 8.

Ce que dit la recommandation

La délibération n° 2022-100 du 21 juillet 2022 a remplacé la recommandation de 2017. La CNIL en présente l'essentiel sur sa page « Mots de passe : recommandations pour maîtriser sa sécurité ». Trois idées concernent directement le code d'une application.

Raisonner en entropie, pas en longueur. La CNIL mesure la robustesse d'une politique de mots de passe en bits d'entropie, c'est-à-dire en quantité de hasard. Pour un mot de passe utilisé seul, sans autre protection, elle fixe un minimum de 80 bits et donne trois exemples équivalents : au moins 12 caractères mêlant majuscules, minuscules, chiffres et caractères spéciaux choisis dans une liste d'au moins 37 ; au moins 14 caractères mêlant majuscules, minuscules et chiffres, sans caractère spécial obligatoire ; ou une phrase de passe d'au moins 7 mots.

Trois cas d'usage. Le tableau de la CNIL distingue le mot de passe seul (exemples : forum, blog), qui exige 80 bits ; le mot de passe accompagné d'un mécanisme de restriction d'accès au compte (exemples : site de commerce en ligne, compte d'entreprise, messagerie), qui en exige 50 ; et le mot de passe associé à un matériel détenu par la personne, comme une carte bancaire ou un téléphone, pour lequel 13 bits suffisent, avec blocage au bout de 3 tentatives échouées. Pour le cas intermédiaire, la CNIL cite comme mécanismes possibles une temporisation après plusieurs échecs, un nombre maximal de tentatives dans un délai donné, un « captcha », ou le blocage du compte après 10 échecs avec un mécanisme de déblocage adapté.

Ne jamais stocker en clair. Le mot de passe doit être transformé par une fonction cryptographique non réversible et sûre, avec un sel ou une clé ; la CNIL mentionne scrypt et Argon2, cités par l'ANSSI. Enfin, le renouvellement périodique obligatoire est abandonné pour les comptes ordinaires et ne reste requis que pour les comptes à privilèges, de type administrateur.

Choisir son cas avant d'écrire une validation

La plupart des applications Rails relèvent du deuxième cas : un compte personnel, protégé par une limitation des tentatives. C'est le plus confortable pour les utilisateurs, à condition que la limitation existe vraiment et qu'elle soit documentée. À titre d'ordre de grandeur, et selon la formule habituelle (longueur multipliée par le logarithme en base 2 de la taille de l'alphabet), 8 caractères pris parmi les 99 symboles de l'exemple à 12 caractères donnent environ 53 bits ; c'est notre calcul, pas un exemple de la CNIL, qui propose sur son site un outil pour vérifier une politique. Une application sans aucune limitation tombe dans le premier cas et doit viser les 80 bits.

Un piège classique : imposer des règles de composition (« au moins un chiffre et un symbole ») sans longueur suffisante. La CNIL rappelle que toute règle de construction réduit l'espace des choix possibles, et que les mots du dictionnaire légèrement déformés sont les premiers testés par les attaquants. Une longueur minimale élevée et l'acceptation des phrases de passe sont généralement plus efficaces que des contraintes de composition.

Avec Devise

Devise reste la gem d'authentification la plus répandue ; c'est aussi celle que l'on retrouve le plus dans les applications Rails du secteur public. Son fichier d'initialisation généré, config/initializers/devise.rb, contient les réglages à revoir. Les valeurs ci-dessous ont été vérifiées dans le modèle du générateur de Devise (version 5.0.4 sur RubyGems.org le 10 novembre 2026).

# config/initializers/devise.rb
config.password_length = 12..128
config.lock_strategy = :failed_attempts
config.unlock_strategy = :both
config.maximum_attempts = 10
config.unlock_in = 1.hour
config.paranoid = true

La validation de longueur de Devise ne contrôle pas la diversité des caractères. Si vous choisissez l'exemple à 12 caractères, ajoutez une validation sur le modèle ou une gem dédiée, et testez-la.

Avec l'authentification générée par Rails 8

Depuis Rails 8, bin/rails generate authentication crée un modèle User, des sessions et la réinitialisation du mot de passe. Nous avons relu les modèles de la version 8.1.4.1, la plus récente le 10 novembre 2026.

Comptes administrateurs et journaux

Pour les comptes à privilèges, la CNIL maintient le renouvellement et considère qu'une authentification plus robuste qu'un simple mot de passe sera souvent nécessaire. Dans une application Rails, cela veut dire au minimum un second facteur pour l'interface d'administration ; notre guide des gems d'authentification (en anglais) compare les options.

Enfin, un mot de passe ne doit jamais apparaître dans les journaux. Le fichier config/initializers/filter_parameter_logging.rb généré par Rails 8.1 filtre déjà les paramètres contenant passw, token, secret ou email ; vérifiez qu'il n'a pas été vidé et qu'aucun outil tiers (suivi d'erreurs, journalisation des requêtes) ne recopie les paramètres bruts. La question de la durée de conservation de ces journaux est traitée dans notre article sur le RGPD, la suppression douce et l'historique des versions.

En résumé

Article mis à jour le 10 novembre 2026. Il présente des réglages techniques et ne remplace pas l'analyse de conformité que le responsable de traitement doit mener pour son service.