Host Identity Protocol

Från Wikipedia

Host Identity Protocol (HIP) är ett protokoll för verifiering av mottagare och nyckelutbyte för symmetrisk kryptering i datornätverk, exempelvis över IPInternet. HIP introducerar Host Identity (HI) som baseras på asymmetrisk kryptering och används för att identifiera en mottagare i nätet. HIP tillhör transportskiktet men kan kombineras med andra transportprotokoll, till exempel TCP eller UDP.

På internet används IP-adresser både för att identifikation och lokalisering av en mottagare. HIP tar över IP-adressens roll som identifikation för en mottagare och lämnar adressen till att enbart beskriva mottagarens position i nätet. Denna separation gör det möjligt att upprätthålla en förbindelse mellan sändare och mottagare även om den ena skulle byta plats/IP-adress i nätet. Exempel på när detta kan uppstå är en mobiltelefon som till en början är ansluten till mobilnätet men sedan kopplar upp sig på ett lokalt trådlöst nätverk.[1]

Tekniska detaljer[redigera | redigera wikitext]

HIP använder sig av en 4-vägs handskakning för att upprätta en förbindelse mellan två parter. Handskakningen verifierar bägge parters Host Identity och genomför Diffie-Hellmans nyckelöverföring. Datautbyte påbörjas först efter det 4:e paketet i handskakningen även om både 3:e och 4:e paketet i praktiken skulle kunna bära data.

Om inget annat anges gäller den följande beskrivning för version 2 av HIP.

Host Identity[redigera | redigera wikitext]

Bägge parter som deltar i en handskakning måste ha en Host Identity vilket är den publika delen av det nyckelpar som parterna använder för asymmetrisk kryptering och signering av meddelanden. Flera olika typer av asymmetrisk kryptering är tillåtna; för version 1 av HIP är stöd för RSA obligatoriskt och DSA rekommenderat. Version 2 kräver stöd för RSA och ECDSA medan stöd för DSA och ECDSA_LOW (en variant av ECDSA för enheter med begränsad beräkningskraft) är rekommenderat.[2]

Host Identity Tag[redigera | redigera wikitext]

Nyckelstorleken för olika algoritmer varierar och kan för vissa vara mycket stor. Därför används en kortare representation, Host Identity Tag (HIT), som är 128 bitar som identifikation efter det att nyckelutbytet är genomfört. Beroende på vilket asymmetriskt krypto som används beräknas HIT med någon av följande hashfunktioner: SHA-256 för RSA och DSA, SHA-384 för ECDSA och SHA-1 för ECDSA_LOW. Resultatet trunkeras till 96 bitar och kapslas in enligt ORCHIDv2 för att skapa ett 128 bitar långt id.

I enlighet med ORCHIDv2 har HIT formen av en IPv6-adress med prefixet 2001:20::/28 och kan därför användas som en sådan i överliggande transportlager och applikationslager.[2]

Handskakningen[redigera | redigera wikitext]

Handskakning är 4-vägs och startar med att den initierande parten skickar ett första paket innehållande en lista med de kryptografiska algoritmer som stöds. Mottagaren svarar med ett andra paket innehållande sin egen lista av stödda algoritmer, ett problem med justerbar svårighet, en Diffie-Hellmanparamter samt en signatur av paketets innehåll. När den initierande parten tagit emot det andra paketet kan den avgöra om det finns någon algoritm som stöds av bägge parter och om så inte är fallet välja att starta om förbindelsen eller avsluta genom att inte skicka några fler paket. Om det finns en gemensam algoritm löser den initierande parten det mottagna pusslet och skickar lösningen tillsammans med en Diffie-Hellmanparameter och signatur till mottagaren i det tredje paketet. Om pusslet är korrekt bekräftar mottagaren att förbindelsen är öppen genom att skicka ett signerat paket tillbaka till den initierande parten, det fjärde paketet i ordningen.[3]

Skydd mot överbelastningsattacker[redigera | redigera wikitext]

Pusslet som skickas i det andra paketet används för att förhindra överbelastningsattacker där en illasinnad initierande part öppnar fler förbindelser än den mottagande parten kan hantera. Pusslet är beräkningsintensivt och en lösning på problemet intygar att den initierande parten är villig att investera beräkningskraft för att öppna en förbindelse.[3]

Referenser[redigera | redigera wikitext]

  1. ^ RFC 7401
  2. ^ [a b] https://tools.ietf.org/html/rfc7401#section-3, Host Identity Protocol Version 2 (HIPv2), Section 3
  3. ^ [a b] https://tools.ietf.org/html/rfc7401#section-4.1, Host Identity Protocol Version 2 (HIPv2), Section 4.1