打印
[STM32H5]

【STM32 Nucleo-64测评】AES加密测试

[复制链接]
1058|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
H533包含一个AES加密外设,可以加速加密应用的执行速度,这两天学习一下该模块用法并进行加密速度测试。
为测试性能,另外使用mbedtls的软件加密作为对比。

该测试使用 AES-ECB模式进行加密解密,KEY长度为128位,测试数据长度512字节。测试代码如下

/*****************************************************************************
* [url=home.php?mod=space&uid=247401]@brief[/url]   var
*****************************************************************************/
extern CRYP_HandleTypeDef hcryp;

// 此数组为 key_code_sim 代码二进制值
// 作为固定键值,可以伪装为程序
const uint16_t ase_key_src[] = {
        0xf04f, 0x5000, 0x6801, 0x07ca,
        0xd500, 0xbf00, 0x6841, 0x078a,
        0xd500, 0xbf00, 0x6881, 0x074a,
        0xd500, 0xbf00, 0x68c0, 0x0701,
        0xd500, 0xbf00, 0x4770};

#define dat_buff_init()              \
        loop(1000) src[index] = index;   \
        memset(enc, 0, 1000);            \
        memset(dec, 0, 1000);


/*****************************************************************************
* @brief   fun
*****************************************************************************/

/*******************************************************************************
* @brief  des_demo.
* \param[in] none
* \retval: none
*******************************************************************************/
int aes_demo(int argc, char * argv[])
{
        uu32 clk_start;
        uu8 *src, *enc, *dec, *iv;
        mbedtls_aes_context *aes_enc, *aes_dec;
        size_t offset;

        // 内存请求
        src = calloc(1, 1024);
        enc = calloc(1, 1024);
        dec = calloc(1, 1024);
        iv = calloc(1, 80);
        aes_enc = malloc(sizeof(mbedtls_aes_context));
        aes_dec = malloc(sizeof(mbedtls_aes_context));

        dbg_puts("\n===========================================================\n");
        dbg_print("AES 128 encode test: <128 bits> \n");

        // 初始化
        dat_buff_init();

        // 初始化结构
        mbedtls_aes_init(aes_enc);
        mbedtls_aes_init(aes_dec);

        // 生成 KEY
        clk_start = bsp_cpu_clks_get();
        mbedtls_aes_setkey_enc(aes_enc, (void *)ase_key_src, 128);
        mbedtls_aes_setkey_dec(aes_dec, (void *)ase_key_src, 128);
        dbg_print("key make time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));

        /*------------------------------------------------------------------------*/
        // 加密 + 解密         ECB                        电子密码本模式
        clk_start = bsp_cpu_clks_get();
        loop(32)
        {
                mbedtls_aes_crypt_ecb(aes_enc, MBEDTLS_AES_ENCRYPT, &src[16*index], &enc[16*index]);
                mbedtls_aes_crypt_ecb(aes_dec, MBEDTLS_AES_DECRYPT, &enc[16*index], &dec[16*index]);
        }
        dbg_print("MBEDTLS: AES ecb : enc + dec time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));

        // 显示
        //dbg_u8_print("src: ", src, 16, 20);
        dbg_u8_print("enc: ", enc, 128, 16);
        dbg_u8_print("dec: ", dec, 128, 16);

        // 释放,用于清除内存中的密匙,属于安全性代码
        mbedtls_aes_free(aes_enc);
        mbedtls_aes_free(aes_dec);

        // 硬件加密解密
        dat_buff_init();
        clk_start = bsp_cpu_clks_get();
        HAL_CRYP_Encrypt(&hcryp, (uu32*)&src[0], 512/4, (uu32*)&enc[0], 100000);
        HAL_CRYP_Decrypt(&hcryp, (uu32*)&enc[0], 512/4, (uu32*)&dec[0], 100000);       
        dbg_print("STM32: AES ecb : enc + dec time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));
        dbg_u8_print("enc: ", enc, 128, 16);
        dbg_u8_print("dec: ", dec, 128, 16);       
       
        // 释放内存
        free(src);
        free(enc);
        free(dec);
        free(iv);
        free(aes_enc);
        free(aes_dec);
       

       
        return 0;
}
DBG_FUN_EXPORT(aes_demo);
串口输入aes_demo执行测试程序。测试结果如下:

mbedtls 加密并解密耗时789us,STM32硬件加密解密耗时81us,速度足足提高了10倍,相当给力。

需要注意的是,STM32的加密函数传入的数据长度是按字计算,mbedtls数据长度按字节计算,下面附上测试工程。
SOFTWARE.rar (8.82 MB)

使用特权

评论回复
沙发
chenjun89| | 2024-8-14 08:30 | 只看该作者
现在信息安全的重要性很高

使用特权

评论回复
板凳
trucyw| | 2024-8-14 18:39 | 只看该作者
有时间测试下

使用特权

评论回复
地板
weifeng90| | 2024-8-14 20:11 | 只看该作者
这个AES加密和信创中的加密算法是一回事吗?

使用特权

评论回复
5
aple0807|  楼主 | 2024-8-14 22:01 | 只看该作者
weifeng90 发表于 2024-8-14 20:11
这个AES加密和信创中的加密算法是一回事吗?

信创没了解过,AES是标准加密算法,不管谁家的芯片,只要是AES算法都是一样的,也没听说AES有别的名字

使用特权

评论回复
6
狄克爱老虎油| | 2024-8-17 23:25 | 只看该作者
这个**起来难吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

327

帖子

2

粉丝