TI中文支持网
TI专业的中文技术问题搜集分享网站

TI BLE 芯片 CC2541 实现应用层AES加密的源程序【CBC加密模式】 实现方法讨论

在CC2541协议栈1.3.2 ,  hal_aes.h 中:

extern void HalAesInit( void );
extern void AesLoadBlock( uint8 * );
extern void AesStartBlock( uint8 *, uint8 * );
extern void AesStartShortBlock( uint8 *, uint8 * );
extern void AesLoadIV(uint8 *);
extern void AesDmaSetup( uint8 *, uint16, uint8 *, uint16 );
extern void AesLoadKey( uint8 * );

extern void (*pSspAesEncrypt)( uint8 *, uint8 * );
extern void ssp_HW_KeyInit (uint8 *);
extern void sspKeyExpansion (uint8 *, uint8 *);

extern void sspAesEncryptHW (uint8 *, uint8 *);
extern void sspAesEncryptKeyExp (uint8 *, uint8 *);
extern void sspAesEncryptBasic (uint8 *, uint8 *);

extern void sspAesDecryptHW( uint8 *, uint8 * );
extern void sspAesDecrypt( uint8 *key, uint8 *buf );

我知道LL层加解密,是ECB加密模式,但是据我了解,CBC加密模式比ECB安全。

请问大家,利用这些函数中的哪几个,可以实现 应用层AES加密【CBC加密模式】 。明文和密钥随意。请大家帮忙写下关键源代码。谢谢!

Yan:

ziran,

有没有参考过这个例程?

http://processors.wiki.ti.com/index.php/BLE_Encrypt_Adv_Data

ziran da:

回复 Yan:

我今天看了您让我参考的那个例程代码。

加密如下:

if ( events & SBP_PERIODIC_EVT ) { //timer osal_start_timerEx( simpleBLEBroadcaster_TaskID, SBP_PERIODIC_EVT, 2000 ); static uint8 dataCount=0; uint8 key[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; uint8 plainText[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; uint8 encryptedData[16]; dataCount++; plainText[0] = dataCount; LL_Encrypt( key, plainText, encryptedData );

//解密如下:

case GAP_DEVICE_INFO_EVENT: { // add some way to know address we are looking for to decrypt if(pEvent->deviceInfo.dataLen==0x15) { static uint8 key[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; static uint8 encryptedData[16]; static uint8 plaintextData[16]; osal_memcpy(encryptedData,&(pEvent->deviceInfo.pEvtData[5]),16);

LL_EXT_Decrypt( key, encryptedData, plaintextData );

LCD_WRITE_STRING( bdAddr2Str( plaintextData ), HAL_LCD_LINE_2 ); } } break;

这代码是LL层对广播数据加解密。

问题1: LL_Encrypt( key, plainText, encryptedData );

               LL_EXT_Decrypt( key, encryptedData, plaintextData );  这两个函数的加解密方式是 ECB, CBC还是 CCM 模式 ?

问题2 :   CCM 加解密模式 对应的加解密函数是哪两个?

问题3:对【广播数据加解密】 和 【对用户应用层数据(如:动态口令)加解密】 ,二者 同时调用 LL_Encrypt() 函数,是否有冲突? 

问题4: 【对用户应用层数据(如:动态口令)加解密】最好用那个加密解密函数?

问题5:BLE协议栈1.4.0, 在IAR8.20软件中,添加Hal_AES=TRUE; Hal_AES_DMA=TRUE 完这两句 后,广播 数据是不是自动加解密?开发人员是否还要加点代码?

问题6: 本来我认为CBC加密模式比较安全,后来我发现 CCM模式比CBC安全,请问 : CCM是否适合 对用户应用层数据(如:动态口令)加解密】?

请您有空帮忙想想看,非常感谢您!

Devil Sunny:

回复 ziran da:

请问CC2640调用LL_Encrypt这个加密函数为什么报没定义的错(ll.h头文件已添加),版本库2.00,2.01都不行。

cedar_xuesong:

回复 Devil Sunny:

记得Lib的库有好几个板子,你切换一下试试

bool zale:

回复 ziran da:

遇到同样的问题,如何切换AES使用选择方式,? ECB, CBC还是 CCM 模式 ?

甜甜的大香瓜:

回复 Devil Sunny:

我个性签名档的博客地址,《CC2541之数据加密与解密》、《CC2640之数据加密与解密》。

赞(0)
未经允许不得转载:TI中文支持网 » TI BLE 芯片 CC2541 实现应用层AES加密的源程序【CBC加密模式】 实现方法讨论
分享到: 更多 (0)