LJgibbs · 2020年04月17日

以SM3算法为例,构建一个软硬协作算法加速器:算法篇

本文是本系列第一篇,笔者最近在研究基于FPGA的算法加速,本系列将以 PPT 结合文字的方式,以实现相对简单的 SM3 杂凑算法为例,介绍一个基于 FPGA 的软硬结合的算法加速器的诞生。
本系列第一篇力争用简单的语言,在几张 PPT 里回答一个问题:什么是 SM3 杂凑算法?

首发知乎
作者:李凡



我们首先关注算法的输入输出。

杂凑算法的输入是一组任意长度的消息,消息可以是数字,字符串等等任何二进制数据。长度可以任意,理论上不能超过 2^64 bit 。

输出时一组固定长度的杂凑值,这段杂凑值的长度不会太大,SM3 的杂凑值长度为 256 bit。

那么输入的消息经历了什么,从长度任意的二进制数据变成了长度特定的杂凑值?

消息通过了一组特定的映射方式,映射的目的首先是进行了压缩,其次也是一种有规律的置乱算法。
v2-24ecf788de0019290e86cebc225427aa_1440w.jpg

置乱算法有以上特性,从学术一点的角度可以概括为

满足这些特性可以保证其是一个强单向杂凑函数,SM3 满足这些特性

举个例子:

两次扩展的公式


v2-8a2dd88accd5c48d983af5794917f7e2_1440w.jpg

块内迭代

块间迭代

结语

在后续的系列文章中,我们将从软件实现与优化,硬件算法实现,外围通信系统搭建以及软硬协同整体平台几个方向来展开。

软件方面计划以 GitHub 上的开源代码来讲解,其代码兼具可读性,规范性以及性能,既然要硬件加速,肯定要找出最好的软件性能来对比。

硬件逻辑代码将结合学习开源代码以及自行实现。

外部通信系统将基于 UltraScale Zynq 打造一个 10G 以太网平台。

更多FPGA相关知识请关注我的FPGA 的逻辑专栏
推荐阅读
关注数
10579
内容数
550
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息