基于BLE芯片CC2541的AES CCM加密解密算法的实现

2016-09-13 09:13李仁杰
电子设计工程 2016年5期
关键词:字段寄存器字节

李仁杰

(武汉邮电科学研究院 湖北 武汉 430074)

基于BLE芯片CC2541的AES CCM加密解密算法的实现

李仁杰

(武汉邮电科学研究院 湖北 武汉430074)

蓝牙SIG工作组于2014年12月02日发布了最新的蓝牙4.2协议,该协议保留了之前发布的4.0版本中的Bluetooth Low Energy的相关内容,其中包括AES CCM加密解密算法。针对TI官方只提供CCM加密解密库文件但未同时提供详细参考文档的实际情况,本文结合CCM算法和蓝牙协议以及CC2541芯片文档,具体讨论了如何设置相关寄存器,以在CC2541芯片上实现AES CCM加密解密算法。

蓝牙;无线通信;信息安全;加密解密;CCM

Bluetooth 4.0规范提出了Bluetooth Low Energy(以下简称BLE)协议。BLE协议指出,链路层(Link Layer)的数据加密认证方式采用AES CCM算法。TI CC2541是一款基于BLE开发的芯片,该芯片自带的AES协处理器(AES Coprocessor)可以实现 CBC、CFB、OFB、CTR、ECB、CBC MAC等多种加密解密算法[1,7]。TI官方提供的CC2541芯片文档并没有针对AES协处理器的操作使用给出详细的说明,只是大概的指出了加密解密的一些流程。本文详细讨论了如何在CC2541芯片上通过AES协处理器来实现BLE的AES CCM加密解密算法。

1 CCM算法简介

BLE链路层采用CCM算法实现认证和加密。CCM实际上分为CBC-MAC认证算法和CTR加密算法两部分[1]。CBCMAC认证算法的输出是长度为M的认证字段T,CTR加密算法针对两种数据进行加密:其一是针对认证字段T进行CFB/OFB加密,得到的输出是加密后的认证字段U,如图1所示;其二是针对消息字段m(可以划分为一个或多个blocks,不足一个block的部分补0)进行CTR加密,得到的输出是加密后的消息字段,如图2所示。

图1 认证字段的生成和加密Fig.1 Generation and encryption of authentication field

图2 消息字段的加密Fig.2 Encryption of message field

CCM算法有2个重要的参数:认证字段字节长度M和长度字段字节长度L。文中讨论的CCM加密解密算法采用RFC3610文档[2]的Packet Vector#2输入数据:

输入数据的相关信息如表1所示。

表1 CCM算法的输入数据信息Tab.1 Input data information of CCM algorithm

由表1可知,nonce的长度是15-L=13,附加信息a的长度是M=8。表1中的K即是AES Key,在加密解密过程中,AES Key是不变的。表1中的N即是Nonce。完整数据包的长度是32字节,其中开始的8个字节00 01 02 03 04 05 06 07 是packet header,接下来24字节的内容08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F就是表1中的消息字段m。表1中的a是CBC-MAC算法的输出T(见图1),共M=8个字节。

在CCM算法中,加密解密的数据都是以block为单位,1 block=128 bits。图1和图 2中的A_i(i=0,1,2)和B_i(i= 0,1,2,3)都是一个block大小,即128 bits。其中,由表1中的nonce,a,m这3个输入信息可以构造出B_i(i=0,1,2,3),由L,nonce,i这3个输入信息可以构造出A_i(i=0,1,2)。

由图1和图2不难发现,CCM加密算法的输出数据信息如表2所示。

表2 CCM算法的输出数据信息Tab.2 Output data information of CCM algorithm

图3 Block B_0的构造Fig.3 Construction of Block B_0

图4 Block B_1的构造Fig.4 Construction of Block B_1

在本文所讨论的输入数据中,消息字段m被分解成B_2 和B_3,其中B_2就是消息字段m的前16字节:08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17,B_3就是消息字段m的剩余部分补0:18 19 1A 1B 1C 1D 1E 1F 00 00 00 00 00 00 00 00。B_3经过CTR加密之后得到M_2,因此M_2只取其前8个字节。

2 加密的实现

前文已讨论了加密的大致流程,本小节将继续讨论CC2541 AES协处理器加密过程中的一些细节,比如A_i(i=0,1,2)和B_i(i=0,1,2,3)的构造以及相关寄存器的设置方式。

首先讨论B_i(i=0,1,2,3)的构造。

如图3所示[5],B_0的字段中,flag占1个字节,最高位是保留为,默认为0。A_data的取值取决于l(a)的大小:若l(a)=0,则A_data=0;若l(a)>0,则A_data=1。在文中所讨论的例子中,l(a)为8,因此A_data=1。M’=(M-2)/2=(8-2)/ 2=3,用三位二进制表示就是011。L’=L-1=1,用三位二进制表示就是001。因此B_0的flag字段就是01011001=0x59。Nonce字段前文已给出,l(m)=24=0x18。因此可以推导出:

B_2和B_3就是将packet的消息字段划分成一个个完整的block。因此很容易得出:

下面再来看看block A_i(i=0,1,2)的构造,如图5所示。

图5 Block A_i(i=0,1,2)的构造Fig.5 Construction of Block A_i(i=0,1,2)

