HIP协议[3]提供了两个终端主机之间快速的HI值交换。HIP基本交换建立了两个主机间双向的IPSecSA,如图1所示。当一个节点I要发起对R的HIP连接时,它首先查询目录服务器(如DNS),获取R对应的地址、HI值和HIT值,之后开始4个数据包的基本交换。首先,由I发送一个I包,请求R的HIP对话。于是,R就发出R,开始了交换,R包含产生的Diffie-Hellman密钥交换算法的DH半会话密钥,以及它自己的公钥HI,同时附上它的签名。当I接收到R包之后,就可通过R的公钥检验R包是否来自R。同时,产生自己的DH半会话密钥,结合R的半会话密钥计算得出DH会话密钥,然后由该会话密钥产生HIP的SA,并使用该SA来认证加密数据包的信息。这些信息加上I的签名后作为I发送给R。这时,R解开I的DH半会话密钥,计算DH会话密钥和创建SA,并获得I的公钥,通过签名确认该信息是I发送的。R包用来确认并保护I免受重放攻击。另外,由于在I包发送时已建立会话密钥,所以从第3个包开始就已能在基本交换中携带发送数据。

图一 HIP主机建立通信的过程
点击此处查看全部新闻图片
在基本交换之后,通信双方就确认了对方确实持有HI所对应的私钥,基本交换建立了一对不同方向的IPSecESP的SA。另外,由于HIP工作在IP层之上,所以每个数据包中都会含有至少40byte的HIP负载;而ESP又内含HIP的信息,因此,在实际应用中,除了HIP基本交换和维护HIP状态时需要HIP负载之外,在后续数据传输中就不再需要HIP负载了;而HIT实际上已经隐含在SPI中,通过SPI就可得到对应的HIT值以及对应的秘密信息。
HIP的实现是在网络层与传输层之间插入3.5层主机标识层,用于标识连接终端。HIP负载实际上类似于IPv6的一个扩展头。HIP网络的层次结构如图2所示,其所使用的标识符称为HI,是公私钥对中的公钥,通常存放在DNS中。由于HI的长度因不同的公钥体制算法而不同,所以在实际协议中通常使用固定长度的HIT(HostIdentityTag)值。HIT值是对HI的128位Hash结果值,前两位比特的选择使其保持与IPv6地址空间的兼容性。