【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日截止~

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

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

相关文章

手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯

一,意图 通过手机蓝牙连接WeMosD1R32开发板,开发板又通过TTL转USB与电脑连接.手机通过蓝牙控制开发板上的LED灯的开,关,闪等动作,在电脑上打开串口监视工具观察其状态.也可以通过电脑上的串口监视工具来控制开发板上LED灯的动作,而在手机蓝牙监测工具中显示灯的状态. 二,原料…

美团外卖9元每周星期一开工外卖红包优惠券怎么领取?

美团外卖9元周一开工红包活动时间是什么时候? 美团外卖9元周一开工红包优惠券是指每周星期一可以领取的美团外卖红包优惠券,在美团外卖周一开工红包领取活动时间内可领取到9元周一开工美团外卖红包优惠券;(温馨提醒:如…

【ArcGIS】批量对栅格图像按要素掩膜提取

要把一张大的栅格图裁成分省或者分县市的栅格集,一般是用ArcGIS里的按掩膜提取。 但是有的时候所要求的栅格集量非常大,所以用代码来做批量掩膜(按字段)会非常方便。 import arcpy , shutil , os from arcpy import env from ar…

PHP常用的数组函数

PHP是一种流行的服务器端脚本语言,广泛用于Web开发。数组是PHP中最重要且最常用的数据类型之一,它提供了许多强大的数组函数,用于在数组上执行各种操作。在本文中,我们将深入解析PHP中一些常用的数组函数,以便更好地理…

【C/C++笔试练习】继承和派生的概念、虚函数的概念、派生类的析构函数、纯虚函数的概念、动态编译、多态的实现、参数解析、跳石板

文章目录 C/C笔试练习选择部分(1)继承和派生的概念(2)程序分析(3)虚函数的概念(4)派生类的析构函数(5)纯虚函数的概念(6)动态编译&…

uniapp App 端 版本更新检测

function checkVersion() { var req { //升级检测数据 appid: plus.runtime.appid, version: plus.runtime.version }; const timestamp Date.parse(new Date()); config.server.query_news uni.reque…

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字

上一节实现了 LangChain 实现给动物取名字, 实际上每次给不同的动物取名字,还得修改源代码,这周就用模块化template来实现。 1. 添加promptTemplate from langchain.llms import OpenAI # 导入Langchain库中的OpenAI模块 from langchain.p…

优思学院|什么是精益生产管理?从一个生活上的故事出发来说明。

你关掉电脑,离开办公室。 一个小时后,你进入家门和孩子们在一起。 你和家人一起吃晚饭。 你的老板打电话来查看你的项目进展。 你哄孩子入睡并给他们读个故事。 作为一个负责任的父母,你想要与孩子们的互动时间增加并提高生活的质量&…

ChatGPT + DALL·E 3

参考链接: https://chat.xutongbao.top/

Linux中安装部署环境(JAVA)

目录 在Linux中安装jdk 包管理器yum安装jdk JDK安装过程中的问题 验证安装jdk 在Linux中安装tomcat 安装mysql 在Linux中安装jdk jdk在Linux中的安装方式有很多种, 这里介绍最简单的方法, 也就是包管理器方法: 包管理器yum安装jdk Linux中常见的包管理器有: yumaptp…

图论| 827. 最大人工岛 127. 单词接龙

827. 最大人工岛 题目:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 由一组上、下、左、右四个方向相连的 1 形成。 题目链接:[827. 最大人工岛](ht…

前端为什么要工程化

前端为什么要工程化 文章目录 前端为什么要工程化传统开发的弊端一个常见的案例更多问题 工程化带来的优势开发层面的优势团队协作的优势统一的项目结构统一的代码风格可复用的模块和组件代码健壮性有保障团队开发效率高 求职竞争上的优势 现在前端的工作与以前的前端开发已经完…

深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

Linux 时区设置

对于服务器来说,linux的时区影响着运行之上的数据库和后端程序的时区 应该和数据库和后端及其他程序的时区保持一致 其他相关时区的设置 pgsql时区设置: php时区设置: 1.显示当前的时间和时区 date结果类似下面,图中显示的是ut…

球幕投影有哪些常见的物理表现形式?

近年来,投影技术不断发展完善,给内容的表达方式带来了突破,使其展示形式不再局限于平面,即使在弧面、球面等异形幕墙上,也能呈现出令人惊叹的视觉画面。其中球幕投影备受关注,它以半球形屏幕将图像投影到球…

Selenium安装WebDriver(含116/117/118/119)

1、确认浏览器的版本 在浏览器的地址栏,输入chrome://version/,回车后即可查看到对应版本 2、找到对应的chromedriver版本 2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号(只看大版本)下载对应文件 2.2 116版…

解决 VS2022 关于 c++17 报错: C2131 表达式必须含有常量值

使用 VS2022 编译 ORB-SLAM3 加载Vocabulary 二进制ORBvoc.bin 时,在 DBOW2 里修改 TemplatedVocabulary.h 代码显示这样的错误: 编译器错误 C2131 表达式的计算结果不是常数 定位到我的代码中: char buf [size_node] ; 原因 : …

PyTorch - 高效快速配置 Conda + PyTorch 环境 (解决 segment fault )

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134463035 在配置算法项目时,因网络下载速度的原因,导致默认的 conda 与 pytorch 包安装缓慢,需要配置新的 co…

zabbix-proxy分布式监控

Zabbix是一款开源的企业级网络监控软件,可以监测服务器、网络设备、应用程序等各种资源的状态和性能指标。在大型环境中,如果只有一个Zabbix Server来监控所有的节点,可能会遇到性能瓶颈和数据处理难题。 为了解决这个问题,Zabbi…