一文看懂码灵半导体CFW32C7UL系列MPU产品应用(三): 国际标准加解密算法

欢迎再次来到“码灵半导体cfw32c7ul系列产品应用介绍”连载专题。通过前几期对cfw32c7ul系列的国密算法介绍,相信大家对码灵半导体cfw32c7ul系列的国密硬件模块有了充分的了解。
由于发展历程原因,目前市场上商用密码使用仍然以国际标准加解密算法为主,不过随国家对国密算法的推进,未来国密算法的应用也会越来越广泛。码灵半导体cfw32c7ul系列的加解密模块除了之前介绍的国密密码算法以外,还支持国际标准算法的aes加解密算法和sha-1、sha-256哈希算法。本专题聚焦于cfw32c7ul系列所支持的国际标准加解密算法硬件模块:aes分组加解密算法和sha哈希算法。以下我们具体介绍下cfw32c7ul系列aes和sha模块的使用以及加解密的速度等。
一、aes分组加解密算法
aes是advanced encryption standard的缩写,即高级加密标准,在密码学中又称rijndael加密法,是美国联邦政府采用的一种区块加密标准。高级加密标准是由美国国家标准与技术研究院(nist)于2001年11月26日发布于fips pub 197,并在2002年5月26日成为有效的标准。这个标准用来替代原先的des,已经被多方分析且广为全世界所使用,至2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
1、cfw32c7ul aes分组算法的实现
cfw32c7ul 系列的aes模块可完成标准aes加解密运算和aes-cm、aes-f8加密运算。标准aes算法即aes标准(fips-197)中规定的算法。aes-cm和aes-f8算法在the secure real-time transport protocol(srtp)中有详细说明,这两种算法均以标准aes算法为基础,并对标准aes算法进行迭代运用。
aes模块中的标准aes算法除了支持cpu输入输出外,还支持dma输入和dma输出,而aes-cm、aes-f8只支持dma输出。
2、cfw32c7ul aes分组算法的使用
开发模式一:裸机sdk
目前cfw32c7ul系列裸机sdk支持aes-cm, aes-f8,以及标准的aes加解密方式。其中aes-cm和aes-f8只支持加密,不支持解密。标准的aes方式支持加密和解密。
在cfw32c7ul系列 aes的sdk中有个关键的cipher_aes_init_typedef结构体:
typedef struct {
uint32_t mode;
uint32_t encrypt;
uint32_t type;
uint32_t key_len;
uint32_t blk_num;
uint32_t key[8];
uint32_t key_f8_mask[8];
uint32_t *input_data;
uint32_t *output_data;
}cipher_aes_init_typedef;
在使用aes算法之前需要初始化cipher_aes_init_typedef结构体,初始化范例:
cipher_aes_init.encrypt = cipher_aes_ctrl_encrypt;
cipher_aes_init.input_data = (uint32_t *)aes_in_data;
cipher_aes_init.output_data = (uint32_t *)aes_out_data;
cipher_aes_init.blk_num = 1; 加解密轮数
cipher_aes_init.key_len = cipher_aes_key_len_128bit;
cipher_aes_init.key[0] = 0x21212121; 设置aes 密钥,可自定义
cipher_aes_init.key[1] = 0x43434343;
cipher_aes_init.key[2] = 0x65656565;
cipher_aes_init.key[3] = 0x87878787;
配置cipher_aes_init结构体的初始化参数后,便可以进行相对应的aes加密运算。
aes cm加密算法:
cipher_aes_init.mode = cipher_aes_mode_aes_cm;
hal_cipher_cm_aes(&cipher_aes_init);
aes f8加密算法:
cipher_aes_init.mode = cipher_aes_mode_aes_f8;
hal_cipher_f8_aes(&cipher_aes_init);
标准aes 加解密方式:
加密范例:
cipher_aes_init.encrypt = cipher_aes_ctrl_encrypt;
cipher_aes_init.mode = cipher_aes_mode_aes_std;
hal_cipher_stdaes(&cipher_aes_init);
解密范例:
cipher_aes_init.encrypt = cipher_aes_ctrl_decrypt;
cipher_aes_init.mode = cipher_aes_mode_aes_std;
hal_cipher_stdaes(&cipher_aes_init);
开发模式二:linux sdk
通过操作linux系统中/dev/wokoo_aes ,就可以进行标准aes分组加密算法的运算。
aes算法底层接口
open:打开设备节点
read:读取加密/解密后的数据
write:写入加密前/解密前的数据以及密钥和配置
接口描述:
open:
函数原型 static int uac_open(struct inode *inode, struct file * file)
参数 file:文件名
返回值 成功0,其它失败
read:
函数原型 static ssize_t uac_read(struct file * file, char __user *buffer, size_t size , loff_t *p)
参数 file:文件名,buffer:读出数据缓存,size:读出数据长度
返回值 成功0,其它失败
write:
函数原型 static ssize_t uac_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
参数 file:文件名,buf:写入数据缓存,count:写入数据长度
返回值 成功0,其它失败
使用示例:
fd = open(/dev/wokoo_aes, o_rdwr); 打开aes节点
write(fd, &wokoo_aes, sizeof(struct wokoo_aes_t)); 写入明文/密文,密钥等配置
read(fd, wokoo_aes.output_data, sizeof(wokoo_aes.output_data)); 读出密文/明文
注:这里的write写入的wokoo_aes结构体,如同在裸机中使用一样,会在调用前初始化一些参数,通过write把密钥和模式配置写入。
3、cfw32c7ul aes算法的效率:
目前码灵半导体cfw32c7ul系的可以实现标准aes加密速率是85kb/s。
二、sha哈希算法模块
1、cfw32c7ul sha哈希算法的实现
cfw32c7ul系列的sha哈希算法支持sha-1以及sha-256。sha1是sha的较旧版本,可生成160位哈希值,而sha256是sha2的一种类型,可生成256位哈希值。
cfw32c7ul系列的sha模块支持dma输入和cpu输入,输出仅支持cpu输出。
2、cfw32c7ul sha算法的使用
开发模式一:裸机sdk
目前裸机开发支持sha-1以及sha-256两种哈希算法sdk,两种算法分别有cpu输入和dma输入的方式。
在cfw32c7ul系列 sha的sdk中有个关键的cipher_sha_init_typedef结构体,结构体定义如下:
typedef struct {
uint32_t mod;
uint32_t line_num;
uint32_t *input_data;
uint32_t *output_data;
}cipher_sha_init_typedef;
使用sha sdk之前,需初始化这个结构体。包括设置数据量和设置数据的输入输出流。
cipher_sha_init.line_num = 0x01; 设置sha的数据输入轮数为1
cipher_sha_init.input_data = (uint32_t *)sha_in_data; 设置sha 输入流
cipher_sha_init.output_data = (uint32_t *)sha_out_data; 设置sha输出流
配置完cipher_sha_init结构体的初始化参数后,便可以进行相对应的sha哈希运算。
调用hal_cipher_sha_dma()进行dma输入方式sha哈希运算。
cipher_sha_init.mod = cipher_sha_mod_sha1; 配置sha-1算法
hal_cipher_sha_dma(&cipher_sha_init); 启动sha-1算法 (dma input)
cipher_sha_init.mod = cipher_sha_mod_sha256; 配置sha-256算法
hal_cipher_sha_dma(&cipher_sha_init); 启动sha-256算法 (dma input)
调用hal_cipher_sha_cpu ()进行 cpu输入方式sha哈希运算。
cipher_sha_init.mod = cipher_sha_mod_sha1; 配置sha-1算法
hal_cipher_sha_cpu (&cipher_sha_init); 启动sha-1算法(cpu input)
cipher_sha_init.mod = cipher_sha_mod_sha256; 配置sha-256算法
hal_cipher_sha_cpu (&cipher_sha_init); 启动sha-256算法(cpu input)
开发模式二:linux sdk
通过操作linux系统中/dev/wokoo_sha ,便可以进行sha算法的运算。
sha算法底层接口
open:打开设备节点
read:读取哈希后的数据
write:写入哈希的数据以及配置模式
接口描述
open:
函数原型 static int uac_open(struct inode *inode, struct file * file)
参数 file:文件名
返回值 成功0,其它失败
read:
函数原型 static ssize_t uac_read(struct file * file, char __user *buffer, size_t size , loff_t *p)
参数 file:文件名,buffer:读出数据缓存,size:读出数据长度
返回值 成功0,其它失败
write:
函数原型 static ssize_t uac_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
参数 file:文件名,buf:写入数据缓存,count:写入数据长度
返回值 成功0,其它失败
使用范例:
fd = open(/dev/wokoo_sha, o_rdwr); 打开sha节点
write(fd, &wokoo_sha, sizeof(struct wokoo_sha_t)); 写入需要哈希的数据
read(fd, wokoo_sha.output_data, sizeof(wokoo_sha.output_data)); 读出哈希后的数据
类似地,linux在初始化wokoo_sha结构体时会根据给定参数选择不同的算法,输入数据轮数和输入方式,根据不同的参数计算不同的结果。如下示例:
wokoo_sha.bit_mod = cipher_sha_mod_sha256; 选择sha-256方式
wokoo_sha.data_mod = cipher_sha_type_dma; 选择dma输入方式
wokoo_sha.line_num = 1; 设置数据输入轮数为1
3、cfw32c7ul sha算法的效率
目前码灵半导体cfw32c7ul系列sha-1以及sha-256的加密速率可以实现87kb/s。
通过这几期对码灵半导体cfw32c7ul系列的国密及国际标准加解密算法的介绍,相信大家对cfw32c7ul系列的加解密模块有一个相对全面的了解。国密算法与国际标准加解密算法的对标关系是:国密算法的sm4和国际标准加解密算法aes对标,国密算法的sm3算法与国际标准加解密算法md5、sha-256等哈希算法对标,国密算法的sm2算法与国际标准加解密算法rsa、ecc算法对标。其实cfw32c7ul系列在芯片安全机制方面,除了加解密模块外还有其它的安全特性和功能配置,那它们具体都是什么呢?又有什么特点呢?让我们带着这些问题,在下期中继续探寻吧。

