【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速

news2024/11/19 7:24:43

杯赛题目:基于蜂鸟E203 RISC-V处理器内核的SoC设计
参赛要求:研究生组/本科生组
赛题内容
基于芯来科技的开源蜂鸟E203 Demo SoC进行扩展,在限定的可编程逻辑平台上构建面向专用应用领域(譬如人工智能、信息安全、工业控制等)的SoC,进而完成一定实际应用。要求在所搭建的SoC中实现专门的硬件加速器以提高系统整体性能,所实现的系统具有创新性、实用性以及市场应用前景。

团队介绍

参赛单位:电子科技大学
队伍名称:第N队
指导老师:路志刚
参赛队员:朱俊宛、罗扬、岳修立
总决赛奖项:三等奖

1. 项目简介

随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,信息加密算法也在不断的发展进步之中。SM4密码算法是国家密码管理局正式的《祖冲之序列密码算法》等6项密码行业标准之一。本项目基于开源E203处理器在FPGA开发板上对国产密码算法SM4算法进行实现和优化,并实现了对字符串的加密与解密。

1.1 系统框架

系统控制端通过串口通信FPGA开发板发送命令:操作类型(加密\解密)、操作数据(明文\密文)、密钥。FPGA上的E203 SoC接收来自控制端的命令并运行硬件加速后的SM4算法程序进行处理,处理后的结果通过串口通信返回给控制端,如下图所示。
在这里插入图片描述

1.2 SM4算法原理

1.2.1 概述

SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。
SM4算法的整体结构如图:
在这里插入图片描述

1.2.2 轮函数

整体的加密函数F为:
x(i+4)=F(x(i),x(i+1),x(i+2),x(i+3),rk(i))=x(i)⨁T(x(i+1)⨁x(i+1)⨁x(i+2)⨁x(i+3)⨁rk(i))
其中T为一个合成置换,由非线性变换S和线性变换L复合而成,如下图。
在这里插入图片描述

非线性变换S由具有256个固定的8bit数据的S盒构成,S盒的数据均采用16进制。输入的8bit数据作为S盒中地址的索引,地址中所包含的8bit数据即为S盒的输出。非线性变换S函数表达式可以表示为:
B=(b1,b2,b3,b4)=S(A)=(sbox(a1),sbox(a2),sbox(a2),sbox(a2))
线性变换L的公式如下:
C=L(B)=B⨁(B≪2)⨁(B≪10)⨁(B≪18)⨁(B≪24)
其中B为非线性变换得到的字。

1.2.3 轮密钥

已知加密密钥:MK=(MK0,MK1,MK2,MK3),系统参数:FK=(FK0,FK1,FK2,FK3) ,固定参数:CK=(CK0,CK1,⋯⋯,CK31) 。
轮密钥rki即为密钥扩展的结果,由加密密钥扩展生成,过程如下:
首先:
(K(0),K(1),K(2),K(3))=(MK0⨁FK0,MK1⨁FK1,MK2⨁FK2,MK3⨁FK3)
然后对于i=0,1,⋯⋯,31:
rk(i)=K(i+4)=K(i)⨁T’(K(i+1)⨁K(i+1)⨁K(i+2)⨁K(i+3)⨁CK(i))
其中变换T’与轮函数的T变换基本相同,只是将其中的线性变换L改为:
L’(B)=B⨁(B≪13)⨁(B≪23)

1.3 协处理器加速设计

1.3.1 软硬件功能划分

硬件功能:利用协处理器实现SM4算法中的密钥拓展过程与加解密过程。
软件功能:调用协处理器实现密钥拓展过程与加解密过程,并对过程进行控制。

1.3.2 状态转换

根据SM4算法原理及软硬件功能划分,六个状态,分别为初始状态(IDLE)、密钥加载状态(SKEY)、密钥拓展状态(KEY)、输入加载状态(SDAT)、加解密运算状态(DAT)、输出返回状态(PDAT)。
当有相应的指令标识位置1时,状态机将从初始状态进入相应的指令状态。当相应的状态完成标识位置1后,状态机将从相应的指令执行状态进入初始状态。状态转换单元示意图如下。
在这里插入图片描述

1.3.3 数据运算

数据运算部分主要是在根据协处理器当前的状态进行相应的运算操作以实现SM4算法。数据运算单元示意图如下。
在这里插入图片描述

