Groupe de travail réseau

R. Housley, T. Horting, P. Yee

Request for Comments : 2943

SPYRUS

Catégorie : Encours de normalisation

septembre 2000

Traduction Claude Brière de L'Isle




Authentification Telnet avec DSA



Statut du présent mémoire

Le présent document spécifie un protocole de l’Internet en cours de normalisation pour la communauté de l’Internet, et appelle à des discussions 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 (2000). Tous droits réservés.


Résumé

Le présent document définit un mécanisme d'authentification Telnet qui utilise l'agorithme de signatures numérique (DSA, Digital Signature Algorithm) [FIPS186]. Il s'appuie sur l'option d'authentification Telnet [RFC2941].


1. Noms et codes des commandes


AUTHENTICATION : 37


Commandes d'authentification :

IS 0

SEND 1

REPLY 2

NAME 3


Types d'authentification :

DSS 14


Modificateurs :

AUTH_WHO_MASK 1

AUTH_CLIENT_TO_SERVER 0

AUTH_SERVER_TO CLIENT 1

AUTH_HOW_MASK 2

AUTH_HOW_ONE_WAY 0

AUTH_HOW_MUTUAL 2


ENCRYPT_MASK 20

ENCRYPT_OFF 0

ENCRYPT_USING_TELOPT 4

ENCRYPT_AFTER_EXCHANGE 16

ENCRYPT_RESERVED 20


INI_CRED_FWD_MASK 8

INI_CRED_FWD_OFF 0

INI_CRED_FWD_ON 8


Commandes de sous option :

DSS_INITIALIZE 1

DSS_TOKENBA 2

DSS_CERTA_TOKENAB 3

DSS_CERTB_TOKENBA2 4


2. Extensions Telnet de sécurité


Telnet, en tant que protocole, n'a pas de concept de sécurité. Sans option négociée, il passe simplement les caractères entre les terminaux réseau virtuels (NVT, network virtual terminal) représentés par les deux processus Telnet. Dans son utilisation la plus courante comme protocole pour l'accès à des terminaux distants (accès TCP 23) Telnet se connecte à un serveur qui exige une authentification au niveau de l'utilisateur par un nom d'utilisateur et un mot de passe en clair ; le serveur ne s'authentifie pas lui-même envers l'usager.


L'option d'authentification Telnet assure l'authentification de l'utilisateur et celle du serveur. L'authentification de l'utilisateur remplace ou augmente le mécanisme de mot de passe de l'hôte. L'authentification du serveur est normalement faite en conjonction avec l'authentification de l'utilisateur.


Afin de prendre en charge ces services de sécurité, les deux entités Telnet doivent d'abord négocier leur volonté de prendre en charge l'option d'authentification Telnet. Si il y a accord pour prendre en charge cette option, les parties sont alors capables d'effectuer les négociations de sous option sur le protocole d'authentification à utiliser, et éventuellement sur le nom d'utilisateur distant à utiliser pour les vérifications d'autorisation.


La négociation de l'authentification et des paramètres survient au sein d'une série d'échanges non limitée. Le serveur propose une liste ordonnée par préférences des types (mécanismes) d'authentification qu'il prend en charge. En plus de la liste des mécanismes qu'il accepte, le serveur qualifie chaque mécanisme avec un modificateur qui spécifie si l'authentification est unilatérale ou mutuelle, et dans quelle direction l'authentification est à effectuer. Le client choisit un mécanisme de cette liste et répond au serveur en indiquant son choix et le premier ensemble de données d'authentification nécessaire pour le type d'authentification choisi. Le serveur et le client procèdent alors au nombre d'itérations nécessaires pour arriver à l'authentification demandée.


3. Utilisation de l'algorithme de signature numérique (DSA)


DSA (Digital Signature Algorithm) est aussi appelé norme de signature numérique (DSS, Digital Signature Standard) et les deux noms sont utilisés de façon interchangeable. Le présent document spécifie une méthode dans laquelle DSA peut être utilisé pour réaliser certains services de sécurité lorsque ils sont utilisés en conjonction avec l'option d'authentification Telnet. SHA-1 [FIPS180-1] est utilisé avec DSA [FIPS186].


