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

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算法流程图
以上所示的流程图是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计算具体过程
SHA-1算法运算从初始值开始到最终所得哈希值,会进行80轮运算。上图所示的是每一轮运算的具体操作。

SHA-1 Function

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

SHA-1 Processing

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

四. 最终哈希值计算

最终哈希值计算为下图所示:
SHA1-alg_done
五个初始值与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

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

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

相关文章

Java加密与解密的艺术~RSA模型分析

我们仍以甲乙两方收发消息为例。为完成加密消息传递&#xff0c;甲乙双方需要以下操作&#xff1a; 1&#xff09;、由消息发送方&#xff08;甲方&#xff09;构建密钥对。 2&#xff09;、由消息发送方&#xff08;甲方&#xff09;公布公钥至消息接收方&#xff08;乙方&…

区分关联、依赖和聚集关系

在建立对象模型时&#xff0c;很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时&#xff0c;对象A都有可能调用对象B的方法&#xff0c;这是三种关系之间的相同之处&#xff0c;除此之外&#xff0c;它们有着不同的特征。 1&#xff0e;依赖关…

MarkDown 语法手册

From: https://blog.csdn.net/witnessai1/article/details/52551362 From: http://www.jianshu.com/p/1e402922ee32/ 菜鸟教程&#xff1a;Markdown 教程&#xff1a;https://www.runoob.com/markdown/md-tutorial.html Markdown 语法手册&#xff1a;https://www.zybuluo.com…

硬件安全(1)—— SHA-1算法在FPGA上的实现-2

SHA-1算法在FPGA上的实现-2 在上一篇文章中&#xff0c;我详细介绍了SHA-1算法的计算过程。SHA-1算法主要由消息填充(Message Padding)和哈希计算(Hash Function Engine)两部分组成。消息块标准长度规定为512bits一组。消息填充在实现过程中需要区分长度不足一个消息块( < …

Mysql -uroot -p 登陆不上_mysql的登陆和退出命令格式

mysql登陆的命令格式为&#xff1a;mysql -h [hostip] -u [username] -p [password] [database]1.普通登陆mysql数据库命令格式&#xff1a;mysql -u 用户名 -p 密码&#xff0c;例如: mysql -u root -p root如果在-p后没有提供密码&#xff0c;则会在执行命令后要求用户输入密…

Java加密与解密的艺术~RSA实现

RSA 实现 /*** 2008-6-11*/ package org.zlex.chapter08_2;import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import …

IBM发布未来五年五大科技预测

来源&#xff1a;人工智能和大数据未来五年五大科技预测之AI偏见&#xff1a;AI 偏见将会爆发。但只有公正的 AI 才能生存。 5年之内&#xff0c;有偏见的AI系统和算法将不断增多&#xff0c;就像早前的计算机病毒增多一样。但我们将采取相应的应对措施&#xff0c;提出新的解决…

在Linux环境下使用C语言倒转字符串,输出错误的解决办法

项目场景&#xff1a; 学习在Linux环境下的C语言编程&#xff0c;利用GDB打Breakpoint&#xff0c;逐步调试Bug 问题描述 尝试将一个字符串倒转后输出&#xff0c;发现执行文件并没有正常的将倒转后的字符串输出。 源代码&#xff1a; #include <stdio.h>int main(voi…

“机器人之夜”看猎豹跑得快还是五款机器人价格降得快?“鸿门宴”正式上演

来源&#xff1a;机器人大讲堂3 月 21 日&#xff0c;猎豹移动&#xff08;NYSE: CMCM&#xff09;联合旗下人工智能公司猎户星空在北京水立方举行“猎豹3.21机器人之夜”发布会&#xff0c;发布自主研发的猎户机器人平台Orion OS&#xff0c;并推出五款全系列机器人产品&#…

mysql sysbench_详解MySQL基准测试和sysbench工具

一、基准测试简介1、什么是基准测试数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试与压力测试基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑&#xff0c;更加简单、直接、易于测试&#xff0c;数据可以由工具生成&…

