在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之数据加密与解密》。