6.7.4. Authentification SHA1 à clé et SHA1 à clé méticuleux
Les mécanismes d'authentification SHA1 à clé et SHA1 à 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 hachage SHA1 [SHA1] 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 SHA1 à clé, le numéro de séquence est occasionnellement incrémenté. Pour SHA1 à 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 hachage SHA1 incluant la clé sélectionnée correspond à celui transporté dans le paquet, et si le numéro de séquence est supérieur ou égal au dernier numéro de séquence reçu (pour SHA1 à clé), ou strictement supérieur au dernier numéro de séquence reçu (pour SHA1 à clé méticuleux).
Transmission utilisant l'authentification SHA1 à clé et SHA1 à clé méticuleux
Le champ Auth Type DOIT être défini sur 4 (SHA1 à clé) ou 5 (SHA1 à clé méticuleux). Le champ Auth Len DOIT être défini sur 28. 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'à 20 octets et DOIT être placée dans le champ Auth Key/Hash, 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 hachage SHA1 DOIT être calculé sur l'ensemble du paquet de contrôle BFD. Le hachage résultant DOIT être stocké dans le champ Auth Key/Hash avant la transmission (en remplacement de la clé secrète, qui NE DOIT PAS être transportée dans le paquet).
Pour SHA1 à 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 SHA1 à 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 SHA1 à clé et SHA1 à 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 (4 pour SHA1 à clé ou 5 pour SHA1 à 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 à 28, le paquet DOIT être rejeté.
Si bfd.AuthSeqKnown est 1, examinez le champ Sequence Number. Pour SHA1 à 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 SHA1 à 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, bfd.RcvAuthSeq DOIT être défini sur la valeur du champ Sequence Number reçu, et le paquet reçu DOIT être accepté.
Remplacez le contenu du champ Auth Key/Hash par la clé d'authentification sélectionnée par le champ Auth Key ID reçu. Si le hachage SHA1 de l'ensemble du paquet de contrôle BFD est égal à la valeur reçue du champ Auth Key/Hash, le paquet reçu DOIT être accepté. Sinon (le hachage ne correspond pas au champ Auth Key/Hash), le paquet reçu DOIT être rejeté.