\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. sept. 15 13:24:25 CEST 2014}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={draft-behera-ldap-password-policy-10},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Stratégie de mot de passe pour les annuaires LDAP},
CreationDate={D:20140915132425},
ModDate={D:20140915132425},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge draft-behera-ldap-password-policy-10 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Stratégie de mot de passe pour les annuaires LDAP}
 
\vspace{10mm}
 
\hspace{1mm}  La stratégie de mot de passe comme décrit dans ce document est un jeu de règles qui contrôle comment les mots de passes sont utilisés et administrés dans les annuaires basés sur LDAP. Pour améliorer la sécurité les annuaires LDAP et rendre la tâche des programmes de cracking de mot de passe plus difficile. Cet règles sont faites pour s'assurer que les utilisateurs changent leur mot de passe périodiquement, et que ces mots de passe soient soumis à des obligations, et une restriction sur la réutilisation des anciens mots de passe.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Application des stratégies de mot de passe }
 
\
 
\hspace{1mm}  La stratégie de mot de passe définie dans ce document peut être appliquée à tout attribut maintenant un mot de passe utilisateur utilisé pour les opérations de bind LDAP. Dans ce document, le terme utilisateur représente toute application LDAP cliente qui a une identité dans l'annuaire.
\vspace{5mm} \\
 
 
\hspace{1mm}  Cette stratégie est typiquement appliquée à l'attribut userPassword dans le cas de la méthode d'authentification simple bind ou dans le cas d'un mot de passe basé sur une authentification SASL tel que CRAM-MD5 et DIGEST-MD5.
\vspace{5mm} \\
 
 
\hspace{1mm}  La stratégie décrite dans ce document assume que l'attribut du mot de passe maintient une simple valeur. Aucune considération n'est faite pour les annuaires ou systèmes qui permettent à un utilisateur de maintenir des attributs de mot de passe multi-valués.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les implémentations de serveur peuvent inclure une stratégie interne où certaines identités (tels que les administrateurs d'annuaire) ne soient pas soumis à une stratégie de mot de passe. Dans ce cas, le mot de passe pour un administrateur d'annuaire n'expire jamais; le compte n'est jamais bloqué, etc.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Stratégie d'utilisation de mot de passe }
 
\
 
\hspace{1mm}  Cette section décris la stratégie utilisée quand un mot de passe est utilisée. L'objectif général de cette stratégie est de réduire au minimum la menace d'intrus une fois un mot de passe utilisé.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Stratégie de validité de mot de passe }
 
\
 
\hspace{1mm}  Ces mécanismes permettent de contrôler l'utilisation de compte indépendemment de toute stratégie d'expiration de mot de passe. La stratégie définis la période de temps absolue pour lequel un compte peut être utilisé. Cela permet à un administrateur de définir une date de début après laquelle un mot de passe devient valide, et une date de fin après laquelle le mot de passe est désactivé. Un mécanisme est également fournis pour définir la période de temps pour laquelle un compte peut rester non-utilisé avant d'être désactivé.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Limiter les mots de passe devinés }
 
\
 
\hspace{1mm}  Pour empêcher un intrus de deviner le mot de passe d'un utilisateur, un mécanisme existe pour traquer le nombre de tentative d'authentification échouées, et agir lorsque la limite est atteinte. Cette stratégie consiste de nombreuses parties:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Un compteur pour suivre le nombre de tentative d'authentification échouées.}
\item[\hspace{6mm} -]{La quantité de temps à attendre dans la première authentification échouée.}
\item[\hspace{6mm} -]{La quantité maximum de temps à attendre pour les échecs suivants}
\item[\hspace{6mm} -]{Un timeframe dans lequel la limite de tentative d'authentification échouées doit être atteinte avant qu'une action soit prise.}
\item[\hspace{6mm} -]{Une limite configurable de tentative d'authentification échouées.}
\item[\hspace{6mm} -]{L'action a prendre quand la limite est atteinte. L'action sera soit "rien", ou le compte sera bloqué.}
\item[\hspace{6mm} -]{Une quantité de temps durant lequel le compte est bloqué.}
\end{description}
 
\hspace{1mm}  Noter qu'utiliser la fonctionnalité de blocage de compte est une aide précieuse pour les attaques DOS sur les comptes utilisateurs. Cette fonctionnalité est découragée en faveur d'un délai entre les différentes tentatives. Le délai va doubler à chaque tentative, "x<int>" pour les multiplicateurs constant, "\textasciicircum <int>" pour les géométriques.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Stratégie de modification de mot de passe }
 
\
 
\hspace{1mm}  Cette section décris la stratégie appliquée quand un utilisateur modifie son mot de passe. Le focus général est de s'assurer que lorsqu'un utilisateur ajoute ou change son mot de passe, la sécurité et l'efficacité de ce mot de passe est maximisé. Dans ce document, le terme "opération de modification de mot de passe" réfère à toute opération qui est utilisée pour ajouter ou modifier un attribut de mot de passe. Souvent cela est fait en mettant à jours l'attribut du mot de passe durant une opération d'ajout ou de modification, mais peut être faite par d'autres moyens tels que les opérations étendues.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Expiration, alerte et période de grâce }
 
\
 
\hspace{1mm}  Si un mot de passe est fréquemment changé, les chances que le compte de cet utilisateur soit cassé sont minimisés. Les administrateurs de stratégie de mot de passe peuvent déployer une stratégie de mot de passe qui force les mots de passe à expirer après un temps donné, ce qui force les utilisateurs à changer leur mot de passe périodiquement.
\vspace{5mm} \\
 
 
\hspace{1mm}  Il doit cependant y avoir un moyen par lequel les utilisateurs soient informés de cette nécessité de changer leur mot de passe avant d'être effectivement bloqué. Une ou les deux méthodes suivantes le gère:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Un message d'alerte peut être retourné à l'utilisateur quelques temps avant que son mot de passe n'expire.}
\item[\hspace{6mm} -]{L'utilisateur peut s'authentifier auprès de l'annuaire un certain nombre de fois après que son mot de passe ait expiré.}
\end{description}
 
\vspace{1cm}{\huge Historique de mot de passe }
 
\
 
\hspace{1mm}  Quand la stratégie d'expiration de mot de passe est utilisée, un mécanisme additionnel est utilisé pour empêcher les utilisateurs de ré-utiliser leur précédent mot de passe. Pour cela, un historique les mots de passe est conservé. L'administrateur peut définir le nombre de mots de passe à conserver. Les utilisateurs n'ont pas le droit d'utiliser un mot de passe présent dans cette liste.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Âge minimum de mot de passe }
 
\
 