windows 堆栈溢出简易测试代码

环境&#xff1a;windows xp sp2 vc 6.0 Code1#include <stdio.h> 2 3int fun2() 4{ 5 printf("-------------Get privilege!---------\n"); 6 getchar(); 7 return 0; 8} 910int fun1()11{12 int iRet 0;13 int *pRet &iRet;14 pRet…

数字电路中的Single-Bit跨时钟域设计

数字电路中的Single-Bit跨时钟域设计同步时钟&异步时钟的定义Metastable&#xff08;亚稳态&#xff09;Metastable的产生原因Setup / Hold Requirement的真正原因Metastable造成的问题跨时钟域同步设计跨时钟域处理目标Single-bit的Clock Domin Crossing (CDC) 电路Single…

《Nature》重磅 | 研究员利用机器学习发现近 6000 种未知病毒

作者&#xff1a;李雨晨《Nature》杂志近日发布消息称&#xff0c;研究人员利用人工智能发现了近6000种未知的病毒。这项工作是在3月15日由美国能源部(DOE)组织的一次会议上提出的&#xff0c;它展示了一种探索地球上巨大而未知的病毒多样性的新工具。从人类健康到垃圾降解&…

mysql limit to hosts matching_MySQL 用户访问限制 -- Host Match Limit

笔者前几日在做数据库迁移的时候&#xff0c;发现了一个挺有意思的小东西&#xff1a;数据库访问限制(Host Match limit),简单地翻阅了下给官方资料&#xff0c;发现这个东西应用场景其实非常广泛&#xff0c;只是我们采用了其他可能没有原生数据库带的Access Limit 功能好地方…

数字电路中的Multi-bits跨时钟域设计

数字电路中的Multi-bits跨时钟域设计跨时钟域同步设计跨时钟域处理目标Multi-bits的Clock Domin Crossing (CDC) 电路设计1-bit "Guard" 信号同步multi-bits数据其他的Multi-bits跨时钟域同步设计跨时钟域电路的仿真验证跨时钟域同步设计 跨时钟域处理目标 在跨时钟…

ACM公布2017年图灵奖,大卫·帕特森和约翰·轩尼诗获奖

来源&#xff1a;网络大数据刚刚&#xff0c;美国计算机协会(ACM)宣布 John L. Hennessy 和 David A. Patterson 荣获 2017 年图灵奖。目前这两位学者都供职于谷歌&#xff0c;前者是谷歌母公司 Alphabet 的董事会主席&#xff0c;后者任谷歌杰出工程师&#xff0c;致力于研究机…

Java加密与解密的艺术~DES实现

密钥长度与安全性成正比&#xff0c;但Java仅支持56位密钥长度&#xff0c;作为补充&#xff0c;Bouncy Castle 提供64位密钥长度支持。在此基础上配合不同填充方式&#xff08;如PKCS5Padding&#xff0c;PKCS7Padding&#xff09;&#xff0c;可显著提高加密系统的安全性。 D…

YOLOv8改进 | 主干篇 | 利用SENetV2改进网络结构 (全网首发改进)

一、本文介绍 本文给大家带来的改进机制是SENetV2&#xff0c;其是2023.11月的最新机制(所以大家想要发论文的可以在上面下点功夫)&#xff0c;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何…

Linux学习路线及网络编程经典书籍

linux学习资源整理&#xff1a;https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料)&#xff1a;https://zhuanlan.zhihu.com/p/21723250 知乎 - 你是如何学习 Linux 编程的&#xff1f;&#xff1a;https://www.zhihu.com/question/20730157 如果让你推荐一本 Linux…

在Windows 7解决GAC错误

调试一网站源代码出现下面的错误 错误 1 Could not load file or assembly Microsoft.ReportViewer.WebForms, Version8.0.0.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a or one of its dependencies. The system cannot find the file specified. D:\3layerhotel\WebS…