【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速
杯赛题目:基于蜂鸟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日截止~
相关文章:
【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速
杯赛题目:基于蜂鸟E203 RISC-V处理器内核的SoC设计 参赛要求:研究生组/本科生组 赛题内容: 基于芯来科技的开源蜂鸟E203 Demo SoC进行扩展,在限定的可编程逻辑平台上构建面向专用应用领域(譬如人工智能、信息安全、工业…...
SUMO道路封闭车辆绕行仿真实验【TraCI】
本文将介绍如何在 SUMO 交通模拟中动态选择车辆绕行指定道路。 绕道是城市驾驶中的常见现象,造成原因有很多,包括建筑和交通事故等。 无论出于何种原因,并非所有车辆都会选择避开这些道路; 有些人可能会毫不犹豫地直接开车过去&a…...
IDEA 无法搜索或者下载插件
File -> Settings… -> Plugins 可以打开插件市场,搜索想要下载的插件,但是可能由于网络问题而无法成功搜索或者下载插件。此时需要设置代理来解决。点击插件界面里的齿轮图标(在Marketplace、Installed的右边),…...
unity 使用Vuforia扫描实体物体交互
文章目录 前言一、Vuforia是什么?二、Unity导入Vuforia1.去Unity - Windows – Asset Store,搜vuforia engine,添加到我的资源2.从 Unity 的菜单 Assets -> Import package -> Custom Package 导入脚本,添加 Vuforia Engine…...
IDEA接口调试插件不好找?这款免费用!
IDEA插件市场中的API调试插件不是收费(Fast Request )就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用! 这款插件由Apipost团队开发的…...
OpenCV图像坐标系
绘制代码: X轴 # 选取两个点 point1 = (20, 0) point2 = (200, 0)# 在图像上绘制连接线 cv2.line(img, point1, point2, (...
【Proteus仿真】【Arduino单片机】DHT11温湿度
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用PCF8574、LCD1602液晶、DHT11温湿度传感器等。 主要功能: 系统运行后,LCD1602显示传感器采集温度和湿度。 二、软件设…...
Linux--makefile
一、makefile的作用 makefile是一个文件,是围绕依赖关系和依赖方法的自动化编译工具 一个工程中的源文件有很多,按照不同的类型、功能、模块放在不同的目录中。而makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件…...
Anaconda学习备忘
Anaconda是一套用于数据处理和科学计算以及AI等领域的包管理器。 以前的误区一直以为Anaconda只有python库,现在仔细搜索学习以后,才知道它其实包含多种语言,可以直接下载各种语言生成的包。其中conda就是一套跨语言包管理器了,而…...
uniapp运行到安卓模拟器一直在“同步手机端程序文件完成“界面解决办法
如果你是用的模拟器是android studio创建的模拟器,那么你需要新创建一个android11 x86架构的模拟器: 创建完成后,启动模拟器: 然后在hbuilder中重新运行到这个模拟器就可以了: 运行结果: 如果你是用安…...
leetcode:876. 链表的中间结点
一、题目 函数原型: struct ListNode* middleNode(struct ListNode* head) 二、思路 要找到链表的中间结点,有两种思路: 暴力解法:先遍历一遍链表,计算出链表的长度,再次遍历链表,找到中间结点。…...
【m98】webrtc vs2017构建带符号的debug库
调试有符号 调试 无符号 试试exe不输出到独立的文件? -】 直接输出到sln下面...
【读点论文】结构化剪枝
结构化剪枝 在一个神经网络模型中,通常包含卷积层、汇合层、全连接层、非线形层等基本结构,通过这些基本结构的堆叠,最终形成我们所常用的深度神经网络。 早在 1998 年,LeCun 等人使用少数几个基本结构组成 5 层的 LeNet-5 网络&…...
JimuReport积木报表 v1.6.5 版本发布—免费报表工具
项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…...
【开发工具】gitee还不用会?我直接拿捏 >_>
🌈键盘敲烂,年薪30万🌈 目录 📕揭开git面纱 📕git的一些前置操作 📕如何获取本地仓库 📕本地仓库的操作 📕远程仓库操作 📕分支操作 📕标签操作 &…...
算法通关村——位运算之位移的妙用
位移的妙用 1、位1的个数 1.1、题目描述 LeetCode191. 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位为 ‘1’ 的个数。 示例1: 输入:00000000000000000000000000001011 输出࿱…...
【开题报告】基于uni-app的高校新生报道APP的设计与实现
1.选题背景和意义 随着高校规模的不断扩大和信息化技术的迅速发展,传统的高校新生报道方式已经无法满足日益增长的新生数量和信息处理的需求。传统的线下报道流程通常存在着信息收集效率低、报到流程繁琐等问题,给学生、教职工和管理人员带来了许多不便…...
Elasticsearch docker-compose 使用 Logstash 从 JSON 文件中预加载数据
在我们创建 Elasticsearch 进行开发时,最简单的办法就是在本地使用 docker-compose 来一键部署一个 Elasticsearch 集群。有时,特别是在准备测试环境时,开发人员希望从一开始就创建包含一些测试数据的数据库容器。我们可以使用 Logstash 来很…...
<文件操作及常用的API>
文章目录 专栏导读🚀简单认识一下文件🚀树形结构和目录🚀文件路径-相对路径、绝对路径🚀文件类型🚀Java中文件的操作🚀File 类的常用方法 专栏导读 🚀多线程章节 💐数据结构剖析 &am…...
深入探讨Linux中的文本文件查看命令
目录 前言1 cat命令2 less命令3 more命令4 head命令5 tail命令6 总结 前言 在Linux系统中,文本文件是日常工作中不可或缺的一部分,无论是配置文件、日志文件还是代码文件,都需要用到文本文件查看命令。在本文中,我们将深入研究一…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
