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.