WAPI-PSK认证过程一、安全关联的建立STA通过被动侦听信标帧或主动探询获得AP的安全策略。如果AP使用的是WAI证书鉴别和密钥管理机制,AP发送鉴别激活分组启动证书鉴别过程,证书鉴别过程成功结束后,AP和STA进行单播密钥协商过程和组播密钥通告过程。如果AP使用的是预共享密钥机制,AP和STA直接进行单播密钥协商过程和组播密钥通告过程。STA和AP之间的单播数据利用单播密钥协商过程所协商推导出的单播加密密钥、单播完整性校验密钥进行保护;AP利用自己通告的组播密钥保护发送广播/组播数据,STA接收时采用AP通告的组播密钥进行解密。二、WAPI信息元素WAPI信息元素包含鉴别和保密套件选项,见图5。所有的实现WAPI的STA应支持该信息元素。WAPI信息元素的长度应最大为255八位位组。WAPI信息元素格式——元素标识ID应为68。——长度字段标识WAPI信息元素中除元素标识ID和长度字段以外的字段的八位位组数。——版本字段标识WAPI协议的版本号,本规范中版本号为1,其他值保留。——鉴别和密钥管理(AKM)套件计数字段标识STA支持的鉴别和密钥管理机制个数。——鉴别和密钥管理(AKM)套件字段包含STA支持的鉴别和密钥管理机制,m为鉴别和密钥管理套件计数字段的值。——单播密码套件计数字段标识STA支持的单播密码算法个数。——单播密码套件字段包含STA支持的单播密码算法,n为单播密码套件计数字段的值。——组播密码套件字段包含STA支持的组播密码算法。——WAPI能力信息WAPI能力信息字段表示请求或声明的能力信息,该字段长度为2个八位位组,各比特定义如下:WAPI能力信息比特0为预鉴别标识。AP如果支持预鉴别,设置此字段值为1,否则设置为0。非AP的STA设置此字段值为0。——BKID计数和列表字段。BKID计数和列表字段仅用于发往AP的关联或重新关联请求帧中。BKID计数字段表示BKID列表字段中包含的BKID的个数。BKID列表字段包含0个或多个STA当前缓存的和目的AP之间的有效的BKID,s为BKID计数字段的值。其中BKID可能为:a)STA缓存的通过和目的AP预鉴别得到的BKID;b)STA缓存的通过证书鉴别得到的BKID;c)STA缓存的通过预共享密钥得到的BKID。三、实现方式在BSS中基于共享密钥(在STA和AP之间)的方式1)STA通过AP的信标帧或探询响应帧识别AP支持WAI鉴别及密钥管理套件;2)STA和AP之间进行链路验证;3)在关联过程中,STA在关联请求中包含WAPI信息元素确定选择的密码套件;4)预共享密钥导出BK后,STA和AP进行单播密钥协商过程、组播密钥通告过程;5)把协商出来的密钥和密码套件通知WPI模块,进行数据传输保护。四、单播密钥协商过程单播密钥协商过程使用基密钥完成单播会话密钥的协商,建立USKSA(单播会话密钥安全关联)。单播密钥协商过程单播密钥协商请求分组数据字段格式如下:单播密钥协商请求分组数据字段格式其中:——标识FLAG字段长度为1个八位位组,定义如前,比特4(USK更新标识)有意义。当AE进行会话密钥更新时,比特4(USK更新标识)的值为1;否则为0。——BKID字段长度为16个八位位组,表示当前作为共享密钥的基密钥,其值计算如前定义。——USKID字段长度为1个八位位组,其中比特0标识当前协商的单播会话密钥,其他位保留。本字段的比特0在BKSA建立后第一次单播密钥协商时初值为,以后再重新进行单播密钥协商时该位在0和1之间翻转。——ADDID字段长度为12个八位位组,如前定义。MAC地址1为AE的MAC地址,其中MAC地址2为ASUE的MAC地址。——AE挑战字段长度为32个八位位组,记作N1。若标识字段的比特4(USK更新标识)的值为0,则AE的挑战为AE产生的随机数;若标识字段的比特4(USK更新标识)的值为1,则AE挑战为上一次单播密钥协商过程所协商的值。在AE完成证书鉴别过程并建立有效的BKSA后,或采用预共享密钥鉴别方式时,或缓存的BKSA被使用,或进行单播密钥更新时,AE向ASUE发送单播密钥协商请求分组开始与ASUE进行单播密钥协商。ASUE接收到与其相关联的AE发送的单播密钥协商请求分组后,进行如下处理:a)首先检查BKID所指BKSA是否有效,若无效,则丢弃该分组;否则检查标识字段的比特4(USK更新标识)是否为0,若是0,执行c)操作;若是1,则检查USKID所指的USKSA是否有效,若有效,则丢弃该分组;否则,执行b)操作;b)检查AE挑战与本地保存的值是否相同,若不同,则丢弃该分组;否则,执行c)操作。c)ASUE利用随机数产生器产生ASUE挑战N2,然后计算KD-HMAC-SHA256(BK,ADDID||N1||N2||“pairwisekeyexpansionforunicastandadditionalkeysandnonce”),其中N1为AE挑战,N2为ASUE挑战。生成96个八位位组,前64个八位位组为单播会话密钥(第一个16个八位位组为单播加密密钥,第二个16个八位位组为单播完整性校验密钥,第三个16个八位位组为WAI协议消息鉴别密钥,第四个16个八位位组为组播密钥/站间密钥加密密钥)。最后32个八位位组为下一次单播会话密钥协商过程的AE挑战的种子,然后对该种子使用SHA-256函数计算得到长度为32个八位位组的下一次单播密钥协商过程的AE挑战并保存。d)用WAI协议消息鉴别密钥通过HMAC-SHA256算法本地计算消息鉴别码,构造单播密钥协商响应分组发往AE。e)若为BSS模式,则ASUE利用原语MLME-SETWPIKEYS.request安装新协商的单播会话密钥;若为IBSS模式,只有当AE的MAC地址大于ASUE的MAC地址时,ASUE才利用原语MLME-SETWPIKEYS.request安装新协商的单播会话密钥。对于新安装的密钥,ASUE调用原语MLME-SETPROTECTION.request仅启用其接收功能,即允许用其解密AE发来的单播数据。单播密钥协商响应分组数据字段格式如下:单播密钥协商响应分组数据字段格式其中:——标识FLAG字段长度为1个八位位组,定义如前,比特4(USK更新标识)有意义。当AE进行会话密钥更新时,比特4(USK更新标识)的值为1;否则为0。——BKID字段长度为16个八位位组,表示当前共享的基密钥,其值计算如前定义。——USKID字段长度为1个八位位组,其中比特0标识当前协商的单播会话密钥,其他位保留。本字段的比特0初始值为0,每次重新进行单播密钥协商时该位在0和1之间翻转。——ADDID字段长度为12个八位位组,如前定义。MAC地址1为AE的MAC地址,其中MAC地址2为ASUE的MAC地址。——AE挑战字段长度为32个八位位组。若ASUE发起密钥更新,ASUE设置标识字段的比特4(USK更新标识)的值为1,AE挑战字段为上一次单播密钥协商过程所协商的值;否则该字段和单播密钥协商请求分组中的AE挑战字段相同。——ASUE挑战字段长度为32个八位位组。由ASUE利用随机数产生器生成。——WIEASUE字段为ASUE选择的WAPI信息元素。在BSS模式下,该字段和ASUE在关联请求帧中发送的WAPI信息元素相同;在IBSS模式下,该字段包含ASUE选择的单播密码算法、AE通告的组播密码算法和当前使用的鉴别和密钥管理套件列表。——消息鉴别码字段长度为20个八位位组。其值为ASUE利用最新协商的消息鉴别密钥通过HMAC-SHA256算法对本字段之前的所有协议数据字段内容计算得到,不包含分组头。ASUE进行密钥更新时,或收到AE的单播密钥协商请求分组并构造单播密钥协商响应后,发送单播密钥协商响应分组给AE。AE收到单播密钥协商响应分组后,进行如下处理:a)若标识字段的比特4(USK更新标识)为1,执行b)操作;否则执行c)操作。b)若当前有有效的USKSA并且USKID所指USKSA无效,则执行c)操作;否则,丢弃该分组。c)检查AE挑战值是否正确,若不正确,则丢弃该分组;否则,执行d)操作。d)计算KD-HMAC-SHA256(BK,ADDID||N1||N2||“pairwisekeyexpansionforunicastandadditionalkeysandnonce”),其中N1是AE挑战,N2是ASUE挑战。生成96个八位位组,前64个八位位组为单播会话密钥(第一个16个八位位组为单播加密密钥,第二个16个八位位组为单播完整性校验密钥,第三个16个八位位组为WAI协议消息鉴别密钥,第四个16个八位位组为组播密钥/站间密钥加密密钥)。后32个八位位组为下一次单播会话密钥协商过程的AE挑战的种子,然后对种子使用SHA-256函数计算得到长度为32个八位位组的下一次单播会话密钥协商过程的AE挑战。利用消息鉴别密钥通过HMAC-SHA256算法本地计算消息鉴别码,与分组中的消息鉴别码字段值比较,若相同,则执行操作e);否则,丢弃该分组。e)若标识字段的比特4(USK更新标识)为0,在基础模式下,则检查WIEASUE字段和自己收到的关联请求帧的WAPI信息元素是否相同,若不同,解除与STAASUE的链路验证;若相同,则执行操作f);在IBSS模式下,检查WIEASUE字段中选择的单播密钥算法是被支持的,然后执行操作f);否则解除与ASUE的链路验证;若标识字段的比特4(USK更新标识)为1,则执行操作f)。f)用WAI协议消息鉴别密钥通过HMAC-SHA256算法本地计算消息鉴别码,构造单播密钥协商确认分组,发送给ASUE。g)若为BSS模式,则AE利用原语MLME-SETWPIKEYS.request安装新协商的单播会话密钥;若为IBSS模式,只有当AE的MAC地址大于ASUE的MAC地址时,AE才利用原语MLME-SETWPIKEYS.request安装新协商的单播会话密钥。对于新安装的密钥,AE调用原语MLME-SETPROTECTION.request启用其收发功能,即可利用其对单播数据进行加解密。若此次单播密钥协商过程为更新过程,则一旦使用新密钥正确解密过数据时,删除旧的单播会话密钥;或者启用新密钥收发数据60秒之后,自动删除旧的单播密钥。单播密钥协商确认分组数据字段格式如下:单播密钥协商确认分组数据字段格式其中:——标识FLAG字段长度为1个八位位组,定义如前,本字段和单播密钥协商响应分组的标识字段相同。——BKID字段长度为16个八位位组,本字段和单播密钥协商响应分组的BKID字段相同。——USKID字段长度为1个八位位组,其中比特0标识当前协商的单播密钥,其他位保留。本字段和单播密钥协商响应分组的USKID字段相同。——ADDID字段长度为12个八位位组,本字段和单播密钥协商响应分组的ADDID字段相同。——ASUE挑战字段长度为32个八位位组。本字段和单播密钥协商响应分组中的ASUE挑战字段相同;——WIEAE字段为AE在信标帧和探询响应帧中发送的WAPI信息元素。——消息鉴别码字段长度为20个八位位组。其值为AE利用最新协商的消息鉴别密钥通过HMAC-SHA256算法对本字段之前的所有协议数据字段内容计算得到,不包含分组头。AE收到单播密钥响应分组后,发送单播密钥协商确认分组给ASUE。ASUE接收到AE的单播密钥协商确认分组后,进行如下处理:a)检查ASUE挑战与自己在单播密钥协商响应分组中发送的值是否相同,若不同,则丢弃该分组;否则,执行b)操作。b)利用消息鉴别密钥通过HMAC-SHA256算法本地计算消息鉴别码,与分组中的消息鉴别码字段值比较,若相同,则执行操作c);否则,丢弃该分组。c)若标识字段的比特4(USK更新标识)为0,则检查WIEAE字段和自己收到的信标帧和探询响应帧的WAPI信息元素是否相同,若相同,则执行操作d);否则,解除与STAAE的链路验证。若标识字段的比特4(USK更新标识)为1,则执行操作d)。d)调用原语MLME-S