Groupe de travail Réseau	N. Haller, Bellcore	
Request for Comments : 2289	C. Metz, Kaman Sciences Corporation	
STD 61	P. Nesser, Nesser & Nesser Consulting	
RFC rendue obsolète : 1938	M. Straw, Bellcore	
Catégorie : En cours de normalisation		
Traduction Claude Brière de L’Isle	février 1998	

Système de mot de passe à utilisation unique

Statut du présent mémoire
Le présent document spécifie un protocole en cours de normalisation de l’Internet pour la communauté de l’Internet, et appelle à des discussion et suggestions pour son amélioration. Prière de se référer à l’édition en cours des "Normes officielles des protocoles de l’Internet" (STD 1) pour connaître l’état de la normalisation et le statut de ce protocole. La distribution du présent mémoire n’est soumise à aucune restriction.

Notice de Copyright
Copyright (C) The Internet Society (1998). Tous droits réservés.

1.	Résumé
Le présent document décrit le système d’authentification par mot de passe à utilisation unique (OTP, mot de passe à utilisation unique). Le système procure l’authentification pour l’accès système (connexion) et d’autres applications exigeant une authentification sûre contre les attaques passives fondées sur la répétition de mots de passe réutilisables capturés. OTP est une évolution du système de mot de passe à utilisation unique S/KEY (S/KEY est une marque commerciale de Bellcore) qui a été produit par Bellcore et est décrit dans les références [3] et [5].

2.	Généralités
Une forme d’attaque contre les systèmes d’ordinateurs en réseau est l’espionnage sur les connexions de réseau pour obtenir des informations d’authentification telles que les identifiants de connexion et les mots de passe des utilisateurs légitimes. Une fois ces informations capturées, elles peuvent être utilisées ultérieurement pour obtenir l’accès au système. Les systèmes de mots de passe à utilisation unique sont conçus pour contrer ce type d’attaque, appelée "attaque en répétition" [4].

Le système d’authentification décrit dans le présent document utilise une phrase de passe secrète pour générer une séquence de mots de passe à utilisation unique. Avec ce système, la phrase de passe secrète de l’usager n’a jamais besoin de traverser le réseau comme c’est le cas durant l’authentification ou durant les échanges de phrase de passe. Et donc, il n’est pas vulnérable aux attaques en répétition. Une sécurité accrue est fournie par la propriété qu’aucune information secrète ne doit être mémorisée sur un système, y compris le serveur à protéger.

Le système OTP protège contre les attaques externes passives dirigées contre le sous-système d’authentification. Il n’empêche pas quelqu’un qui espionne le réseau d’obtenir l’accès à des informations privées et ne fournit pas de protection contre l’"ingénierie sociale" ou les attaques actives [9].

3.	Introduction
Il y a deux entités dans le fonctionnement du système OTP de mot de passe à utilisation unique. Le générateur doit produire le mot de passe à utilisation unique approprié à partir de la phrase de passe secrète de l’usager et à partir des informations fournies dans la mise en cause provenant du serveur. Le serveur doit envoyer une mise en cause qui comporte les paramètres de génération appropriés au générateur, doit vérifier le mot de passe à utilisation unique reçu, et doit mémoriser le dernier mot de passe à utilisation unique qu’il a reçu, et doit mémoriser le numéro de séquence de mot de passe à utilisation unique correspondant. Le serveur doit aussi faciliter le changement de la phrase de passe secrète de l’usager de façon sûre.

Le générateur du système OTP passe la phrase de passe secrète de l’usager, avec un germe reçu du serveur au titre de la mise en cause, à travers plusieurs itérations d’une fonction de hachage sécurisée pour produire un mot de passe à utilisation unique. Après chaque authentification réussie, le nombre d’itérations de fonction de hachage sécurisée est diminué d’un. Et donc, une séquence unique de mots de passe est générée. Le serveur vérifie le mot de passe à utilisation unique reçu du générateur en calculant une fois la fonction de hachage sécurisée et en comparant le résultat au mot de passe à utilisation unique précédemment accepté. Cette technique a été suggérée pour la première fois par Leslie Lamport [1].

4.	Exigences terminologiques
Dans le présent document, les mots qui sont utilisés pour définir la signification de chaque exigence particulière sont normalement en majuscules. Ces mots sont :

- DOIT
Ce mot ou l’adjectif "ÉXIGÉ" signifie que l’élément est une exigence absolue de la sp2cification.

- DEVRAIT
Ce mot ou l’adjectif "RECOMMANDÉ" signifie qu’il pourrait exister des raisons valides dans des circonstances particulières pour ignorer cet élément, mais les pleines implications devraient en être comprises et le cas devrait être soigneusement évalué avant de suivre une voie différente.

PEUT
Ce mot ou l’adjectif "FACULTATIF" signifie que cet élément est vraiment facultatif. Un fabricant peut choisir d’inclure l’élément parce qu’un marché particulier le demande, ou par exemple, parce qu’il améliore le produit ; un autre fabricant peut omettre le même élément.

5.	Fonction de hachage sécurisée
La sécurité du système OTP se fonde sur la non réversibilité d’une fonction de hachage sécurisée. Une telle fonction doit être traitable pour calculer vers l’avant, mais il doit être impossible de l’inverser.

Les interfaces sont actuellement définis pour trois de ces algorithmes de hachage, MD4 [2] et MD5 [6] par Ronald Rivest, et SHA [7] du NIST. Toutes les mises en œuvre conformes aussi bien de serveur que de générateur DOIVENT prendre en charge MD5. Elles DEVRAIENT prendre en charge SHA et PEUVENT aussi prendre en charge MD4. Clairement, le générateur et le serveur doivent utiliser le même algorithme afin d’interopérer. D’autres algorithmes de hachage peuvent être spécifiés pour une utilisation avec ce système par la publication des interfaces appropriées.

Les algorithmes de hachage sécurisés énumérés ci-dessus ont la propriété d’accepter une entrée de longueur arbitraire et de produire une sortie de taille fixe. Le système OTP aligne cette sortie sur 64 bits en utilisant les algorithmes de l’Appendice A. 64 bits est aussi la longueur des mots de passe à utilisation unique. On pense que c’est assez long pour être sûr et assez court pour être entré à la main (voir ci-dessous, Forme de sortie) si nécessaire.

6.	Génération des mots de passe à utilisation unique
Cette section décrit la génération des mots de passe à utilisation unique. Ce processus consiste en une étape initiale dans laquelle toutes les entrées sont combinées, une étape de calcul où la fonction de hachage sécurisée est appliquée un nombre spécifié de fois, et une fonction de sortie où le mot de passe à utilisation unique de 64 bits est converti en une forme lisible par l’homme.

L’Appendice C contient des exemples de sorties en fonction d’une collection d’entrées données. Il fournit aux développeurs un moyen de vérifier l’utilisation de ces algorithmes.

Étape initiale
En principe, la phrase de passe secrète de l’usager peut être de n’importe quelle longueur. Pour réduire le risque provenant de techniques telles que la recherches exhaustive ou les attaques de dictionnaire, la chaîne de caractères des phrases de passe DOIVENT contenir au moins 10 caractères (voir Forme d’entrées ci-dessous). Toutes les mises en œuvre DOIVENT accepter des phrases de passe d’au moins 63 caractères. La phrase de passe secrète est fréquemment, mais n’est pas obligé d’être, une information textuelle fournie par un usager.

Dans cette étape, la phrase de passe est concaténée avec un germe qui est transmis du serveur en clair. Ce germe non secret permet aux clients d’utiliser la même phrase de passe secrète sur plusieurs machines (en utilisant des germes différents) et de recycler en toute sécurité leurs phrases de passe secrètes en changeant le germe.

Le résultat de la concaténation est passé à travers la fonction de hachage sécurisée puis est réduit à 64 bits en utilisant un des algorithmes dépendant de la fonction indiqués à l’Appendice A.

Étape de calcul
Une séquence de mots de passe à utilisation unique est produite en appliquant plusieurs fois la fonction de hachage sécurisée au résultat de l’étape initiale (appelée S). C’est-à-dire que le premier mot de passe à utilisation unique à utiliser est produit en passant S à travers la fonction de hachage sécurisée un nombre de fois (N) spécifié par l’usager. Le prochain mot de passe à utilisation unique à utiliser est généré en passant S à travers la fonction de hachage sécurisée N-1 fois. Un espion qui surveille la transmission d’un mot de passe à utilisation unique ne serait pas capable de générer le mot de passe exigé suivant parce que le faire signifierait d’inverser la fonction de hachage.