搜电充电:创新“服务卡片”,让即时充电更便捷
基于stm32的keil开发环境搭建
如何解决储罐腐蚀问题
丰田测试HoloLens应用,计划用于生产改进
坐标北京,迈威通信邀您共赴煤炭行业盛会
一文看懂码灵半导体CFW32C7UL系列MPU产品应用(三): 国际标准加解密算法
欲与谷歌IBM争雄 微软花大价钱研发量子计算机
PLC的使用过程
超实用!高低温拉力试验机的应用领域分类和应用场景,最新应用攻略!
中国电信与诺基亚贝尔合作,共同繁荣5G终端产业
戴尔小企业通过数字化办公以及数字化指数层面开展精细化布局
英特尔和欧盟法院的反垄断案新进展 前者将胜诉
MAX4887:三路高速模拟视频开关
哪款手机拍照必备?出游必选拍照手机华为p10,oppor11,还你一个高颜值的出游纪念!
企业正采用人工智能和机器学习技术解决业务问题 并将新思想带入2019
计算机视觉CV领域图像分类方向文献和代码的超全总结和列表!
解答74hc541不加VCC电压能工作吗/其与74hc573有什么区别
如何拆卸振动筛的轴承拆卸滚动轴承的四种方法
三星Galaxy S21 Ultra 5G定义划时代智能新体验
NTC热敏电阻