1. 当处于密钥加载状态(SKEY)时,协处理器会将CPU送过来的与系统参数FK异或过的初始密钥k0、k1、k2、k3加载到下方4个寄存器中。
2. 当处于密钥拓展状态(KEY)时,k0、k1、k2、k3会进行32轮非线性迭代运算,在迭代过程中生成k4-k35,即轮密钥rk0-rk31,并存储到rk控制模块之中。
3. 当处于输入加载状态(SDAT)时,协处理器会将CPU送过来的初始输入x0、x1、x2、x3加载到上方4个寄存器中。
4. 当处于加解密运算状态(DAT)时,x0、x1、x2、x3会进行32轮非线性迭代运算,会根据此时源操作数1的值决定轮密钥rki的使用顺序,为0对应于加密操作,为1对应于解密操作。迭代过程完成后将得到x31、x32、x33、x34,即运算结果。
5. 当处于输出返回状态(PDAT)时,协处理器会通过结果反馈通道nice_rsp_rdat将运算结果返回给CPU。

2. 仿真与测试

2.1 功能仿真

2.1.1 SM4算法纯软件实现功能仿真

vivado仿真波形:
在这里插入图片描述

Tcl控制台结果:
在这里插入图片描述

2.1.2 SM4算法协处理器加速实现功能仿真

vivado仿真波形:
在这里插入图片描述

Tcl控制台结果:
在这里插入图片描述

2.1.3 协处理器加速效果

对比两次仿真结果得到,协处理器对SM4算法的加速效果为:28520 / 337 = 84.6(倍)

2.2 整体测试

整体测试的实物连接如图
在这里插入图片描述

2.2.1 字符串加密

对字符串“Xinlai RISC-V Cup”进行加密,密钥为:0x1234578 1234578 1234578 1234578。结果如图。
在这里插入图片描述

2.2.2 字符串解密

将加密得到的密文 0x93677fad 32fc552f 760780b7 94b627cd 2a694043 86f3992f 2dad6065 0c4f1b48 进行解密操作,结果如图。得到解密结果为:“Xinlai RISC-V Cup”。验证了加密结果的正确性,完成了对字符串的加密解密,实现系统的预设功能。
在这里插入图片描述

3. 参赛体会

3.1 参赛感受

在三个多月的学习与实践之中,经过VERLIOG的学习、VIVADO的使用、FPGA开发板的学习、RISK_V的学习、E203 SoC的移植、SM4算法的学习、协处理器的学习与应用等过程,基本完成了基于E203 处理器内核的SM4算法硬件加速。从一个刚开始学习的小白,一步步摸索前进。在不断遇到问题,解决问题的过程中,加深了对集成电路行业的理解,提升我们的软件设计能力。
集创赛作为全国性的顶尖赛事,汇集了来自全国各地各高校的优秀大学生。让我们在比赛过程中能够与如此多优秀的同龄人同台竞技,相互交流,极大拓展了自己的视野与能力。非常感谢集创赛赛事组委会的工作人员和老师们的组织与付出,让我们有机会参与到这样一个充分展示风采的平台。

3.2 后续计划

1.加入其他算法(例如SM3算法)进行交互,进一步提升其加密效果。
2.对输入,输出及控制系统进行进一步的优化与拓展,使用上位机来传输数据流和控制。

作品内容来源于第N队,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

194. 二叉树的最近公共祖先

题目 题解 递归 def lowestCommonAncestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if not root or root p or root q:return rootleft lowestCommonAncestor(root.left, p, q)right lowestCommonAncestor(root.right, p, q)if not left:return right…

2.4G射频收发芯片XL2400P,收发一体,性能优异

XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外围…

全志R128基础组件开发指南——图像采集

图像采集 CSI(DVP) 图像采集 SENSOR -> CSI 通路 CSI (CMOS sensor interface)接口时序上可支持独立 SYNC 和嵌入 SYNC(CCIR656)。支持接收 YUV422 或 YUV420 数据。 VSYNC 和HSYNC 的有效电平可以是正极性,也可…

常用网络命令(实习报告)

南京信息工程大学 实验(实习)报告 实验(实习)名称 常用网络命令 实验(实习)日期 2017/5/25 得分 指导教师 *** 专业 网络工程 年级 2015 班次 1 姓名 *** …

Mybatis报错找不到参数解决之编译保留参数名称

Hi, I’m Shendi Mybatis报错找不到参数解决之编译保留参数名称 需求场景 在使用 Mybatis 的过程中,对于函数参数,通常会加上 Param 注解来给参数命名,以让 Mybatis 找到参数。 有的时候忘记添加,执行时就会报找不到参数的错误&…

spring cloud之网关

