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

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

3天内不再提示

一文看懂码灵半导体CFW32C7UL系列产品应用(二): 国密算法●下篇

码灵半导体 2022-06-07 10:40 次阅读

欢迎再次来到“码灵半导体CFW32C7UL系列产品应用介绍”连载专题。通过上期对CFW32C7UL系列国密算法SM3和真随机数发生器TRNG的介绍,相信您对CFW32C7UL系列国密硬件模块有了更进一步的了解。今天我们继续介绍CFW32C7UL系列另外两个非常重要的加解密算法:分组加密算法SM4和非对称加密算法SM2。那么SM2和SM4国密模块又是如何使用的?它们加解密的速度如何呢?带着这些问题,今天我们详细介绍下CFW32C7UL系列的SM2和SM4模块及其具体使用方法。


一、SM4分组算法模块
SM4属于对称加密算法,由国家密码管理局于2012年3月21日发布的无线局域网标准的分组数据算法。顾名思义,对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。对这两个操作使用单个KEY使其成为一个简单的过程,因此称为“对称”。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。与非对称加密算法相比,对称加密的速度要快得多,需要的计算能力更少,在互联网中不需降低互联网速度。意味着,当加密的数据量很大时,对称加密是一个不错的选择。另外同类的对称加密方法还有AES,RC4,DES,3DES,RC5,RC6等。
SM4算法是一个分组算法,该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。在码灵半导体CFW32C7UL系列中SM4算法是通过硬件方式实现的。
下面我们具体介绍下CFW32C7UL 系列SM4算法的使用方法。
开发模式一:裸机SDK

在这里插入图片描述


SM4 算法流程图
① 设置SM4密钥接口
void SM4_SetKey(uint32_t *keyin, uint32_t *ivin, uint32_t mode, uint8_t swap_en,uint8_t mask_en)
函数参数
keyin:128bit密钥指针
Ivin :CBC工作模式时的初始向量(使用CBC模式需要配置)
mode :SM4模式选择
swap_en :SWAP模式使能, 即大小端配置
mask_en :随机掩码使能
使用范例
SM4_SetKey(key1,iv1_null,SM4_ECB_MODE,SM4_SWAP_DISABLE,SM4_MASK_DISABLE);
使用ECB模式,不使能SWAP模式,不使能随机掩码,key1为密钥,iv1_null 为空
② 加解密接口
void SM4_DRV_CPU(uint32_t *datain, uint32_t *dataout, uint32_t length, uint8_t enc, uint8_t vsm4_en)
函数参数:
Datain: 数据输入指针
Dataout:数据输出指针
Length :数据长度(length = bit长度 \128)
Enc: 加密/解密模式
vsm4_en: 伪SM4运算使能
使用范例
加密过程:
SM4_DRV_CPU (plain, result, 1, SM4_ENCRYPTION, SM4_VSM4_DISABLE);
明文为plain,输出的密文为result, 数据长度为128bit ,加密模式,不使能伪sm4运算
解密过程:
SM4_DRV_CPU (result, decryp, 1, SM4_DECRYPTION,SM4_VSM4_DISABLE);
输入密文为result,输出的明文为decryp, 数据长度为128bit,解密模式,不使能伪sm4运算
开发模式二:Linux SDK
通过操作linux系统中/dev/wokoo_sm4 ,就可以进行SM4分组加解密算法的运算。
① SM4算法底层接口
open:打开设备节点
read:读取加解密后的数据
write:写入key数据和需要加解密的数据
ioctl:启动加解密操作
② 接口描述
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,其它失败
ioctl:
函数原型:static long uac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
参数:file:文件名,cmd:控制参数,arg:其它参数
返回值:成功0,其它失败
③ 使用示例
fd = open("/dev/wokoo_sm4", O_RDWR); 打开sm4节点
write(fd, &sm4_data, sizeof(struct sm4_data_t)); 写入明文/密文
ioctl(fd, SM4_DIR_ENCRYPT/ SM4_DIR_DECRYPT, NULL); 选择加密/解密
read(fd, sm4_data.dataout, sizeof(sm4_data.dataout)); 读出加密/解密的结果
CFW32C7UL系列 SM4算法的效率
我们通过输入128KB明文数据,执行加解密运算后输出加解密运算结果,并记录下含接口数据传输的芯片工作时长,得到CFW32C7UL系列 SM4算法的效率。
SM4接口加密运算(ECB模式)

在这里插入图片描述

SM4接口解密运算(ECB模式)

在这里插入图片描述

可以看到,码灵半导体CFW32C7UL系列的SM4算法效率可以达到64Mbps。

