0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

码灵半导体 2022-06-13 10:59 次阅读

欢迎再次来到“码灵半导体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系列在芯片安全机制方面,除了加解密模块外还有其它的安全特性和功能配置,那它们具体都是什么呢?又有什么特点呢?让我们带着这些问题,在下期中继续探寻吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17128

    浏览量

    350997
  • MPU
    MPU
    +关注

    关注

    0

    文章

    357

    浏览量

    48775
收藏 人收藏

    评论

    相关推荐

    4G模组Air780E的LuatOS开发:关于通用加解密函数(crypto)教程!

    本次我将讲解低功耗4G模组Air780E的LuatOS开发,关于通用加解密函数(crypto)教程分享给大家。我会从加解密概述、演示功能概述、硬件准备、软件环境、API 说明等全面讲述…
    的头像 发表于 12-01 15:50 194次阅读
    4G模组Air780E的LuatOS开发:关于通用<b class='flag-5'>加解密</b>函数(crypto)教程!

    关于4G模组LuatOS开发:通用加解密函数(crypto)|全攻略

    本次我要说的攻略是关于4G模组LuatOS开发的通用加解密函数,我以我常用的Air780E模组为例子供大家参考。
    的头像 发表于 11-30 09:52 241次阅读
    关于4G模组LuatOS开发:通用<b class='flag-5'>加解密</b>函数(crypto)|全攻略

    网线工程类线线径国际标准是多少

    网线线径的国际标准主要依据美国导线规格(AWG)进行标注。以下是对网线线径国际标准的详细解释: 、AWG标准 定义:AWG是美国于1887年制定的区分圆铜
    的头像 发表于 11-16 16:45 1291次阅读

    4G模组加解密艺术:通用函数的深度解读

    今天是对加解密通用函数的深度解读,我将详细讲解,建议收藏,不可错过。
    的头像 发表于 11-12 09:58 232次阅读
    4G模组<b class='flag-5'>加解密</b>艺术:通用函数的深度解读

    看懂光刻胶的坚膜工艺及物理特性和常见光刻胶

    原文标题:看懂光刻胶的坚膜工艺及物理特性和常见
    的头像 发表于 11-01 11:08 640次阅读

    半导体精彩亮相EtherCAT中国路演2024,以全新EtherCAT产品赋能工控应用!

    2024年10月21日、23日、25日,2024年EtherCAT中国路演活动分别在北京、武汉和深圳举办。半导体携全新EtherCAT芯片产品和多项解决方案亮相盛会,与业界各领域的
    的头像 发表于 10-30 08:05 267次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>精彩亮相EtherCAT中国路演2024,以全新EtherCAT<b class='flag-5'>产品</b>赋能工控应用!

    全球半导体巨头近期聚焦哪些创新?

    本周新品速递将分享瑞萨电子、英飞凌、Microchip微芯和Nexperia安世半导体四家头部半导体厂商的产品动向,主要集中在MCU、MPU、功率IC、传感器IC和触控控制器。 最近
    的头像 发表于 10-28 11:24 350次阅读
    全球<b class='flag-5'>半导体</b>巨头近期聚焦哪些创新?

    EtherCAT 中国路演2024 | 半导体与您相约!

    和应用专家,以及各领域的方案集成商将汇聚堂,共同探讨EtherCAT技术领域的最新应用趋势和创新解决方案。半导体将携全新EtherCAT从站芯片及多款创新应用方
    的头像 发表于 10-17 08:04 346次阅读
    EtherCAT 中国路演2024 | <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>与您相约!

    半导体携EtherCAT芯片亮相2024上海工博会(IAS)

    性工业博览会。工业级芯片提供商半导体携最新EtherCAT系列芯片及解决方案亮相本次展会,并在ETG联合展台(展位:6.1H-D129)带来产品
    的头像 发表于 09-26 08:07 596次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>携EtherCAT芯片亮相2024上海工博会(IAS)

    【展会预告】半导体@上海工博会(IAS)

    亮相本次展会,并在ETG联合展台(展位:6.1H-D129)带来产品展示。展品方面,此次半导体将携CF110x系列EtherCAT从站控
    的头像 发表于 09-12 08:07 257次阅读
    【展会预告】<b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>@上海工博会(IAS)

    半导体携众多产品及EtherCAT方案精彩亮相2024深圳国际电子展

    作为亚太地区颇具影响力的前沿科技成果展会,elexcon2024深圳国际电子展已于8月27日盛大开幕,半导体携带最新产品以及丰富的行业应
    的头像 发表于 08-30 12:44 497次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>携众多<b class='flag-5'>产品</b>及EtherCAT方案精彩亮相2024深圳<b class='flag-5'>国际</b>电子展

    半导体携EtherCAT从站芯片亮相2024年华南国际工业博览会

    2024年6月19日,2024年华南国际工业博览会在深圳会展中心(宝安新馆)隆重开幕,半导体携带CF110x系列EtherCAT从站控制
    的头像 发表于 06-21 08:23 546次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>携EtherCAT从站芯片亮相2024年华南<b class='flag-5'>国际</b>工业博览会

    半导体入选2024年度福建省数字经济核心产业创新企业

    日前,福建省发展和改革委员会网站公示了“2024年度福建省数字经济核心产业领域创新企业”名单,厦门半导体技术有限公司(以下简称“
    的头像 发表于 06-18 08:23 564次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>入选2024年度福建省数字经济核心产业创新企业

    半导体邀您相约2024年华南国际工业博览会

    2024年华南国际工业博览会将于2024年6月19-21日在深圳国际会展中心(宝安新馆)盛大举行。工业级芯片供应商,半导体将出席此次盛会
    的头像 发表于 06-14 08:23 346次阅读
    <b class='flag-5'>码</b><b class='flag-5'>灵</b><b class='flag-5'>半导体</b>邀您相约2024年华南<b class='flag-5'>国际</b>工业博览会

    基于FPGA的可编程AES加解密IP

    可编程AES加解密IP内建密钥扩展功能,使用初始密钥产生扩展密钥,用于加解密过程。可编程AES加解密IP处理128-bit分组数据,并且支持可编程的密钥长度:128-bit,192-bit和256-bit。
    发表于 01-09 10:49 492次阅读
    基于FPGA的可编程AES<b class='flag-5'>加解密</b>IP