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

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

3天内不再提示

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

码灵半导体 2022-06-06 18:06 次阅读

欢迎再次来到“码灵半导体CFW32C7UL系列产品应用介绍”连载专题。通过上期对CFW32C7UL系列支持的国密算法种类的介绍,相信您对CFW327UL系列的国密硬件模块有了初步了解,那么这些国密模块如何使用?应用是否便捷?加解密的速度如何?带着这些疑问,我们今天从真随机数发生器TRNG和SM3算法模块的调用开始谈起。

一、真随机数发生器TRNG模块
说到随机,有两个必须要搞清楚的概念即“真随机数生成器”(TRNG)和伪随机数生成器(PRNG)。大部分计算机程序和语言中的随机函数,都是伪随机数生成器,它们都是由确定的算法,通过一个“种子”(如“时间”)来产生“看起来随机”的结果值。毫无疑问,只要知道算法和种子,或者是之前已经产生了的随机数,那么就有可能获得接下来随机数序列的信息,因此它们带有可预测性。这种可预测性在密码学上并不安全,所以我们称其为“伪随机”。
与“伪随机”相对应的是“真随机”,真正的随机数仅存在于量子力学中,而我们需要的是一种不可预测的、统计意义上的、高安全性的随机数。在码灵半导体CFW32C7UL系列产品中我们提供了四组这种真随机数源,用以产生真随机数,同时该功能模块是采用硬件方式实现的,并且通过了NIST统计检测程序的随机性测试。
下面我们具体介绍下CFW32C7UL系列产品的真随机数发生器TRNG模块是如何通过码灵半导体官方提供的SDK函数来进行调用的。目前码灵半导体官方提供了两种SDK,即裸机SDK和Linux SDK。
开发模式一:裸机SDK
裸机SDK与提供的freeRTOSuCOS SDK中相同。
① 产生一个真随机数
调用HAL_TRNG_GetValue()
uint32_t HAL_TRNG_GetValue() 函数返回值为一个真随机数
② 使用范例
uint32_t random = HAL_TRNG_GetValue();
单个函数看不出硬件实现和软件实现有什么不同,那下面展现一下函数源码:
uint32_t HAL_HRNG_GetValue()
{
uint32_t ret;
HRNG->CMPRES = 0x02;
HRNG->CTRL |= (HRNG_CTRL_RNG_EN0 | HRNG_CTRL_RNG_EN1 | HRNG_CTRL_RNG_EN2 | HRNG_CTRL_RNG_EN3 | HRNG_CTRL_SCLK_SEL);
while((HRNG->STATUS& HRNG_STATUS_FIFO_NOT_EMPTY) ==0);
ret= HRNG->LFSR;
return ret;
}
上面所述的就是对寄存器HRNG->CMPRE、HRNG->CTRL进行一个配置后,等待HRNG->STATUS,之后HRNG->LFSR寄存器中取出随机数。
开发模式二:Linux SDK
通过操作linux系统中/dev/wokoo_trng,就可以进行产生真随机数。
① TRNG算法底层接口
• open:打开设备节点
• read:读取随机数的数据
② 接口描述
• 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,其它失败
③ 使用示例
trng_fd = open("/dev/wokoo_trng", O_RDWR); //打开trng的节点
read(trng_fd, (unsigned char *)&trng_data, 1); //读取真随机数
CFW32C7UL系列的TRNG效率
目前码灵半导体CFW32C7UL系列产品产生随机数的速率是75kb/s,每秒可以产生75kb的真随机数。
二、SM3杂凑硬件算法模块
SM3算法为国密杂凑算法,数据分组长度为512bit,杂凑值长度为256bit。基本运算流程为:对输入数据流做填充,构成整数个512bit长度的数据流;再对数据做分组;然后对每个分组做扩展和替换压缩操作,得到中间的临时杂凑值,反复进行直到所有分组处理完毕,最后一个计算得到的杂凑值作为整个数据流的最终杂凑值输出。
开发模式一:裸机SDK
调用SM3_Hash产生SM3 最终hash 值。
void SM3_Hash(uint32_t *pDataIn,uint32_t DataLen,uint32_t *pDigest)
① 函数参数说明
pDataIn: 输入的数据指针( big endian)
DataLen :数据的bit 长度
pDigest: 输出的最终hash值
② 使用范例
SM3_Hash (message,32,tempbuf);
//message 是原始数据,数据长度为32,tempbuf是产生的256位hash值
开发模式二:Linux SDK
通过操作linux系统中/dev/wokoo_sm3 ,就可以进行SM3杂凑算法的运算。
① SM3算法底层接口
• 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,其它失败
③ 使用示例
sm3_fd = open("/dev/wokoo_sm3", O_RDWR); //打开sm3节点
write(sm3_fd, &sm3_data.datain, sm3_data.datalen); //写入需杂凑的数据
read(sm3_fd, &sm3_data.dataout, NULL); //读出杂凑完的结果
CFW32C7UL系列SM3算法的效率
通过输入128KB数据,完成杂凑运算后输出运算结果,统计时间如下图

在这里插入图片描述

目前码灵半导体CFW32C7UL系列产品可以实现45Mbps的杂凑速率。
通过以上对CFW32C7UL系列产品的真随机数发生器TRNG和SM3算法模块的介绍,相信大家对国密模块的如何使用有了初步了解,那么SM2和SM4算法在CFW32C7UL系列产品中如何具体使用呢?让我们带着这些问题,在下期中继续探寻吧。
今天的专题就到这儿,更多关于码灵半导体CFW32C7UL系列产品的介绍,我们下期见!

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

    关注

    446

    文章

    47705

    浏览量

    408872
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15989

    浏览量

    343342
  • MPU
    MPU
    +关注

    关注

    0

    文章

    293

    浏览量

    48352
  • 扫码
    +关注

    关注

    0

    文章

    22

    浏览量

    5048
收藏 人收藏

    评论

    相关推荐

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

    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 127次阅读

    半导体发展的四个时代

    或有足够资金资助 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 396次阅读

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

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

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

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

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

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

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

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

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

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

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

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

    四川零点全系列产品介绍

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

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

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