SHA-1 算法在FPGA上的实现 - 1

背景介绍

散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。SHA-1 (全称:Secure Hash Algorithm - 1,安全散列算法-1)是一种密码散列函数,是由美国国家安全局设计。SHA-1可以使一个不固定长度的消息生成160位的消息摘要,用于验证消息在传输的过程中没有被攻击或者篡改。2005年,密码分析人员发现了对SHA-1的有效攻击方法,2020年后,针对SHA-1的选择前缀攻击已经证明实际可行,建议尽可能使用SHA-2或者SHA-3取代SHA-1。在这里介绍SHA-1算法是因为其对SHA家族算法有代表性,其余算法与SHA-1差别不大。

应用场景举例

SHA-1作为安全散列算法家族的一员,主要作用是用于验证消息在传递的过程中是否被篡改,是被视作验证码。初学者在学习的过程中,经常会将Hash函数与密文、密钥、加密等概念混淆。需要值得注意的是,Hash算法并不能够加密消息或者掩盖消息的真实样貌,技术人员或者学者使用SHA家族算法,只是为了通过移位、异或、交换寄存器内数值、使用消息参与计算的方式,将不固定长度的消息转化为固定长度的消息摘要,用于验证消息的完整性以及可靠性,确认其在传输的过程中没有被修改。于此同时这个消息的计算过程也是不可逆的,因此可以保证了消息的不泄露。

SHA-1算法,在实际生活中的应用场景如下:
1.密码验证:服务器端存储用户密码加密后的内容,每次密码校验比较的是密文是否相同,确保服务器管理员也无法获取到用户使用的密码。
2.文件的完整性比较:当下载一个文件时,服务器返回的信息中包括这个文件的MD5(或者SHA1),在本地下载完毕将其进行MD5加密,之后比较两个MD5只进行比较,如果一直则说明文件完整不存在丢包现象。
3.文件上传:在上传文件信息的时候,将该文件的MD5同时上传给服务器。服务器中存储了这个文件MD5(或者SHA1),并存储这个MD5只对应的已上传的字节长度,比如未上传为0,已完成为-1,已上传200自己,则值为200。可以用于匹配该文件在服务器中的状态,方便断点再传。只要源文件没有改,就算文件改了名字,换个账户都可以在服务器中找到对应的文件,避免存储多份相同文件,并可以提高二次上传时的速度。

SHA-1的计算流程


以上所示的流程图是SHA-1算法实现的流程图。我把它分为了四部分:
第一部分:哈希初始值的输入;
第二部分:消息块的填充,分块;
第三部分:哈希运算;
第四部分:将最后所得的哈希值与哈希初始值相加,得到最终哈希值。

一.哈希初始值输入 (Initial Value Input):

SHA-1算法的特点之一就是将不固定长度的消息块转化为固定长度的验证码,实现这一特点的过程其实就是将5个哈希初始值通过移位、相加、交换位置的方式得到最终的5个散列值。在这个过程中等待处理的消息将参与哈希值的计算,最后得到所需的哈希值进行验证。
哈希初始值一般为:
Initial variables:
h0 := 0x67452301
h1 := 0xEFCDAB89
h2 := 0x98BADCFE
h3 := 0x10325476
h4 := 0xC3D2E1F0
哈希初始值也可以根据需要自行更改。

二.消息块的填充和分块(Message Padding):

每条输入消息的长度不固定,但每一次输入的消息被分块为512位(16个字)作为一组进行处理。很多情况下,消息长度并不是512的整数倍,这时候就要对原始消息进行补填充。假设消息的长度M为L位。将“ 1”附加到消息末尾,后跟k个零位,其中k是方程的最小非负解L+1 + k” 448mod 512。然后附加用二进制表示形式等于的数字L的64位的消息块。例如,(8位ASCII)消息“ abc”的长度8·3 = 24,用"1"填充消息一位,然后填充448-(24 +1)= 423个零位,然后消息长度,成为512位填充消息。效果如图所示。

整个过程可以详细分解为以下两步:
1.补位
原始消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。
补位是这样进行的:先补一个1,然后再补0 ,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。
2.补长度
就是将原始数据的长度补到已经进行了补位操作的消息后面。通常用两个字(64位)来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。

三. 哈希运算(Hash Function):


SHA-1算法运算从初始值开始到最终所得哈希值,会进行80轮运算。上图所示的是每一轮运算的具体操作。

SHA-1 Function

SHA-1使用一系列逻辑函数进行计算,一共计算80轮,分别为f0,f1,…,f79。每个函数ft,其中 ft <79,举个例子,当对三个32位字x,y和z进行运算,并产生一个32位字作为输出。 ft功能(x,y,z)定义如下:

SHA-1 Processing

SHA-1哈希计算使用先前定义的函数和常量进行计算,(+)指的是模 232
第1轮到第80轮,每一轮都要按顺序用一个32位的消息参与运算,消息本身有512位,也就是16个字。剩余的轮数,通过特殊的算法,将消息扩展为32*80位。算法如下:

