网络安全-安全散列函数,信息摘要SHA-1,MD5原理

server/2024/11/26 21:49:33/

安全散列函数

        单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要。数据指纹)。还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA

散列函数的要求

        散列函数的目的是文件、消息或者其它数据块产生“指纹”。为满足在消息认证中的应用,散列函数H必须具有下列性质:

        (1)H可适用于随意长度的数据块。

        (2)H能够生成固定长度的输出。

        (2)对于随意给定的x,计算H(x)相对easy,而且能够用软/硬件实现。

        (4)对于随意给定的h,找到满足H(x)=h的x在计算上不可行。满足这一特性的散列函数称之为:具备抗原像攻击性。

        (5)对于随意给定的数据块x,找到满足H(y)=H(x)的y ≠ x在计算上是不可行;满足这一特性的散列函数称之为:抗弱碰撞性。

        (6)找到满足H(x) = H(y)的随意一对(x,y)在计算上是不可行的。

满足这一特性的散列函数称之为:抗碰撞性。

        前三个性质是使用散列函数进行消息认证的实际可行要求。第四个属性,抗原像攻击,防止攻击者能够回复秘密值。抗弱碰撞性保证了对于给定的消息。不可能找到具有同样散列值的可替换消息。

        满足上面前5个性质的散列函数称之为弱散列函数。

假设还满足第6个性质则称之为强散列函数。

一般来说:能够认识散列函数的两个特点就OK,1.输出固定长度的 2. 不可逆转!

散列函数的安全

        有两种方法能够攻击安全散列函数:password分析法和暴力攻击法。

散列函数抵抗暴力攻击的强度全然依赖于算法生成的散列码长度。

Van Oorschot和Wiener以前提出,花费1000万美元涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就能够找到一个碰撞。

        2004年8月中国password学家王小云教授等首次发布了提出一种寻找MD5碰撞的新方法。眼下利用该方法用普通微机几分钟内就可以找到MD5的碰撞。MD5已经呗彻底攻破。

简单散列函数

        全部的散列函数都依照以下的基本操作。把输入(消息、文件等)看成n比特块的序列。对输入用迭代方法处理一块,生成n比特的散列函数。

        一种最简单散列函数的每个数据块都依照比特异或。

例如以下所看到的

                Ci = bi1⊕ bi2⊕ … ⊕ bim

        当中:

                Ci为散列码的第i比特。1<=  i <=n;

                m为输入中n比特数据块的数目。

                bij为第j块的第i比特。

                ⊕为异或操作

        下图说明了这个操作:

上图仅仅是简单的散列函数。由于没一列都有同样的可能性。所以这个函数的有效性差。

SHA安全散列函数

        近些年,应用最广泛的散列函数是SHA。

由于其它每一种被广泛应用的散列函数都已经被证实存在这password分析学中的缺陷。接着到2005年,SHA也许仅存的安全散列算法。SHA由美国国家标准与技术研究院(NIST)开发。

● 1995年发布SHA-1
● 2002年,发布了SHA-2(SHA-256、SHA-384、SHA-512)
● 2008年,添加了SHA-224

更具体的例如以下图所看到的:

以下对SHA-512做一下介绍,其它SHA算法与之非常类似。该算法以最大长度不超过2128比特作为输入,生成512比特的消息摘要输出。输入以1024比特的数据块进行处理。

如图所看到的:

处理过程:

● 第1步、追加填充比特

填充消息使其长度模1024同余896[长度 896(模1024)]。及时消息已经是期望的长度,也总是要加入填充。填充部分是由单个比特1后接所需个数的比特0构成。

● 第2步、追加长度

将128比特的数据块追加在消息上。该数据被看作是128比特的无符号整数。它含有原始消息的长度。经过前两步,生成了1024倍数的消息。如上图所看到的。被延展的消息表示为1024比特的数据块M1,M2,M3...Mn。

结合这两点:“同余”比較难以理解,填充比特的逻辑能够这么理解:填充的目的是为了形成1024的倍数,可是,最后一个1024块的最后128比特必须保留(用于记录原始消息的长度)。举例:

原始消息895比特,那么须要填充1个比特。这样895+1+128=1024

原始消息896比特。这样的情况下,加上128字节正好是1024,可是依照规则,仍是要填充1024个字节。

原始消息897比特,897+128>1024,所以须要填充。填充1023个比特。

