6.7.3. Authentification MD5 à clé et MD5 à clé méticuleux
Les mécanismes d'authentification MD5 à clé et MD5 à clé méticuleux sont très similaires à ceux utilisés dans d'autres protocoles. Dans ces méthodes d'authentification, une ou plusieurs clés secrètes (avec les ID de clé correspondants) sont configurées dans chaque système. L'une des clés est incluse dans un condensé MD5 [MD5] calculé sur le paquet de contrôle BFD sortant, mais la clé elle-même n'est pas transportée dans le paquet. Pour aider à éviter les attaques par rejeu, un numéro de séquence est également transporté dans chaque paquet. Pour MD5 à clé, le numéro de séquence est occasionnellement incrémenté. Pour MD5 à clé méticuleux, le numéro de séquence est incrémenté à chaque paquet.
Le système récepteur accepte le paquet si l'ID de clé correspond à l'une des clés configurées, un condensé MD5 incluant la clé sélectionnée correspond à celui transporté dans le paquet, et le numéro de séquence est supérieur ou égal au dernier numéro de séquence reçu (pour MD5 à clé), ou strictement supérieur au dernier numéro de séquence reçu (pour MD5 à clé méticuleux).
Transmission utilisant l'authentification MD5 à clé et MD5 à clé méticuleux
Le champ Auth Type DOIT être défini sur 2 (MD5 à clé) ou 3 (MD5 à clé méticuleux). Le champ Auth Len DOIT être défini sur 24. Le champ Auth Key ID DOIT être défini sur l'ID de la clé d'authentification actuelle. Le champ Sequence Number DOIT être défini sur bfd.XmitAuthSeq.
La valeur de la clé d'authentification est une chaîne binaire pouvant aller jusqu'à 16 octets et DOIT être placée dans le champ Auth Key/Digest, complétée par des octets zéro de fin si nécessaire. Pour l'interopérabilité, l'interface de gestion par laquelle la clé est configurée DOIT accepter les chaînes ASCII et DEVRAIT également permettre la configuration de toute chaîne binaire arbitraire sous forme hexadécimale. D'autres méthodes de configuration PEUVENT être supportées.
Un condensé MD5 DOIT être calculé sur l'ensemble du paquet de contrôle BFD. Le condensé résultant DOIT être stocké dans le champ Auth Key/Digest avant la transmission (en remplacement de la clé secrète, qui NE DOIT PAS être transportée dans le paquet).
Pour MD5 à clé, bfd.XmitAuthSeq PEUT être incrémenté de manière circulaire (lorsqu'il est traité comme une valeur non signée de 32 bits). bfd.XmitAuthSeq DEVRAIT être incrémenté lorsque l'état de la session change, ou lorsque le paquet de contrôle BFD transmis transporte un contenu différent du paquet précédemment transmis. La décision quant au moment d'incrémenter bfd.XmitAuthSeq se situe en dehors de la portée de cette spécification. Voir la section intitulée "Considérations de sécurité" ci-dessous pour une discussion.
Pour MD5 à clé méticuleux, bfd.XmitAuthSeq DOIT être incrémenté de manière circulaire (lorsqu'il est traité comme une valeur non signée de 32 bits).
Réception utilisant l'authentification MD5 à clé et MD5 à clé méticuleux
Si le paquet de contrôle BFD reçu ne contient pas de section d'authentification, ou si le Auth Type n'est pas correct (2 pour MD5 à clé ou 3 pour MD5 à clé méticuleux), alors le paquet reçu DOIT être rejeté.
Si le champ Auth Key ID ne correspond pas à l'ID d'une clé d'authentification configurée, le paquet reçu DOIT être rejeté.
Si le champ Auth Len n'est pas égal à 24, le paquet DOIT être rejeté.
Si bfd.AuthSeqKnown est 1, examinez le champ Sequence Number. Pour MD5 à clé, si le numéro de séquence se situe en dehors de la plage de bfd.RcvAuthSeq à bfd.RcvAuthSeq+(3Detect Mult) inclus (lorsqu'il est traité comme un espace de numéros circulaire non signé de 32 bits), le paquet reçu DOIT être rejeté. Pour MD5 à clé méticuleux, si le numéro de séquence se situe en dehors de la plage de bfd.RcvAuthSeq+1 à bfd.RcvAuthSeq+(3Detect Mult) inclus (lorsqu'il est traité comme un espace de numéros circulaire non signé de 32 bits), le paquet reçu DOIT être rejeté.
Sinon (bfd.AuthSeqKnown est 0), bfd.AuthSeqKnown DOIT être défini sur 1, et bfd.RcvAuthSeq DOIT être défini sur la valeur du champ Sequence Number reçu.
Remplacez le contenu du champ Auth Key/Digest par la clé d'authentification sélectionnée par le champ Auth Key ID reçu. Si le condensé MD5 de l'ensemble du paquet de contrôle BFD est égal à la valeur reçue du champ Auth Key/Digest, le paquet reçu DOIT être accepté. Sinon (le condensé ne correspond pas au champ Auth Key/Digest), le paquet reçu DOIT être rejeté.