李仁杰
(武漢郵電科學(xué)研究院 湖北 武漢 430074)
基于BLE芯片CC2541的AES CCM加密解密算法的實(shí)現(xiàn)
李仁杰
(武漢郵電科學(xué)研究院 湖北 武漢430074)
藍(lán)牙SIG工作組于2014年12月02日發(fā)布了最新的藍(lán)牙4.2協(xié)議,該協(xié)議保留了之前發(fā)布的4.0版本中的Bluetooth Low Energy的相關(guān)內(nèi)容,其中包括AES CCM加密解密算法。針對(duì)TI官方只提供CCM加密解密庫(kù)文件但未同時(shí)提供詳細(xì)參考文檔的實(shí)際情況,本文結(jié)合CCM算法和藍(lán)牙協(xié)議以及CC2541芯片文檔,具體討論了如何設(shè)置相關(guān)寄存器,以在CC2541芯片上實(shí)現(xiàn)AES CCM加密解密算法。
藍(lán)牙;無(wú)線通信;信息安全;加密解密;CCM
Bluetooth 4.0規(guī)范提出了Bluetooth Low Energy(以下簡(jiǎn)稱BLE)協(xié)議。BLE協(xié)議指出,鏈路層(Link Layer)的數(shù)據(jù)加密認(rèn)證方式采用AES CCM算法。TI CC2541是一款基于BLE開(kāi)發(fā)的芯片,該芯片自帶的AES協(xié)處理器(AES Coprocessor)可以實(shí)現(xiàn) CBC、CFB、OFB、CTR、ECB、CBC MAC等多種加密解密算法[1,7]。TI官方提供的CC2541芯片文檔并沒(méi)有針對(duì)AES協(xié)處理器的操作使用給出詳細(xì)的說(shuō)明,只是大概的指出了加密解密的一些流程。本文詳細(xì)討論了如何在CC2541芯片上通過(guò)AES協(xié)處理器來(lái)實(shí)現(xiàn)BLE的AES CCM加密解密算法。
BLE鏈路層采用CCM算法實(shí)現(xiàn)認(rèn)證和加密。CCM實(shí)際上分為CBC-MAC認(rèn)證算法和CTR加密算法兩部分[1]。CBCMAC認(rèn)證算法的輸出是長(zhǎng)度為M的認(rèn)證字段T,CTR加密算法針對(duì)兩種數(shù)據(jù)進(jìn)行加密:其一是針對(duì)認(rèn)證字段T進(jìn)行CFB/OFB加密,得到的輸出是加密后的認(rèn)證字段U,如圖1所示;其二是針對(duì)消息字段m(可以劃分為一個(gè)或多個(gè)blocks,不足一個(gè)block的部分補(bǔ)0)進(jìn)行CTR加密,得到的輸出是加密后的消息字段,如圖2所示。
圖1 認(rèn)證字段的生成和加密Fig.1 Generation and encryption of authentication field
圖2 消息字段的加密Fig.2 Encryption of message field
CCM算法有2個(gè)重要的參數(shù):認(rèn)證字段字節(jié)長(zhǎng)度M和長(zhǎng)度字段字節(jié)長(zhǎng)度L。文中討論的CCM加密解密算法采用RFC3610文檔[2]的Packet Vector#2輸入數(shù)據(jù):
輸入數(shù)據(jù)的相關(guān)信息如表1所示。
表1 CCM算法的輸入數(shù)據(jù)信息Tab.1 Input data information of CCM algorithm
由表1可知,nonce的長(zhǎng)度是15-L=13,附加信息a的長(zhǎng)度是M=8。表1中的K即是AES Key,在加密解密過(guò)程中,AES Key是不變的。表1中的N即是Nonce。完整數(shù)據(jù)包的長(zhǎng)度是32字節(jié),其中開(kāi)始的8個(gè)字節(jié)00 01 02 03 04 05 06 07 是packet header,接下來(lái)24字節(jié)的內(nèi)容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(見(jiàn)圖1),共M=8個(gè)字節(jié)。
在CCM算法中,加密解密的數(shù)據(jù)都是以block為單位,1 block=128 bits。圖1和圖 2中的A_i(i=0,1,2)和B_i(i= 0,1,2,3)都是一個(gè)block大小,即128 bits。其中,由表1中的nonce,a,m這3個(gè)輸入信息可以構(gòu)造出B_i(i=0,1,2,3),由L,nonce,i這3個(gè)輸入信息可以構(gòu)造出A_i(i=0,1,2)。
由圖1和圖2不難發(fā)現(xiàn),CCM加密算法的輸出數(shù)據(jù)信息如表2所示。
表2 CCM算法的輸出數(shù)據(jù)信息Tab.2 Output data information of CCM algorithm
圖3 Block B_0的構(gòu)造Fig.3 Construction of Block B_0
圖4 Block B_1的構(gòu)造Fig.4 Construction of Block B_1
在本文所討論的輸入數(shù)據(jù)中,消息字段m被分解成B_2 和B_3,其中B_2就是消息字段m的前16字節(jié):08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17,B_3就是消息字段m的剩余部分補(bǔ)0:18 19 1A 1B 1C 1D 1E 1F 00 00 00 00 00 00 00 00。B_3經(jīng)過(guò)CTR加密之后得到M_2,因此M_2只取其前8個(gè)字節(jié)。
前文已討論了加密的大致流程,本小節(jié)將繼續(xù)討論CC2541 AES協(xié)處理器加密過(guò)程中的一些細(xì)節(jié),比如A_i(i=0,1,2)和B_i(i=0,1,2,3)的構(gòu)造以及相關(guān)寄存器的設(shè)置方式。
首先討論B_i(i=0,1,2,3)的構(gòu)造。
如圖3所示[5],B_0的字段中,flag占1個(gè)字節(jié),最高位是保留為,默認(rèn)為0。A_data的取值取決于l(a)的大?。喝鬺(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,用三位二進(jìn)制表示就是011。L’=L-1=1,用三位二進(jìn)制表示就是001。因此B_0的flag字段就是01011001=0x59。Nonce字段前文已給出,l(m)=24=0x18。因此可以推導(dǎo)出:
B_2和B_3就是將packet的消息字段劃分成一個(gè)個(gè)完整的block。因此很容易得出:
下面再來(lái)看看block A_i(i=0,1,2)的構(gòu)造,如圖5所示。
圖5 Block A_i(i=0,1,2)的構(gòu)造Fig.5 Construction of Block A_i(i=0,1,2)
根據(jù)圖1和圖2可知,已知輸入A_i(i=0,1,2)和B_i(i= 0,1,2,3)還有key,通過(guò)AES CCM算法就可以得到相應(yīng)的輸出。下面我們根據(jù)圖1和圖2的加密框圖對(duì)CC2541 AES協(xié)處理器的相關(guān)寄存器進(jìn)行設(shè)置,從而在該芯片上實(shí)現(xiàn)AES CCM加密解密算法。
首先看TI CC2541芯片文檔[8]對(duì)AES協(xié)處理器相關(guān)寄存器的描述。CC2541的CPU與AES協(xié)處理器之間通過(guò)3個(gè)特殊功能寄存器進(jìn)行信息交互:
其中ENCCS是AES加密控制和狀態(tài)寄存器,其設(shè)置方式如圖6所示。
圖6 ENCCS寄存器的配置Fig.6 Configuration of ENCCS
在進(jìn)行CCM加密之前,首先要加載秘鑰key和初始向量IV。秘鑰key在加密解密過(guò)程中保持不變,初始向量在CCM加密時(shí)定義為一個(gè)全0的block,即128 bits的全 0。CC2541芯片文檔規(guī)定,在將ENCCS寄存器配置為CBCMAC模式后,需要加載B_0,B_1,B_2,然后在加載最后一個(gè)block之前,要將ENCCS寄存器設(shè)置成CBC模式,然后進(jìn)行加密。CBC-MAC加密的關(guān)鍵代碼如下[3]:
CC2541芯片文檔規(guī)定,在對(duì)A_0進(jìn)行CFB加密的時(shí)候,必須在選擇CFB模式的同時(shí),將ENCCS寄存器配置為load IV/Nonce模式。CFB加密的關(guān)鍵代碼[4]:
接下來(lái)進(jìn)行CTR加密,在正式進(jìn)行CTR加密之前必須重新加載初始向量:
下面是來(lái)自RFC3610文檔的Packet Vector#2從輸入到輸出的一些中間結(jié)果,方便與代碼編譯運(yùn)行后的結(jié)果進(jìn)行對(duì)照。
表3 程序和RFC3610文檔的CCM中間變量Tab.3 Intermediate variables of CCM from RFC3610 and the program
將關(guān)鍵代碼組織完整,在某款搭載CC2541芯片的藍(lán)牙BLE開(kāi)發(fā)板上運(yùn)行AES CCM加密算法的結(jié)果如圖7所示。
一般而言,解密就是加密的逆過(guò)程。解密過(guò)程的輸入包括:秘鑰key,數(shù)據(jù)包的頭部,nonce,加密后的消息字段C_1 和C_2(不足1個(gè)block的用0填充),以及加密后的認(rèn)證字段U。根據(jù)前文所述AES CCM加密的結(jié)果以及A_i的構(gòu)造方式,不難得出:
圖7 CC2541上AES CCM加密算法運(yùn)行結(jié)果Fig.7 Result of AES CCM encryption algorithm in CC2541
將關(guān)鍵代碼組織完整,在某款搭載CC2541芯片的藍(lán)牙BLE開(kāi)發(fā)板上運(yùn)行AES CCM解密算法的結(jié)果如圖8所示。
圖8 CC2541上AES CCM解密算法運(yùn)行結(jié)果Fig.8 Result of AES CCM decryption algorithm in CC2541
本文結(jié)合CCM算法標(biāo)準(zhǔn)的相關(guān)文檔和CC2541芯片文檔,具體討論了CC2541 AES協(xié)處理器的使用方式和相關(guān)寄存器的配置,在CC2541芯片上實(shí)現(xiàn)了AES CCM的硬件加密解密。在藍(lán)牙BLE成為穿戴式設(shè)備開(kāi)發(fā)的主流技術(shù)的今天,BLE的數(shù)據(jù)安全性問(wèn)題應(yīng)當(dāng)受到廣泛的關(guān)注。
[1]項(xiàng)士標(biāo),何加銘.基于嵌入式平臺(tái)802.16 AES-CCM算法的優(yōu)化及實(shí)現(xiàn)[J].寧波大學(xué)學(xué)報(bào),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協(xié)處理器的研究與設(shè)計(jì)[D].武漢:華中科技大學(xué),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稿件編號(hào):201504061
李仁杰(1988—),男,湖北孝感人,碩士。研究方向:無(wú)線通信。