Aller au contenu principal

5.5. Spécifications des messages client/serveur (CS)

5.5. Spécifications des messages client/serveur (CS)

Cette section spécifie le format des messages utilisés pour l'authentification du client auprès du serveur d'application.

5.5.1. Définition de KRB_AP_REQ

Le message KRB_AP_REQ contient le numéro de version du protocole Kerberos, le type de message KRB_AP_REQ, un champ d'options indiquant les options en cours d'utilisation, ainsi que le ticket et l'authenticator proprement dits. Le message KRB_AP_REQ est souvent appelé l'« en-tête d'authentification ».

   AP-REQ          ::= [APPLICATION 14] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (14),
ap-options [2] APOptions,
ticket [3] Ticket,
authenticator [4] EncryptedData -- Authenticator
}
   APOptions       ::= KerberosFlags
-- reserved(0),
-- use-session-key(1),
-- mutual-required(2)

pvno et msg-type

Ces champs sont décrits ci-dessus à la section 5.4.1. msg-type vaut

KRB_AP_REQ.

ap-options

Ce champ apparaît dans la requête d'application (KRB_AP_REQ) et

influence le traitement de la requête. C'est un champ de bits,

où les options sélectionnées sont indiquées par le bit à 1,

et les options non sélectionnées ainsi que les champs réservés par le bit à 0.

L'encodage des bits est spécifié à la section 5.2. Les

significations des options sont les suivantes :

Bit(s) Nom Description

0 reserved Réservé pour une extension future de ce champ.

1 use-session-key L'option USE-SESSION-KEY indique que

le ticket que le client présente à un

serveur est chiffré avec la clé de session du

TGT du serveur. Lorsque cette option n'est pas

précisée, le ticket est chiffré avec la

clé secrète du serveur.

2 mutual-required L'option MUTUAL-REQUIRED indique au serveur

que le client exige une authentification

mutuelle, et qu'il doit répondre

par un message KRB_AP_REP.

3-31 reserved Réservé pour un usage ultérieur.

ticket

Ce champ est un ticket authentifiant le client auprès du serveur.

authenticator

Il contient l'authenticator chiffré, qui inclut le

choix par le client d'une sous-clé.

L'authenticator chiffré est inclus dans l'AP-REQ ; il atteste pour un serveur que l'émetteur a une connaissance récente de la clé de chiffrement figurant dans le ticket joint, ce qui aide le serveur à détecter les relectures. Il contribue aussi au choix d'une « véritable clé de session » à utiliser pour la session considérée. L'encodage DER de ce qui suit est chiffré avec la clé de session du ticket, avec une valeur d'utilisation de clé 11 dans les échanges d'application normaux, ou 7 lorsqu'il est utilisé comme champ PA-DATA PA-TGS-REQ d'un échange TGS-REQ (voir section 5.4.1) :

   -- Unencrypted authenticator
Authenticator ::= [APPLICATION 2] SEQUENCE {
authenticator-vno [0] INTEGER (5),
crealm [1] Realm,
cname [2] PrincipalName,
cksum [3] Checksum OPTIONAL,
cusec [4] Microseconds,
ctime [5] KerberosTime,
subkey [6] EncryptionKey OPTIONAL,
seq-number [7] UInt32 OPTIONAL,
authorization-data [8] AuthorizationData OPTIONAL
}

authenticator-vno

Ce champ précise le numéro de version du format de

l'authenticator. Le présent document spécifie la version 5.

crealm et cname

Ces champs sont les mêmes que ceux décrits pour le ticket à la

section 5.3.

cksum

Ce champ contient une somme de contrôle des données d'application qui

accompagnent le KRB_AP_REQ, calculée avec une valeur d'utilisation de clé 10

dans les échanges d'application normaux, ou 6 lorsqu'il est utilisé dans le

champ AP-DATA PA-TGS-REQ du TGS-REQ.

cusec

Ce champ contient la partie microsecondes de l'horodatage du client.

Sa valeur (avant chiffrement) est comprise entre 0 et 999999.

Il apparaît souvent avec ctime. Les deux champs sont utilisés

ensemble pour préciser un horodatage raisonnablement précis.

ctime

Ce champ contient l'heure courante sur l'hôte du client.

subkey

Ce champ contient le choix du client pour une clé de chiffrement à

utiliser afin de protéger cette session d'application précise. Sauf

spécification contraire de l'application, si ce champ est omis, la

clé de session du ticket sera utilisée.

seq-number

Ce champ optionnel inclut le numéro de séquence initial à

utiliser par les messages KRB_PRIV ou KRB_SAFE lorsque des numéros de séquence