二、SM2公钥算法模块
SM2属于非对称加密算法,是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。与对称加密方法相反,非对称加密涉及多个密钥,用于数据的加密和解密,是在数学上彼此相关的两个不同的加密密钥,即:公开密钥(简称公钥)和私有密钥(简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密与与对称加密相比,在加密和解密花费的时间更长、速度相对较慢,比较适合对少量数据处理的应用场景。
SM2算法是基于ECC椭圆曲线算法,CFW32C7UL系列支持硬件PKI,ECC,DIV大数运算,同时SM2算法是通过软件与硬件相结合的方式实现,是一种安全性极高和效率极高的公钥算法。同类算法如:RSA、Elgamal、背包算法、Rabin、D-H、ECC等。
下面我们具体介绍下CFW32C7UL系列 SM2算法的具体使用方法。
开发模式一:裸机SDK
① 产生密钥对函数
GM_GenSM2keypair(uint32_t prikey[],uint32_t *Q_X,uint32_t *Q_Y)
函数参数:
prikey: SM2私钥数据
Q_X :公钥 X坐标
Q_Y :公钥 Y坐标
使用范例
GM_GenSM2keypair(prikey,public_keyX,public_keyY);
生成并获取私钥prikey,公钥(public_keyX,public_keyY)
② SM2加密函数
GM_SM2Encrypt(uint32_t *encrydata, uint32_t *endatalen,uint32_t *plain, uint32_t plainlen, uint32_t *pub_X,uint32_t *pub_Y)
函数参数
encrydata:密文数据
endatalen:密文长度
plain:明文数据
plainlen:明文长度
pub_X:公钥坐标X
pub_Y:公钥坐标Y
使用范例
GM_SM2Encrypt(&endata[0],&endataLen,plain,plainlen,public_keyX,public_keyY)
使用公钥public_key 加密明文plain,输出密文endata。

③ SM2解密函数
GM_SM2Decrypt(uint32_t *DecDate, uint32_t DecDatelen,uint32_t *input , uint32_t inlen,uint32_t *pri_key )
函数参数
DecDate: 解密出来的明文数据
DecDatelen: 解密出来的明文长度
input: 输入的密文
inlen: 输入的密文长度
pri_key : 私钥数据
使用范例
GM_SM2Decrypt(&dedata[0], plainlen, endata, endataLen, prikey);
使用私钥 pricey 解密密文endata 输出明文 dedata。

开发模式二:Linux SDK
通过操作linux系统中/dev/wokoo_sm2 ,可以进行SM2加解密算法的运算。
① SM2算法底层接口
open:打开设备节点
read:读取加解密后的数据或私钥和公钥对
write:写入明文数据
ioctl:设置是加密还是解密操作
② 接口描述
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,其它失败
ioctl:
函数原型:static long uac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
参数:file:文件名,cmd:控制参数,arg:其它参数
返回值:成功0,其它失败
③ 使用示例
sm2_fd = open("/dev/wokoo_sm2", O_RDWR); 打开sm2节点
ioctl(sm2_fd, SM2_DIR_KEY, NULL); 设置读取私钥和公钥对
read(sm2_fd, &sm2_data.prikey, sizeof(sm2_data.prikey) + sizeof(sm2_data.public_keyX) + sizeof(sm2_data.public_keyY));读取私钥和公钥
write(sm2_fd, &sm2_data.plain, sizeof(sm2_data.plain)); 写入明文/密文
ioctl(sm2_fd, SM2_DIR_ENCRYPT/ SM2_DIR_DECRYPT, NULL); 选择加密/解密
read(sm2_fd, &sm2_data.en_data, 256); 读取解密/解密结果
CFW32C7UL 系列SM2算法的效率

在这里插入图片描述

三、加密算法的选择
由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当需要对大量的数据进行加密时,建议采用对称加密算法,以提高加解密速度。对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
因对称加密算法不能实现签名,因此签名时使用非对称算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
通过以上对CFW32C7UL系列 SM2和SM4算法模块的介绍,相信您对国密模块的使用有更深入的了解。码灵半导体CFW32C7UL系列除了支持国密算法外,同样也支持国际常见的通用加解密算法,如AES和SHA算法,这部分算法也是通过硬件实现。那么它们在CFW32C7UL系列中是如何具体使用呢?让我们带着这些问题,在下期中去探寻吧。

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

    关注

    447

    文章

    47816

    浏览量

    409190
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16021

    浏览量

    343674
  • MPU
    MPU
    +关注

    关注

    0

    文章

    298

    浏览量

    48374
  • 扫码
    +关注

    关注

    0

    文章

    22

    浏览量

    5050
收藏 人收藏

    评论

    相关推荐

    宋仕强先生领导下的深圳市金航标电子有限公司和深圳市萨科微半导体有限公司都是国家级高新技术企业

    Slkor(www.slkoric.com)半导体与产业链伙伴紧密合作,都在积极推动“国产替代”战略。以萨科微Slkor为例,萨科微SL系列产品可对标替换TI、ONsemi、IR、Epson、nxp等品
    发表于 04-10 10:53

    晶科能源Tiger Neo系列荣获全球首份UL 2000V认证

    近日,晶科能源宣布其Tiger Neo系列产品成功通过第三方权威机构UL的严格测试和评估,成为全球首家荣获UL 2000V认证证书的企业。这一认证标志着晶科能源的Tiger Neo系列产品
    的头像 发表于 03-28 09:37 156次阅读

    半导体发展的四个时代

    或有足够资金资助 IDM 进行大规模开发的公司。随着后来,当我们开始进入第半导体时代时,这切都改变了。 第半导体时代——ASI
    发表于 03-27 16:17

    半导体发展的四个时代

    足够资金资助 IDM 进行大规模开发的公司。随着后来,当我们开始进入第半导体时代时,这切都改变了。 第半导体时代——ASIC
    发表于 03-13 16:52

    天合光能至尊N型全系列组件获得UL Solutions产品碳足迹证书

    Solutions向天合光能颁发产品碳足迹认证证书。基于先进的210产品技术平台和N型i-TOPCon技术,至尊N型全系列产品为客户带来兼具更优性能和更绿色低碳的产品体验,助力全球绿
    的头像 发表于 03-12 11:34 411次阅读

    Nexperia发布全新模拟开关系列产品

    全球基础半导体器件领域的领军企业Nexperia(安世半导体)最近发布了全新的专用于监测和保护1.8V电子系统的4通道和8通道模拟开关系列产品。这一创新系列产品的推出,旨在满足汽车、消
    的头像 发表于 03-11 10:08 173次阅读

    安世半导体发布全新两路输出LCD偏压电源系列产品

    安世半导体(Nexperia)近日发布了一款全新的两路输出LCD偏压电源系列产品,这款产品具有节省空间和高效率的特性。该系列产品的设计目标是为了延长薄膜晶体管液晶显示器(TFT-LCD
    的头像 发表于 01-15 14:23 404次阅读

    普冉半导体推出P24C系列高可靠EEPROM产品

    近日,普冉半导体推出创新的 P24C系列高可靠 EEPROM 产品,应下游客户及市场需求,公司该新款系列产品可达到 1000万次擦写寿命,是公司为电表市场开发的超群
    的头像 发表于 12-01 11:12 654次阅读

    武汉芯源半导体首款车规级MCU,CW32A030C8T7通过AEC-Q100测试考核

    近日,武汉芯源半导体正式发布首款基于Cortex®-M0+内核的CW32A030C8T7车规级MCU,这是武汉芯源半导体首款通过AEC-Q100 (Grade 2)车规标准的主流通用型车规MCU
    发表于 11-30 15:47

    类比半导体携高边驱动系列产品亮相慕尼黑华南电子展

    慕尼黑华南电子展(electronica South China)在深圳国际会展中心(宝安)盛大开幕,类比半导体携高边驱动系列以及音频功放等产品精彩亮相此次展会。
    的头像 发表于 11-09 10:24 318次阅读

    洲明UCine LED全系列产品获TÜV南德、美国UL“双认证”

    ,是大多数观众关心所在。洲明UCine LED全系列产品现已获得国际独立第三方检测、检验和认证机构TÜV南德(2022年9月)、美国UL(2023年8月)双平台颁发的“低蓝光、无频闪认证证书”。  洲明UCine始终关注用户在LED观影下的健康与用眼安全,本次通过认证
    的头像 发表于 10-24 15:49 666次阅读

    四川零点全系列产品介绍

    四川零点全系列产品介绍
    发表于 10-24 14:36 0次下载

    朗骏智能JL-126接线式热动光控器系列产品通过美国UL认证

    冗余切换。无论工作温度如何,温度补偿器系统都能提供一致。为所有型号提供了一个遮光片,方便客户校准灯具开/关数值。 该系列产品已通过美国UL认证,符合照明控制非工业光电开关UL773A标准。 *可额外加装旋转接头使用,有利于安装后
    的头像 发表于 09-15 10:43 494次阅读
    朗骏智能JL-126接线式热动光控器<b class='flag-5'>系列产品</b>通过美国<b class='flag-5'>UL</b>认证

    CMS32M65xx系列MCU中微半导体电机控制产品

    应用领域: CMS32M65xx系列MCU是中微半导体电机控制产品线主力产品,被广泛应用于空气净化器、落地扇、油烟机、吸尘器、高速吹风筒、高压水泵、三相服务器风扇、单相风机、筋膜枪、电
    发表于 06-09 09:11

    2023年中半导体分立器件销售将达到4,428亿元?

    场效应管是由多数载流子参与导电的半导体器件,也称为单极型晶体管。它是种电压控制型半导体器件,具有噪声小、功耗低、开关速度快、不存在次击穿问题,主要具有信号放大、电子开关、功率控制
    发表于 05-26 14:24