Forme des entrées
La phrase de passe secrète n’est vue que par le générateur OTP. Pour permettre l’interchangeabilité des générateurs, tous les générateurs DOIVENT accepter une phrase de passe secrète de 10 à 63 caractères. Les mises en œuvre PEUVENT prendre en charge une phrase de passe plus longue, mais elles risquent de perdre l’interchangeabilité avec les mises en œuvre qui n’acceptent que le minimum.

Le germe DOIT consister en caractères purement alphanumériques et DOIT être long de un à 16 caractères. Le germe est une chaîne de caractères qui NE DOIT PAS contenir de blancs et DEVRAIT consister en caractères strictement alphanumériques du jeu de code invariant ISO-646 (IVCS). Le germe DOIT être insensible à la casse et DOIT être converti en interne en minuscules avant son traitement.

Le numéro de séquence et le germe constituent ensemble une plus grande unité de données appelée la mise en cause. La mise en cause donne aux générateur les paramètres dont il a besoin pour calculer le mot de passe à utilisation unique correct d’après la phrase de passe secrète. La mise en cause DOIT être en syntaxe standard de sorte que les générateurs automatiques puissent reconnaître la mise en cause dans son contexte et extraire ces paramètres. La syntaxe de la mise en cause est :

otp-<identifiant d’algorithme> <sequence d’entiers> <germe>

Les trois jetons DOIVENT être séparés par une espace (définie comme tout nombre d’espaces et/ou tabulations) et la chaîne de mise en cause entière DOIT être terminée par une espace ou une nouvelle ligne. La chaîne "otp-" DOIT être en minuscules. L’identifiant d’algorithme est sensible à la casse (les identifiants existants sont tous en minuscules), et le germe est insensible à la casse et converti en minuscules avant utilisation. Si des algorithmes supplémentaires sont définis, les identifiants appropriés (court, mais non limités à trois ou quatre caractères) doivent être définis. Les identifiants d’algorithme actuellement définis sont :

md4	Résumé de message MD4	
md5	Résumé de message MD5	
sha1	Algorithme de hachage sécurisé du NIST, révision 1	

Un exemple de mise en cause OTP est :	otp-md5 487 dog2

Formes de sortie
Le mot de passe à utilisation unique généré par la procédure ci-dessus est long de 64 bits. Entrer un numéro de 64 bits est un processus difficile et sujet à erreurs. Certains générateurs insèrent ce mot de passe dans le flux d’entrées et certains autres le rendent disponible avec un système "couper coller." D’autres arrangements exigent que le mot de passe à utilisation unique soit entré manuellement. Le système OTP est conçu pour faciliter cette entrée manuelle sans empêcher les méthodes automatiques. Le mot de passe à utilisation unique PEUT donc être converti, et tous les serveurs DOIVENT être capables de l’accepter comme telle, en une séquence de six mots courts (1 à 4 lettres) à frappe facile qui n’utilisent que des caractères de l’IVCS ISO-646. Chaque mot est choisi d’après un dictionnaire de 2048 mots ; à 11 bits par mot, tous les mots de passe à utilisation unique peuvent être codés.

Les deux bits supplémentaires dans ce codage sont utilisés pour mémoriser une somme de contrôle. Les 64 bits de clé sont cassés en paires de bits, puis ces paires sont additionnées ensemble. Les deux bits de moindre poids de cette somme sont codés dans les deux derniers bits de la séquence de six mots avec le bit de moindre poids de la somme comme dernier bit codé. Tous les générateurs OTP DOIVENT calculer cette somme de contrôle et tous les serveurs OTP DOIVENT vérifier explicitement cette somme de contrôle au titre de l’opération de décodage de cette représentation du mot de passe à utilisation unique.

Les générateurs qui produisent le format à six mots DOIVENT présenter les mots en majuscules avec une seule espace utilisée comme séparateurs. Tous les serveurs DOIVENT accepter le format de six mots sans égard à la casse et aux espaces utilisées comme séparateurs. Les deux lignes ci-dessous représentent le même mot de passe à utilisation unique. La première est valide comme sortie d’un générateur et comme entrée d’un serveur, la seconde n’est valide que comme entrée humaine à un serveur.

OUST COAT FOAL MUG BEAK TOTE
oust coat foal  mug  beak  tote

L’interopérabilité exige que tous les serveurs et générateurs OTP utilisent le même dictionnaire. Le dictionnaire standard a été spécifié à l’origine dans le "Système S/KEY de mot de passe à utilisation unique" qui est décrit dans la RFC 1760 [5]. Ce dictionnaire est inclus dans le présent document à l’Appendice D.

Pour faciliter la mise en œuvre de plus petits générateurs, un résultat en hexadécimal est une solution de remplacement acceptable pour la présentation du mot de passe à utilisation unique. Toutes les mises en œuvre de logiciel de serveur DOIVENT accepter l’hexadécimal insensible à la casse ainsi que le format en six mots. Les chiffres hexadécimaux peuvent être séparés par des espaces, aussi il est EXIGÉ des serveurs qu’ils ignorent toutes les espaces. Si la représentation est séparée par des espaces, les zéros en tête doivent être retenus.

Des exemples de format hexadécimal sont :

Représentation	Valeur	
3503785b369cda8b	0x3503785b369cda8b	
e5cc a1b8 7c13 096b	0xe5cca1b87c13096b	
C7 48 90 F4 27 7B A1 CF	0xc74890f4277ba1cf	
47 9 A68 28 4C 9D 0 1BC	0x479a68284c9d01bc	

En plus d’accepter les codages en six mots et l’hexadécimal du mot de passe à utilisation unique de 64 bits, les serveurs DEVRAIENT accepter le codage du dictionnaire de remplacement décrit à l’Appendice B. Les six mots de ce codage NE DOIVENT PAS recouvrir l’ensemble des mots du dictionnaire standard. Pour éviter des ambiguïtés avec la représentation hexadécimale, les mots du dictionnaire de remplacement NE DOIVENT PAS comporter seulement les lettres A à F. Le décodage des mots ainsi codés n’exige aucune connaissance du dictionnaire de remplacement utilisé, aussi l’acceptation de tout dictionnaire de remplacement implique l’acceptation de tous les dictionnaires de remplacement. Les mots dans les dictionnaires de remplacement sont sensibles à la casse. Les générateurs et les serveurs DOIVENT préserver la casse dans le traitement de ces mots.

En résumé, tous les serveurs conformes DOIVENT accepter les entrées de six mots qui utilisent le dictionnaire standard (RFC 1760 et Appendice D), DOIVENT accepter le codage hexadécimal, et DEVRAIENT accepter les entrées de six mots qui utilisent la technique du dictionnaire de remplacement (Appendice B). Comme il existe une possibilité minime qu’un codage hexadécimal d’un mot de passe à utilisation unique ressemble à un codage valide de dictionnaire standard à six mots, toutes les mises en œuvre DOIVENT utiliser le schéma suivant. Si un mot de passe à utilisation unique codé en six mots est valide, il est accepté. Autrement, si le mot de passe à utilisation unique peut être interprété comme hexadécimal, et si ce décodage est valide, il est alors accepté.

7.	Vérification des mots de passe à utilisation unique
Une application sur le système serveur qui exige l’authentification OTP est supposée produire une mise en cause OTP comme décrit ci-dessus. Étant donnés les paramètres tirés de cette mise en cause et la phrase de passe secrète, le générateur peut calculer (ou rechercher) le mot de passe à utilisation unique qui est passé au serveur pour vérification.

Le système serveur a une base de données contenant, pour chaque usager, le mot de passe à utilisation unique tiré de la dernière authentification réussie ou du premier OTP d’une séquence nouvellement initialisée. Pour authentifier l’usager, le serveur décode le mot de passe à utilisation unique reçu du générateur en une clé de 64 bits et utilise ensuite une fois cette clé à travers la fonction de hachage sécurisée. Si le résultat de cette opération correspond à l’OTP mémorisée précédemment, l’authentification est réussie et le mot de passe à utilisation unique accepté est mémorisé pour les utilisations futures.

8.	Changements de phrase de passe
Parce que le nombre d’applications de fonctions de hachage exécutées par le générateur décroît d’une à chaque fois, à un certain moment, l’usager doit réinitialiser le système sous peine d’être incapable de s’authentifier.

Bien que certaines installations puissent ne pas permettre aux usagers d’initialiser à distance, les mises en œuvre DOIVENT fournir un moyen pour le faire sans révéler la phrase de passe secrète de l’usager. Une façon de le faire est de fournir le moyen de réinitialiser la séquence par une spécification explicite du premier mot de passe à utilisation unique.

Lorsque la séquence de mots de passe à utilisation unique est réinitialisée, les mises en œuvre DOIVENT vérifier que le germe ou la phrase de passe est changé. Les installations DEVRAIENT décourager toute opération qui envoie en clair la phrase de passe secrète sur un réseau car une telle pratique met en échec le concept de mot de passe à utilisation unique.

