K. Zeilenga (OpenLDAP Foundation)February20052008-06-20
Beaucoup de protocoles Internet ont besoin de comparer des
noms, par exemple pour tester leur égalité avant
une authentification de ce nom. Si les noms sont en
Unicode, il est préférable de les
normaliser avant la comparaison, pour que le
résultat de celle-ci ne soit pas trop déroutant pour
l'utilisateur. C'est le but de SASLprep,
normalisé dans ce RFC.
Le RFC sur SASLprep
est très court car SASLprep est juste un profil de
stringprep (normalisé dans le ). Stringprep était l'algorithme général de normalisation
des noms à l'IETF. Il ne spécifiait pas tous les
détails de la normalisation effectuée, laissant ceux-ci à des profils
comme nameprep (,
utilisé dans les IDN) ou bien notre
SASLprep. Stringprep ayant depuis été abandonné (cf. ), ce a été remplacé par le nouveau
mécanisme du .
SASLprep est conçu pour l'utilisation dans le contexte de
l'authentification, notamment pour
SASL (). L'idée est de passer
les noms et les mots de passe à travers SASLprep avant toute
comparaison, pour que le résultat de celle-ci corresponde aux attentes
de l'utilisateur (section 1).
Le profil lui-même est décrit dans la section 2. Par exemple,
SASLprep utilise la normalisation Unicode NFKC
(section 2.2 de notre RFC et section 4 du ). Ainsi, comme l'illustre les exemples de la section 3,
la chaîne U+2168 (Ⅸ, chiffre romain 9)
sera transformée en la chaîne « IX », qui a la même
signification. Sans SASLprep, un utilisateur dont le nom comporterait
ce caractère Unicode aurait du mal à se loguer ! La section 2 spécifie aussi (section 2.3) les caractères interdits
par SASLprep, comme les caractères de contrôle.
On peut tester cet algorithme sur Unix avec
la commande idn de la GNU
libidn et son option --profile :
% echo Café | idn --quiet --stringprep --profile SASLprep
Café
% echo pi² | idn --quiet --stringprep --profile SASLprep
pi2
Dans le premier exemple, on note que SASLprep est sensible à la
casse (qui n'a pas été modifiée). Dans le second exemple, l'exposant 2
dans « pi au carré » a été remplacé par un 2
ordinaire, conséquence de la normalisation NFKC. Un hypothétique mot de passe « pi² » serait donc équivalent à « pi2 ».
Une mise en œuvre de SASLprep, sous forme d'une bibliothèque utilisable depuis vos programmes, figure dans la GNU SASL Library.