Il formato del payload è illustrato in figura 5.2. Il primo campo indica il ``next header'' (con il significato usuale), il secondo contiene la lunghezza del ``key payload'', il terzo serve ad identificare il tipo di pacchetto HIP; seguono un campo che contiene il numero di versione e un campo riservato per usi futuri. I 128 bit successivi contengono lo HIT del mittente, segue il ``key payload'', e infine l'header ESP seguito dal payload IP53.
Il key payload contiene le informazioni necessarie per portare a termine l'handshake, e il suo contenuto varia a seconda del tipo di messaggio. Il formato, illustrato in figura 5.3, è una semplificazione di un messaggio DNS e contiene infatti una sequenza di resource record (RR). Il campo RCOUNT contiene il numero di record presenti, FQDNLGTH fornisce la lunghezza del nome di dominio (Fully Qualified Domain Name), che è contenuto nel campo successivo insieme con un eventuale padding. Segue la serie dei resource record54 (RDLENGTH contiene la lunghezza della parte RDATA e TYPE ne indica il tipo), che possono essere di tipo KEY (contengono le chiavi o gli HIT), SIG (contengono le firme) oppure OPT (contengono informazioni di altro tipo, quali cookie, SPI, LSI, informazioni sulle trasformazioni55).
L'handshake HIP, come già detto, è costituito da quattro pacchetti, e consente ai due
interlocutori di scambiarsi le informazioni relative alle identità (intese come
HI) e di stabilire una security association
IPsec ESP. L'handshake comprende uno scambio di ``cookie'',
che contrariamente a quanto avviene solitamente è iniziato dal ricevitore e non dall'iniziatore:
questo aumenta di un messaggio la durata dell'handshake, ma offre il vantaggio di una maggiore
robustezza verso attacchi di denial of service. Il primo pacchetto
inviato dal ricevitore può essere infatti sostanzialmente precalcolato (in quanto contiene
informazioni che non devono necessariamente cambiare ogni volta) e necessita di pochissime
informazioni di stato da mantenere (ambedue le cose non sono vere per IKE),
inoltre permette al ricevitore di formulare un ``indovinello'' di difficoltà variabile
all'iniziatore: il ricevitore fornisce infatti un numero
di 64 bit, un numero
( che dovrebbe essere compreso tra 1 e 8) e un target,
e l'iniziatore deve trovare un numero
tale per cui
i
bit meno significativi ottenuti dall'hash del concatenamento di
e
coincidano con i
bit meno significativi del target56.
La struttura dell'handshake è la seguente: l'iniziatore ottiene indirizzo IP, HI e HIT del ricevitore dal DNS57 e invia il primo pacchetto. Il ricevitore replica fornendo, tra l'altro, il valore per lo scambio Diffie-Hellman, il cookie (con l'indovinello) e le proprie proposte per le trasformazioni crittografiche per HIP ed ESP, e firmando il tutto. Nel terzo pacchetto della sequenza l'iniziatore inserisce il cookie (con la risposta all'indovinello), LSI e SPI che ha assegnato al ricevitore, il proprio valore per lo scambio Diffie-Hellman, la proposta scelta per le trasformazioni HIP e, cifrate, la proposta scelta per le trasformazioni ESP e la propria HI; infine firma il tutto. Nell'ultimo pacchetto (anch'esso firmato e in parte cifrato) il ricevitore inserisce tra l'altro LSI e SPI che ha assegnato all'iniziatore, completando così l'handshake: i pacchetti successivi saranno protetti dalla ESP SA negoziata.
Oltre ai quattro pacchetti dell'handshake, HIP ne prevede altri per cambiare chiavi
e SPI, per notificare il cambio di indirizzo, e per il ``bootstrap''.