# Host Identity Protocol

LHost Identity Protocol (HIP) è una tecnologia standardizzata dall'Internet Engineering Task Force, per reti IP che introduce il concetto di Host Identifier (vedi infra) al fine di assegnare ad un'entità di rete unidentità. Tale identità è indipendente dall'indirizzo IP dell'host e può essere singola o multipla.
L'Host Identity Protocol è definito nelle RFCs 4423 e 5201-5207.

## Origine

Essendo l'attuale Internet namespace nato a cavallo degli anni settanta e ottanta, era stato progettato per gestire computer localizzati in modo statico, ignorando totalmente i concetti di mobilità e sicurezza. Un esempio evidente è dato proprio dall'indirizzo IP, al quale viene attribuito il significato di locazione, ma allo stesso tempo anche quello di identità.
È evidente come ciò sia in netto contrasto con l'andamento moderno dell'Information Technology dove le parole chiave sono mobilità, multi-homing e ovviamente, sicurezza. A tal proposito infatti, è da notarsi che uno dei principali difetti dell'attuale protocollo TCP/IP è il totale disinteresse per la sicurezza del traffico dati, che agli albori di Internet era ritenuta assolutamente di secondaria importanza. Ai giorni nostri questo non vale più: l'e-commerce, servizi di e-mail privata e/o aziendale, firma digitale, etc., necessitano di sistemi di autenticazione e protezione della privacy dei dati al fine di prevenire hacking, phishing e quant'altro.
L'Host Identity Protocol mira a fornire una soluzione unica a gran parte di questi problemi, integrandosi perfettamente con le tecnologie IPv4, IPv6 ed IPSec.

## Host Identifier

Un Host Identifier (HI) è la caratterizzazione univoca di un determinato host. Tale identità è rappresentata da un nome unico ed ogni host ne possiede almeno uno. L'Host Identity Protocol infatti, al fine di garantire il multihoming, prevede la possibilità di associare ad un singolo host una o più identità, purché siano tutte autenticate da un soggetto esterno indipendente la cui credibilità è accettata a priori. Un HI potrà essere sia pubblico che privato.
Spesso si tende a confondere l'Host Identifier con l'Host Identity, data la somiglianza dei nomi e dei concetti. Come detto in precedenza, l'Host Identifier è la rappresentazione fisica dell'identità costituita dalla stringa di bit utilizzata nel processo di identificazione/autorizzazione, mentre invece l'Host Identity è a tutti gli effetti l'identità astratta dell'host.

## Host Identity Tag e Local Scope Identity

Per garantire la sicurezza da attacchi di tipo DoS e MitM, l'HI è di natura crittografica. Agli Host Identifiers infatti, si applica un processo crittografico avente come finalità la creazione di una coppia di chiavi: una pubblica ed una privata.
Dall'Host Identifier quindi si crea un hash di 128 bit chiamato Host Identity Tag (HIT) da usare come chiave di autenticazione. L'algoritmo di hashing è di tipo SHA-1 che effettivamente garantisce una probabilità molto bassa di avere HITs uguali.
Per il mantenimento della compatibilità con socket basate su IPv4, esiste anche una rappresentazione a 32 bit dell'Host Identifier. Tale stringa è detta Local Scope Identity (LSA), e data la relativamente alta probabilità (rispetto all'HIT) di avere collisioni, è usata appunto solo in contesti (domini) locali.

## HIP Base Exchange

Il protocollo HIP definisce un four-way handshaking per stabilire una connessione tra hosts. I due hosts coinvolti sono detti Initiator e Responder, od anche client e server, con un abuso di linguaggio.
L'Initiator comincia il tentativo di connessione mandando il primo messaggio, il pacchetto I1, contenente le HITs dei nodi in questione. Si noti che l'HIT del Responder può anche essere omessa se sconosciuta dall'Initiator.
Una volta ricevuto l'I1, il Responder invia il pacchetto di risposta R1 contenente un puzzle (enigma) che l'Initiator deve risolvere. Il protocollo è stato progettato con lo scopo di far eseguire all'Initiator la maggior parte dei calcoli per la soluzione del puzzle, ed infatti ciò induce anche una certa protezione contro attacchi di tipo DoS. Tale pacchetto inoltre è responsabile dell'attivazione della procedura di Diffie-Hellman contenente la chiave di accesso pubblica del Responder ed ovviamente tutti i parametri necessari alla procedura stessa.
A questo punto l'Initiator risolve il puzzle e invia al Responder il risultato ottenuto tramite il pacchetto I2, insieme con la sua chiave di accesso pubblica crittografata.
Infine il Responder verifica la correttezza della risposta ricevuta, autentica l'Initiator e crea una sessione IPSec tramite ESP. Il pacchetto finale R2 contiene i parametri SPI del Responder.