李仁杰
(武漢郵電科學研究院 湖北 武漢 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加密解密算法。
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個字節。
前文已討論了加密的大致流程,本小節將繼續討論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所示。
一般而言,解密就是加密的逆過程。解密過程的輸入包括:秘鑰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
本文結合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—),男,湖北孝感人,碩士。研究方向:無線通信。