一.前言
物联网及无线传感器网络的特点都为低带宽,节点的存储空间、计算性能、能量供应都较低在链路层中,业界主流的协议包括Wi-fi(IEEE 802.11),zigbee(IEEE 802.15.4)和蓝牙(IEEE 802.15.1)。
Wi-fi和zigbee的安全机制我已经在之前的一篇博客中有较详细介绍,这两种协议在链路层都是基于CCM机制做扩展,Wi-fi称为CCMP,zigbee成为CCM*。但总归CCM机制是这两种协议链路层安全的主体部分。
然而CCM这个英文缩写的全称还比较绕,理解起来比较麻烦。
CCM的全称是Counter mode with CBC-MAC,而CBC-MAC的全称又是Cipher Block Chain-Message Authentication Code mode。。。
但总之,简单地说:
CCM模式由Counter mode(计数器模式)和CBC-MAC mode两种模式组成,其中Counter mode主要功能为加密,CBC-MAC主要功能为利用MAC对消息进行验证。(注意:此处的MAC并非平时说的网卡地址,而是消息验证码)
下面我们就来深入钻研下CCM到底是个什么样的存在。首先在第二部分介绍MAC,然后在第三部分介绍counter mode 和 CBC mode,最后在第四部分做总结。
二.MAC(Message Authentication Code)的机制及作用
MAC的机制:
通信双方互相约定一个对称秘钥s,发送方在要发送明文m尾部串接加上s形成整体(m+s),然后对整体利用hash函数形成摘要H(m+s),并放在原发送明文尾部形成整体(m,H(m+s))发送给接收方。
接收方收到消息(m,x)后,先把m和双方约定好的对称秘钥s串接并形成摘要H(m+s),再把此摘要和x进行比较。若相等,则消息的完整性得到验证;若否,则说明消息在传输过程中遭到破坏,比如中间人攻击(如篡改、伪造等)。
但有一个问题是MAC是否起到了对发送方的身份验证的作用?
在wikiPedia上,介绍MAC提供了身份验证机制,在tinySec的论文中也很多次提到利用MAC机制实现身份验证。
我认为MAC肯定实现了对传输信息的完整性验证(即验证消息在传输过程中没有遭到破坏);然后,鉴于通信双方确实提前约定好了对称秘钥,MAC的产生也是需要用到此秘钥的,所以也可认为MAC是提供了对发送方的身份验证。因为只有想要通信的人才拥有此对称密钥。
(当然如果攻击人获得了此对称秘钥,然后自己伪造消息形成MAC码,那接收方应该是判断不出来的。但这是另一回事了)
三.CTR、CBC、CBC-MAC及分块密码的工作模式
**具体到Counter Mode(CTR,计数器模式)和CBC Mode(密码块链接模式),这两种都是块密码(block cipher)中对密码块的不同处理方式。
首先,对称秘钥根据对原文的加密方式的不同,分为流密码(stream cipher)和块密码两种。**
**块密码的工作机制为把原文分成多个等长的模块(block)(通常为8或16字节),然后使用确定的算法和对称密钥对每组分别加密解密。DES,AES,RC5都是分块加密方式。
但需要加密的原文通常远长于16字节,所以使用k字节的分块加密方式需要把原文分成相等的n个k字节块,然后对每一块使用特别的方式进行替代、变化等多种迭代处理方式达到加密效果。对每个块的加密方式有很多种,如CTR,CBC,OFB,ECB等。其中,CBC是最为常用的工作模式,CTR很适合运用于多处理器的硬件上**
CTR模式为将块密码变为流密码,它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数,但使用一个普通的计数器是最简单和最常见的做法,CTR的加解密过程分别如图1,2所示。
CTR允许在解密时进行随机存取,并且加密和解密过程均可以进行并行处理,这是它很适合运用于多处理器硬件上的原因。
图1 CTR的加密过程
图2 CTR的解密过程
而在CBC模式中,每个明文块先与前一个密文块进行异或操作后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块,明文中的微小改变会导致其后的全部密文块发生改变。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
它的主要缺点在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。解决后一个问题的一种方法是利用密文窃取。
但是CBC模式在解密时是可以并行化的。密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容,从两个邻接的密文块中即可得到一个明文块。
- 图3 CBC的加密过程
- 图4 CBC的解密过程
四.总结
CCM机制是保障Wifi和zigbee在链路层安全的关键。
CCM机制由counter mode 和 CBC-MAC mode两部分组成。这两种模式都是分组加密中对分组块的不同处理方式。
counter mode的作用为对传输数据进行加密,以保障数据在传输过程中不会被恶意攻击者窃听;
CBC-MAC mode的作用为对传输数据进行验证,以保障所接收数据确实来源于通信的另一方以及检验数据在传输过程中是否有丢失。
此处的MAC为message authentication code(消息验证码),并非我们平时说的MAC地址(链路层网卡地址,media access control)。
具体机制可以看第二部分和第三部分。
(参考资料:
虞志飞,ZigBee 技术及其安全性研究,计算机技术与发展,2008 年8 月;
任秀丽,ZigBee技术的无线传感器网络的安全性研究,仪器仪表学报,2007年12月
Wikipedia)