4.4.1.1. Sélecteurs (Selectors)
Une SA peut être à granularité fine ou grossière, en fonction des sélecteurs utilisés pour définir l'ensemble du trafic pour la SA. Par exemple, tout le trafic entre deux hôtes peut être transporté via une seule SA et bénéficier d'un ensemble uniforme de services de sécurité. Alternativement, le trafic entre une paire d'hôtes peut être réparti sur plusieurs SA, en fonction des applications utilisées (telles que définies par le protocole de couche suivante et les champs associés, par exemple les ports), avec différents services de sécurité offerts par différentes SA. De même, tout le trafic entre une paire de passerelles de sécurité pourrait être transporté sur une seule SA, ou une SA pourrait être assignée pour chaque paire d'hôtes communicants.
Les paramètres de sélecteur suivants DOIVENT être pris en charge par toutes les implémentations IPsec pour faciliter le contrôle de la granularité SA. Notez que les adresses locales et distantes doivent être soit IPv4, soit IPv6, mais pas un mélange de types d'adresses. Notez également que les sélecteurs de port local/distant (et le type et code de message ICMP, et le type d'en-tête de mobilité) peuvent être étiquetés comme OPAQUE pour accommoder les situations où ces champs sont inaccessibles en raison de la fragmentation des paquets.
Adresse(s) IP distante(s) (Remote IP Address(es))
Type: IPv4 ou IPv6
Il s'agit d'une liste de plages d'adresses IP (unicast, broadcast (IPv4 uniquement)). Cette structure permet l'expression de:
- Une seule adresse IP (via une plage triviale)
- Une liste d'adresses (chacune étant une plage triviale)
- Une plage d'adresses (valeurs basse et haute, incluses)
- Une liste de plages
Les plages d'adresses sont utilisées pour prendre en charge plus d'un système distant partageant la même SA, par exemple, derrière une passerelle de sécurité.
Adresse(s) IP locale(s) (Local IP Address(es))
Type: IPv4 ou IPv6
Il s'agit d'une liste de plages d'adresses IP (unicast, broadcast (IPv4 uniquement)). Cette structure permet l'expression de:
- Une seule adresse IP (via une plage triviale)
- Une liste d'adresses (chacune étant une plage triviale)
- Une plage d'adresses (valeurs basse et haute, incluses)
- Une liste de plages
Les plages d'adresses sont utilisées pour prendre en charge plus d'un système source partageant la même SA, par exemple, derrière une passerelle de sécurité. Local fait référence à la ou aux adresses protégées par cette implémentation (ou entrée de politique).
Note: La SPD n'inclut pas de support pour les entrées d'adresses multicast. Pour prendre en charge les SA multicast, une implémentation devrait utiliser une SPD de groupe (Group SPD, GSPD) telle que définie dans [RFC3740]. Les entrées GSPD nécessitent une structure différente, c'est-à-dire qu'on ne peut pas utiliser la relation symétrique associée aux valeurs d'adresses locales et distantes pour les SA unicast dans un contexte multicast. Spécifiquement, le trafic sortant dirigé vers une adresse multicast sur une SA ne serait pas reçu sur une SA entrante compagne avec l'adresse multicast comme source.
Protocole de couche suivante (Next Layer Protocol)
Source: Champ "Protocole" IPv4 ou champ "En-tête suivant" IPv6
Valeurs: Numéro de protocole individuel, ANY, ou (IPv6 uniquement) OPAQUE
Le protocole de couche suivante est ce qui vient après les en-têtes d'extension IP présents. Pour simplifier la localisation du protocole de couche suivante, il DEVRAIT y avoir un mécanisme pour configurer quels en-têtes d'extension IPv6 ignorer.
En-têtes d'extension IPv6 à ignorer par défaut:
- 0 (Options saut par saut Hop-by-hop options)
- 43 (En-tête de routage Routing Header)
- 44 (En-tête de fragmentation Fragmentation Header)
- 60 (Options de destination Destination Options)
Note: La liste par défaut n'inclut PAS 51 (AH) ou 50 (ESP). Du point de vue de la recherche de sélecteur, IPsec traite AH et ESP comme des protocoles de couche suivante.
Sélecteurs dépendant du protocole de couche suivante
Plusieurs sélecteurs supplémentaires dépendent de la valeur du protocole de couche suivante:
Ports (TCP, UDP, SCTP, etc.)
Si le protocole de couche suivante utilise deux ports (comme le font TCP, UDP, SCTP et d'autres), il existe alors des sélecteurs pour les ports local et distant. Chacun de ces sélecteurs a une liste de plages de valeurs.
Important: Les ports local et distant peuvent ne pas être disponibles dans le cas de la réception d'un paquet fragmenté ou si les champs de port ont été protégés par IPsec (chiffrés); ainsi, une valeur d'OPAQUE DOIT également être prise en charge.
Traitement de la fragmentation:
- Dans un fragment non initial, les valeurs de port ne seront pas disponibles.
- Si un sélecteur de port spécifie une valeur autre que ANY ou OPAQUE, il ne peut pas correspondre aux paquets qui sont des fragments non initiaux.
- Si la SA nécessite une valeur de port autre que ANY ou OPAQUE, un fragment arrivant sans ports DOIT être rejeté. (Voir Section 7, "Traitement des fragments".)
Type d'en-tête de mobilité (Mobility Header Type)
Si le protocole de couche suivante est un en-tête de mobilité, il existe alors un sélecteur pour le type de message d'en-tête de mobilité IPv6 (MH type). Il s'agit d'une valeur 8 bits qui identifie un message de mobilité particulier.
Note: Le type MH peut ne pas être disponible dans le cas de la réception d'un paquet fragmenté. (Voir Section 7, "Traitement des fragments".)
Pour IKE: Le type de message d'en-tête de mobilité IPv6 (MH type) est placé dans les huit bits les plus significatifs du sélecteur de "port" local 16 bits.
Type et code ICMP (ICMP Type and Code)
Si la valeur du protocole de couche suivante est ICMP, il existe alors un sélecteur 16 bits pour le type et le code de message ICMP.
Structure:
- Type de message (Message Type): Valeur 8 bits unique définissant le type d'un message ICMP, ou ANY
- Code ICMP (ICMP Code): Valeur 8 bits unique définissant un sous-type spécifique pour un message ICMP
Pour IKE:
- Le type de message est placé dans les 8 bits les plus significatifs du sélecteur 16 bits
- Le code est placé dans les 8 bits les moins significatifs
Combinaisons autorisées:
- Type unique et plage de codes
- Type unique et ANY code
- ANY type et ANY code
Algorithme de correspondance: Étant donné une entrée de politique avec une plage de types (T-start à T-end) et une plage de codes (C-start à C-end), et un paquet ICMP avec le type t et le code c, une implémentation DOIT tester la correspondance en utilisant:
(T-start*256) + C-start <= (t*256) + c <= (T-end*256) + C-end
Note: Le type et le code de message ICMP peuvent ne pas être disponibles dans le cas de la réception d'un paquet fragmenté. (Voir Section 7, "Traitement des fragments".)
Nom (Name)
Important: Ce n'est pas un sélecteur comme les autres ci-dessus. Il n'est pas acquis à partir d'un paquet. Un nom peut être utilisé comme identifiant symbolique pour une adresse IPsec locale ou distante.
Les entrées SPD nommées sont utilisées de deux manières:
Cas d'usage 1: Répondeur (Contrôle d'accès pour les road warriors)
Une entrée SPD nommée est utilisée par un répondeur (pas un initiateur) pour prendre en charge le contrôle d'accès lorsqu'une adresse IP ne serait pas appropriée pour le sélecteur d'adresse IP distante, par exemple, pour les "road warriors".
Processus:
- Le nom utilisé pour correspondre à ce champ est communiqué pendant la négociation IKE dans la charge utile ID.
- L'adresse IP source de l'initiateur (en-tête IP interne en mode tunnel) est liée à l'adresse IP distante dans l'entrée SAD créée par la négociation IKE.
- Cette adresse remplace la valeur d'adresse IP distante dans la SPD, lorsque l'entrée SPD est sélectionnée de cette manière.
Exigence: Toutes les implémentations IPsec DOIVENT prendre en charge cette utilisation des noms.
Formes de nom prises en charge:
- Nom de domaine entièrement qualifié (Fully Qualified Domain Name, FQDN)
- Nom distinctif (Distinguished Name, DN)
- Adresse e-mail RFC 822
- ID de clé (Key ID)
Cas d'usage 2: Initiateur (Identification multi-utilisateur)
Une entrée SPD nommée peut être utilisée par un initiateur pour identifier un utilisateur pour lequel une SA IPsec sera créée (ou pour lequel le trafic peut être contourné). L'adresse IP source de l'initiateur (de l'en-tête IP interne en mode tunnel) est utilisée pour remplacer les éléments suivants si et quand ils sont créés:
- Adresse locale dans l'entrée de cache SPD
- Adresse locale dans l'entrée SAD sortante
- Adresse distante dans l'entrée SAD entrante
Support: Cette utilisation est optionnelle pour les implémentations d'hôtes natifs multi-utilisateurs et non applicable aux autres implémentations.
Note: Ce nom est utilisé uniquement localement; il n'est pas communiqué par le protocole de gestion de clés. De plus, des formes de nom autres que celles utilisées pour le cas 1 ci-dessus (répondeur) sont applicables dans le contexte de l'initiateur.
Nom dans les entrées SPD
Une entrée SPD peut contenir à la fois un nom (ou une liste de noms) et également des valeurs pour l'adresse IP locale ou distante.
Pour le cas 1 (répondeur): Les identifiants utilisés dans les entrées SPD nommées sont des noms DNS, des noms distinctifs ou des adresses e-mail RFC 822.
Pour le cas 2 (initiateur): Les formes de nom peuvent être les mêmes que pour le cas 1, ou peuvent être un ID utilisateur (UID) ou une autre convention de nommage locale.
Règles de nommage importantes:
- Toutes les entrées SPD DOIVENT pouvoir accommoder les formes de nom définies ci-dessus pour l'utilisation par le répondeur.
- Si une implémentation permet de créer des entrées SPD en utilisant des formes de nom localement significatives pour l'utilisation par l'initiateur, cela relève d'une question locale.
- Une entrée SPD qui inclut un nom ne peut être utilisée que si le nom se résout en une adresse IP locale ou distante, ou si le nom est utilisé pendant la négociation IKE pour correspondre à la charge utile ID.