802.11i是无线安全的救命稻草?
那么前面也说到了,
TKIP
只是为了弥补
WEP
缺陷所做的一种补救措施,治标不治本。
WPA
的命运就像他的草案命运一样注定会被标准所取代,这个千呼万唤才出来的标准就是
802.11i
。
其实
802.11i
是
WPA
第二代,也就是所谓的
WPA2
。
802.11i
完全放弃了
WEP
甚至对
WPA
的改善想法,所有的处理方式都试图开创出一种全新的机制,尤其是数据的加密方面,完全剔除
RC4
流加密,而是采用了
CCMP
(
Counter Mode with CBC-MAC Protocol
,计数器模式及密码快链消息认证码协议)算法。其实
CCMP
主要有两种算法组成,分别是
CTR-Mode
(计数器模式的高级加密
AES
标准算法)和
CBC-MAC mode
(块加密链信息验证码算法),前者采用
AES
快加密算法负责数据的加密处理,而后者则是一种完整性校验算法。另一方面依然保留了
WPA
身份认证机制
802.1x
及
PSK
。所以所谓的
802.11i
便可以简短的标识为:
802.11i(WPA2)= 802.1x + EAP + AES + CCMP
= Pre-shared Key + AES + CCMP
其中
1X
跟
PSK
认证过程跟
WPA
一样,同时利用
EAPOL-Key
协商
CCMP
的密钥协商主密钥
PMK
。此过程也跟前面的
TKIP
的处理方式一样。当然
CCMP
用于加密及验证的密钥的生成还需要经过四次握手的过程。这个在后面会讲到。下面主要描述一下
CCMP
的数据处理过程。
图 CCMP数据加密流程
从上图中可以看出
CCMP
的处理需要做如下几个方面的准备:
1.
构造附加认证数据
ADD
(
Additional Authentication Data
),其中包含帧头中的一些字段,这些字段必须通过真实性的校验,但又不能经过加密,否则
802.11
协议便无法进行操作。接收端会同样使用
AAD
字段,以确认这些字段在传送过程中未被改动。
AAD
字段会保护
801.11
协议版本、帧类型、分布式系统位及片段与次序位。它也会保护来自
MAC
标头的地址字段,同时会将序列号设为零以保护顺序控制字段。
2.
构建
CCMP nonce
。加密学上的
nonce
就是一个用过即丢的随机数。
Nonce
不应该在相同密钥中重复使用。在
CCMP
中
nonce
由封包编号
PN
及发送端地址组合而成。如此不同的
STA
也可以使用相同的
PN
,增加的随机性。
图
CCMP nonce
数据生成
3.
Packet number
(
PN
)。用来防重放。构造
nonce
及构建
CCMP Header
。
4.
构建
CCMP Header
。如图中示,
CCMP
标头由
PN
中间添加了
key id
及扩展
IV
组合而成。
5.
Temporal Key
:由密钥衍生算法派生出来的密钥。
6.
CCMP
计数器
Counter
的生成:
图
CCMP
加密计数器的生成
有了以上的准备,便可以交给
CCMP
进行加密及完整性校验数据处理。前面提到
CCMP
由两个算法组成,一个为
CTR-Mode
,一个为
CBC-MAC Mode
。
CTR-Mode
全名为
Adcanced Eneryption Standand
(
AES
)
in Counter Mode
(计数器模式的高级加密
AES
标准算法)。
AES
是一种块加密算法,跟
RC4
流加密不同之处就在于在流加密中把加密数据当作流,然后采用等长流密码依次跟数据流做异或等算法计算。而块加密则把整个数据分成等长的块,然后对分割的块进行加解密处理。
CCMP
对数据的加密除了密钥外另外还多了
Counter
值,进一步增加了密钥的随机性。而这儿的这个计数值就是在上面
flag
,
nonce
,
length of payload
构建的
Initial Counter
字段。如下图所示,数据被分割以后逐块跟
AES
密钥异或处理得到加密块,没计算一个块数据计数器加
1
,这样每个数据块都会用不同的密钥进行加密处理。直至最后一个数据块。
图
CTR encryption
处理流程
CTR
并没有提供完整性校验机制,而
CCMP
也提供了另外一种
CBC-MAC Mode
(
Cipher Block Chaining Message Authentication Code
),正如其名,
CBC-MAC
主要针对消息块经由
block cipher algorithm
加密运算,再把输出给下一个
block
当作输入使用,最后输出消息验证码,以达到验证消息的效果。下图正式完成了这个过程:
图
CBC-MAC
的处理流程
一开始第一个块没有
input
,所以
IV
用
0
代替在
CCMP
里会把低
64bits
无条件去掉,只取高位
64bits
当作
MIC
使用。
至此
CTR
完成了数据加密,将加密块串联后便得到了完整的数据帧,
CBC-MAC
最后计算得到了数据完整性校验码
MIC
,
PN
和
Key id
构成了
CCMP Header
,然后重新组装完成新的数据帧。然后这样便可以通过无线接口发送了。
图
802.11i
加密后的数据帧
(未完待续---请关注下篇:WAPI凭什么跟802.11i博弈)