【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系统中,文本文件是日常工作中不可或缺的一部分,无论是配置文件、日志文件还是代码文件,都需要用到文本文件查看命令。在本文中,我们将深入研究一…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...