servent à détecter les relectures. (Il peut aussi être utilisé par des messages

spécifiques à l'application.) Lorsqu'il est inclus dans l'authenticator, ce

champ précise le numéro de séquence initial pour les messages du

client vers le serveur. Lorsqu'il est inclus dans le message AP-REP, le

numéro de séquence initial est celui des messages du serveur vers le

client. Utilisé dans les messages KRB_PRIV ou KRB_SAFE, il est

incrémenté de un après l'envoi de chaque message. Les numéros de séquence

sont dans l'intervalle 0 à 2^32 - 1 et repassent à zéro après la

valeur 2^32 - 1.

Pour que les numéros de séquence permettent de détecter les relectures de

manière satisfaisante, ils DEVRAIENT être non répétitifs, y compris au-delà des limites de

connexion. Le numéro de séquence initial DEVRAIT être aléatoire et

uniformément réparti sur tout l'espace des numéros de séquence possibles,

afin qu'il ne puisse pas être deviné par un attaquant et que

lui et les numéros de séquence successifs ne répètent pas d'autres

séquences. Si plus de 2^32 messages doivent être

générés dans une série de messages KRB_PRIV ou KRB_SAFE, un renouvellement de clé

DEVRAIT être effectué avant que les numéros de séquence ne soient réutilisés avec la

même clé de chiffrement.

Note d'implémentation : historiquement, certaines implémentations transmettent

des nombres en complément à deux signés pour les numéros de séquence. Pour des

raisons de compatibilité, les implémentations PEUVENT accepter le

nombre négatif équivalent lorsqu'un nombre positif supérieur à

2^31 - 1 est attendu.

Note d'implémentation : comme indiqué précédemment, certaines implémentations omettent

le numéro de séquence optionnel lorsque sa valeur serait zéro.

Les implémentations PEUVENT accepter un numéro de séquence omis lorsqu'une valeur zéro est attendue, et NE DEVRAIENT PAS transmettre un

Authenticator dont le numéro de séquence initial est zéro.

authorization-data

Ce champ est le même que celui décrit pour le ticket à la section 5.3.

Il est optionnel et n'apparaît que lorsque des restrictions supplémentaires

doivent être imposées à l'utilisation d'un ticket, au-delà de celles portées par

le ticket lui-même.

5.5.2. Définition de KRB_AP_REP

Le message KRB_AP_REP contient le numéro de version du protocole Kerberos, le type de message, et un horodatage chiffré. Le message est envoyé en réponse à une requête d'application (KRB_AP_REQ) pour laquelle l'option d'authentification mutuelle a été sélectionnée dans le champ ap-options.

   AP-REP          ::= [APPLICATION 15] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (15),
enc-part [2] EncryptedData -- EncAPRepPart
}
   EncAPRepPart    ::= [APPLICATION 27] SEQUENCE {
ctime [0] KerberosTime,
cusec [1] Microseconds,
subkey [2] EncryptionKey OPTIONAL,
seq-number [3] UInt32 OPTIONAL
}

L'EncAPRepPart encodé est chiffré avec la clé de session partagée du ticket. Le champ subkey optionnel peut servir à une négociation arrangée par l'application pour choisir une clé de session par association.

pvno et msg-type

Ces champs sont décrits ci-dessus à la section 5.4.1. msg-type vaut

KRB_AP_REP.

enc-part

Ce champ est décrit ci-dessus à la section 5.4.2. Il est calculé

avec une valeur d'utilisation de clé 12.

ctime

Ce champ contient l'heure courante sur l'hôte du client.

cusec

Ce champ contient la partie microsecondes de l'horodatage du

client.

subkey

Ce champ contient une clé de chiffrement à utiliser pour

protéger cette session d'application précise. Voir la section 3.2.6 pour les

détails sur l'utilisation de ce champ pour négocier une clé. Sauf

spécification contraire de l'application, si ce champ est omis, la

sous-clé de session de l'authenticator sera utilisée, ou si celle-ci est aussi

omise, la clé de session du ticket sera utilisée.

seq-number

Ce champ est décrit ci-dessus à la section 5.3.2.

5.5.3. Réponse par message d'erreur

Si une erreur survient lors du traitement de la requête d'application, le message KRB_ERROR sera envoyé en réponse. Voir la section 5.9.1 pour le format du message d'erreur. Les champs cname et crealm PEUVENT être omis si le serveur ne peut pas déterminer leurs valeurs appropriées à partir du message KRB_AP_REQ correspondant. Si l'authenticator était déchiffrable, les champs ctime et cusec contiendront les valeurs qui y figurent.