Les mises en œuvre PEUVENT utiliser la technique suivante pour la réinitialisation :

o	L’usager prend un nouveau germe et un compte de hachage (des valeurs par défaut peuvent être proposées). L’usager les fournit, ainsi que le mot de passe à utilisation unique généré correspondant, au système hôte.

o	L’usager PEUT aussi fournir le mot de passe à utilisation unique généré correspondant pour le compte -1 comme vérification d’erreur.

o	L’usager DEVRAIT fournir le mot de passe à utilisation unique généré pour l’ancien germe et l’ancien compte de hachage pour protéger un terminal ou station de travail inactif (ceci implique que quand le compte est 1, l’usager peut se connecter mais ne peut pas alors changer le germe ou le compte).

À l’avenir, un protocole spécifique pourrait être défini pour la réinitialisation qui permettrait une interopération en douceur et éventuellement automatisée de tous les hôtes et générateurs.

9.	Protection contre les attaques par mise en compétition
Toutes les mises en œuvre de serveur conformes DOIVENT se protéger contre la condition de mise en compétition décrite dans la présente section. Une défense contre cette attaque est proposée ; les mises en œuvre PEUVENT utiliser cette approche ou PEUVENT choisir une autre défense.

Il est possible à un agresseur d’écouter la plupart des mots de passe à utilisation unique, de deviner le reste, et ensuite de faire pression sur l’utilisateur légitime pour qu’il achève l’authentification. Sur de nombreux essais pour deviner le dernier mot du format de six mots, il y a une certaine probabilité de succès.

Une défense possible est d’empêcher un utilisateur de commencer plusieurs sessions d’authentification simultanées. Cela signifie qu’une fois que l’utilisateur légitime a initié l’authentification, un attaquant sera bloqué jusqu’à ce que le premier processus d’authentification soit achevé. Dans cette approche, une temporisation est nécessaire pour contrecarrer une attaque de déni de service.

10.	Considérations pour la sécurité
La totalité du présent document est consacrée à un système d’authentification qui améliore la sécurité en limitant le danger d’attaques par espionnage/répétition qui ont été utilisées contre les systèmes à simple mot de passe [4].

L’utilisation du système OTP fournit des protections contre les attaques d’espionnage passif et de répétition. Il ne protège pas la confidentialité des données transmises, et ne fournit pas de protection contre les attaques actives telles que la capture de session qui sont connues pour exister à présent dans l’Internet [9]. L’utilisation de la sécurité IP (IPsec, IP Security), voir [10], [11], et [12] est recommandée pour une protection contre la capture de session TCP.

Le succès du système OTP pour la protection des systèmes d’hôte dépend de la non réversibilité des fonctions de hachage utilisées. À notre connaissance, aucun des algorithmes de hachage n’a été cassé, mais on pense généralement [6] que MD4 n’est pas aussi fort que MD5. Si un serveur prend en charge plusieurs algorithmes de hachage, son niveau de sûreté est celui de l’algorithme le plus faible.

11.	Remerciements
L’idée au départ de l’authentification OTP a été proposée par Leslie Lamport [1]. Le système S/KEY de Bellcore, d’où est dérivé OTP, a été proposé par Phil Karn, qui a aussi écrit la plupart des références de mise en œuvre de Bellcore.

12.	Références
[1]	Leslie Lamport, "Password Authentication with Insecure Communication", Communications of the ACM 24.11 (novembre 1981), 770-772

[2]	R. Rivest, "Algorithme MD4 de résumé de message", RFC 1320, avril 1992.

[3]	Neil Haller, "Système S/KEY de mot de passe à utilisation unique", Minutes du symposium ISOC sur les réseaux et les systèmes de sécurité répartis, février 1994, San Diego, CA

[4]	N. Haller et R. Atkinson, "Authentification sur l’Internet ", RFC 1704, octobre 1994.

[5]	N. Haller, "Système S/KEY de mot des passe à utilisation unique", RFC 1760, février 1995.

[6]	R. Rivest, "Algorithme MD5 de résumé de message", RFC 1321, avril 1992.

[7]	National Institute of Standards and Technology (NIST), "Announcing the Secure Hash Standard", FIPS 180-1, U.S. Department of Commerce, avril 1995.

[8]	Organisation internationale de normalisation – Traitement de l’information – Jeu de caractères codé sur 7 bits pour les échanges d’informations (Jeu de caractères codé invariant), norme internationale ISO-646, Genève, Suisse, 1983

[9]	Computer Emergency Response Team (CERT), "IP Spoofing and Hijacked Terminal Connections", CA-95:01, janvier 1995. Disponible via ftp anonyme à info.cert.org in/pub/cert_advisories.

[10]	R. Atkinson, "Architecture de sécurité pour le protocole Internet", RFC 1825, août 1995. (Rendue obsolète par la RFC 2401, novembre 1998.)

[11]	R. Atkinson, "En-tête d’authentification IP", RFC 1826, août 1995. (Rendue obsolète par la RFC 2402, novembre 1998.)

[12]	R. Atkinson, "Encapsulation de charge utile de sécurité dans IP (ESP)", RFC 1827, août 1995. (Rendue obsolète par la RFC 2406, novembre 1998.)

13.	Adresse des auteurs

Neil Haller	Craig Metz	Philip J. Nesser II	
Bellcore	Kaman Sciences Corporation	Nesser & Nesser Consulting	
MCC 1C-265B	For NRL Code 5544	13501 100th Ave NE	
445 South Street	4555 Overlook Avenue, S.W.	Suite 5202	
Morristown, NJ, 07960-6438, USA	Washington, DC, 20375-5337, USA	Kirkland, WA 98034, USA	
Phone: +1 201 829-4478	Phone: +1 202 404-7122	Phone: +1 206 481 4303	
Fax:   +1 201 829-2504	Fax:   +1 202 404-7942	EMail: pjnesser@martigny.ai.mit.edu	
EMail: nmh@bellcore.com	EMail: cmetz@cs.nrl.navy.mil		

Mike Straw
Bellcore
RRC 1A-225
445 Hoes Lane
Piscataway, NJ 08854-4182
Phone:  +1 908 699-5212
EMail:  mess@bellcore.com

Appendice A	Interfaces avec les algorithmes de hachage sécurisé

Les essais originaux d’interopérabilité donnaient des aperçus valables des problèmes subtils qui se posent lors de la conversion des spécifications de protocole en code courant. En particulier, la manipulation de données ordonnées en binaire dépend de l’architecture du matériel, et spécifiquement de la façon dont un ordinateur mémorise des données multi octet. La méthode est normalement appelée gros ou petit "boutien". Une machine grosse boutienne mémorise les données avec l’octet de plus fort poids en premier, alors qu’une machine petite boutienne mémorise d’abord l’octet de moindre poids. Et donc, sur une machine grosse boutienne, les données sont mémorisées de gauche à droite, alors que les machines petites boutiennes mémorisent les données de droite à gauche.

Par exemple, la valeur de quatre octets 0x11AABBCC est mémorisée dans une machine grosse boutienne selon la série de quatre octets suivante, "0x11", "0xAA", "0xBB", et "0xCC", alors que sur une machine petite boutienne cette valeur serait mémorisée "0xCC", "0xBB", "0xAA", et "0x11".

Pour des raisons historiques, et pour promouvoir l’interopérabilité avec les mises en œuvre existantes, il a été décidé que TOUS les hachages incorporés dans le protocole OTP DOIVENT mémoriser le résultat de leur fonction de hachage dans un format PETIT BOUTIEN AVANT que le pliage en 64 bits ne survienne. Ceci est fait dans les mises en œuvre de MD4 et de MD5 (voir les références [2] et [6]), alors que cela doit être fait explicitement pour les mises en œuvre de SHA1 (voir la référence [7]).

Toutes fonctions de hachage futures mises en œuvre dans le protocole OTP DEVRAIENT fournir un fragment de code de référence similaire pour permettre aux mises en œuvre indépendantes de bien fonctionner.

Résumé de message MD4 (voir la référence [2])

MD4_CTX md;
	unsigned char result[16];

	strcpy(buf, seed);     /* le germe doit être en minuscules */
	strcat(buf, passwd);
	MD4Init(&md);
	MD4Update(&md, (unsigned char *)buf, strlen(buf));
	MD4Final(result, &md);

	/* Replier le résultat de 128 bits en 64 bits */
	for (i = 0; i < 8; i++)
	result[i] ^= result[i+8];

