Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Résumé du protocole HIP

Première rédaction de cet article le 21 décembre 2010


La parution régulière de RFC sur HIP (Host Identity Protocol) me donne à penser qu'un petit résumé de ce protocole est une bonne idée (ce texte est très inspiré du chapitre 3 du RFC 6079). HIP est un protocole de séparation entre l'identificateur et le localisateur. Avant HIP, les adresses IP servaient les deux rôles à la fois : comme localisateur, elles identifient une position de la machine sur l'Internet (pas une localisation physique, bien sûr), et changent donc si la machine se déplace ou si le réseau change de FAI. Comme identificateur, elles sont utilisées par les protocoles des couches supérieures, notamment TCP pour identifier une connexion en cours et, si elles changent, la connexion est cassée. Cette dualité de rôle des adresses IP rend certains problèmes comme la mobilité, le renumérotage (cf. RFC 5887) ou le multihoming très durs à traiter.

HIP, normalisé dans le RFC 7401, résout le problème en limitant les adresses IP au rôle de localisateur. Ainsi, un paquet HIP est un paquet IP normal et les routeurs n'ont pas besoin d'être modifiés. HIP est entièrement mis en œuvre dans la machine terminale. Les identificateurs sont, eux, des clés publiques, permettant une authentification des machines (leur nom officiel est HI, pour Host Identifier). Comme ces clés sont souvent très longues, et, pire, de taille variable, HIP introduit également un condensat cryptographique des clés, le HIT (Host Identifier Tag), qui a la taille d'une adresse IPv6 et peut donc être présenté aux couches supérieures comme TCP, sans trop les traumatiser. (Sur FreeBSD, vous trouverez le HIT de votre machine sous /etc/hip.)

Les HIT sont rangés dans un préfixe IPv6 spécial, nommé Orchid (RFC 7343), 2001:20::/28, avant d'éviter toute collision avec les adresses IPv6 « normales ».

Pour établir une connexion, HIP utilise un échange de quatre paquets (comme SCTP, alors que TCP n'en utilise que trois). Pour envoyer ces paquets, le pair à l'initiative de la connexion doit connaître le localisateur (l'adresse IP) du répondeur. Il peut la trouver dans le DNS (RFC 8005) ou bien via un serveur de rendez-vous (RFC 8004). En pair-à-pair, une DHT pourrait être un bon moyen de résoudre un identificateur en localisateur, et le RFC 6537 explore cette piste. (Sur FreeBSD, on peut même mettre HIT et adresse - identificateur et localisateur - du pair dans /etc/hosts.) HIP dispose également d'un mécanisme pour pouvoir fonctionner à travers les NAT (RFC 5770). Une fois la connexion établie, les localisateurs peuvent changer (RFC 5206), la connexion continue.

HIP dispose d'une forte sécurité : protection contre les usurpations d'identificateur par le fait que ceux-ci sont une clé cryptographique et que les messages sont signés, protections contre les DoS au moment de l'établissement de la connexion (une faiblesse traditionnelle de TCP lorsqu'il est utilisé seul). Le « certificat » que représente cette clé est auto-signé par défaut (et est donc accepté par TOFU Trust On First Use comme dans SSH) mais, si on veut avoir encore plus de sécurité, on peut tout à fait avoir un serveur central qui alloue les identificateurs et les lie à des identificateurs des applications. HIP n'a pas qu'un seul modèle de sécurité pour authentifier les pairs.

Qu'est-ce que HIP change pour les applications ? Une application traditionnelle peut tout à fait utiliser HIP (cf. RFC 5338) mais une API standard figure dans le RFC 6317 pour celles qui veulent aller plus loin.

Il existe des mises en œuvres de HIP pour FreeBSD (le développement a stoppé en 2008) et Linux mais aucun des deux ne semble proche d'une intégration dans le système officiel (pour FreeBSD, rien n'est prévu). Le projet OpenHIP adapte également des logiciels comme Wireshark pour qu'ils aient un support HIP. InfraHIP travaille également à l'infrastructure HIP et à des implémentations. Ils ont réalisé une bonne explication de HIP en une page qui concurrence sérieusement cet article. Un compte-rendu des expériencs pratiques avec HIP se trouve dans le RFC 6538.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)