Gateway网关(*) 什么是网关 # 1.说明 - 网关统一服务入口,可方便实现对平台众多服务接口进行管控。 - 网关 路由转发 过滤器路由转发:接收一切外界请求,转发到后端的微服务上去过滤器:在服务网关中可以完成一系列的横切功能&a…

学Diffusion前需要储备的一些知识点

自学Diffusion是非常困难的,尤其是到了VAE和VI这里基本找不到比较好的中文资料,甚至是涉及到一些重参数化,高斯混合之类的问题摸不着来龙去脉。在本文中,基本不会涉及公式,只有intuition和理解,如果要看公式…

Pytorch CUDA CPP简易教程,在Windows上操作

文章目录 前言一、使用的工具二、学习资源分享三、libtorch环境配置1.配置CUDA、nvcc、cudnn2.下载libtorch3.CLion配置libtorch4.CMake Application指定Environment variables5.测试libtorch 四、PyTorch CUDA CPP项目流程1.使用CLion结合torch extension编写可以调用cuda的C代…

推介会如何做好媒体宣传

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式,旨在促进交流活动,形成合作,从而带来共同利益。推介会的本…

硬盘分区后数据还能恢复吗?答案揭晓!

“前两天刚给我的电脑硬盘分了区,但今天在查找数据时却发现某些数据丢失了。硬盘分区导致的数据丢失还有机会找回吗?怎么操作呢?请帮帮我!” 在使用电脑时,可能由于电脑需要重装系统,或者出现系统崩溃的情况…

天气越来越寒冷,一定要注意保暖

你们那里下雪了吗?听说西安已经下了今年的第一场雪,我们这里虽然隔了几百公里,但是只下雨没有下雪,不过气温是特别的冷,尤其是对我们这些上班族和上学的人而言,不管多冷,不管刮风下雨&#xff0…

InputStream和OutputStream

文章目录 💡FileInputStream 构造方法💡InputStream 常用方法💡OutputStream 概述💡OutputStream 常用方法💡PrintWriter💡小程序练习 使用字节流进行读/写操作时,是以字节为单位的;…

Python如何使用Matplotlib模块的pie()函数绘制饼形图?

Python如何使用Matplotlib模块的pie函数绘制饼形图? 1 模块安装2 实现思路3 pie()函数说明4 实现过程4.1 导入包4.2 定义一个类4.3 读取数据并处理4.4 定义饼图绘制方法 5 完整源码 1 模块安装 先安装matplotlib: pip install matplotlib安装numpy模块…

Pandas教程(非常详细)(第六部分)

接着Pandas教程(非常详细)(第五部分),继续讲述。 三十一、Pandas Excel读写操作详解 Excel 是由微软公司开发的办公软件之一,它在日常工作中得到了广泛的应用。在数据量较少的情况下,Excel 对…

动手学深度学习——序列模型

序列模型 1. 统计工具1.1 自回归模型1.2 马尔可夫模型 2. 训练3. 预测4. 小结 序列模型是一类机器学习模型,用于处理具有时序关系的数据。这些模型被广泛应用于自然语言处理、音频处理、时间序列分析等领域。 以下是几种常见的序列模型: 隐马尔可夫模型…

忘记7-zip密码,如何解压文件?

7z压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了7z压缩包的密码…

字符流的讲解 以及 Reader和Writer的用法

文章目录 ❤专栏导读❤字符流❤Reader类的操作 ❤Writer类操作❤Writer类的构造方法 ❤专栏导读 🚀《多线程》 🚀《数据结构剖析》 🚀《JavaSE语法》 在Java标准库中,提供的读写文件的流对象有很多很多的类,但是可以将…

盘点49个Python网站项目Python爱好者不容错过

盘点49个Python网站项目Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1aFYJtNZjgst1l5KFBckP2A?pwd8888 提取码:8888 项目名称 A simpleshorturl…

C++ vector中capacity()和size() 的区别

文章目录 1 capacity()和size() 介绍2 vector满了之后&#xff0c;capacity()会自动了扩充为原来的2倍 &#xff1f; 1 capacity()和size() 介绍 size是指容器当前拥有元素的个数&#xff0c; capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。 如vector<i…

PasswordPusher:能通过URL安全传递密码

什么是 Password Pusher &#xff1f; Password Pusher 是一个开源应用程序&#xff0c;用于通过网络安全的传递密码。在经过一定数量的查看和/或时间后&#xff0c;指向密码的链接会过期。 从功能上说&#xff0c;类似于 Bitwarden Send&#xff0c;思路上与传统阅后即焚工具一…