DSA peut fournir l'authentification aussi bien unilatérale que mutuelle. Du fait de la nature caractère par caractère de Telnet, il ne convient pas très bien pour l'application de services de seule protection de l'intégrité, et donc l'utilisation du profil de DSA fournit l'authentification mais n'assure pas l'intégrité de session. La présente spécification suit les jetons et échanges définis dans la PUB 196 FIPS du NIST [FIPS196], Norme pour les mécanismes d'authentification d'entités par clés de chiffrement publiques incluant l'appendice A sur le codage ASN.1 des messages et des jetons. Toutes les données qui sont couvertes par une signature numérique doivent être codées en utilisant les règles de codage distinctif (DER, Distinguished Encoding Rules). Cependant, d'autres données peuvent utiliser les règles de codage de base (BER, Basic Encoding Rules) ou les règles de codage distinctif (DER) [X.208].


3.1 Authentification unilatérale avec DSA


L'authentification unilatérale doit être faite de client à serveur. On donne ci-après les étapes nécessaires du protocole pour effectuer l'authentification DSA comme spécifiée dans FIPS PUB 196 dans le cadre de l'option d'authentification Telnet. En cas de défaillances, les codes de retour suivent ceux spécifiés dans l'option d'authentification Telnet. On n'en fait pas la liste ici car ils ne varient pas selon le mécanisme utilisé. La norme FIPS PUB 196 emploie un ensemble d'échanges qui sont effectués pour assurer l'authentification. Chaque échange emploie divers champs et jetons, dont certains sont facultatifs. De plus, chaque jeton a plusieurs sous champs qui sont facultatifs. Un sous-ensemble des champs et sous champs a été retenu pour définir la conformité à la présente norme. Les jetons sont codés en ASN.1, comme défini dans l'Appendice A de FIPS PUB 196, et chaque jeton est désigné pour indiquer la direction dans laquelle il s'écoule (par exemple, le JetonBA s'écoule de la partie B à la partie A). Toutes les données qui sont couvertes par une signature numérique doivent être codées en utilisant les règles de codage distinctives (DER, Distinguished Encoding Rules). Les données qui ne sont pas couvertes par une signature numérique peuvent utiliser les règles de codage de base (BER, Basic Encoding Rules) ou de DER [X.208]. La Figure 1 illustre les échanges de l'authentification unilatérale.


Durant l'authentification, le client peut fournir au serveur le nom d'utilisateur en utilisant la sous option Nom d'authentification. Si la sous option Nom n'est pas utilisée, le serveur va généralement inviter à fournir un nom et mot de passe en clair. La sous option Nom doit être envoyée après que le serveur a envoyé une liste des types d'authentification pris en charge et avant que le client finisse l'échange d'authentification ; cela assure que le serveur ne va pas inviter à un nom et mot de passe d'utilisateur. Dans la figure 1, la sous option Nom est envoyée immédiatement après que le serveur a présenté la liste des types d'authentification pris en charge.


Pour l'authentification DSS unilatérale, la paire de type d'authentification de deux octets est DSS AUTH_CLIENT_TO_SERVER | AUTH_HOW_ONE_WAY | ENCRYPT_OFF | INI_CRED_FWD_OFF. Cela indique que le mécanisme d'authentification DSS sera utilisé pour authentifier le client auprès du serveur et qu'aucun chiffrement ne sera effectué.


CertA est le certificat de client. Les deux certificats sont des certificats X.509 qui contiennent des clés publiques DSS [RFC2459]. Le client doit valider le certificat du serveur avant d'utiliser la clé publique DSA qu'il contient.


Au sein de l'échange d'authentification sans limite, la mise en œuvre est grandement simplifiée si chaque portion de l'échange porte un identifiant univoque. Pour cette raison, un identifiant de sous option d'un seul octet est porté immédiatement après la paire de type d'authentification de deux octets.


Les échanges détaillés à la Figure 1 ci-dessous supposent la connaissance de FIPS PUB 196 et de l'option d'authentification Telnet. Le client est la partie A, tandis que le serveur est la partie B. À la fin des échanges, le client est authentifié auprès du serveur.


Client (partie A) Serveur (Partie B)

<----- IAC DO AUTHENTICATION


IAC WILL AUTHENTICATION ------->

<---- IAC SB AUTHENTICATION SEND

<liste des options d'authentification> IAC SE


IAC SB AUTHENTICATION NAME <nom d'usager> ------->

IAC SB AUTHENTICATION IS DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_ONE_WAY |

ENCRYPT_OFF | INI_CRED_FWD_OFF DSS_INITIALIZE

IAC SE ------->


<---- IAC SB AUTHENTICATION REPLY DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_ONE_WAY |

ENCRYPT_OFF | INI_CRED_FWD_OFF

DSS_TOKENBA Séquence( JetonID, JetonBA )

IAC SE


IAC SB AUTHENTICATION IS DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_ONE_WAY |

ENCRYPT_OFF | INI_CRED_FWD_OFF DSS_CERTA_TOKENAB

