微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > TI BLE 芯片 CC2541 实现应用层AES加密的源程序 实现方法讨论

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

时间:10-02 整理:3721RD 点击:

在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加密模式】 。明文和密钥随意。请大家帮忙写下关键源代码。谢谢!

ziran,

有没有参考过这个例程?

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

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

加密如下:

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是否适合 对用户应用层数据(如:动态口令)加解密】?

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

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

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

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

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

上一篇:怎样program按钮
下一篇:CC2640支持EDR吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top