1.26k likes | 1.45k Views
Host Identity Protocol M2NM, Sydney, 17 October 2007. Patrik Salmela. Agenda. What is the Host Identity Protocol (HIP) What does HIP try to solve HIP basics Architecture The HIP base exchange HIP basic features Security Mobility Multi-homing HIP extensions
E N D
Host Identity ProtocolM2NM, Sydney, 17 October 2007 Patrik Salmela
Agenda • What is the Host Identity Protocol (HIP) • What does HIP try to solve • HIP basics • Architecture • The HIP base exchange • HIP basic features • Security • Mobility • Multi-homing • HIP extensions • SImultaneous Mulit-Access (SIMA) • Rendezvous server (IETF) • Name resolution (IETF) • NAT traversal (IETF) • HIP Mobile Router • HIP (mobile) Proxy
Agenda ...continued • Mobility/HIP Mobility/Network Mobility • Different Network mobility solutions • Comparison of mobility solutions • Implementation status • Implementations • Our Implementation • Extensions • Usage of HIP today • Standardization • IETF drafts • IETF status • Possible usage of HIP • Benefits • HIP Mobile Router demo presentation • Conclusions
Call room 123 @ hotel Identifier-locator split • In today’s Internet • IP address describes the topological location of the host • IP address used for identifying the host • In practice • deliver packet to entity at the destination locator • mobile host new IP address; changed locator, changed identity Room 123
Identifier-locator split • In HIP • IP address describes topological location of the host • Host Identity used for identifying the host • In practice • deliver packet to, e.g., Host IdentityPatrik • mobile host new IP address; changed locator, same identity Room 123 Call Patrik @ hotel
Why HIP? • HIP provides a combination of useful features: • Identifier-locator split • Security • Mobility • IPv4 and IPv6 interoperability • Multi-homing
Why HIP? • They are (separately) available elsewhere but…. • IP addresses no longer work for identifying hosts • IPsec is hard to configure • Mobile IP is large and complex • Mobile IPv4 and IPv6 do not work together • No simple solutions for multi-access / multi-homing
What is the Host Identity Protocol • Architectural change to the TCP/IP stack • A new layer between IP and transport • New namespace of Host Identities (HI) • HI = public key • HI presented as hash values • IPv6: Host Identity Tag (HIT), 128 bits • IPv4: Local Scope Identifier (LSI), 32 bits • Connections established between HIs
Host ID Host Identity What is the Host Identity Protocol Process • The new Host Identity layer < , port> IP addr Host ID Transport • Sockets bound to HIs • IPv6: HIT • IPv4: LSI • The Host Identity Layertranslates HIs to IP addressess and vice versa IP address IP layer Link layer
v4/v6 bridge Multi-homing Mobility The layering in detail Transport Layer End-to-end, HIT IP layer IPsec HIP Fragmentation Forwarding Hop-by-hop, IP address Link Layer
Host identity Host identity HIP – a new waist for TCP/IP • Interoperability between IPv4 and IPv6 • IPv6 checksum, HITs as IP addresses v4 app v6 app v4 app v6 app TCPv4 TCPv6 TCPv4 TCPv6 HIT IP IPv4 IPv6 IPv4 IPv6 Link layer Link layer
Host Identity ProtocolHIP packets • I1, R1, I2, R2 – Base exchange • UPDATE – change connection parameters • Rekeying (e.g. SA lifetime expires) • Setting up additional SAs • Change in locators • Deleting SAs • CLOSE, CLOSE_ACK – closing a HIP association • NOTIFY – Notification messages
Host Identity ProtocolHIP packets • Packets consist of a HEADER and zero or more parameters • HIP header: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Payload Len | Type | VER. | RES. | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Controls | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sender's Host Identity Tag (HIT) | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Receiver's Host Identity Tag (HIT) | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | / HIP Parameters / / / | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Host Identity ProtocolParameters • Parameters are coded in Type-Length-Value format • For different purposes: • Puzzle – solution • Diffie-Hellman • Transforms • Signatures • HMACs • ...
The HIP Base exchange • 4-way handshake • Creates a HIP association • Authentication of hosts • Negotiates security parameters • Diffie-Hellman • Establishes ESP security associations • Algorithms • Keys • Opportunistic mode if responder’s identity unknown • Use only destination IP address in initialization, learn HI
The HIP Base exchangeDNS query – resolving the responder’s locator DNS Initiator Internet DNS query: ”Responder” DNS response: HI, IP address Responder
The HIP Base exchangeI1 packet - initialization DNS Initiator Internet I1: Initialization, ”Hello, I’m here. I want to talk HIP!” Responder
The HIP Base exchangeI1 packet • The HIP Initiator packet • Contains only HIP header • Opportunistic mode: Responder’s HIT unknown Header: Packet Type = 1 SRC HIT = Initiator's HIT DST HIT = Responder's HIT, or NULL
The HIP Base exchangeR1 packet - Challenge DNS Initiator Internet R1: Challenge: ”Solve this puzzle” Puzzle ESP SA initialization D-H initialization HIResponder Responder
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved, 4 bytes | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | R1 generation counter, 8 bytes | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • 64 bits • Current generation of valid puzzles • Incremented periodically by sender • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | K, 1 byte | Lifetime | Opaque, 2 bytes | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Random #I, 8 bytes | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Random #I (64 bits) • Initiator solves #J • K lowest bits of the hash must be • zero • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Group ID | Public value / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Group ID • 384-bit group 1 • OAKLEY well known group 1 2 • 1536-bit MODP group 3 • 3072-bit MODP group 4 • 6144-bit MODP group 5 • 8192-bit MODP group 6 • Public value is the Diffie-Hellman • public key generated by the sender • Initiator can calculate the shared secret • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Transform-ID #1 | Transform-ID #2 | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Transform-ID #n | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Proposed HIP transforms • Initiator selects one of them • Defined: • AES-CBC with HMAC-SHA1 1 • 3DES-CBC with HMAC-SHA1 2 • 3DES-CBC with HMAC-MD5 3 • BLOWFISH-CBC with HMAC-SHA1 4 • NULL-ENCRYPT with HMAC-SHA1 5 • NULL-ENCRYPT with HMAC-MD5 6 • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved |E| Suite-ID #1 | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Suite-ID #2 | Suite-ID #3 | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Suite-ID #n | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Proposed ESP transforms • Initiator selects one of them • Defined: • AES-CBC with HMAC-SHA1 1 • 3DES-CBC with HMAC-SHA1 2 • 3DES-CBC with HMAC-MD5 3 • BLOWFISH-CBC with HMAC-SHA1 4 • NULL-ENCRYPT with HMAC-SHA1 5 • NULL-ENCRYPT with HMAC-MD5 6 • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | HI Length |DI-type| DI Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Host Identity / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | Domain Identifier / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Responder’s HI (public key) • At the moment: DSA or RSA • Domain Identifier • FQDN or NAI (login@FQDN) • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Opaque data (variable length) | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Opaque data: must be echoed back • May be covered by signature • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeR1 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | SIG alg | Signature / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Signature calculated over the HIP • packet, excluding • Initiator’s HIT • checksum field • PUZZLE: opaque and #I • Any TLV after the signature TLV • Header • Parameters [ R1_COUNTER, ] PUZZLE, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, HOST_ID, [ ECHO_REQUEST, ] HIP_SIGNATURE_2 [, ECHO_REQUEST ]
The HIP Base exchangeI2 packet - puzzle solution DNS Initiator • Solve puzzle • Generate keying material • Select ESP SPI Internet I2: Challenge response Puzzle solution D-H parameters HIInitiator SPIInitiator Responder
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved | Keymat Index | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Old SPI | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | New SPI | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Keymat Index: tells the point from • where keys are drawn from the keying • material (zero in base exchange) • Old SPI (zero in base exchange) • New SPI; Initiator’s ESP SPI
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved, 4 bytes | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | R1 generation counter, 8 bytes | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - R1_COUNTER may be echoed back if it was in the received R1 packet
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | K, 1 byte | Reserved | Opaque, 2 bytes | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Random #I, 8 bytes | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Puzzle solution #J, 8 bytes | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • #J: Calculated solution to the puzzle • SHA-1(I,HIT-I,HIT-R,J) • K lowest order bits must be zero
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Group ID | Public value / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Initiator’s public D-H key value • Responder can calculate the shared secret
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Transform-ID #1 | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Initiator’s selection for HIP crypto • functions • One of the proposed in R1
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved |E| Suite-ID #1 | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Initiator’s selection for ESP crypto • functions • One of the proposed in R1
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | IV / • / / • / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / • / Encrypted data / • / / • / +-------------------------------+ • / | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Encrypted Initiator’s HI • HOST_ID TLV in ”Encrypted data” • field
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Opaque data (variable length) | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • If ECHO_REQUEST was present in R1, it must be echoed in a response
The HIP Base exchangeI2 packet • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2 • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | | • | HMAC | • | | • | | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • HMAC is calculated over the HIP • packet, excluding • checksum (zeroed) • TLVs following HMAC
The HIP Base exchangeI2 packet • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | SIG alg | Signature / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Signature calculated over the HIP • packet, excluding • Initiator’s HIT • checksum field • PUZZLE: opaque and #I • Any TLV after the signature TLV • Header • Parameters ESP_INFO, [ R1_COUNTER, ] SOLUTION, DIFFIE_HELLMAN, HIP_TRANSFORM, ESP_TRANSFORM, ENCRYPTED{HOST_ID}, [ ECHO_RESPONSE, ] HMAC, HIP_SIGNATURE_2
The HIP Base exchangeR2 packet - finalizing connection setup DNS Initiator Internet R2: Connection setup finalization SPIResponder • Verify puzzle • Generate keying material • Select ESP SPI Responder
The HIP Base exchangeR2 packet • Header • Parameters ESP_INFO, HMAC_2, HIP_SIGNATURE • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Reserved | Keymat Index | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Old SPI | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | New SPI | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Keymat index: tells the point where • keys are drawn from the keying • material (zero in Base exchange) • Old SPI (zero in Base exchange) • New SPI; Responder’s ESP SPI
The HIP Base exchangeR2 packet • Header • Parameters ESP_INFO, HMAC_2, HIP_SIGNATURE • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | | • | HMAC | • | | • | | • | | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • HMAC over the HIP packet plus an • additional senders HOST_ID, • and excluding • checksum (zeroed) • TLVs following HMAC_2
The HIP Base exchangeR2 packet • Header • Parameters ESP_INFO, HMAC_2, HIP_SIGNATURE • 0 1 2 3 • 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | Type | Length | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • | SIG alg | Signature / • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • / | Padding | • +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • signature over the HIP packet, • excluding • checksum (zeroed) • Any TLVs following the signature
The HIP Base exchange DNS Initiator Internet ESP Security Association Responder
R2 [HITI, HITR, authenticator] I1 HITI, HITR or NULL R1 HITI, [HITR, puzzle, DHR, HIR] I2 [HITI, HITR, solution, DHI, {HII}] User data messages ESP protected TCP/UDP, no explicit HIP header The HIP Base exchange protocol Initiator Responder solve puzzle verify, authenticate
Security in HIP • The Host Identity is a public key • Prove the ownership using private key • Used for host authentication and setting up HIP association • Traffic protected with IPsec Encapsulating Security Payload (ESP) • draft-ietf-hip-esp-06 • New IPSec mode, BEET • ESP SA establishment during HIP base exchange • ESP SAs bound to HITs
BEET • A Bound End-to-End Tunnel (BEET) mode for ESP • draft-nikander-esp-beet-mode-07 • BEET mode augments the existing ESP tunnel and transport modes. • end-to-end tunnels • purpose is to provide limited tunnel mode semantics without the overhead • IP addresses seen by the applications and the IP addresses used on the wire are distinct from each other • BEET mode is intended to support new uses of ESP • e.g. mobility and multi-address multi-homing
BEET packet processing • In the regular transport mode the IPheader is kept intact. • In the regular tunnel mode an outer IP headeris created on output and discarded on input. • In the BEET mode the IPheader is replaced with another one on both input and output • BEET in OSs • Linux: work in progress, target 2.6.25 • FreeBSD: work in progress, target FreeBSD 7
BEET packet format BEFORE APPLYING ESP ------------------------------------------ | | ext hdrs | | | | inner IP hdr | if present | TCP | Data | ------------------------------------------ AFTER APPLYING ESP, OUTER v6 ADDRESSES -------------------------------------------------------------- | outer | new ext | | dest | | | ESP | ESP | | IP hdr | hdrs. | ESP | opts.| TCP | Data | Trailer | ICV | -------------------------------------------------------------- |<---- encryption ---->| |<------- integrity ------>| AFTER APPLYING ESP, OUTER v4 ADDRESSES ---------------------------------------------------- | outer | | dest | | | ESP | ESP | | IP hdr | ESP | opts.| TCP | Data | Trailer | ICV | ---------------------------------------------------- |<------- encryption -------->| |<----------- integrity ----------->|
Mobility in HIP • Connections bound to constant Host Identities (HIs) • Mobile host new locator (IP address) same connection endpoint (HI) • Connections don’t break • Peer host informed of new locator (IP addr.) • Mobility between IPv4 and IPv6 is supported
Location update message: ”Hi, I’ve moved to over here” MN HIP associationestablished HIP updateLocation update Internet Can also be used for re-keying,with or without mobility CN