\hspace{1mm}  Les utilisateurs peuvent outrepasser le mécanisme d'historique de mot de passe en effectuant une série de changement de mot de passe, jusqu'à ce que leur mot de passe favoris soit disponible. Pour empêcher cela, l'âge minimum d'un mot de passe peut être forcés.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Longueur minimum et qualité de mot de passe }
 
\
 
\hspace{1mm}  Pour empêcher les utilisateurs de créer ou mettre à jours les mots de passe qui sont facile à deviner, une stratégie de qualité de mot de passe peut être employée. Cette stratégie consiste de 2 mécanismes généraux - s'assurer que le mot de passe est conforme aux critères de qualité et s'assurer qu'ils ont une longueur minimale. Forcer un mot de passe à être conforme avec une stratégie peut impliquer divers choses, incluant:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Interdire les mots triviaux et bien connus}
\item[\hspace{6mm} -]{Forcer un certain nombre de chiffres à utiliser}
\item[\hspace{6mm} -]{Interdire les anagrammes du nom de l'utilisateur}
\end{description}
 
\hspace{1mm}  L'implémentation de cette stratégie rencontre les problèmes suivants:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Si le mot de passe à ajouter ou mettre à jours est chiffré par le client avant d'être envoyé, le serveur ne peut pas forcer cette stratégie.}
\item[\hspace{6mm} -]{Il n'y a pas de définition spécifique de ce que signifie une vérification de gualité. Cela peut poser problèmes dans des milieux hétérogènes.}
\end{description}
 
\vspace{1cm}{\huge Mots de passes définis par les utilisateurs }
 
\
 
\hspace{1mm}  Dans certains cas, il est désirable d'interdire les utilisateur d'ajouter ou modifier leur propres mots de passe. Cette stratégie rend cela possible.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Changement de mot de passe après réinitialisation }
 
\
 
\hspace{1mm}  Cette stratégie force l'utilisateur à mettre à jours son mot de passe après qu'il ait été définis pour la première fois, ou a été réinitialisé.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Modification sûre }
 
\
 
\hspace{1mm}  Vu que les annuaires sont communément utilisés, il devient fréquent que les clients se connecte à l'annuaire et laissent la connexion ouverte pour une période étendue. Cela permet à un attaquant d'effectuer des modifications sur un mot de passe utilisateur pendant que la machine de l'utilisateur est connectée. Cette stratégie force l'utilisateur à prouver son identité en spécifiant l'ancien mot de passe durant l'opération de modification de mot de passe.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Restriction de la stratégie de mot de passe }
 
\
 
\hspace{1mm}  La stratégie de mot de passe définie dans ce document peut s'appliquer à tout attribut contenant un mot de passe. Les informations d'état de stratégie de mot de passe est maintenu dans l'entrée de l'utilisateur. Un serveur doit donc s'assurer que l'attribut du mot de passe est sujet à la stratégie de mot de passe, qu'il contient une et une seule valeur de mot de passe.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge ObjectClass }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} pwdPolicy]{Contient les attributs définissant une stratégie de mot de passe pour un jeu d'utilisateur.}
\end{description}
 