根据图1和图2可知,已知输入A_i(i=0,1,2)和B_i(i= 0,1,2,3)还有key,通过AES CCM算法就可以得到相应的输出。下面我们根据图1和图2的加密框图对CC2541 AES协处理器的相关寄存器进行设置,从而在该芯片上实现AES CCM加密解密算法。

首先看TI CC2541芯片文档[8]对AES协处理器相关寄存器的描述。CC2541的CPU与AES协处理器之间通过3个特殊功能寄存器进行信息交互:

其中ENCCS是AES加密控制和状态寄存器,其设置方式如图6所示。

图6 ENCCS寄存器的配置Fig.6 Configuration of ENCCS

在进行CCM加密之前,首先要加载秘钥key和初始向量IV。秘钥key在加密解密过程中保持不变,初始向量在CCM加密时定义为一个全0的block,即128 bits的全 0。CC2541芯片文档规定,在将ENCCS寄存器配置为CBCMAC模式后,需要加载B_0,B_1,B_2,然后在加载最后一个block之前,要将ENCCS寄存器设置成CBC模式,然后进行加密。CBC-MAC加密的关键代码如下[3]:

CC2541芯片文档规定,在对A_0进行CFB加密的时候,必须在选择CFB模式的同时,将ENCCS寄存器配置为load IV/Nonce模式。CFB加密的关键代码[4]:

接下来进行CTR加密,在正式进行CTR加密之前必须重新加载初始向量:

下面是来自RFC3610文档的Packet Vector#2从输入到输出的一些中间结果,方便与代码编译运行后的结果进行对照。

表3 程序和RFC3610文档的CCM中间变量Tab.3 Intermediate variables of CCM from RFC3610 and the program

将关键代码组织完整,在某款搭载CC2541芯片的蓝牙BLE开发板上运行AES CCM加密算法的结果如图7所示。

3 解密的实现

一般而言,解密就是加密的逆过程。解密过程的输入包括:秘钥key,数据包的头部,nonce,加密后的消息字段C_1 和C_2(不足1个block的用0填充),以及加密后的认证字段U。根据前文所述AES CCM加密的结果以及A_i的构造方式,不难得出:

图7 CC2541上AES CCM加密算法运行结果Fig.7 Result of AES CCM encryption algorithm in CC2541

将关键代码组织完整,在某款搭载CC2541芯片的蓝牙BLE开发板上运行AES CCM解密算法的结果如图8所示。

图8 CC2541上AES CCM解密算法运行结果Fig.8 Result of AES CCM decryption algorithm in CC2541

4 结 论

本文结合CCM算法标准的相关文档和CC2541芯片文档,具体讨论了CC2541 AES协处理器的使用方式和相关寄存器的配置,在CC2541芯片上实现了AES CCM的硬件加密解密。在蓝牙BLE成为穿戴式设备开发的主流技术的今天,BLE的数据安全性问题应当受到广泛的关注。

[1]项士标,何加铭.基于嵌入式平台802.16 AES-CCM算法的优化及实现[J].宁波大学学报,2009(2):170-172.

[2]The Internet Engineering Task Force.Counter with CBCMAC(CCM)[EB/OL].(2003-09)[2003-09].http://tools.ietf. org/html/rfc3610.

[3]National Institute of Standards and Technology.Announcing the ADVANCED ENCRYPTION STANDARD(Federal Information Processing Standards Publication 197)[S].Maryland: National Institute of Standards and Technology,2001.

[4]National Institute of Standards and Technology.Recommendation for Block Cipher Modes of Operation:The CCM Mode for Authentication and Confidentiality(NIST Special Publication 800-38C)[S].Maryland:National Institute of Standards and Technology,2004.

[5]Bluetooth SIG.Specification of the Bluetooth System Version 4.0[S].Washington:Bluetooth SIG,2010.

[6]Bluetooth SIG.Specification of the Bluetooth System Version 4.2[S].Washington:Bluetooth SIG,2014.

[7]怀莲.IEEE 802.15.4 CCM-AES协处理器的研究与设计[D].武汉:华中科技大学,2009.

[8]Texas Instruments.CC253x/4x User's Guide(Rev.F)[EB/ OL].(2014-04-09)[2014-04-09].http://www.ti.com/lit/ug/ swru191f/swru191f.pdf.

Realization of AES CCM encryption and decryption algorithm based on CC2541

LI Ren-jie
(Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China)

Bluetooth SIG released Bluetooth specification v4.2 on Dec.02,2014,which contains BLE(including AES CCM algorithm)from Bluetooth specification v4.0.Unfortunately,TI provides only library that realizes CCM encryption and decryption algorithm but not relevant documentation at the same time.This article discusses this issue of how to manipulate relevant registers in order to realize AES CCM encryption and decryption algorithm on the CC2541 chip.

bluetooth;wireless communication;information security;encryption and decryption;CCM

TN918.4

A

1674-6236(2016)05-0134-04

2015-04-07稿件编号:201504061

李仁杰(1988—),男,湖北孝感人,硕士。研究方向:无线通信。

猜你喜欢
字段寄存器字节
图书馆中文图书编目外包数据质量控制分析
STM32和51单片机寄存器映射原理异同分析
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
No.10 “字节跳动手机”要来了?
移位寄存器及算术运算应用
简谈MC7字节码
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究