Résumé de message MD5 (voir la référence [6])

	MD5_CTX md;
	unsigned char result[16];
	strcpy(buf, seed);     /* le germe doit être en minuscules */
	strcat(buf, passwd);
	MD5Init(&md);
	MD5Update(&md, (unsigned char *)buf, strlen(buf));
	MD5Final(result, &md);

	/* Replier le résultat de 128 bits en 64 bits */
	for (i = 0; i < 8; i++)
	result[i] ^= result[i+8];

Algorithme de hachage sécurisé SHA (voir la référence [7])

	SHA_INFO sha;
	unsigned char result[16];
	strcpy(buf, seed);     /* le germe doit être en minuscules */
	strcat(buf, passwd);
	sha_init(&sha);
	sha_update(&sha, (unsigned char *)buf, strlen(buf));
	sha_final(&sha);       /* NOTE : pas de mémoire tampon de résultat */

	/* Replier le résultat de 160 bits en 64 bits */
	sha.digest[0] ^= sha.digest[2];
	sha.digest[1] ^= sha.digest[3];
	sha.digest[0] ^= sha.digest[4];

/*
* copier les 64 bits résultants dans la mémoire tampon de résultat en mode petit boutien (analogue à celle de MD4Final() et MD5Final()).
*/
     for (i = 0, j = 0; j < 8; i++, j += 4)
     {
             result[j]   = (unsigned char)(sha.digest[i] & 0xff);
             result[j+1] = (unsigned char)((sha.digest[i] >> 8) & 0xff);
             result[j+2] = (unsigned char)((sha.digest[i] >> 16) & 0xff);
             result[j+3] = (unsigned char)((sha.digest[i] >> 24) & 0xff);
     }

Appendice B	Algorithme de dictionnaire de remplacement

L’objet d’un dictionnaire de codage de remplacement du mot de passe à utilisation unique OTP est de permettre l’utilisation de mots spécifiques d’une langue ou faciles à retenir. Comme la traduction de casse n’est pas toujours très bien définie, le dictionnaire de codage de remplacement est sensible à la casse. Les serveurs DEVRAIENT accepter ce codage en plus des codages standard en 6 mots et en hexadécimal.

Générateur de codage utilisant un dictionnaire de remplacement

Le codage standard à 6 mots utilise le placement d’un mot dans le dictionnaire pour représenter un nombre de 11 bits. Le mot de passe à utilisation unique de 64 bits peut alors être représenté par six mots.

Un dictionnaire de remplacement de 2048 mots peut être créé de telle sorte que chaque mot W et la position du mot dans le dictionnaire N obéisse à la relation :
alg( W ) % 2048 == N
où alg est l’algorithme de hachage utilisé (par exemple MD4, MD5, SHA1).

De plus, aucun mot du dictionnaire standard ne peut être choisi.

Le générateur développe le mot de passe à utilisation unique de 64 bits à 66 bits en calculant la parité comme avec le codage standard à six mots. Les six nombres de 11 bits sont alors convertis en mots en utilisant le dictionnaire qui a été créé de telles façon que la relation ci-dessus tienne.

Décodage par le serveur du dictionnaire de remplacement de mots de passe à utilisation unique

Le serveur qui accepte le codage de dictionnaire de remplacement convertit chaque mot en un nombre de 11 bits en utilisant le codage ci-dessus. Ces nombres sont alors utilisés de la même façon que les mots décodés du dictionnaire standard pour former le mot de passe à utilisation unique de 66 bits.

Le serveur n’a pas besoin d’avoir accès au dictionnaire de remplacement qui a été utilisé pour créer le mot de passe à utilisation unique qu’il authentifie. Cela parce que le décodage à partir du mot en nombre à 11 bits ne fait aucune utilisation du dictionnaire. Par suite de l’indépendance à l’égard du dictionnaire, un serveur qui accepte un dictionnaire de remplacement accepte tous les dictionnaires de remplacement.

Appendice C	Exemples de vérifications OTP

Le présent appendice fournit une série d’entrées et de sorties correctes pour les trois hachages cryptographiques définis pour OTP, à savoir MD4, MD5, et SHA1. Le présent document est destiné à être utilisé par les développeurs pour les vérifications d’interopérabilité lors de la création de générateurs ou de serveurs. La sortie est fournie en notation hexadécimale et dans le codage à six mots documenté dans l’Appendice D.

Vérifications générales

Noter que le résultat donné pour ces vérifications n’est pas destiné à être pris au pied de la lettre, mais décrit le type d’action qui devrait être entreprise.

Longueur de phrase de passe
Entrée :
Phrase de passe : Too_short
Germe : iamvalid
Compte : 99
Hachage : ANY
Sortie :
ERREUR :  Phrase de passe trop courte

Entrée :
Phrase de passe :
1234567890123456789012345678901234567890123456789012345678901234
Germe : iamvalid
Compte : 99
Hachage : ANY
Sortie :
AVERTISSEMENT : Phrase de passe plus longue que la longueur recommandée maximum de 63

Valeurs de germe
Entrée :
Phrase de passe :  A_Valid_Pass_Phrase
Germe : Length_Okay
Compte : 99
Hachage : ANY
Sortie :
ERREUR : Le germe doit être purement alphanumérique

Entrée :
Phrase de passe : A_Valid_Pass_Phrase
Germe : LengthOfSeventeen
Compte : 99
Hachage : ANY
Sortie :
ERREUR : Le germe doit être entre 1 et 16 caractères

Entrée :
Phrase de passe :  A_Valid_Pass_Phrase
Germe : Un germe
Compte : 99
Hachage : ANY
Sortie :
ERREUR : Le germe ne doit pas contenir d’espaces

Calculs de parité
Entrée :
Phrase de passe : A_Valid_Pass_Phrase
Germe : AValidSeed
Compte : 99
Hachage : MD5
Sortie :
Hex: 85c43ee03857765b
Six Word(CORRECT) :          FOWL KID MASH DEAD DUAL OAF
Six Word(PARITÉ INCORRECTE) : FOWL KID MASH DEAD DUAL NUT
Six Word(PARITÉ INCORRECTE) : FOWL KID MASH DEAD DUAL O
Six Word(PARITÉ INCORRECTE) : FOWL KID MASH DEAD DUAL OAK

Codages MD4

Phrase de passe	Germe	Cnt	Hexadécimal	Format en six mots	
This is a test.	TeSt	0	D185 4218 EBBB 0B51	ROME MUG FRED SCAN LIVE LACE	
This is a test.	TeSt	1	6347 3EF0 1CD0 B444	CARD SAD MINI RYE COL KIN	
This is a test.	TeSt	99	C5E6 1277 6E6C 237A	NOTE OUT IBIS SINK NAVE MODE	
AbCdEfGhIjK	alpha1	0	5007 6F47 EB1A DE4E	AWAY SEN ROOK SALT LICE MAP	
AbCdEfGhIjK	alpha1	1	65D2 0D19 49B5 F7AB	CHEW GRIM WU HANG BUCK SAID	
AbCdEfGhIjK	alpha1	99	D150 C82C CE6F 62D1	ROIL FREE COG HUNK WAIT COCA	
OTP's are good	correct	0	849C 79D4 F6F5 5388	FOOL STEM DONE TOOL BECK NILE	
OTP's are good	correct	1	8C09 92FB 2508 47B1	GIST AMOS MOOT AIDS FOOD SEEM	
OTP's are good	correct	99	3F3B F4B4 145F D74B	TAG SLOW NOV MIN WOOL KENO	

Codages MD5

Phrase de passe	Germe	Cnt	Hexadécimal	Format en six mots	
This is a test.	TeSt	0	9E87 6134 D904 99DD	INCH SEA ANNE LONG AHEM TOUR	
This is a test.	TeSt	1	7965 E054 36F5 029F	EASE OIL FUM CURE AWRY AVIS	
This is a test.	TeSt	99	50FE 1962 C496 5880	BAIL TUFT BITS GANG CHEF THY	
AbCdEfGhIjK	alpha1	0	8706 6DD9 644B F206	FULL PEW DOWN ONCE MORT ARC	
AbCdEfGhIjK	alpha1	1	7CD3 4C10 40AD D14B	FACT HOOF AT FIST SITE KENT	
AbCdEfGhIjK	alpha1	99	5AA3 7A81 F212 146C	BODE HOP JAKE STOW JUT RAP	
OTP's are good	correct	0	F205 7539 43DE 4CF9	ULAN NEW ARMY FUSE SUIT EYED	
OTP's are good	correct	1	DDCD AC95 6F23 4937	SKIM CULT LOB SLAM POE HOWL	
OTP's are good	correct	99	B203 E28F A525 BE47	LONG IVY JULY AJAR BOND LEE	

Codages SHA1