Séquence( JetonID, CertA, JetonAB ) IAC SE ---------->


Figure 1


3.2 Authentification mutuelle avec DSA


L'authentification mutuelle est légèrement plus complexe. La Figure 2 illustre les échanges.


Pour l'authentification DSS mutuelle, la paire de type d'authentification de deux octets est DSS AUTH_CLIENT_TO_SERVER | AUTH_HOW_MUTUAL | ENCRYPT_OFF | INI_CRED_FWD_OFF. Cela indique que le mécanisme d'authentification DSS va être utilisé pour authentifier mutuellement le client et le serveur et qu'aucun chiffrement ne sera effectué.


Client (Partie A) Serveur (Partie B)

IAC WILL AUTHENTICATION ------->

<-- IAC DO AUTHENTICATION

<-- IAC SB AUTHENTICATION SEND

<liste des options d'authentification> IAC SE

IAC SB AUTHENTICATION NAME <nom d'usager> ---->

IAC SB AUTHENTICATION IS DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_MUTUAL |

ENCRYPT_OFF | INI_CRED_FWD_OFF DSS_INITIALIZE IAC SE -->

<-- IAC SB AUTHENTICATION REPLY DSS

AUTH_CLIENT_TO_SERVER |

AUTH_HOW_MUTUAL | ENCRYPT_OFF |

INI_CRED_FWD_OFF DSS_TOKENBA

Séquence( JetonID, JetonBA ) IAC SE


Client (Partie A) Serveur (Partie B)

IAC SB AUTHENTICATION IS DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_MUTUAL |

ENCRYPT_OFF | INI_CRED_FWD_OFF DSS_CERTA_TOKENAB

Séquence( JetonID, CertA, JetonAB ) IAC SE ----->


<-- IAC SB AUTHENTICATION REPLY DSS

AUTH_CLIENT_TO_SERVER | AUTH_HOW_MUTUAL | ENCRYPT_OFF |

INI_CRED_FWD_OFF DSS_CERTB_TOKENBA2

Séquence( JetonID, CertB, JetonBA2 ) IAC SE


Figure 2


4. Syntaxe ASN.1


Comme on l'a dit précédemment, un sous ensemble conforme des champs et sous champs définis à partir de FIPS PUB 196 a été choisi. La présente section donne la syntaxe ASN.1 pour ce sous ensemble conforme.


La Figure 1 et la Figure 2 comportent des représentations des structures définies dans cette section. Les mises en œuvre devraient se référer au tableau suivant pour déterminer les définitions ASN.1 qui correspondent aux références des figures :


Figure 1 Séquence( JetonID, JetonBA ) MessageBA

Séquence( JetonID, CertA, JetonAB ) MessageAB


Figure 2 Séquence( JetonID, JetonBA ) MessageBA

Séquence( JetonID, CertA, JetonAB ) MessageAB

Séquence( JetonID, CertB, JetonBA2 ) MessageBA2


Les définitions ASN.1 suivantes spécifient le sous ensemble conforme de FIPS 196. Pour rester simple, aucun champ ou sous champ facultatif n'est inclus. La définition ASN.1 pour CertificationPath est importée de la Recommandation UIT-T X.509, et la définition ASN.1 pour Nom est importée de la Recommandation UIT-T X.501. Ces définitions ASN.1 ne sont pas répétées ici. Toutes les valeurs de signature DSA sont codées comme une séquence de deux entiers, employant les mêmes conventions que spécifiées dans la RFC 2459, paragraphe 7.2.2.


MessageBA ::= SEQUENCE {

jetonId [0] JetonId,

jetonBA JetonBA }


JetonBA ::= SEQUENCE {

ranB NombreAléatoire,

horodatageB HoroDatage }


MessageAB ::= SEQUENCE {

jetonId [0] JetonId,

certA [1] CertData,

jetonAB JetonAB }


