Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
hwcrypto
Numaker-IoT-M487
Nuvoton M487测评之CRYPTO(二) AES
发布于 2022-04-19 20:10:29 浏览:990
订阅该版
[tocm] 本次测评主要测试新唐M487芯片CRYPTO模块中对称加密AES功能及其性能,性能方面会使用硬件加速和纯软件实现直接的效率差异。 # M487 CRYPTO硬件介绍 ## M487中的CRYPTO M487框架图 ![M487diagram.PNG](https://oss-club.rt-thread.org/uploads/20220419/33ecca2dfa00b75cc264cbee8efefef1.png.webp) Crypto是一个硬件计算加速器,不会通过IO与外界发生联系,直接通过AHB总线和内核连接。 ## CRYPTO框架 Crypto(加密加速器)包括一个安全的伪随机数生成器(PRNG) ,支持AES、DES/TDES、SHA、HMAC和ECC算法。 ![c7a6800213b34cb4586f9cb12df82f1a.png.webp](https://oss-club.rt-thread.org/uploads/20220419/c7a6800213b34cb4586f9cb12df82f1a.png.webp) ## 特性 ### PRNG - 支持64 bits, 128 bits, 192 bits, and 256 bits 随机数生成 ### AES - 支持 FIPS NIST 197 - 支持 SP800-38A and addendum - 支持 128, 192, and 256 bits key - 支持加密和解密 - 支持 ECB, CBC, CFB, OFB, CTR, CBC-CS1, CBC-CS2, and CBC-CS3 mode - 支持 key expander ### DES - 支持 FIPS 46-3 - 支持加密和解密 - 支持 ECB, CBC, CFB, OFB, and CTR 模式 ### TDES - 支持 FIPS NIST 800-67 - 根据 X9.52 标准实现 - 支持 2/3密钥模式 - 支持加密和解密 - 支持 ECB, CBC, CFB, OFB, and CTR 模式 ### SHA - 支持 FIPS NIST 180, 180-2 - 支持 SHA-160, SHA-224, SHA-256, SHA-384 SHA-512 ### HMAC - 支持 FIPS NIST 180, 180-2 - 支持 HMAC-SHA-160, HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512 ### ECC - 支持 prime field GF(p) 和 binary filed GF(2m) - 支持 NIST P-192, P-224, P-256, P-384 and P-521 - 支持 NIST B-163, B-233, B-283, B-409 and B-571 - 支持 NIST K-163, K-233, K-283, K-409 and K-571 - 支持 point multiplication, addition and doubling operations in GF(p) GF(2m) - 支持 modulus division, multiplication, addition subtraction operations in GF(p) # RT-Thread CRYPTO使用说明 ## 简介 hwcrypto 是一个硬件加解密设备驱动框架。主要由硬件加解密驱动抽象层以及各种加解密 API 接口两部分构成。对于上层应用,可对接安全套件或直接使用,使用方式十分灵活。对于驱动,需要对接的接口少,功能单一,驱动开发简单快捷。下图是 Crypto 框架层次图: ![rtThread-hwcrypto框架.png](https://oss-club.rt-thread.org/uploads/20220419/1658a1dfe0014fbfc547727a045feeb8.png.webp) 硬件加解密框架目前已经支持 AES/DES/3DES/RC4/SHA1/SHA2/MD5/CRC/RNG/BIGNUM 等加解密相关的接口,每种算法都提供了统一的API供应用和上层组件调用,非常方便。 按照功能划分,可以分为以下几类: - hash: 散列算法 - symmetric: 对称加解密算法 - gcm: GMAC 消息认证码 - crc: CRC 冗余校验 - rng: 随机数发生器 - bignum: 大数运算 ## 对称加密算法 对称加解密指加密和解密使用相同密钥的加密算法,所以也称这种加密算法为秘密密钥算法或单密钥算法。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。常见的对称加密算法有AES如MD5, DES, 3DES等. 当前RT-Thread的设备驱动中,支持的Hash类型包括: - AES_ECB - AES_CBC - AES_CFB - AES_CTR - AES_OFB - DES_CBC - DES_ECB - 3DES_CBC - 3DES_ECB - RC4 - GCM 具体方法可以参考RT-Thread官方文档[CRYPTO 设备](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto). # M487 CRYPTO之对称加密功能测试 ## AES CBC 按照官方指导文档,分别使用HWCRYPTO和yd_crypto库编写一个计算AES的示例,对一个32字节的随机数组进行加密。 ```C int aes_cbc_test() { rt_uint8_t buf_out[32] = {0}; rt_device_t hw_dev; rt_hwtimerval_t timeout_s; /* 用于保存定时器经过时间 */ struct rt_hwcrypto_ctx *ctx; /* 创建一个 AES-CBC 模式的上下文 */ ctx = rt_hwcrypto_symmetric_create(rt_hwcrypto_dev_default(), HWCRYPTO_TYPE_AES_CBC); if (ctx == RT_NULL) { LOG_E("create AES-CBC context err!"); return; } /* 查找定时器设备 */ hw_dev = rt_device_find("timer0"); rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); /* 设置 AES-CBC 加密密钥 */ rt_hwcrypto_symmetric_setkey(ctx, key, 128); /*设置对称加解密初始化向量*/ rt_hwcrypto_symmetric_setiv(ctx, iv, 16); /* 设置定时器超时值为10s并启动定时器 */ timeout_s.sec = 10; /* 秒 */ timeout_s.usec = 0; /* 微秒 */ if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) { rt_kprintf("set timeout value failed\n"); return RT_ERROR; } /* 执行 AES-CBC 加密/解密 */ rt_hwcrypto_symmetric_crypt(ctx, HWCRYPTO_MODE_ENCRYPT, 32, input, buf_out); /* 读取定时器经过时间 */ rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); LOG_I("HWCRYPTO AES Total time: Sec = %d, Usec = %d\n", timeout_s.sec,timeout_s.usec); LOG_HEX("HWCRYPTO AES CBC out:", sizeof(rt_uint8_t), buf_out, 32); /* 删除上下文,释放资源 */ rt_hwcrypto_symmetric_destroy(ctx); memset(buf_out, 0, sizeof(buf_out)); /* 设置定时器超时值为10s并启动定时器 */ timeout_s.sec = 10; /* 秒 */ timeout_s.usec = 0; /* 微秒 */ if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) { rt_kprintf("set timeout value failed\n"); return RT_ERROR; } yd_aes_cbc_encrypt(input, buf_out, key, iv, 2); /* 读取定时器经过时间 */ rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); LOG_I("Software AES Total time: Sec = %d, Usec = %d\n", timeout_s.sec,timeout_s.usec); LOG_HEX("Software CRYPTO AES CBC out:", sizeof(rt_uint8_t), buf_out, 32); return 0; } ``` 下载到开发板中,运行aes_test, 可以得到运行结果: ![AES结果.PNG](https://oss-club.rt-thread.org/uploads/20220419/55ac0048d19521fef6930da02d553a4a.png) 可见使用HWCRYPTO的计算结果和纯软件计算结果一致,并且耗时仅仅为软件实现的1/10. # 模块功能及性能测试演示 # 代码 [Gitee - yu-wang-yy/numaker-iot-m487-crypto-test](https://gitee.com/yu-wang-yy/numaker-iot-m487-crypto-test) # 总结 - 从当前单次的结果来看,M487硬件加速实现的AES算法效率几乎是纯软件实现的10倍。 - 但是由于AES单次加密需要的算力较小,可能结果的科学性还有待商榷。但是考虑到RTOS会存在任务调度,简单的用多次循环测出的结果似乎也不那么可信,后续可能还需要设计一种更加精确严谨的测试手段。 - 其他算法虽然没有试验,但是基本大同小异。 - RT-Thread的CRYPTO框架非常的高效易用,在移植好BSP之后几乎开箱即用,非常方便
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
AngerCoke
这个人不懒,主要是真的不想写什么
文章
10
回答
2
被采纳
0
关注TA
发私信
相关文章
1
关于hwcrypto的CRC32校验数据不是4字节对齐问题
2
CRYPTO中的CRC设备,CRC16计算结果有问题
3
使用硬件CRC后 没有找到drv_crc.c 这样的驱动文件
4
使用hwcrypto CRC校验的问提
5
调试nuvoton M487芯片,使用Nu_link 调试器出错。。
6
NUMAKER-IOT-M487开发板没有找到RTC电池接口
7
新唐m487板子使用LAN8720
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
3
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部