Phrase de passe	Germe	Cnt	Hexadécimal	Format en six mots	
This is a test.	TeSt	0	BB9E 6AE1 979D 8FF4	MILT VARY MAST OK SEES WENT	
This is a test.	TeSt 	1	63D9 3663 9734 385B	CART OTTO HIVE ODE VAT NUT	
This is a test.	TeSt	99 	87FE C776 8B73 CCF9	GAFF WAIT SKID GIG SKY EYED	
AbCdEfGhIjK	alpha1	0	AD85 F658 EBE3 83C9	LEST OR HEEL SCOT ROB SUIT	
AbCdEfGhIjK	alpha1 	1	D07C E229 B5CF 119B	RITE TAKE GELD COST TUNE RECK	
AbCdEfGhIjK	alpha1	99	27BC 7103 5AAF 3DC6	MAY STAR TIN LYON VEDA STAN	
OTP's are good	correct	0	D51F 3E99 BF8E 6F0B	RUST WELT KICK FELL TAIL FRAU	
OTP's are good 	correct	1	82AE B52D 9437 74E4	FLIT DOSE ALSO MEW DRUM DEFY	
OTP's are good 	correct	99	4F29 6A74 FE15 67EC	AURA ALOE HURL WING BERG WAIT	

Appendice D	Dictionnaire pour la conversion entre formats 6 mots et binaire

Le présent dictionnaire est tiré du module put.c dans la distribution de référence Bellcore originale.