JetonAB ::= SEQUENCE {

ranA NombreAléatoire,

ranB NombreAléatoire,

entitéB NomEntité,

horodatageB HoroDatage,

absigValue CHAINE D'OCTETS }


MessageBA2 ::= SEQUENCE {

idJeton [0] IdJeton,

certB [1] CertData,

jetonBA2 JetonBA2 }


TokenBA2 ::= SEQUENCE {

ranB [0] NombreAléatoire,

ranA [1] NombreAléatoire,

entityA NomD'Entité,

horodatageB2 HoroDatage,

ba2sigValue CHAINE D'OCTETS }


CertData ::= SEQUENCE {

certPath [0] CertificationPath } -- voir X.509


NomEntité ::= SEQUENCE DE CHOIX { -- seul un est permis !

directoryName [4] Nom } -- voir X.501


NombreAléatoire ::= ENTIER -- 20 octets


JetonId ::= SEQUENCE {

typeJeton ENTIER, -- voir le tableau ci-dessous

protoVerNo ENTIER } -- toujours 0x0001


HoroDatage ::= Heure universelle


Le Type de jeton TokenId. est utilisé pour distinguer le type de message et le type d'authentification (unilatérale ou mutuelle). Le tableau suivant donne les valeurs nécessaires pour mettre en œuvre la spécification :


Type de message

Type d'authentification

Type de jeton TokenId.

MessageBA

Unilatérale

0x0001


Mutuelle

0x0011

MessageAB

Unilatérale

0x0002


Mutuelle

0x0012

MessageBA

Mutuelle

0x0013


5. Considérations pour la sécurité


La totalité du présent mémoire est consacrée aux mécanismes de sécurité. Pour que DSA fournisse l'authentification exposée, la mise en œuvre doit protéger la clé privée de toute divulgation.


Les mises en œuvre doivent générer de façon aléatoire des clés privées DSS, les valeurs 'k' utilisées dans les signatures DSS, et les noms occasionnels. L'utilisation de générateurs de nombres pseudo aléatoires ((PRNG, pseudo-random number generator) inadéquats pour générer des valeurs cryptographiques peut résulter en une sécurité faible ou inexistante. Un attaquant peut trouver beaucoup plus facile de reproduire l'environnement de PRNG qui a produit les valeurs et chercher dans le petit ensemble de possibilités résultant, plutôt que d'utiliser une recherche en force brute. La génération de nombres aléatoires de qualité est difficile. La [RFC1750] offre des conseils importants dans ce domaine, et l'Appendice 3 de FIPS PUB 186 [FIPS186] donne une technique de PRNG de qualité.


6. Remerciements


Nous tenons à remercier William Nace pour son soutien durant la mise en œuvre de cette spécification.


7. Considérations relatives à l'IANA


Le type d'authentification DSS et ses valeurs de sous option associées sont enregistrés auprès de l'IANA. Toutes valeurs de sous option utilisées pour étendre le protocole décrit dans le présent document doivent être enregistrées auprès de l'IANA avant utilisation. L'IANA a reçu pour instruction de ne pas allouer de nouvelles valeurs de sous option sans que soit soumise la documentation de leur usage.


8. Références

FIPS180-1 "Secure Hash Standard". FIPS Pub 180-1. 17 avril 1995. <http://csrc.nist.gov/fips/fips180-1.pdf>

FIPS186 "Digital Signature Standard (DSS)". FIPS Pub 186. 19 mai 1994. <http://csrc.nist.gov/fips/fips186.pdf>

FIPS196 "Standard for Entity Authentication Using Public Key Cryptography". FIPS Pub 196. 18 février 1997. <http://csrc.nist.gov/fips/fips196.pdf>

[RFC1750] D. Eastlake 3rd, et autres, "Recommandations d'aléa pour la sécurité", décembre 1994. (Info., remplacée par la RFC4086)

[RFC2459] R. Housley, W. Ford, W. Polk et D. Solo, "Profil de certificat d'infrastructure de clé publique X.509 et de CRL pour l'Internet", janvier 1999. (Obsolète, voir la RFC 3280) (P.S.)

[RFC2941] T. Ts'o, éd., J. Altman, "Option d'authentification Telnet", septembre 2000. (P.S.)

X.208 Recommandation UIT-T X.208, "Spécification de la notation de syntaxe abstraite n° 1 (ASN.1)". 1988.

X.501 Recommandation UIT-T X.501, "L'annuaire – Modèles". 1988.

X.509 Recommandation UIT-T X.509, 'L'annuaire – Cadres d'authentification". 1988.


9. Adresse des auteurs


Russell Housley

Todd Horting

Peter Yee

SPYRUS

SPYRUS

SPYRUS

381 Elden Street, Suite 1120

381 Elden Street, Suite 1120

5303 Betsy Ross Drive

Herndon, VA 20172

Herndon, VA 20172

Santa Clara, CA 95054

USA

USA

USA

mél : housley@spyrus.com

mél : thorting@spyrus.com

mél : yee@spyrus.com


10. Déclaration complète de droits de reproduction


Copyright (C) The Internet Society (2000). 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 droits de reproduction ci-dessus et ce paragraphe soient 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 droits de reproduction définies dans les processus des normes de l'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.


Remerciement

Le financement de la fonction d'éditeur des RFC est actuellement assuré par la Internet Society.