第3章_单向散列函数详解
- 格式:ppt
- 大小:763.50 KB
- 文档页数:51
单向散列函数主要用于提供信息的完整性验证.已知单向散列函数h(x)=(3x 2 -2x+5) m
来解释这个单向散列函数.
单向散列函数是一种非常重要的数字摘要方法,它可以将任意长度的明文转换为固定长度的密文。
单向散列函数的一个重要的特性就是其唯一性,它可以将明文和密文唯一对应,从而保证信息被准确传输,但不能将密文转换成明文。
在这里,我们要讨论一个单向散列函数h(x)=(3x2-2x+5)m。
这个函数可以使用输入的任意数字x产生一个m位长度的散列值,它可以保证散列值的唯一性,从而保证信息的完整性。
举个例子,让我们考虑一个6位的数字,x=123456,如果m=8,则h(x)的结果为
h(x)=(3119244)8。
由于这个数字是唯一的,这可以用来回答以下问题:输入的数据是什么?
另外,单向散列函数还可以帮助检验数据的完整性。
例如,如果一个传输的数据出现了错误,那么对应的散列值也会有所不同。
在这种情况下,可以使用单向散列函数来检验处理后的数据是否与原始数据相同,如果不同,则证明数据出现了错误。
总之,单向散列函数h(x)=(3x2-2x+5) m是一种重要的数字摘要方法,它可以将输入的任意长度的明文转换为固定长度的密文,从而保证信息的完整性。
它还可以用于检测输入数据是否发生错误,对确保信息传输准确又非常有帮助。
单向散列函数(HASH函数)基本原
Hash函数H(m)也名单向散列函数,它是现代密码学的核心。
散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。
而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算机其散列值,但要使其散列值等于一个特殊值却很难。
好的散列函数也是无冲突的:难于产生两个预映射的值,使他们的散列值相同。
散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。
平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。
已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。
如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那幺,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那幺可以肯定他持有那份文件。
散列函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。
常见的散列算法有MD5、SHA、Snefru和HVAL等。
收稿日期:2001204228基金项目:国家重点科技项目(攻关)计划资助课题(20002A31201205)单向散列函数的原理、实现和在密码学中的应用3辛运帏,廖大春,卢桂章(南开大学信息技术科学学院,天津300071)摘 要:简要介绍了单向散列函数的有关理论及实现情况,并且以密码学中广泛应用的单向散列函数M D5为例,详细介绍了它的原理和实现过程。
最后简要介绍了单向散列函数在当前的应用,并且提出了一种利用单向散列函数实现的新的用户密钥管理方案。
关键词:单向散列函数;密码学;邮摘散列算法;M D5中图法分类号:TP309.3 文献标识码:A 文章编号:100123695(2002)022******* The Principle and Implement of One 2way Hash Functions andTheir Cryptographic ApplicationXI N Y un 2wei ,LI AO Da 2chun ,LU G ui 2zhang(College o f Information Technology &Science ,Nankai Univer sity ,Tianjin 300071,China )Abstract :The paper introduces the theory and im plement of one 2way hash functions ,and using the M D5Alg orithm which is extensively used in cry ptography as an exam ple ,introduces its principle and im plement in detail.At last ,we research the application of them ,and pre 2sent a new schedule of user key management.K ey w ords :One 2way Hash Function ;Cry ptography ;Message Digest Hash Alg orithm ;M D51 单向散列函数简介密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。
单向散列函数算法(Hash算法):一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(过程不可逆),常见的单向散列算法有MD5,SHA.RIPE-MD,HAVAL,N-Hash由于Hash函数的为不可逆算法,所以软件智能使用Hash函数作为一个加密的中间步骤MD5算法:即为消息摘要算法(Message Digest Algorithm),对输入的任意长度的消息进行预算,产生一个128位的消息摘要简易过程:1、数据填充..即填出消息使得其长度与448(mod 512)同余,也就是说长度比512要小64位(为什么数据长度本身已经满足却仍然需要填充?直接填充一个整数倍)填充方法是附一个1在后面,然后用0来填充..2、添加长度..在上述结果之后附加64位的消息长度,使得最终消息的长度正好是512的倍数..3、初始化变量..用到4个变量来计算消息长度(即4轮运算),设4个变量分别为A,B,C,D(全部为32位寄存器)A=1234567H,B=89abcdefH,C=fedcba98H,D=7654321H4、数据处理..首先进行分组,以512位为一个单位,以单位来处理消息..首先定义4个辅助函数,以3个32为双字作为输入,输出一个32为双字F(X,Y,Z)=(X&Y)|((~X)&Z)G(X,Y,Z)=(X&Z)|(Y&(~Z))H(X,Y,Z)=X^Y^ZI(X,Y,Z)=Y^(X|(~Z))其中,^是异或操作这4轮变换是对进入主循环的512为消息分组的16个32位字分别进行如下操作:(重点)将A,B,C,D的副本a,b,c,d中的3个经F,G,H,I运算后的结果与第四个相加,再加上32位字和一个32位字的加法常数(所用的加法常数由这样一张表T[i]定义,期中i为1至64之中的值,T[i]等于4294967296乘以abs(sin(i))所得结果的整数部分)(什么是加法常数),并将所得之值循环左移若干位(若干位是随机的??),最后将所得结果加上a,b,c,d之一(这个之一也是随机的?)(一轮运算中这个之一是有规律的递增的..如下运算式),并回送至A,B,C,D,由此完成一次循环。
【C#集合】Hash哈希函数散列函数摘要算法希函数定义哈希函数(英語:Hash function)⼜称散列函数、散列函数、摘要算法、单向散列函数。
散列函数把消息或数据压缩成摘要,使得数据量变⼩,将数据的格式固定下来。
该将数据打乱混合,重新创建⼀个(哈希函数返回的值)称为指纹、哈希值、哈希代码、摘要或散列值(hash values,hash codes,hash sums,或hashes)的指纹。
散列值通常⽤⼀个短的随机字母和数字组成的字符串来代表。
好的散列函数在输⼊域中很少出现。
完美哈希函数就是指没有冲突的哈希函数。
如今,散列算法也被⽤来加密存在数据库中的(password)字符串,由于散列算法所计算出来的散列值(Hash Value)具有不可逆(⽆法逆向演算回原本的数值)的性质,因此可有效的保护密码。
使⽤哈希函数为哈希表编制索引称为哈希或分散存储寻址。
单向散列函数(one-wayhash function),也就是通俗叫的哈希函数。
第⼀个特点:输⼊可以任意长度,输出是固定长度第⼆个特点:计算hash值的速度⽐较快第三个特点,冲突特性(Collision resistance):找出任意两个不同的输⼊值 x、y,使得 H (x)= H (y)是困难的。
(这⾥称为「困难」的原因,是消息空间是⽆穷的,⽽是有限的,因此⼀定会存在碰撞,只是对寻找碰撞的算⼒需要有难度上的约束以哈希函数SHAI (输出为 160-bit)为例:其输出空间为(0,2^160),假设输出范围⼀万亿个哈希值,发⽣碰撞的概率仅为 3×10-25。
被碰撞的概率太低,⼏乎不可能。
第四个特点:隐藏性(Hiding)或者叫做单向性(one-way):哈希函数的单向性意味着,给定⼀个哈希值,我们⽆法(很难)逆向计算出其原像输⼊。
第五点:谜题友好(puzzlefriendly)HashTable定义哈希表时保存数据的表。
通过哈希函数使得数据和存储位置之间建⽴⼀⼀对应的映射关系。
单向散列函数1. 单向散列函数 单向散列函数有⼀个输⼊和⼀个输出,输⼊的称为消息,输出的称为散列值。
可以获取消息的指纹,从⽽确定⽂件的“完整性”(或者叫⼀致性)。
输出的散列值长度是固定的。
2. 性质 根据任意长度的消息,计算出固定长度的散列值。
能够快速计算出散列值,且具备单向性。
抗碰撞性:消息不同,散列值也不同,难以发现碰撞性。
3. 术语 单向散列函数也称为摘要函数,哈希函数和杂凑函数。
4. 实际应⽤ 检测软件是否被篡改。
⽤于基于⼝令的加密。
使⽤单向散列函数可以构造消息认证码——共享密钥和消息混合后计算散列值。
进⾏数字签名时也会使⽤单向散列函数——对消息散列,对散列值进⾏数字签名。
伪随机数⽣成器。
⼀次性⼝令。
5. 单向散列函数 MD4:能产⽣128⽐特的散列值,但Dobbertin提出了MD4散列碰撞⽅法,MD4不再安全。
MD5:能产⽣128⽐特的散列值,MD5的强抗碰撞性已经被攻破,MD5不再安全。
SHA-1:能产⽣160⽐特的散列值,SHA-1于2005年被攻破。
SHA-2:SHA-256 散列值长度256⽐特。
SHA-384 散列值长度384⽐特。
SHA-512 散列值长度512⽐特。
RIPEMD-160:160⽐特的散列值的单向散列函数,⽐特币中使⽤该散列函数。
SHA-3:SHA-1被攻破,Keccak算法被选为SHA-3算法。
6. Keccak——被选为SHA-3的算法 可以⽣成任意长度的散列值,为了兼容SHA-2,SHA-3,规定了SHA3-256,SHA3-224,SHA3-384和SHA3-512 4个版本。
采⽤了与SHA-2不同的结构,结构清晰,易于分析。
能适⽤与各种设备,也适⽤于嵌⼊式应⽤,在硬件上的实现显⽰出了很⾼的性能。
⽐其他候选算法安全性边际更⼤。
7. 散列算法的选择 MD-5:不安全,不应该再使⽤。
SHA-1:除了旧的运算,不应被⽤于新的⽤途。
散列函数及其应⽤散列函数 散列,英⽂Hash,也有直接⾳译为“哈希”的,就是把任意长度的输⼊(⼜叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是⼀种压缩映射,也就是,散列值的空间通常远⼩于输⼊的空间,不同的输⼊可能会散列成相同的输出,所以不可能从散列值来确定唯⼀的输⼊值。
简单的说就是⼀种将任意长度的消息压缩到某⼀固定长度的信息摘要的函数。
散列函数的应⽤ 在算法竞赛中,我所接触到的主要有字符串hash⽤于把字符串“索引”为⼀个值,然后对复杂字符串进⾏操作,来加快遍历速度,降低算法复杂度。
把字符串匹配转移到了值匹配。
但是散列函数属于⼀种“概率型算法”,对于模的取值有⼀定概率出现碰撞。
所以在算法竞赛中不常使⽤,或者要多次测验避免碰撞。
在信息安全⽅⾯的应⽤主要体现在以下的3个⽅⾯: 1)⽂件校验 我们⽐较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能⼒,它们⼀定程度上能检测并纠正数据传输中的信道误码,但却不能防⽌对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为⽬前应⽤最⼴泛的⼀种⽂件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名 Hash 算法也是现代密码体系中的⼀个重要组成部分。
由于⾮对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了⼀个重要的⾓⾊。
对 Hash 值,⼜称"数字摘要"进⾏数字签名,在统计上可以认为与对⽂件本⾝进⾏数字签名是等效的。
⽽且这样的协议还有其他的优点。
3)鉴权协议 如下的鉴权协议⼜被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是⼀种简单⽽安全的⽅法。
散列函数的安全性 两个不同的输⼊,经过哈希算法后,得到了同样的哈希值,就叫做哈希碰撞。
单向散列函数
单向散列函数是一种加密技术,它可以将任意长度的输入转换为固定长度的输出,不可逆。
单向散列函数具有四个重要特征:输入,输出,单向性和唯一性。
输入是指输入数据,可以是任意长度的数据,例如文本,文件,图像等。
输出是指经过加密处理后的数据,一般都是固定长度的。
单向性是指一旦输入,无法通过输出来推出输入,这就是单向散列函数的安全特征。
唯一性是指输入相同,输出也必须相同,但不同的输入不会产生相同的输出,这也是单向散列函数的安全特征。
单向散列函数在安全性方面具有重要意义,它可以用来加密和验证数据的完整性和安全性。
它可以用来保护数据的保密性,防止数据被篡改,也可以用来发现数据中的攻击行为。
单向散列函数的常用算法包括MD5,SHA-1,SHA-2等,它们具有不同的安全性和效率,用于不同的应用场景。
MD5速度快,但安全性较低,而SHA-1和SHA-2则兼具安全性和效率,可以满足不同程度的安全性要求。
单向散列函数是一种重要的加密技术,它可以提高数据的安全性和完整性,是保护数据安全的重要工具。
它可以用于加密和验证数据,也可以用来发现数据中的攻击行为,为数据安全提供强有力的保障。
单向散列函数简单散列函数每个分组按比特异或(简单奇偶校验):改进:针对可预测数据,每次循环左移一位将数据和散列值再异或。
结果:随机化、去格式化i i1i2imC b b ...b =⊕⊕⊕单向散列函数:Hash Function ,哈希函数、杂凑函数将任意长度的消息M 映射成一个固定长度散列值h 的函数:h=H(M)其中,h 的长度为m 。
用途:消息认证、数字签名。
单向散列函数散列函数要具有单向性,则必须满足如下特性:●给定M,很容易计算h,便于软硬件实现。
●给定h,根据H(M)=h反推M很难。
(单向性)●给定M,找到另一M’满足H(M)=H(M’)很难。
(弱抗攻击性)在某些应用中,单向散列函数还需要满足抗碰撞(Collision)的条件:要找到两个随机的消息M和M’,使H(M)=H(M’)满足很难。
(强抗攻击性)还要求:能产生定长输出;寻找任意的M和M’,会满足H(M)=H(M’)很难。
实现:单向散列函数是建立在压缩函数之上的:…MD 表示消息摘要(Message Digest),单向散列函数输入:给定一任意长度的消息输出:长为m 的散列值。
压缩函数的输入:消息分组和前一分组的输出(对第一个函数需初始化向量IV);输出:到该点的所有分组的散列,即分组M i 的散列为h i =f (M i , h i −1)循环:该散列值和下一轮的消息分组一起作为压缩函数下一轮的输入,最后一分组的散列就是整个消息的散列。
3.1 MD5 算法3.1.1 算法MD5对输入的任意长度消息产生128位散列值:填充位消息长度(K mod 264)…MD5算法五个步骤:1) 附加填充位2) 附加长度3) 初始化MD 缓冲区处理1) 附加填充位填充消息,使其长度为一个比512的倍数小64位的数。
填充方法:在消息后面填充一位1,然后填充所需数量的0。
填充位的位数从1~512。
2) 附加长度将原消息长度的64位表示附加在填充后的消息后面。