{        "A",     "ABE",   "ACE",   "ACT",   "AD",    "ADA",   "ADD",   "AGO",   "AID",   "AIM",   "AIR",   "ALL",   "ALP",   "AM",    "AMY",   "AN",    "ANA",   "AND",   "ANN",   "ANT",   "ANY",   "APE",   "APS",   "APT",   "ARC",   "ARE",   "ARK",   "ARM",   "ART",   "AS",    "ASH",   "ASK",   "AT",    "ATE",   "AUG",   "AUK",   "AVE",   "AWE",   "AWK",   "AWL",   "AWN",   "AX",   "AYE",   "BAD",   "BAG",   "BAH",   "BAM",   "BAN",   "BAR",   "BAT",   "BAY",   "BE",    "BED",   "BEE",   "BEG",   "BEN",   "BET",   "BEY",   "BIB",   "BID",   "BIG",   "BIN",   "BIT",   "BOB",   "BOG",   "BON",   "BOO",   "BOP",   "BOW",   "BOY",   "BUB",   "BUD",   "BUG",   "BUM",   "BUN",   "BUS",   "BUT",   "BUY",   "BY",   "BYE",   "CAB",   "CAL",   "CAM",   "CAN",   "CAP",   "CAR",   "CAT",   "CAW",   "COD",   "COG",   "COL",   "CON",   "COO",   "COP",   "COT",   "COW",   "COY",   "CRY",   "CUB",   "CUE",   "CUP",   "CUR",   "CUT",   "DAB",   "DAD",   "DAM",   "DAN",   "DAR",   "DAY",   "DEE",   "DEL",   "DEN",   "DES",   "DEW",   "DID",   "DIE",   "DIG",   "DIN",   "DIP",   "DO",    "DOE",   "DOG",   "DON",   "DOT",   "DOW",   "DRY",   "DUB",   "DUD",   "DUE",   "DUG",   "DUN",   "EAR",   "EAT",   "ED",    "EEL",   "EGG",   "EGO",   "ELI",   "ELK",   "ELM",   "ELY",   "EM",    "END",   "EST",   "ETC",   "EVA",   "EVE",   "EWE",   "EYE",   "FAD",   "FAN",   "FAR",   "FAT",   "FAY",   "FED",   "FEE",   "FEW",   "FIB",   "FIG",   "FIN",   "FIR",   "FIT",   "FLO",   "FLY",   "FOE",   "FOG",   "FOR",   "FRY",   "FUM",   "FUN",   "FUR",   "GAB",   "GAD",   "GAG",   "GAL",   "GAM",   "GAP",   "GAS",   "GAY",   "GEE",   "GEL",   "GEM",   "GET",   "GIG",   "GIL",   "GIN",   "GO",    "GOT",   "GUM",   "GUN",   "GUS",   "GUT",   "GUY",   "GYM",   "GYP",   "HA",    "HAD",   "HAL",   "HAM",   "HAN",   "HAP",   "HAS",   "HAT",   "HAW",   "HAY",   "HE",    "HEM",   "HEN",   "HER",   "HEW",   "HEY",   "HI",    "HID",   "HIM",   "HIP",   "HIS",   "HIT",   "HO",   "HOB",   "HOC",   "HOE",   "HOG",   "HOP",   "HOT",   "HOW",   "HUB",   "HUE",   "HUG",   "HUH",   "HUM",   "HUT",   "I",     "ICY",   "IDA",   "IF",    "IKE",   "ILL",   "INK",   "INN",   "IO",    "ION",   "IQ",   "IRA",   "IRE",   "IRK",   "IS",    "IT",   "ITS",   "IVY",   "JAB",   "JAG",   "JAM",   "JAN",   "JAR",   "JAW",   "JAY",   "JET",   "JIG",   "JIM",   "JO",    "JOB",   "JOE",   "JOG",   "JOT",   "JOY",   "JUG",   "JUT",   "KAY",   "KEG",   "KEN",   "KEY",   "KID",   "KIM",   "KIN",   "KIT",   "LA",    "LAB",   "LAC",   "LAD",   "LAG",   "LAM",   "LAP",   "LAW",   "LAY",   "LEA",   "LED",   "LEE",   "LEG",   "LEN",   "LEO",   "LET",   "LEW",   "LID",   "LIE",   "LIN",   "LIP",   "LIT",   "LO",   "LOB",   "LOG",   "LOP",   "LOS",   "LOT",   "LOU",   "LOW",   "LOY",   "LUG",   "LYE",   "MA",    "MAC",   "MAD",   "MAE",   "MAN",   "MAO",   "MAP",   "MAT",   "MAW",   "MAY",   "ME",   "MEG",   "MEL",   "MEN",   "MET",   "MEW",   "MID",   "MIN",   "MIT",   "MOB",   "MOD",   "MOE",   "MOO",   "MOP",   "MOS",   "MOT",   "MOW",   "MUD",   "MUG",   "MUM",   "MY",    "NAB",   "NAG",   "NAN",   "NAP",   "NAT",   "NAY",   "NE",   "NED",   "NEE",   "NET",   "NEW",   "NIB",   "NIL",   "NIP",   "NIT",   "NO",    "NOB",   "NOD",   "NON",   "NOR",   "NOT",   "NOV",   "NOW",   "NU",    "NUN",   "NUT",   "O",     "OAF",   "OAK",   "OAR",   "OAT",   "ODD",   "ODE",   "OF",    "OFF",   "OFT",    "OH",    "OIL",   "OK",   "OLD",   "ON",    "ONE",   "OR",    "ORB",   "ORE",   "ORR",   "OS",   "OTT",   "OUR",   "OUT",   "OVA",   "OW",   "OWE",   "OWL",   "OWN",   "OX",    "PA",    "PAD",   "PAL",   "PAM",   "PAN",   "PAP",   "PAR",   "PAT",   "PAW",   "PAY",   "PEA",   "PEG",   "PEN",   "PEP",   "PER",   "PET",   "PEW",   "PHI",   "PI",    "PIE",   "PIN",   "PIT",   "PLY",   "PO",    "POD",   "POE",   "POP",   "POT",   "POW",   "PRO",   "PRY",   "PUB",   "PUG",   "PUN",   "PUP",   "PUT",   "QUO",   "RAG",   "RAM",   "RAN",   "RAP",   "RAT",   "RAW",   "RAY",   "REB",   "RED",   "REP",   "RET",   "RIB",   "RID",   "RIG",   "RIM",   "RIO",   "RIP",   "ROB",   "ROD",   "ROE",   "RON",   "ROT",   "ROW",   "ROY",   "RUB",   "RUE",   "RUG",   "RUM",   "RUN",   "RYE",   "SAC",   "SAD",   "SAG",   "SAL",   "SAM",   "SAN",   "SAP",   "SAT",   "SAW",   "SAY",   "SEA",   "SEC",   "SEE",   "SEN",   "SET",   "SEW",   "SHE",   "SHY",   "SIN",   "SIP",   "SIR",   "SIS",   "SIT",   "SKI",   "SKY",   "SLY",   "SO",    "SOB",   "SOD",   "SON",   "SOP",   "SOW",   "SOY",  "SPA",   "SPY",   "SUB",   "SUD",   "SUE",   "SUM",   "SUN",   "SUP",  "TAB",   "TAD",   "TAG",   "TAN",   "TAP",   "TAR",   "TEA",   "TED",  "TEE",   "TEN",   "THE",   "THY",   "TIC",   "TIE",   "TIM",   "TIN",  "TIP",   "TO",    "TOE",   "TOG",   "TOM",   "TON",   "TOO",   "TOP",  "TOW",   "TOY",   "TRY",   "TUB",   "TUG",   "TUM",   "TUN",   "TWO",  "UN",    "UP",    "US",   "USE",   "VAN",   "VAT",   "VET",   "VIE",  "WAD",   "WAG",   "WAR",   "WAS",   "WAY",   "WE",    "WEB",   "WED",  "WEE",   "WET",   "WHO",   "WHY",   "WIN",   "WIT",   "WOK",   "WON",  "WOO",   "WOW",   "WRY",   "WU",    "YAM",   "YAP",   "YAW",   "YE",  "YEA",   "YES",   "YET",   "YOU",   "ABED",  "ABEL",  "ABET",  "ABLE",  "ABUT",  "ACHE",  "ACID",  "ACME",  "ACRE",  "ACTA",  "ACTS",  "ADAM",  "ADDS",  "ADEN",  "AFAR",  "AFRO",  "AGEE",  "AHEM",  "AHOY",  "AIDA",  "AIDE",  "AIDS",  "AIRY",  "AJAR",  "AKIN",  "ALAN",  "ALEC",  "ALGA",  "ALIA",  "ALLY",  "ALMA",  "ALOE",  "ALSO",  "ALTO",  "ALUM",  "ALVA",  "AMEN",  "AMES",  "AMID",  "AMMO",  "AMOK",  "AMOS",  "AMRA",  "ANDY",  "ANEW",  "ANNA",  "ANNE",  "ANTE",  "ANTI",  "AQUA",  "ARAB",  "ARCH",  "AREA",  "ARGO",  "ARID",  "ARMY",  "ARTS",  "ARTY",  "ASIA",  "ASKS",  "ATOM",  "AUNT",  "AURA",  "AUTO",  "AVER",  "AVID",  "AVIS",  "AVON",  "AVOW",  "AWAY",  "AWRY",  "BABE",  "BABY",  "BACH",  "BACK",  "BADE",  "BAIL",  "BAIT",  "BAKE",  "BALD",  "BALE",  "BALI",  "BALK",  "BALL",  "BALM",  "BAND",  "BANE",  "BANG",  "BANK",  "BARB",  "BARD",  "BARE",  "BARK",  "BARN",  "BARR",  "BASE",  "BASH",  "BASK",  "BASS",  "BATE",  "BATH",  "BAWD",  "BAWL",  "BEAD",  "BEAK",  "BEAM",  "BEAN",  "BEAR",  "BEAT",  "BEAU",  "BECK",  "BEEF",  "BEEN",  "BEER",  "BEET",  "BELA",  "BELL",  "BELT",  "BEND",  "BENT",  "BERG",  "BERN",  "BERT",  "BESS",  "BEST",  "BETA",  "BETH",  "BHOY",  "BIAS",  "BIDE",  "BIEN",  "BILE",  "BILK",  "BILL",  "BIND",  "BING",  "BIRD",  "BITE",  "BITS",  "BLAB",  "BLAT",  "BLED",  "BLEW",  "BLOB",  "BLOC",  "BLOT",  "BLOW",  "BLUE",  "BLUM",  "BLUR",  "BOAR",  "BOAT",  "BOCA",  "BOCK",  "BODE",  "BODY",  "BOGY",  "BOHR",  "BOIL",  "BOLD",  "BOLO",  "BOLT",  "BOMB",  "BONA",  "BOND",  "BONE",  "BONG",  "BONN",  "BONY",  "BOOK",  "BOOM",  "BOON",  "BOOT",  "BORE",  "BORG",  "BORN",  "BOSE",  "BOSS",  "BOTH",  "BOUT",  "BOWL",  "BOYD",  "BRAD",  "BRAE",  "BRAG",  "BRAN",  "BRAY",  "BRED",  "BREW",  "BRIG",  "BRIM",  "BROW",  "BUCK",  "BUDD",  "BUFF",  "BULB",  "BULK",  "BULL",  "BUNK",  "BUNT",  "BUOY",  "BURG",  "BURL",  "BURN",  "BURR",  "BURT",  "BURY",  "BUSH",  "BUSS",  "BUST",  "BUSY",  "BYTE",  "CADY",  "CAFE",  "CAGE",  "CAIN",  "CAKE",  "CALF",  "CALL",  "CALM",  "CAME",  "CANE",  "CANT",  "CARD",  "CARE",  "CARL",  "CARR",  "CART",  "CASE",  "CASH",  "CASK",  "CAST",  "CAVE",  "CEIL",  "CELL",  "CENT",  "CERN",  "CHAD",  "CHAR",  "CHAT",  "CHAW",  "CHEF",  "CHEN",  "CHEW",  "CHIC",  "CHIN",  "CHOU",  "CHOW",  "CHUB",  "CHUG",  "CHUM",  "CITE",  "CITY",  "CLAD",  "CLAM",  "CLAN",  "CLAW",  "CLAY",  "CLOD",  "CLOG",  "CLOT",  "CLUB",  "CLUE",  "COAL",  "COAT",  "COCA",  "COCK",  "COCO",  "CODA",  "CODE",  "CODY",  "COED",  "COIL",  "COIN",  "COKE",  "COLA",  "COLD",  "COLT",  "COMA",  "COMB",  "COME",  "COOK",  "COOL",  "COON",  "COOT",  "CORD",  "CORE",  "CORK",  "CORN",  "COST",  "COVE",  "COWL",  "CRAB",  "CRAG",  "CRAM",  "CRAY",  "CREW",  "CRIB",  "CROW",  "CRUD",  "CUBA",  "CUBE",  "CUFF",  "CULL",  "CULT",  "CUNY",  "CURB",  "CURD",  "CURE",  "CURL",  "CURT",  "CUTS",  "DADE",  "DALE",  "DAME",  "DANA",  "DANE",  "DANG",  "DANK",  "DARE",  "DARK",  "DARN",  "DART",  "DASH",  "DATA",  "DATE",  "DAVE",  "DAVY",  "DAWN",  "DAYS",  "DEAD",  "DEAF",  "DEAL",  "DEAN",  "DEAR",  "DEBT",  "DECK",  "DEED",  "DEEM",  "DEER",  "DEFT",  "DEFY",  "DELL",  "DENT",  "DENY",  "DESK",  "DIAL",  "DICE",  "DIED",  "DIET",  "DIME",  "DINE",  "DING",  "DINT",  "DIRE",  "DIRT",  "DISC",  "DISH",  "DISK",  "DIVE",  "DOCK",  "DOES",  "DOLE",  "DOLL",  "DOLT",  "DOME",  "DONE",  "DOOM",  "DOOR",  "DORA",  "DOSE",  "DOTE",  "DOUG",  "DOUR",  "DOVE",  "DOWN",  "DRAB",  "DRAG",  "DRAM",  "DRAW",  "DREW",  "DRUB",  "DRUG",  "DRUM",  "DUAL",  "DUCK",  "DUCT",  "DUEL",  "DUET",  "DUKE",  "DULL",  "DUMB",  "DUNE",  "DUNK",  "DUSK",  "DUST",  "DUTY",  "EACH",  "EARL",  "EARN",  "EASE",  "EAST",  "EASY",  "EBEN",  "ECHO",  "EDDY",  "EDEN",  "EDGE",  "EDGY",  "EDIT",  "EDNA",  "EGAN",  "ELAN",  "ELBA",  "ELLA",  "ELSE",  "EMIL",  "EMIT",  "EMMA",  "ENDS",  "ERIC",  "EROS",  "EVEN",  "EVER",  "EVIL",  "EYED",  "FACE",  "FACT",  "FADE",  "FAIL",  "FAIN",  "FAIR",  "FAKE",  "FALL",  "FAME",  "FANG",  "FARM",  "FAST",  "FATE",  "FAWN",  "FEAR",  "FEAT",  "FEED",  "FEEL",  "FEET",  "FELL",  "FELT",  "FEND",  "FERN",  "FEST",  "FEUD",  "FIEF",  "FIGS",  "FILE",  "FILL",  "FILM",  "FIND",  "FINE",  "FINK",  "FIRE",  "FIRM",  "FISH",  "FISK",  "FIST",  "FITS",  "FIVE",  "FLAG",  "FLAK",  "FLAM",  "FLAT",  "FLAW",  "FLEA",  "FLED",  "FLEW",  "FLIT",  "FLOC",  "FLOG",  "FLOW",  "FLUB",  "FLUE",  "FOAL",  "FOAM",  "FOGY",  "FOIL",  "FOLD",  "FOLK",  "FOND",  "FONT",  "FOOD",  "FOOL",  "FOOT",  "FORD",  "FORE",  "FORK",  "FORM",  "FORT",  "FOSS",  "FOUL",  "FOUR",  "FOWL",  "FRAU",  "FRAY",  "FRED",  "FREE",  "FRET",  "FREY",  "FROG",  "FROM",  "FUEL",  "FULL",  "FUME",  "FUND",  "FUNK",  "FURY",  "FUSE",  "FUSS",  "GAFF",  "GAGE",  "GAIL",  "GAIN",  "GAIT",  "GALA",  "GALE",  "GALL",  "GALT",  "GAME",  "GANG",  "GARB",  "GARY",  "GASH",  "GATE",  "GAUL",  "GAUR",  "GAVE",  "GAWK",  "GEAR",  "GELD",  "GENE",  "GENT",  "GERM",  "GETS",  "GIBE",  "GIFT",  "GILD",  "GILL",  "GILT",  "GINA",  "GIRD",  "GIRL",  "GIST",  "GIVE",  "GLAD",  "GLEE",  "GLEN",  "GLIB",  "GLOB",  "GLOM",  "GLOW",  "GLUE",  "GLUM",  "GLUT",  "GOAD",  "GOAL",  "GOAT",  "GOER",  "GOES",  "GOLD",  "GOLF",  "GONE",  "GONG",  "GOOD",  "GOOF",  "GORE",  "GORY",  "GOSH",  "GOUT",  "GOWN",  "GRAB",  "GRAD",  "GRAY",  "GREG",  "GREW",  "GREY",  "GRID",  "GRIM",  "GRIN",  "GRIT",  "GROW",  "GRUB",  "GULF",  "GULL",  "GUNK",  "GURU",  "GUSH",  "GUST",  "GWEN",  "GWYN",  "HAAG",  "HAAS",  "HACK",  "HAIL",  "HAIR",  "HALE",  "HALF",  "HALL",  "HALO",  "HALT",  "HAND",  "HANG",  "HANK",  "HANS",  "HARD",  "HARK",  "HARM",  "HART",  "HASH",  "HAST",  "HATE",  "HATH",  "HAUL",  "HAVE",  "HAWK",  "HAYS",  "HEAD",  "HEAL",  "HEAR",  "HEAT",  "HEBE",  "HECK",  "HEED",  "HEEL",  "HEFT",  "HELD",  "HELL",  "HELM",  "HERB",  "HERD",  "HERE",  "HERO",  "HERS",  "HESS",  "HEWN",  "HICK",  "HIDE",  "HIGH",  "HIKE",  "HILL",  "HILT",  "HIND",  "HINT",  "HIRE",  "HISS",  "HIVE",  "HOBO",  "HOCK",  "HOFF",  "HOLD",  "HOLE",  "HOLM",  "HOLT",  "HOME",  "HONE",  "HONK",  "HOOD",  "HOOF",  "HOOK",  "HOOT",  "HORN",  "HOSE",  "HOST",  "HOUR",  "HOVE",  "HOWE",  "HOWL",  "HOYT",  "HUCK",  "HUED",  "HUFF",  "HUGE",  "HUGH",  "HUGO",  "HULK",  "HULL",  "HUNK",  "HUNT",  "HURD",  "HURL",  "HURT",  "HUSH",  "HYDE",  "HYMN",  "IBIS",  "ICON",  "IDEA",  "IDLE",  "IFFY",  "INCA",  "INCH",  "INTO",  "IONS",  "IOTA",  "IOWA",  "IRIS",  "IRMA",  "IRON",  "ISLE",  "ITCH",  "ITEM",  "IVAN",  "JACK",  "JADE",  "JAIL",  "JAKE",  "JANE",  "JAVA",  "JEAN",  "JEFF",  "JERK",  "JESS",  "JEST",  "JIBE",  "JILL",  "JILT",  "JIVE",  "JOAN",  "JOBS",  "JOCK",  "JOEL",  "JOEY",  "JOHN",  "JOIN",  "JOKE",  "JOLT",  "JOVE",  "JUDD",  "JUDE",  "JUDO",  "JUDY",  "JUJU",  "JUKE",  "JULY",  "JUNE",  "JUNK",  "JUNO",  "JURY",  "JUST",  "JUTE",  "KAHN",  "KALE",  "KANE",  "KANT",  "KARL",  "KATE",  "KEEL",  "KEEN",  "KENO",  "KENT",  "KERN",  "KERR",  "KEYS",  "KICK",  "KILL",  "KIND",  "KING",  "KIRK",  "KISS",  "KITE",  "KLAN",  "KNEE",  "KNEW",  "KNIT",  "KNOB",  "KNOT",  "KNOW",  "KOCH",  "KONG",  "KUDO",  "KURD",  "KURT",  "KYLE",  "LACE",  "LACK",  "LACY",  "LADY",  "LAID",  "LAIN",  "LAIR",  "LAKE",  "LAMB",  "LAME",  "LAND",  "LANE",  "LANG",  "LARD",  "LARK",  "LASS",  "LAST",  "LATE",  "LAUD",  "LAVA",  "LAWN",  "LAWS",  "LAYS",  "LEAD",  "LEAF",  "LEAK",  "LEAN",  "LEAR",  "LEEK",  "LEER",  "LEFT",  "LEND",  "LENS",  "LENT",  "LEON",  "LESK",  "LESS",  "LEST",  "LETS",  "LIAR",  "LICE",  "LICK",  "LIED",  "LIEN",  "LIES",  "LIEU",  "LIFE",  "LIFT",  "LIKE",  "LILA",  "LILT",  "LILY",  "LIMA",  "LIMB",  "LIME",  "LIND",  "LINE",  "LINK",  "LINT",  "LION",  "LISA",  "LIST",  "LIVE",  "LOAD",  "LOAF",  "LOAM",  "LOAN",  "LOCK",  "LOFT",  "LOGE",  "LOIS",  "LOLA",  "LONE",  "LONG",  "LOOK",  "LOON",  "LOOT",  "LORD",  "LORE",  "LOSE",  "LOSS",  "LOST",  "LOUD",  "LOVE",  "LOWE",  "LUCK",  "LUCY",  "LUGE",  "LUKE",  "LULU",  "LUND",  "LUNG",  "LURA",  "LURE",  "LURK",  "LUSH",  "LUST",  "LYLE",  "LYNN",  "LYON",  "LYRA",  "MACE",  "MADE",  "MAGI",  "MAID",  "MAIL",  "MAIN",  "MAKE",  "MALE",  "MALI",  "MALL",  "MALT",  "MANA",  "MANN",  "MANY",  "MARC",  "MARE",  "MARK",  "MARS",  "MART",  "MARY",  "MASH",  "MASK",  "MASS",  "MAST",  "MATE",  "MATH",  "MAUL",  "MAYO",  "MEAD",  "MEAL",  "MEAN",  "MEAT",  "MEEK",  "MEET",  "MELD",  "MELT",  "MEMO",  "MEND",  "MENU",  "MERT",  "MESH",  "MESS",  "MICE",  "MIKE",  "MILD",  "MILE",  "MILK",  "MILL",  "MILT",  "MIMI",  "MIND",  "MINE",  "MINI",  "MINK",  "MINT",  "MIRE",  "MISS",  "MIST",  "MITE",  "MITT",  "MOAN",  "MOAT",  "MOCK",  "MODE",  "MOLD",  "MOLE",  "MOLL",  "MOLT",  "MONA",  "MONK",  "MONT",  "MOOD",  "MOON",  "MOOR",  "MOOT",  "MORE",  "MORN",  "MORT",  "MOSS",  "MOST",  "MOTH",  "MOVE",  "MUCH",  "MUCK",  "MUDD",  "MUFF",  "MULE",  "MULL",  "MURK",  "MUSH",  "DOIT",  "MUTE",  "MUTT",  "MYRA",  "MYTH",  "NAGY",  "NAIL",  "NAIR",  "NAME",  "NARY",  "NASH",  "NAVE",  "NAVY",  "NEAL",  "NEAR",  "NEAT",  "NECK",  "NEED",  "NEIL",  "NELL",  "NEON",  "NERO",  "NESS",  "NEST",  "NEWS",  "NEWT",  "NIBS",  "NICE",  "NICK",  "NILE",  "NINA",  "NINE",  "NOAH",  "NODE",  "NOEL",  "NOLL",  "NONE",  "NOOK",  "NOON",  "NORM",  "NOSE",  "NOTE",  "NOUN",  "NOVA",  "NUDE",  "NULL",  "NUMB",  "OATH",  "OBEY",  "OBOE",  "ODIN",  "OHIO",  "OILY",  "OINT",  "OKAY",  "OLAF",  "OLDY",  "OLGA",  "OLIN",  "OMAN",  "OMEN",  "OMIT",  "ONCE",  "ONES",  "ONLY",  "ONTO",  "ONUS",  "ORAL",  "ORGY",  "OSLO",  "OTIS",  "OTTO",  "OUCH",  "OUST",  "OUTS",  "OVAL",  "OVEN",  "OVER",  "OWLY",  "OWNS",  "QUAD",  "QUIT",  "QUOD",  "RACE",  "RACK",  "RACY",  "RAFT",  "RAGE",  "RAID",  "RAIL",  "RAIN",  "RAKE",  "RANK",  "RANT",  "RARE",  "RASH",  "RATE",  "RAVE",  "RAYS",  "READ",  "REAL",  "REAM",  "REAR",  "RECK",  "REED",  "REEF",  "REEK",  "REEL",  "REID",  "REIN",  "RENA",  "REND",  "RENT",  "REST",  "RICE",  "RICH",  "RICK",  "RIDE",  "RIFT",  "RILL",  "RIME",  "RING",  "RINK",  "RISE",  "RISK",  "RITE",  "ROAD",  "ROAM",  "ROAR",  "ROBE",  "ROCK",  "RODE",  "ROIL",  "ROLL",  "ROME",  "ROOD",  "ROOF",  "ROOK",  "ROOM",  "ROOT",  "ROSA",  "ROSE",  "ROSS",  "ROSY",  "ROTH",  "ROUT",  "ROVE",  "ROWE",  "ROWS",  "RUBE",  "RUBY",  "RUDE",  "RUDY",  "RUIN",  "RULE",  "RUNG",  "RUNS",  "RUNT",  "RUSE",  "RUSH",  "RUSK",  "RUSS",  "RUST",  "RUTH",  "SACK",  "SAFE",  "SAGE",  "SAID",  "SAIL",  "SALE",  "SALK",  "SALT",  "SAME",  "SAND",  "SANE",  "SANG",  "SANK",  "SARA",  "SAUL",  "SAVE",  "SAYS",  "SCAN",  "SCAR",  "SCAT",  "SCOT",  "SEAL",  "SEAM",  "SEAR",  "SEAT",  "SEED",  "SEEK",  "SEEM",  "SEEN",  "SEES",  "SELF",  "SELL",  "SEND",  "SENT",  "SETS",  "SEWN",  "SHAG",  "SHAM",  "SHAW",  "SHAY",  "SHED",  "SHIM",  "SHIN",  "SHOD",  "SHOE",  "SHOT",  "SHOW",  "SHUN",  "SHUT",  "SICK",  "SIDE",  "SIFT",  "SIGH",  "SIGN",  "SILK",  "SILL",  "SILO",  "SILT",  "SINE",  "SING",  "SINK",  "SIRE",  "SITE",  "SITS",  "SITU",  "SKAT",  "SKEW",  "SKID",  "SKIM",  "SKIN",  "SKIT",  "SLAB",  "SLAM",  "SLAT",  "SLAY",  "SLED",  "SLEW",  "SLID",  "SLIM",  "SLIT",  "SLOB",  "SLOG",  "SLOT",  "SLOW",  "SLUG",  "SLUM",  "SLUR",  "SMOG",  "SMUG",  "SNAG",  "SNOB",  "SNOW",  "SNUB",  "SNUG",  "SOAK",  "SOAR",  "SOCK",  "SODA",  "SOFA",  "SOFT",  "SOIL",  "SOLD",  "SOME",  "SONG",  "SOON",  "SOOT",  "SORE",  "SORT",  "SOUL",  "SOUR",  "SOWN",  "STAB",  "STAG",  "STAN",  "STAR",  "STAY",  "STEM",  "STEW",  "STIR",  "STOW",  "STUB",  "STUN",  "SUCH",  "SUDS",  "SUIT",  "SULK",  "SUMS",  "SUNG",  "SUNK",  "SURE",  "SURF",  "SWAB",  "SWAG",  "SWAM",  "SWAN",  "SWAT",  "SWAY",  "SWIM",  "SWUM",  "TACK",  "TACT",  "TAIL",  "TAKE",  "TALE",  "TALK",  "TALL",  "TANK",  "TASK",  "TATE",  "TAUT",  "TEAL",  "TEAM",  "TEAR",  "TECH",  "TEEM",  "TEEN",  "TEET",  "TELL",  "TEND",  "TENT",  "TERM",  "TERN",  "TESS",  "TEST",  "THAN",  "THAT",  "THEE",  "THEM",  "THEN",  "THEY",  "THIN",  "THIS",  "THUD",  "THUG",  "TICK",  "TIDE",  "TIDY",  "TIED",  "TIER",  "TILE",  "TILL",  "TILT",  "TIME",  "TINA",  "TINE",  "TINT",  "TINY",  "TIRE",  "TOAD",  "TOGO",  "TOIL",  "TOLD",  "TOLL",  "TONE",  "TONG",  "TONY",  "TOOK",  "TOOL",  "TOOT",  "TORE",  "TORN",  "TOTE",  "TOUR",  "TOUT",  "TOWN",  "TRAG",  "TRAM",  "TRAY",  "TREE",  "TREK",  "TRIG",  "TRIM",  "TRIO",  "TROD",  "TROT",  "TROY",  "TRUE",  "TUBA",  "TUBE",  "TUCK",  "TUFT",  "TUNA",  "TUNE",  "TUNG",  "TURF",  "TURN",  "TUSK",  "TWIG",  "TWIN",  "TWIT",  "ULAN",  "UNIT",  "URGE",  "USED",  "USER",  "USES",  "UTAH",  "VAIL",  "VAIN",  "VALE",  "VARY",  "VASE",  "VAST",  "VEAL",  "VEDA",  "VEIL",  "VEIN",  "VEND",  "VENT",  "VERB",  "VERY",  "VETO",  "VICE",  "VIEW",  "VINE",  "VISE",  "VOID",  "VOLT",  "VOTE",  "WACK",  "WADE",  "WAGE",  "WAIL",  "WAIT",  "WAKE",  "WALE",  "WALK",  "WALL",  "WALT",  "WAND",  "WANE",  "WANG",  "WANT",  "WARD",  "WARM",  "WARN",  "WART",  "WASH",  "WAST",  "WATS",  "WATT",  "WAVE",  "WAVY",  "WAYS",  "WEAK",  "WEAL",  "WEAN",  "WEAR",  "WEED",  "WEEK",  "WEIR",  "WELD",  "WELL",  "WELT",  "WENT",  "WERE",  "WERT",  "WEST",  "WHAM",  "WHAT",  "WHEE",  "WHEN",  "WHET",  "WHOA",  "WHOM",  "WICK",  "WIFE",  "WILD",  "WILL",  "WIND",  "WINE",  "WING",  "WINK",  "WINO",  "WIRE",  "WISE",  "WISH",  "WITH",  "WOLF",  "WONT",  "WOOD",  "WOOL",  "WORD",  "WORE",  "WORK",  "WORM",  "WORN",  "WOVE",  "WRIT",  "WYNN",  "YALE",  "YANG",  "YANK",  "YARD",  "YARN",  "YAWL",  "YAWN",  "YEAH",  "YEAR",  "YELL",  "YOGA",  "YOKE"   };