具体每一轮的计算方法,如下图所示:

图中的ROTLn(x)为下图所示:

四. 最终哈希值计算

最终哈希值计算为下图所示:

五个初始值与80轮计算后所得哈希值一同计算,所得的值就是我们需要的散列值。

总结

在SHA-1的FPGA实现(1)中,我介绍了SHA-1的历史和作用,并详细的描述了SHA-1算法的运算过程,在下一篇中,我将开始介绍如何将SHA-1算法在FPGA上实现,以及需要注意的事项。

参考资料

[1] SECURE HASH STANDARD https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf

硬件安全 (1) —— SHA-1算法在FPGA上的实现相关推荐

  1. 高级综合(high-level-synthesis,HLS):软件算法在FPGA上实现硬件加速的综合工具

    目录 高级综合HLS(high-level-synthesis):软件算法在FPGA上实现硬件加速的综合工具 HLS简述 HLS应用背景 HLS基本要素 HLS优势 小结 高级综合HLS(high-l ...

  2. 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)...

    一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台:DIY_DE2 软件平台:quartus ii9.0 ...

  3. 基于dsp_builder的算法在FPGA上的实现

    一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台:DIY_DE2 软件平台:quartus ii9.0 ...

  4. AI算法在FPGA芯片上还有这种操作?| 技术头条

    作者 | 杨付收 出品 | CSDN(ID:CSDNnews) 碾压与崛起 AI算法的崛起并非一帆风顺的,现在的主流的NN类的卷积神经网络已经是第二波浪潮了,早在上个世纪80年代,源于仿生学,后又发展 ...

  5. AI 算法在 FPGA 芯片上还有这种操作?

    作者 | 杨付收 出品 | CSDN(ID:CSDNnews) 碾压与崛起 AI算法的崛起并非一帆风顺的,现在的主流的NN类的卷积神经网络已经是第二波浪潮了,早在上个世纪80年代,源于仿生学,后又发展 ...

  6. 在 FPGA 上快速构建 PID 算法

    在 FPGA 上快速构建 PID 算法 副标题:优秀的IC/FPGA开源项目(四)-使用HLS构建PID算法 <优秀的IC/FPGA开源项目>是新开的系列,旨在介绍单一项目,会比<优 ...

  7. matlab算法到fpga具体实例,在FPGA上建立MATLAB和Simulink算法原型

    芯片设计和验证工程师通常要为在硅片上实现的每一行RTL代码写出多达10行测试平台代码.验证任务在设计周期内可能会占用50%或更多的时间.尽管如此辛苦,仍有接近60%的芯片存在功能瑕疵,需要返工.由于H ...

  8. 目标反射回波检测算法及其FPGA实现 之一:算法概述

    目标反射回波检测算法及其FPGA实现之一:算法概述 前段时间,接触了一个声呐目标反射回波检测的项目.声呐接收机要实现的核心功能是在含有大量噪声的反射回波中,识别出发射机发出的激励信号的回波.我会分几篇 ...

  9. 云中的机器学习:FPGA 上的深度神经网络

    人工智能正在经历一场变革,这要得益于机器学习的快速进步.在机器学习领域,人们正对一类名为"深度学习"算法产生浓厚的兴趣,因为这类算法具有出色的大数据集性能.在深度学习中,机器可以在 ...

最新文章

  1. python 开发版-Micropython开发板固件烧写教程
  2. 如何使用eclipse软件创建一个Java项目?
  3. camvid数据集介绍_深度学习图像数据集介绍(MSCOCO)
  4. 已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?
  5. 数据结构之线性结构之堆栈
  6. 擦窗机器人不用时怎么收纳_解放双手,再也不用手动擦窗啦
  7. 用c语言计算星期,计算任何一天是星期几的C语言源代码.
  8. 动态绑定dropdownlist --开始拣.NET
  9. 你的“数学潜意识”原来可以被唤醒
  10. pivot 与 unpivot函数
  11. BLOB存储图片文件二进制数据是非对错
  12. python剔除异常值的方法_二维d异常值的剔除方法
  13. 第六章 PCB 的 DRC 检查、拼版设计及资料输出
  14. html图片加载慢的问题
  15. NFC技术的定义通信方式
  16. 火车头 php 插件,插件 - 火车采集器官方博客
  17. 这是未来的隐私工具吗?
  18. [个人笔记] Zabbix配置钉钉群聊告警机制
  19. 蚁群算法及蚂蚁系统的原理(js实现版)
  20. 颜色RGB对照表(颜色大全)

热门文章

  1. 肖仰华 | 知识图谱研究的回顾与展望
  2. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)
  3. 2018届校招面经精选
  4. CSS每日学习笔记(1)
  5. redis为什么选择单线程工作模型
  6. spring boot / cloud (七) 使用@Retryable来进行重处理
  7. Oracle优化笔记
  8. 第四讲 构建安全的Microsoft ASP.NET 应用的最佳实践和技术
  9. [导入]将Byte数组转化为String
  10. Win32 多文档多视图