● 第3步、初始化散列缓冲区

用512比特的缓冲区保存散列函数中间和终于结果。缓冲区能够是8个64比特的寄存器(a,b,c,d,e,f,g,h),这些寄存器初始化为64比特的整数(十六进制):

        a=6a09e667f3bcc908

        b=bb67ae8584caa73b

        c=3c6ef372fe94f82b

        d=a54ff53a5f1d36f1

        e=510e527fade682d1

        f=9b05688c2b3e6c1f

        g=1f83d9abfb41bd6b

        h=5be0cd19137e2179

这些值以逆序的形式存储,即字的最高字节存在最低地址(最左边)字节位置。

这些字的获取方式例如以下:前8个素数取平方跟,取小数部分前64位。

● 第4步、处理1024比特的数据块消息

        算法的核心是80轮迭代构成的模块。

该模块在上图中标记为F,下图是其逻辑关系。每一轮都以512比特的缓冲区值abcdefgh作为输入。而且更新缓冲区内容。

在第一轮时,缓冲区的值是中间值Hi-1.在随意t轮。使用从当前正在处理的1024比特的数据块(Mi)导出64位比特值Wt。每一轮还使用附加常数Kt。当中0<=t<=79表示80轮中的某一轮。这些常数的获取方式例如以下:前8个素数的立方根。取小数部分的前64位。这些常数提供了64位随机串集合,能够初步消除输入数据中的不论什么规则性。第80轮输出加到第1轮输入(Hi-1)生成Hi。

缓冲区里的8个字与Hi-1中对应的字进行模264加法运算。

● 第5步、输出

当全部N个1024比特的数据块都处理完成后,从第N阶段输出的便是512比特的消息摘要。

        SHA-512算法使得散列码的随意比特都是输入端每1比特的函数。基本函数F的复杂迭代产生非常好的混淆效果;即随机取两组类似的消息也不可能生成同样的散列码。除非SHA-512隐含一些直到如今都还没有发布的弱点。


http://www.ppmy.cn/server/145157.html

相关文章

django authentication 登录注册

文章目录 前言一、django配置二、后端实现1.新建app2.编写view3.配置路由 三、前端编写1、index.html2、register.html3、 login.html 总结 前言 之前&#xff0c;写了django制作简易登录系统&#xff0c;这次利用django内置的authentication功能实现注册、登录 提示&#xff…

什么是 WPF 中的依赖属性?有什么作用?

依赖属性&#xff08;Dependency Property&#xff09;是 WPF 的一个核心概念&#xff0c;它为传统的 .NET 属性提供了增强功能&#xff0c;支持绑定、样式、动画和默认值等功能。通过依赖属性&#xff0c;WPF 提供了一种灵活的数据驱动的方式来处理 UI 属性。 1. 什么是依赖属…

SpringBoot驱动的社团管理平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理社团管理系统的相关信息成为必然。开发合适…

华为IPD流程管理体系L1至L5最佳实践-解读

该文档主要介绍了华为IPD流程管理体系&#xff0c;包括流程体系架构、流程框架实施方法、各业务流程框架示例以及相关案例等内容&#xff0c;旨在帮助企业建立高效、规范的流程管理体系&#xff0c;实现业务的持续优化和发展。具体内容如下&#xff1a; 1. 华为流程体系概述 -…

跨域相关的一些问题 ✅

当网页从一个源&#xff08;https://baidu.com&#xff09;请求另一个源&#xff08;如 https://taobao/api&#xff09;的资源时&#xff0c;就发生了跨域。由于安全原因&#xff08;防止恶意网站通过脚本访问用户在其他网站上的数据&#xff09;&#xff0c;浏览器对跨域请求…

探索C/C++的奥秘之stack和queue

1. stack的介绍和使用 1.1 stack的介绍 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。具体什么是适配器呢&#xff1f;其实就是由现有的东西进行转换&#xff0c;转化出我要的东…

层次聚类(Hierarchical Clustering)详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

基于 DRNN 神经网络整定的 PID 解耦控制

1. 基本原理 DRNN&#xff08;Dynamic Recurrent Neural Network, 动态递归神经网络&#xff09;是一种带有时间反馈的神经网络&#xff0c;能够建模系统的动态特性&#xff0c;适用于非线性、多变量、时变系统的控制。结合 PID 解耦控制&#xff0c;利用 DRNN 进行动态建模和…