Déclaration complète de droits de reproduction

Copyright (C) The Internet Society (1998). Tous droits réservés.

Ce document et les traductions de celui-ci peuvent être copiés et diffusés, et les travaux dérivés qui commentent ou expliquent autrement ou aident à sa mise en œuvre peuvent être préparés, copiés, publiés et distribués, partiellement ou en totalité, sans restriction d'aucune sorte, à condition que l'avis de copyright ci-dessus et ce paragraphe soit inclus sur toutes ces copies et œuvres dérivées. Toutefois, ce document lui-même ne peut être modifié en aucune façon, par exemple en supprimant le droit d'auteur ou les références à l'Internet Society ou d'autres organisations Internet, sauf si c'est nécessaire à l'élaboration des normes Internet, auquel cas les procédures pour les copyrights définis dans les processus de normes pour Internet doivent être suivies, ou si nécessaire pour le traduire dans des langues autres que l'anglais.

Les permissions limitées accordées ci-dessus sont perpétuelles et ne seront pas révoquées par la Société Internet ou ses successeurs ou ayants droit.

Ce document et les renseignements qu'il contient sont fournis "TELS QUELS" et L'INTERNET SOCIETY ET L'INTERNET ENGINEERING TASK FORCE DÉCLINENT TOUTE GARANTIE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER, TOUTE GARANTIE QUE L'UTILISATION DE L'INFORMATION ICI PRÉSENTE N'ENFREINDRA AUCUN DROIT OU AUCUNE GARANTIE IMPLICITE DE COMMERCIALISATION OU D'ADAPTATION À UN OBJET PARTICULIER.