5.6. Spécification du message KRB_SAFE
5.6. Spécification du message KRB_SAFE
Cette section spécifie le format d'un message utilisable par l'une ou l'autre partie (client ou serveur) d'une application pour envoyer à son pair un message à l'intégrité garantie (tamper-proof). Elle suppose qu'une clé de session a déjà été échangée (par exemple au moyen des messages KRB_AP_REQ/KRB_AP_REP).
5.6.1. Définition de KRB_SAFE
Le message KRB_SAFE contient des données utilisateur ainsi qu'une somme de contrôle résistante aux collisions (collision-proof checksum), calculée avec clé à partir de la dernière clé de chiffrement négociée via des sous-clés, ou à partir de la clé de session si aucune négociation n'a eu lieu. Les champs du message sont les suivants :
KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (20),
safe-body [2] KRB-SAFE-BODY,
cksum [3] Checksum
}
KRB-SAFE-BODY ::= SEQUENCE {
user-data [0] OCTET STRING,
timestamp [1] KerberosTime OPTIONAL,
usec [2] Microseconds OPTIONAL,
seq-number [3] UInt32 OPTIONAL,
s-address [4] HostAddress,
r-address [5] HostAddress OPTIONAL
}
pvno et msg-type
Ces champs sont décrits ci-dessus à la section 5.4.1. msg-type vaut
KRB_SAFE.
safe-body
Ce champ sert d'emplacement pour le corps du message KRB-SAFE.
cksum
Ce champ contient la somme de contrôle des données d'application, calculée
avec une valeur d'utilisation de clé (key usage) de 15.
La somme de contrôle est calculée sur l'encodage de la séquence KRB-SAFE.
D'abord, cksum est fixé à une valeur de type zéro et de longueur zéro,
et la somme de contrôle est calculée sur l'encodage de la séquence KRB-
SAFE. Ensuite, la somme de contrôle est fixée au résultat de ce
calcul. Enfin, la séquence KRB-SAFE est encodée à nouveau.
Cette méthode, bien que différente de celle spécifiée dans la RFC
1510, correspond à la pratique existante.
user-data
Ce champ fait partie des messages KRB_SAFE et KRB_PRIV, et
contient les données propres à l'application transmises de
l'émetteur au destinataire.
timestamp
Ce champ fait partie des messages KRB_SAFE et KRB_PRIV. Son
contenu est l'heure courante telle que la connaît l'émetteur du
message. En vérifiant l'horodatage, le destinataire du message
peut s'assurer qu'il a été généré récemment et qu'il ne s'agit pas d'une
relecture (replay).
usec
Ce champ fait partie des en-têtes KRB_SAFE et KRB_PRIV. Il
contient la partie microsecondes de l'horodatage.
seq-number
Ce champ est décrit ci-dessus à la section 5.3.2.
s-address
Adresse de l'émetteur (Sender's address).
Ce champ précise l'adresse utilisée par l'émetteur du
message.
r-address
Ce champ précise l'adresse utilisée par le destinataire du
message. Il PEUT être omis pour certains usages (tels que les protocoles de
diffusion), mais le destinataire PEUT rejeter arbitrairement de tels
messages. Ce champ, avec s-address, peut servir à aider à
détecter des messages incorrectement ou malicieusement
livrés au mauvais destinataire.