\vspace{1cm}{\huge Attributs }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} pwdAttribute]{Maintient le nom de l'attribut auquel la stratégie de mot de passe s'applique}
\item[\hspace{1mm} pwdMinAge]{Nombre de secondes entre chaque changement de mot de passe. Si non présent, assume 0}
\item[\hspace{1mm} pwdMaxAge]{Nombre de secondes avant qu'un mot de passe n'expire. Si vide ou 0, le mot de passe n'expire jamais.}
\item[\hspace{1mm} pwdInHistory]{Spécifie le nombre maximum de mot de passes stoqués dans l'attribut pwdHistory}
\item[\hspace{1mm} pwdCheckQuality !!!]{Indique comment la qualité de mot de passe est vérifié lors d'un ajout ou d'une modification. Si non présent ou 0, aucune vérification n'est faite. 1, indique que le serveur vérifie la qualité, et s'il n'est pas capable de le faire, le mot de passe est accepté. 2 vérifie la qualité, et s'il n'est pas capable de le faire, retourne une erreur.}
\item[\hspace{1mm} pwdMinLengh]{Quand la vérification de mot de passe est actif, cet attribut maintient le nombre de caractères minimum à utiliser dans un mot de passe.}
\item[\hspace{1mm} pwdMaxLengh]{Quand la vérification de mot de passe est actif, cet attribut maintient le nombre de caractères maximum à utiliser dans un mot de passe.}
\item[\hspace{1mm} pwdExpireWarning]{Spécifie le nombre maximum de secondes avant qu'un mot de passe soit près d'expirer et qu'un message d'alerte soit retourné à l'utilisateur. La valeur doit être plus petite que la valeur de pwdMaxAge.}
\item[\hspace{1mm} pwdGraceAuthNLimit]{Spécifie le nombre de fois qu'un mot de passe expiré peut être utilisé pour s'authentifier. Si non présent ou à 0, l'authentification échoue.}
\item[\hspace{1mm} pwdGraceExpiry]{Spécifie le nombre de secondes de la validité de la période de grâce.}
\item[\hspace{1mm} pwdLockout]{À TRUE, indique que le mot de passe ne peut plus être utilisé pour s'authentifier après le nombre de tentative spécifié dans pwdMaxFailure.}
\item[\hspace{1mm} pwdLockoutDuration]{Maintient le nombre de secondes que le mot de passe ne peut être utilisé pour s'authentifier due à trop grand nombre d'échec. À 0,le mot de passe ne peut plus être utilisé jusqu'à un reset administratif.}
\item[\hspace{1mm} pwdMaxFailure]{Spécifie le nombre maximum d'authentification consécutives échouées.}
\item[\hspace{1mm} pwdFailureCountInterval]{Maintient le nombre de secondes après lesquel le compteur d'échec est purgé, même quand aucune authentification réussie ne s'est produite. Si non présent ou à 0, ne peut être ré-initialisé qu'avec une authentification réussie.}
\item[\hspace{1mm} pwdMustChange]{À TRUE, les utilisateurs doivent changer leur mot de passe la prochaine fois qu'ils s'authentifie.}
\item[\hspace{1mm} pwdAllowUserChange]{Indique si les utilisateurs peuvent changer leur propre mot de passe, bien que cette opération reste sujette à contrôle d'accès. Cet attribut est conçus pour être utilisé en l'absence de mécanisme de contrôle d'accès.}
\item[\hspace{1mm} pwdSafeModify]{Spécifie si le mot de passe existant doit être envoyé avec le nouveau lors du changement de mot de passe.}
\item[\hspace{1mm} pwdMinDelay]{Spécifie le nombre de secondes d'attente après la première tentative d'authentification échouée. Si définis, pwdMaxDelay doit l'être également.}
\item[\hspace{1mm} pwdMaxDelay]{Délai maximum après une authentification échouée. Ce temp est spécifié en pwdMinDelay utilisé comme point de départ et est doublé à chaque tentative jusqu'à atteindre pwdMaxDelay.}
\item[\hspace{1mm} pwdMaxIdle]{Nombre de secondes qu'un compte peut rester non-utilisé avant d'être bloqué.}
\end{description}
 
\hspace{1mm}  Les informations d'état de stratégie de mot de passe peuvent être maintenus pour chaque utilisateur. Ces informations sont localisées dans chaque entrée de l'utilisateur comme jeu d'attributs opérationnels. Ces attributs opérationnels sont: décris ci-dessous.
\vspace{5mm} \\
 
 
\hspace{1mm}  Vu que les stratégies de mot de passe peuvent s'appliquer à de nombreux attributs utilisés pour stocker les mots de passe, chaque attribut opérationnel doit avoir une option pour spécifier à quel pwdAttribute il s'applique. L'option est définie comme suit:
\vspace{5mm} \\
\hspace{1mm}  \textbf{pwd-<passwordAttribute}
\vspace{5mm} \\
\hspace{1mm}  où passwordAttribute est le nom court de l'attribut
\vspace{5mm} \\
\hspace{1mm}  \textbf{pwdChangedTime;pwd-userPassword: 20000103121520Z}
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Attributs Opérationnels }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} pwdChangedTime]{Spécifie la date du dernier changement de mot de passe. Utilisé par la stratégie d'expiration du mot de passe. Si non présent, le mot de passe n'expire jamais.}
\item[\hspace{1mm} pwdAccountLockedTime]{Maintient la date à laquelle le compte utilisateur a été bloqué. Une valeur 000001010000Z signifie que le compte a été bloqué de manière permanente, et que seul un reset administratif peut débloquer le compte.}
\item[\hspace{1mm} pwdFailureTime]{Maintient les date des derniers échec d'authentification.}
\item[\hspace{1mm} pwdHistory]{Maintient l'historique des précédents mots de passe. Les valeurs de cet attribut sont au format (ABNF):}
\end{description}
 
{\ttfamily
pwdHistory = time "\#" syntaxOID "\#" length "\#" data\\ time = GeneralizedTime\\ syntaxOID = numericoid ; the string representation of the\\ \hspace{2mm}\hspace{2mm}; dotted-decimal OID that defines the\\ \hspace{2mm}\hspace{2mm}; syntax used to store the password.\\ length = number ; the number of octets in data.\\ data = <octets representing the password in the format specified by syntaxOID>.\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} pwdGraceUseTime]{Maintient les périodes de grâce après qu'un mot de passe a expiré.}
\item[\hspace{1mm} pwdReset]{Maintient un flag pour indiquer (à TRUE) que le mot de passe a été mis à jours par un administrateur et doit être changé par l'utilisateur.}
\item[\hspace{1mm} pwdPolicySubentry]{Pointe vers une subentry pwdPolicy effectif sur l'objet.}
\item[\hspace{1mm} pwdStartTime]{Spécifie la date à laquelle le mot de passe devient valide pour l'authentification.}
\item[\hspace{1mm} pwdEndTime]{Spécifie la date après laquelle le mot de passe devient invalide pour l'authentification.}
\item[\hspace{1mm} pwdLastSuccess]{Maintient la date de la dernière authentification réussie}
\end{description}
 
\vspace{1cm}{\huge ObjectClass }
 
\
 
{\ttfamily
( 1.3.6.1.4.1.42.2.27.8.2.1\\ \hspace{2mm}NAME 'pwdPolicy'\\ \hspace{2mm}SUP top\\ \hspace{2mm}AUXILIARY\\ \hspace{2mm}MUST ( pwdAttribute )\\ \hspace{2mm}MAY ( pwdMinAge \$ pwdMaxAge \$ pwdInHistory \$ pwdCheckQuality \$\\ \hspace{2mm}pwdMinLength \$ pwdMaxLength \$ pwdExpireWarning \$\\ \hspace{2mm}pwdGraceAuthNLimit \$ pwdGraceExpiry \$ pwdLockout \$\\ \hspace{2mm}pwdLockoutDuration \$ pwdMaxFailure \$ pwdFailureCountInterval \$\\ \hspace{2mm}pwdMustChange \$ pwdAllowUserChange \$ pwdSafeModify \$\\ \hspace{2mm}pwdMinDelay \$ pwdMaxDelay \$ pwdMaxIdle ) )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Attributs }
 
\
 
{\ttfamily
( 1.3.6.1.4.1.42.2.27.8.1.1\\ \hspace{2mm}NAME 'pwdAttribute'\\ \hspace{2mm}EQUALITY objectIdentifierMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.2\\ \hspace{2mm}NAME 'pwdMinAge'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.3\\ \hspace{2mm}NAME 'pwdMaxAge'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.4\\ \hspace{2mm}NAME 'pwdInHistory'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.5\\ \hspace{2mm}NAME 'pwdCheckQuality'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.6\\ \hspace{2mm}NAME 'pwdMinLength'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.31\\ \hspace{2mm}NAME 'pwdMaxLength'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.7\\ \hspace{2mm}NAME 'pwdExpireWarning'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.8\\ \hspace{2mm}NAME 'pwdGraceAuthNLimit'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.30\\ \hspace{2mm}NAME 'pwdGraceExpire'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.9\\ \hspace{2mm}NAME 'pwdLockout'\\ \hspace{2mm}EQUALITY booleanMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.10\\ \hspace{2mm}NAME 'pwdLockoutDuration'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.11\\ \hspace{2mm}NAME 'pwdMaxFailure'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.12\\ \hspace{2mm}NAME 'pwdFailureCountInterval'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.13\\ \hspace{2mm}NAME 'pwdMustChange'\\ \hspace{2mm}EQUALITY booleanMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.14\\ \hspace{2mm}NAME 'pwdAllowUserChange'\\ \hspace{2mm}EQUALITY booleanMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.15\\ \hspace{2mm}NAME 'pwdSafeModify'\\ \hspace{2mm}EQUALITY booleanMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.24\\ \hspace{2mm}NAME 'pwdMinDelay'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.25\\ \hspace{2mm}NAME 'pwdMaxDelay'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.26\\ \hspace{2mm}NAME 'pwdMaxIdle'\\ \hspace{2mm}EQUALITY integerMatch\\ \hspace{2mm}ORDERING integerOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.27\\ \hspace{2mm}SINGLE-VALUE )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Attributs opérationnels }
 
\
 
{\ttfamily
( 1.3.6.1.4.1.42.2.27.8.1.16\\ \hspace{2mm}NAME 'pwdChangedTime'\\ \hspace{2mm}DESC 'The time the password was last changed'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.17\\ \hspace{2mm}NAME 'pwdAccountLockedTime'\\ \hspace{2mm}DESC 'The time an user account was locked'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.19\\ \hspace{2mm}NAME 'pwdFailureTime'\\ \hspace{2mm}DESC 'The timestamps of the last consecutive authentication\\ \hspace{2mm}failures'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.20\\ \hspace{2mm}NAME 'pwdHistory'\\ \hspace{2mm}DESC 'The history of user s passwords'\\ \hspace{2mm}EQUALITY octetStringMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.40\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.21\\ \hspace{2mm}NAME 'pwdGraceUseTime'\\ \hspace{2mm}DESC 'The timestamps of the grace authentication after the\\ \hspace{2mm}password has expired'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.22\\ \hspace{2mm}NAME 'pwdReset'\\ \hspace{2mm}DESC 'The indication that the password has been reset'\\ \hspace{2mm}EQUALITY booleanMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.7\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.23\\ \hspace{2mm}NAME 'pwdPolicySubentry'\\ \hspace{2mm}DESC 'The pwdPolicy subentry in effect for this object'\\ \hspace{2mm}EQUALITY distinguishedNameMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.12\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.27\\ \hspace{2mm}NAME 'pwdStartTime'\\ \hspace{2mm}DESC 'The time the password becomes enabled'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.28\\ \hspace{2mm}NAME 'pwdEndTime'\\ \hspace{2mm}DESC 'The time the password becomes disabled'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\ \hspace{2mm}\\ ( 1.3.6.1.4.1.42.2.27.8.1.29\\ \hspace{2mm}NAME 'pwdLastSuccess'\\ \hspace{2mm}DESC 'The timestamp of the last successful authentication'\\ \hspace{2mm}EQUALITY generalizedTimeMatch\\ \hspace{2mm}ORDERING generalizedTimeOrderingMatch\\ \hspace{2mm}SYNTAX 1.3.6.1.4.1.1466.115.121.1.24\\ \hspace{2mm}SINGLE-VALUE\\ \hspace{2mm}NO-USER-MODIFICATION\\ \hspace{2mm}USAGE directoryOperation )\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Contrôles utilisés pour la stratégie de mot de passe }
 
\
 
\hspace{1mm}  Cette section détaille les contrôles utilisés lors de l'application des stratégies de mot de passe. Un contrôle de request est définie et est envoyé par un client avec une opération request pour déclencher un contrôle de réponse. Cette réponse contient diverses alertes et erreurs associés avec une stratégie de mot de passe.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Request Control }
 
\
 
\hspace{1mm}  Ce contrôle peut être envoyé avec tout message de demande LDAP pour transmettre au serveur est prêt et peut traiter le contrôle de réponse décris dans ce document. Le \textbf{controlType} est \textbf{1.3.6.1.4.1.42.2.27.8.5.1}. Il n'y a pas de \textbf{controlValue}.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Response Control }
 
\
 
\hspace{1mm}  Si le client a envoyé un contrôle \textbf{passwordPolicyRequest}, le serveur envoie ce contrôle avec les opérations de réponses suivantes: \textbf{bindResponse, modifyResponse, addResponse, compareResponse} et \textbf{extendedResponse}, pour informer des divers conditions, et peut l'envoyer avec d'autres opérations (dans le cas de l'erreur \textbf{changeAfterReset}). Le \textbf{controlType} est \textbf{1.3.6.1.4.1.42.2.27.8.5.1} et \textbf{controlValue} est le BER du type:
\vspace{5mm} \\
 
 
{\ttfamily
PasswordPolicyResponseValue ::= SEQUENCE \{\\ \hspace{2mm}warning \texttt{[}0\texttt{]} CHOICE \{\\ \hspace{2mm}\hspace{2mm}timeBeforeExpiration \texttt{[}0\texttt{]} INTEGER (0 .. maxInt),\\ \hspace{2mm}\hspace{2mm}graceAuthNsRemaining \texttt{[}1\texttt{]} INTEGER (0 .. maxInt) \} OPTIONAL,\\ \hspace{2mm}error \texttt{[}1\texttt{]} ENUMERATED \{\\ \hspace{2mm}\hspace{2mm}passwordExpired (0),\\ \hspace{2mm}\hspace{2mm}accountLocked (1),\\ \hspace{2mm}\hspace{2mm}changeAfterReset (2),\\ \hspace{2mm}\hspace{2mm}passwordModNotAllowed (3),\\ \hspace{2mm}\hspace{2mm}mustSupplyOldPassword (4),\\ \hspace{2mm}\hspace{2mm}insufficientPasswordQuality (5),\\ \hspace{2mm}\hspace{2mm}passwordTooShort (6),\\ \hspace{2mm}\hspace{2mm}passwordTooYoung (7),\\ \hspace{2mm}\hspace{2mm}passwordInHistory (8) \} OPTIONAL \}\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} timeBeforeExpiration]{spécifie le nombre de secondes avant qu'un mot de passe n'expire.}
\item[\hspace{1mm} graceAuthNsRemaining]{spécifie le nombre restant de fois qu'un utilisateur sera autorisé à s'authentifier une fois le mot de passe expiré.}
\item[\hspace{1mm} passwordExpired]{signifie que le mot de passe a expiré et qu'il doit être changé.}
\item[\hspace{1mm} passwordModNotAllowed]{est définis quand un utilisateur ne peut pas changer son mot de passe.}
\item[\hspace{1mm} insufficientPasswordQuality]{est définis quand un mot de passe ne passe pas la vérification de la qualité}
\item[\hspace{1mm} passwordTooYoung]{Définis si l'âge du mot de passe à modifier n'est pas suffisamment ancien}
\end{description}
 
\vspace{1cm}{\huge Stratégie de points de décision }
 
\
 
\hspace{1mm}  La suite est une série de procédure utilisées pour effectuer des décisions de stratégie. Ces procédures sont généralement effectués par le serveur durant le traitement d'une opération.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de compte bloqué }
 
\
 
\hspace{1mm}  Un statut TRUE est retourné pour indiquer que le compte est bloqué si une de ces conditions est rencontrée:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{La valeur de pwdAccountLockedTime est 000001010000Z}
\item[\hspace{1mm} -]{L'heure courante est antérieure à pwdStartTime}
\item[\hspace{1mm} -]{L'heure courante est postérieure à pwdEndTime}
\item[\hspace{1mm} -]{L'heure courante est supérieur ou égal à la valeur de pwdLastSuccess ajouté à la valeur de pwdMaxIdle}
\item[\hspace{1mm} -]{L'heure courante est inférieure à la valeur de pwdAccountLockedTime ajouté à la valeur de pwdLockoutDuration}
\end{description}
 
\hspace{1mm}  Sinon un statut FALSE est retourné.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de changement de mot de passe }
 
\
 
\hspace{1mm}  Un statut TRUE est retourné pour indiquer que le mot de passe doit être changé si toutes les conditions suivantes sont rencontrées:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{L'attribut pwdMustChange est à TRUE}
\item[\hspace{1mm} -]{l'attribut pwdReset est à TRUE}
\end{description}
 
\vspace{1cm}{\huge Vérification d'expiration de mot de passe }
 
\
 
\hspace{1mm}  Un statut de TRUE est retourné indiquant que le mot de passe a expiré si l'heure courante moins la valeur de pwdChangedTime est supérieur à la valeur de pwdMaxAge. Sinon, un statut de FALSE est retourné.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de AuthN Grace restant }
 
\
 
\hspace{1mm}  Si l'attribut pwdGraceExpiry est présent, et que la date courante est supérieur au temps d'expiration du mot de passe plus la valeur pwdGraceExpiry, 0 est retourné. Si l'attribut pwdGraceUseTime est présent, le nombre de valeurs dans cet attribut soustrait de la valeur de pwdGraceAuthNLimit est retourné. Un résultat positif spécifie le nombre d'authentifications de grâce restant.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de date avant expiration }
 
\
 
\hspace{1mm}  Si l'attribut pwdExpireWarning n'est pas présent un statut de 0 est retourné. Sinon, soustrait le temp stocké dans pwdChangedTime de l'heure courante pour arriver à l'âge du mot de passe. Si l'âge du mot de passe est supérieur à la valeur de pwdMaxAge, un status 0 est retourné. Soustrait la valeur de pwdExpireWarning de la valeur de pwdMaxAge pour arriver à l'âge d'alerte, la valeur de pwdMaxAge moins l'âge du mot de passe est retourné.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de blocage d'intrus }
 
\
 
\hspace{1mm}  Un statut de TRUE indiquant qu'un intrus a été détecté est retourné si les conditions suivantes sont rencontrées:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{L'attribut pwdLockout est TRUE}
\item[\hspace{1mm} -]{Le nombre de valeurs dans pwdFailureTime qui sont plus récent que pwdFailureCountInterval est supérieur ou égal à pwdMaxFailure.}
\end{description}
 
\hspace{1mm}  Sinon, un statut de FALSE est retourné. Tout en effectuant cette vérification, les valeurs de pwdFailureTime qui sont maintenus par plus d'un pwdFailureCountInterval sont purgés et non comptés.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de délai d'intrusion }
 
\
 
\hspace{1mm}  Si l'attribut pwdMinDelay est 0 ou non définis, 0 est retourné. Sinon, un délai est calculé basé sur le nombre de valeurs dans l'attribut pwdFailureTime. Si la valeur calculée est supérieur à pwdMaxDelay, la valeur pwdMaxDelay est retournée. Tout en effectuant cette vérification, les valeurs de pwdFailureTime qui sont maintenus par plus d'un pwdFailureCountInterval sont purgé et non comptés.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Vérification de mot de passe trop jeune }
 
\
 
\hspace{1mm}  Si la vérification de changement de mot de passe retourne TRUE, cette vérifiction retourne FALSE, pour permettre le changement de mot de passe. Un statut de TRUE indique qu'il ne s'est pas écoulé suffisamment de temps depuis le dernier changement de mot de passe. TRUE est retourné si:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{La valeur de pwdMinAge est non-zéro et pwdChangedTime est présent}
\item[\hspace{1mm} -]{La valeur de pwdMinAge est supérieur à l'heure courante moins la valeur de pwdChangedTime.}
\end{description}
 
\hspace{1mm}  Sinon, un statut de FALSE est retourné.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Points de renforcements de stratégies du serveur }
 
\
 
\hspace{1mm}  Le serveur devrait forcer l'attribut du mot de passe sujet à une stratégie de mot de passe tel que définis dans ce document, contenant une et une seule valeur. Note: Dans le cas où un seul mot de passe est stocké dans plusieurs formats est considéré comme une seule valeur de mot de passe.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les scénarios dans les opérations suivantes assument que le client a attaché un contrôle passwordPolicyRequest à la demande. Dans le cas où passwordPolicyRequest n'a pas été envoyé, aucun contrôle passwordPolicyResponse n'est retourné. Toutes les autres instructions restent les même.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Authentification basé sur un mot de passe }
 
\
 
\hspace{1mm}  Cette section contient les règles de stratégie utilisé pour valider un mot de passe. Les opérations qui valident les mots de passe incluent, entre autre, l'opération Bind et l'opération Compare où l'attribut à comparer contient un mot de passe. Noter que l'opération Compare n'authentifie pas un utilisateur, mais peut être utilisé par une application externe pour authentification.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Echec en cas de compte bloqué }
 
\
 
\hspace{1mm}  Si le compte est bloqué, le serveur échoue l'opération avec le code 49 invalidCredentials dans le cas d'une opération Bind, le code 5 compareFalse dans le cas d'une opération Compare, etc. Le serveur peut définir cette erreur: accountLocked (1) dans le passwordPolicyResponse dans le champ contrôle du message.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Procédures de mot de passe validé }
 
\
 
\hspace{1mm}  Si l'opération de validation indique que le mot de passe est validé, cet procédures sont suivie dans l'ordre:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{Supprime les attributs pwdFailureTime et pwdAccountLockedTime.}
\item[\hspace{1mm} -]{Définis la valeur de pwdLastSuccess à l'heure courante}
\end{description}
 
\vspace{1cm}{\huge Mot de passe à changer }
 
\
 
\hspace{1mm}  Si le mot de passe doit être changé, le serveur envoie au client une réponse avec un resultCode success (0), compareTrue (6), etc. Et inclus le passwordPolicyResponse dans le champ controls du message bindResponse avec l'alerte: changeAfterReset spécifié. Pour un bind, le serveur doit interdir toutes les autres opérations fournies par cet utilisateur excepté la modification du mot de passe, bind, unbind, abandon et StartTLS.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Mot de passe expiré }
 
\
 
\hspace{1mm}  Si le mot de passe a expiré, le serveur retourne soit un succès ou un échec en fonction de l'état des authentification de grâce.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Authentification de grâce restant }
 
\
 
\hspace{1mm}  S'il reste les authentification de grâce, le serveur ajoute une nouvelle valeur avec l'heure courante dans pwdGraceUseTime. Puis il envoie au client une réponse avec un succès, et inclus le passwordPolicyResponse dans la réponse avec l'alerte graceAuthNsRemaining définis au nombre d'authentification restante.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Plus d'authentification de grâce restante }
 
\
 
\hspace{1mm}  S'il ne reste plus d'authentification de grâce, le serveur échoue l'opération, et inclus le passwordPolicyResponse dans controls avec l'erreur passwordExpired.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Alerte d'expiration }
 
\
 
\hspace{1mm}  Si la vérification d'expiration de mot de passe réussie, le serveur envoie au client une réponse avec un resultCode approprié, et inclus le message timeBeforeExpiration.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Procédures d'échec AuthN }
 
\
 
\hspace{1mm}  Si le processus d'authentification indique que le mot de passe échoue la validation du à des accréditifs invalides, ces procédures sont suivies:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} Mise à jour d'état de stratégie]{Ajoute l'heure courant comme valeur de pwdFailureTime.}
\item[\hspace{1mm} Détection d'intrusion]{Si la vérification d'intrus retourne TRUE, le serveur bloque le compte en définissant la valeur de pwdAccountLockedTime à l'heure courante. Une fois le compte bloqué, le serveur échoue l'opération avec l'erreur accountLocked.}
\end{description}
 
\vspace{1cm}{\huge Opérations de mise à jour du mot de passe }
 
\
 
\hspace{1mm}  Parce que le mot de passe est stocké dans un attribut, divers opérations peuvent être utilisées pour créer ou modifier un mot de passe. Mais certains mécanismes ont été définis ou peuvent être définis tel que la rfc3062 ( LDAP Password Modify). Tout en traitant une mise à jour d'un mot de passe, le serveur effectur les étapes suivantes:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} Modification sûre]{Si pwdSafeModify est à TRUE et qu'il existe un mot de passe, le serveur s'assure que l'opération de mise à jour inclus le mot de passe existant de l'utilisateur. Si le mot de passe n'est pas fournis, le serveur échoue avec l'erreur mustSupplyOldPassword.}
\item[\hspace{1mm} Changement après reset]{Si la vérification de changement de mot de passe à changer retourne true, le serveur s'assure que l'opération de mise à jours ne contient rien d'autre que la modification du mot de passe. Si d'autres modification existent, le serveur envoie un message avec le resultCode insufficientAccessRights avec l'erreur changeAfterReset.}
\item[\hspace{1mm} Vérification des droits]{Vérifie si l'identité a les droits suffisants pour mettre à jours le mot de passe. Si l'utilisateur n'a pas les droits suffisants, le serveur retourne un resultCode insufficientAccessRights avec l'erreur passwordModNotAllowed.}
\item[\hspace{1mm} Trop tôt pour la mise à jour]{Si la vérification d'âge minimum du mot de passe retourne true, le serveur envoie un resultCode constraintViolation avec l'erreur passwordTooYoung.}
\item[\hspace{1mm} Qualité du mot de passe]{Vérifier la valeur de l'attribut pwdCheckQuality. Si la valeur est non zéro, le serveur:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{S'assure que le mot de passe respecte les critères de qualité définis par le serveur. Si le serveur ne peut pas vérifier la qualité du mot de passe, la valeur de pwdCheckQuality est évalué. Si le serveur peut vérifier la qualité du mot de passe et que la vérification échoue, le serveur envoie un constraintViolation avec l'erreur insufficientPasswordQuality.}
\item[\hspace{6mm} -]{Vérifie la valeur de pwdMinLengh. Si la valeur est non zéro, il s'assure que le nouveau mot de passe a au moins cette longueur minimum. Si le serveur n'est pas capable de vérifier la longueur, la valeur de pwdCheckQuality est évaluée. Si le serveur peut vérifier la longueur, et qu'il échoue, retourne un constraintViolation avec l'erreur passwordTooShort.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} Réutilisation invalide]{Si pwdInHistory est présent et sa valeur est non-zéro, le serveur vérifie si le mot de passe existe dans pwdHistory ou dans l'attribut du mot de passe. S'il est trouvé, le serveur envoie un constraintViolation avec une erreur passwordInHistory.}
\item[\hspace{1mm} Mise à jours d'état de stratégie]{Si les étapes ont été complétés sans erreur, le serveur effectue les étapes suivantes sur l'entrée à l'heure courante:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{Si la valeur de pwdMaxAge ou pwdMinAge est non zéro, le serveur ajoute le précédent mot de passe (s'il en existait un) à l'attribut pwdHistory. Si le nombre de valeurs dans pwdHistory excède la valeur de pwdInHistory, le serveur supprime le mot de passe le plus ancien.}
\item[\hspace{6mm} -]{Si la valeur dans pwdMustChange est TRUE et que la modification est effectuée par un administateur, l'attribut pwdReset est mis à TRUE. Sinon, pwdReset est supprimé de l'entrée.}
\item[\hspace{6mm} -]{Les attributs pwdFailureTime et pwdGraceUseTime sont supprimés de l'entrée de l'utilisateur s'ils existent.}
\end{description}
 
\vspace{1cm}{\huge Autres opérations }
 
\
 
\hspace{1mm}  Pour les opérations autre que bind, password update, unbind, abandon ou StartTLS, si la vérification de mot de passe à changer retourne true, le serveur envoie un insufficientAccessRights avec l'erreur changeAfterReset.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Client Policy Enforcement Points }
 
\
 
\hspace{1mm}  Ces sections illustrent les scénarios possibles pour chaque opération LDAP et définis les types de réponses qui identifient cet scénarios. Les scénarios dans les opérations suivantes assument que le client a attaché un contrôle passwordPolicyRequest au message de demande de l'opération, et peut recevoir un contrôle passwordPolicyResponse dans le message de réponse. Dans le cas où le contrôle passwordPolicyRequest n'a pas été envoyé, aucun contrôle passwordPolicyResponse n'est retourné. Toutes les autres instructions restent les même.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge bind }
 
\
 
\hspace{1mm}  Pour chaque réponse bind reçus, le client vérifie le resultCode de bindResponse et recherche un contrôle passwordPolicyResponse pour déterminer si une des conditions est vrai et peut demander à l'utilisateur:
\vspace{5mm} \\
 
 
\hspace{1mm} bindResponse.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = accountLocked (1) \\
\hspace{1mm} \textbf{La limite d'échec a été atteinte et le compte est bloqué. L'utilisateur doit retenter plus tard ou contacter un administrateur.} \\
\hspace{1mm} bindResponse.resultCode = success (0), passwordPolicyResponse.error = changeAfterReset (2): \\
\hspace{1mm} \textbf{L'utilisateur s'authentifie pour la première fois depuis que l'administateur a définis le mot de passe et l'utilisateur doit changer son mot de passe.} \\
\hspace{1mm} bindResponse.resultCode = success (0), passwordPolicyResponse.warning = graceAuthNsRemaining: \\
\hspace{1mm} \textbf{Le mot de passe a expiré mais il reste des authentification de grâce. L'utilisateur doit le changer.} \\
\hspace{1mm} bindResponse.resultCode = invalidCredentials (49), passwordPolicyResponse.error = passwordExpired (0): \\
\hspace{1mm} \textbf{Le mot de passe a expiré et il n'y a plus d'authentification de grâce. L'utilisateur doit contacter un administrateur pour réinitialiser son mot de passe.} \\
\hspace{1mm} bindResponse.resultCode = success (0), passwordPolicyResponse.warning = timeBeforeExpiration: \\
\hspace{1mm} \textbf{Le mot de passe de l'utilisateur va expirer dans n secondes} \\
 
\vspace{1cm}{\huge modify }
 
\
 
\hspace{1mm}  Si l'application ou le client chiffre le mot de passe avant de l'envoyer dans une opération de modification ( soit dans une opération modifyRequest ou un autre mécanisme de modification de mot de passe ), il devrait vérifier les valeur de pwdMinLengh, pwdCheckQuality et devrait imposer ces stratégies.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si l'opération medifyRequest a été utilisée pour changer le mot de passe, ou si un autre mécanisme est utilisé - tel que extendedRequest - la réponse peut contenir des informations pertinente pour la stratégie de mot de passe. Le client vérifie le resultCode de la réponse et vérifie que les conditions suivantes sont vraie et optionnellement notifie l'utilisateur des conditions.
\vspace{5mm} \\
 
 
\hspace{1mm} pwdModResponse.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = mustSupplyOldPassword (4): \\
\hspace{1mm} \textbf{L'utilisateur a tenté de changer son mot de passe sans spécifier l'ancien mot de passe et c'est requis par la stratégie.} \\
\hspace{1mm} pwdModResponse.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = changeAfterReset (2): \\
\hspace{1mm} \textbf{L'utilisateur doit changer son mot de passe avant d'envoyer une autre demande LDAP} \\
\hspace{1mm} pwdModResponse.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = passwordModNotAllowed (3): \\
\hspace{1mm} \textbf{L'utilisateur n'a pas les droit suffisants pour changer son mot de passe} \\
\hspace{1mm} pwdModResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = passwordTooYoung (7): \\
\hspace{1mm} \textbf{Il est trop tôt pour changer le mot de passe} \\
\hspace{1mm} pwdModResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = insufficientPasswordQuality (5): \\
\hspace{1mm} \textbf{La vérification de la qualité du mot de passe a échoué} \\
\hspace{1mm} pwdModResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = passwordTooShort (6): \\
\hspace{1mm} \textbf{La longueur du mot de passe est trop courte} \\
\hspace{1mm} pwdModResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = passwordInHistory (8): \\
\hspace{1mm} \textbf{Le mot de passe a déjà été utilisé, l'utilisateur doit en choisir un différent} \\
 
\vspace{1cm}{\huge add }
 
\
 
\hspace{1mm}  Si un mot de passe est spécifié dans un addRequest, le client vérifie le resultCode de addResponse et vérifie le contrôle passwordPolicyResponse pour déterminer si une des conditions est vrai et pour notifier l'utilisateur en conséquence:
\vspace{5mm} \\
 
 
\hspace{1mm} addResponse.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = passwordModNotAllowed (3): \\
\hspace{1mm} \textbf{L'utilisateur n'a pas les droits suffisants pour ajouter son mot de passe} \\
\hspace{1mm} addResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = insufficientPasswordQuality (5): \\
\hspace{1mm} \textbf{Le mot de passe a échoué la vérification de la qualité} \\
\hspace{1mm} addResponse.resultCode = constraintViolation (19), passwordPolicyResponse.error = passwordTooShort (6): \\
\hspace{1mm} \textbf{La longueur du mot de passe est trop courte} \\
 
\vspace{1cm}{\huge compare }
 
\
 
\hspace{1mm}  Quand une opération compare est utilisée pour comparer un mot de passe, le client vérifie le resultCode de compareResponse et vérifie le passwordPolicyResponse pour déterminer si une des conditions suivantes est vrai et peut notifier l'utilisation en conséquence. Ces conditions assument que le résultat de la comparaison était vrai:
\vspace{5mm} \\
 
 
\hspace{1mm} compareResponse.resultCode = compareFalse (5), passwordPolicyResponse.error = accountLocked (1): \\
\hspace{1mm} \textbf{La limite du nombre d'échec a été atteinte et le compte a été bloqué. L'utilisateur doit retenter plus tard ou contacter un administrateur.} \\
\hspace{1mm} compareResponse.resultCode = compareTrue (6), passwordPolicyResponse.warning = graceAuthNsRemaining: \\
\hspace{1mm} \textbf{Le mot de passe a expiré mais il reste des authentifications de grâce. L'utilisateur doit le changer} \\
\hspace{1mm} compareResponse.resultCode = compareFalse (5), passwordPolicyResponse.error = passwordExpired (0): \\
\hspace{1mm} \textbf{Le mot de passe a expiré et il ne reste plus d'authentification de grâce. L'utilisateur doit contacter un administrateur} \\
\hspace{1mm} compareResponse.resultCode = compareTrue (6), passwordPolicyResponse.warning = timeBeforeExpiration: \\
\hspace{1mm} \textbf{Le mot de passe de l'utilisateur va expirer dans n secondes} \\
 
\vspace{1cm}{\huge Autres opérations }
 
\
 
\hspace{1mm}  Pour les opérations autres que bind, unbind, abandon ou StartTLS, le client vérifie le resultCode et de contrôle pour déterminer si l'utilisateur doit changer le mot de passe immédiatement.
\vspace{5mm} \\
 
 
\hspace{1mm} <Response>.resultCode = insufficientAccessRights (50), passwordPolicyResponse.error = changeAfterReset (2): \\
\hspace{1mm} \textbf{L'utilisateur doit changer son mot de passe immédiatement} \\
 
\vspace{1cm}{\huge Administation des stratégies de mot de passe }
 
\
 
\hspace{1mm}  Une stratégie de mot de passe est définie pour une sous-arborescence du DIT en ajoutant une subentry dont le supérieur immédiat est la racine de la sous-arborescence, l'objectclass auxiliaire pwdPolicy. Le scope de la stratégie est définie par l'attribut SubtreeSpecification.
\vspace{5mm} \\
 
 
\hspace{1mm}  Il est possible de définir des stratégies de mot de passe pour différents attributs de mot de passe dans la même entrée pwdPolicy, en spécifiant plusieurs valeurs de pwdAttribute. Les stratégies de mot de passe peuvent également être dans les subentry séparés.
\vspace{5mm} \\
 
 
\hspace{1mm}  Seul une stratégie ne peut être effectif pour un attribut de mot de passe dans une entrée. Si plusieurs stratégies existent, qui se chevauchent dans un scope, le résultat est indéfinis.
\vspace{5mm} \\
 
 
\hspace{1mm}  Il devrait être possible d'écraser une stratégie de mot de passe pour un utilisateur en définissant une nouvelle stratégie dans une subentry de l'entrée de l'utilisateur.
\vspace{5mm} \\
 
 
\hspace{1mm}  Chaque objet qui est contrôlé par une stratégie de mot de passe annonce le subentry à utiliser pour contrôler sa stratégie dans son attribut pwdPolicySubentry. Les clients qui souhaitent examiner ou gérer une stratégie de mot de passe peuvent interroger le pwdPolicySubentry pour cet objet pour connaître le subentry pwdPolicy.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Stratégie de mot de passe et la réplication }
 
\
 
\hspace{1mm}  l'objet pwdPolicy définis la stratégie de mot de passe pour une portion du DIT et doit être répliqué dans tous les répliquas de cette sous-arborescence. Les éléments de la stratégie de mot de passe qui sont liés aux utilisateurs sont stockés dans les entrées elles-même en tant qu'attributs opérationnels. Vu que ces attributs sont sujets à modification même sur un répliqua lecture seule, leur réplication doit être considéré avec attention.
\vspace{5mm} \\
 
 
\hspace{1mm}  l'attribut \textbf{pwdChangedTime} doit être répliqué sur tous les répliquas, pour permettre l'expiration du mot de passe. L'attribut \textbf{pwdReset} doit être répliqué sur tous les répliquas, pour refuser l'accès aux opérations autre que bind et modify. L'attribut \textbf{pwdHistory} doit être répliqué auprès des répliquas en écriture. Il n'a pas à être répliqué sur un répliqua lecture seul vu que le mot de passe ne sera jamais modifié sur ce serveur.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les attribut \textbf{pwdAccountLockedTime}, \textbf{pwdFailureTime} et \textbf{pwdGraceUseTime} devraient être répliqués sur les répliquas en écriture, rendant la stratégie de mot de passe global à tous les serveurs. Quand l'entrée utilisateur est répliquée sur un répliqua lecture-seul, ces attributs ne devraient pas être répliqués. Celà signifie que le nombre d'échec, d'authentification de grâce et de blocage sont dans chaque serveur répliqué. Par exemple, le nombre effectif de tentatives échoués sur un mot de passe utilisateur sera N x M ( où N est le nombre de serveurs et M la valeur de pwdMaxFailure ). Répliquer ces attributs à un répliqua lecture seule peut réduire le nombre de tentatives global mais peut aussi introduire certaines inconsistances dans la manière dans la stratégie est appliquée.
\vspace{5mm} \\
 
 
\hspace{1mm}  Note: Il y a certaines situations où la réplication globale de ces attributs d'état peuvent être non-désirable. Par exemple, si 2 clusters de répliquas sont distants géographiquement et joins par un lien lent, et leur utilisateurs se loggent seulement sur un des 2 emplacement, il peut être préférable de ne pas propager tous les changements d'état entre les clusters. Les serveurs devraient permettre aux administrateurs de contrôler quels attributs sont répliqués au cas-par-cas.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les serveurs participant à une réplication multi-master devaient employer un mécanisme qui s'assure de l'unicité des valeurs en populant les attributs pwdFailureTime et pwdGraceUseTime. Pour faire ça, c'est un problème locat et peut consister en l'utilisation d'un simple source autoritative pour la génération de valeurs de temps unique, ou peut consister de l'utilisation de la partie fractionnelle des secondes pour maintenir un identifiant de répliqua.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Considérations de sécurité }
 
\
 
\hspace{1mm}  Ce document définis un jeu de règles à implémenter dans un serveur LDAP. Pour mitiger certains risques de sécurité associés avec l'utilisation de mots de passe et augmenter la difficulté de crackage de mot de passe.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{L'authentification avec un mot de passe doit suivre les recommandations de la rfc4513}
\item[\hspace{1mm} -]{Les modifications de mot de passe devraient être se produire seulement quand la connexion est protégées pour la confidentialité et une authentification sécurisée.}
\item[\hspace{1mm} -]{Les contrôles d'accès devraient être utilisés pour restreindre l'accès aux attribut de stratégie de mot de passe. Les attributs définis pour maintenir les information de stratégie de mot de passe devaient seulement être modifiable pas l'administrateur de mot de passe ou par une haute autorité.}
\item[\hspace{1mm} -]{Vu qu'il est possible de définir une stratégie de mot de passe pour un utilisateur spécifique en ajoutant un subentry immédiatement sous l'entrée de l'utilisateur, les contrôles d'accès devraient être utilisés pour restreindre l'utilisation de l'objet pwdPolicy ou du subentry.}
\item[\hspace{1mm} -]{Quand une stratégie de mot de passe à détection d'intrus est appliquée, l'annuaire LDAP est sujet aux attaques DOS. Un utilisateur malicieux peut délibérément bloquer le compte d'un utilisateur ( ou tous ) en envoyant des bind avec de faux mots de passe. Il n'y a aucun mécanisme pour parer ces attaques. Le serveur LDAP devraie logger autant d'informations qu'il peut ( tel que les adresses IP ) quand un compte est bloqué, pour être capable d'identifier l'origine de l'attaque. Refuser les accès anonymes à l'annuaire permet de réduire ce genre d'attaque. Utiliser un délai d'authentification à la place aide à éviter ces attaques DOS.}
\item[\hspace{1mm} -]{En retournant certains codes de status ( tel que passwordPolicyResponse.error=accountLocked) permet à un attaquant DOS de savoir qu'il a réussit à bloquer le compte. Les serveurs devraient implémenter des vérifications additionnelles qui retournent le même statut quand il est détecté qu'un certain nombre de demandes d'authentification échoué s'est produit sur une simple connexion, ou depuis une adresse client.}
\end{description}
\end{flushleft}
\end{document}
