HASH函数

合集下载

什么是哈希函数

什么是哈希函数

什么是哈希函数哈希(Hash)函数在中文中有很多译名,有些人根据Hash的英文原意译为“散列函数”或“杂凑函数”,有些人干脆把它音译为“哈希函数”,还有些人根据Hash函数的功能译为“压缩函数”、“消息摘要函数”、“指纹函数”、“单向散列函数”等等。

1、Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值。

哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等。

Hash函数具备以下的性质:2、给定输入数据,很容易计算出它的哈希值;3、反过来,给定哈希值,倒推出输入数据则很难,计算上不可行。

这就是哈希函数的单向性,在技术上称为抗原像攻击性;4、给定哈希值,想要找出能够产生同样的哈希值的两个不同的输入数据,(这种情况称为碰撞,Collision),这很难,计算上不可行,在技术上称为抗碰撞攻击性;5、哈希值不表达任何关于输入数据的信息。

哈希函数在实际中有多种应用,在信息安全领域中更受到重视。

从哈希函数的特性,我们不难想象,我们可以在某些场合下,让哈希值来“代表”信息本身。

例如,检验哈希值是否发生改变,借以判断信息本身是否发生了改变。

`怎样构建数字签名好了,有了Hash函数,我们可以来构建真正实用的数字签名了。

发信者在发信前使用哈希算法求出待发信息的数字摘要,然后用私钥对这个数字摘要,而不是待发信息本身,进行加密而形成一段信息,这段信息称为数字签名。

发信时将这个数字签名信息附在待发信息后面,一起发送过去。

收信者收到信息后,一方面用发信者的公钥对数字签名解密,得到一个摘要H;另一方面把收到的信息本身用哈希算法求出另一个摘要H’,再把H和H’相比较,看看两者是否相同。

根据哈希函数的特性,我们可以让简短的摘要来“代表”信息本身,如果两个摘要H和H’完全符合,证明信息是完整的;如果不符合,就说明信息被人篡改了。

Hash函数

Hash函数

(Rivest ‚‘90)
RIPEMD-0
(RIPE, ‘92)
RIPEMD-128
RIPEMD-160
RIPEMD-256
RIPEMD-320
(Dobbertin, Bosselaers,
Preneel ‘96)
32
MD5
HAVAL
(Rivest ‚‘92)
(Zhens, ensure US/Allied freedom of action in cyberspace and deny the
same to our adversaries."
5
Hash函数的基本属性

压缩性
➢ 应用于任意大小的数据块,产生定长的输出

有效性
➢ 对任意给定的消息x,计算h(x)是容易的

19
练习

生日攻击的估计值与准确值
当15 m 30时,比较1 e
20

m2
2365
m1
i
与1 (1
)
365
i 1
Hash函数的主要构造方法
基于数学困难问题
基于分组密码

➢ 杂凑值等于分组长度
➢ 杂凑值大于分组长度:MDC-2, MDC-4等

定制Hash函数
➢ MD4,
[101]
[102]
[103]
2156.6
2009
[30]
杂凑函数的碰撞攻击

国内外Hash函数研究进展比较
碰撞攻击
269
261
2005
2006
[87]
[104]
48轮原像攻击
2159.3

HASH函数简介

HASH函数简介

② 弱单向性:已知x,找出x’ (x’ ≠x),使得 h(x’ )= h(x) 在计算上是不可行的,满足这一 性质的单向散列函数称为弱单向散列函数。
Hash函数的安全性
问题 碰撞
实例:Hash函数h:X → Y
找出:x,x’∈X使得x’ ≠x,并且h(x’ )= h(x) ③ 强单向性:找出任意两个不同的输入x,x’ 使得h(x’ )= h(x)在计算上是不可行的,满足 这一性质的单向散列函数,则称其为强单向 散列函数
它适用在32位字长的处理器上用高速软件实 现--它是基于 3ash算法:
MD5:1992年4月Ron Rivest公布的MD4的改 进RFC 1321称为MD5 它对输入仍以512位分组,其输出是4个32位 字的级联,与 MD4 相同。MD5比MD4来得 复杂,并且速度较之要慢一点,但更安全, 在抗分析和抗差分方面表现更好。
Hash算法
从密码分析的角度来看,MD5被认为是易受 攻击的 2004年山东大学王小云教授破译了MD5, 采用”比特追踪法”(模差分方法)可以很 快的找到一个碰撞。而且这种攻击已经部 分的可实用化,即找到有意义的碰撞。
Hash算法
著名的Hash算法:
SHA1:安全杂凑算法(secure hash algorithm,
Hash函数
Hash函数
在实际的通信保密中,除了要求实现数 据的保密性之外,对传输数据安全性的 另一个基本要求是保证数据的完整性。 密码学中的Hash函数可为数据完整性提 供保障
数据的完整性是指数据从 发送方产生后,经过传输 或存储以后,未被以未授 权的方式修改的性质。
Hash函数
Hash函数通用来构造数据的短“指纹”(函 数值);一旦数据改变,指纹就不再正确。 即使数据被存储在不安全的地方,通过重新 计算数据的指纹并验证指纹是否改变,就能 够检测数据的完整性。

第17讲 Hash 函数.

第17讲 Hash 函数.

Hash函数的安全性
生日攻击法
分别把消息m和M表示成r和R个变形的消息
Hash函数的安全性
生日攻击法
计算真消息m的变形与假消息M的变形发生碰撞的 概率 由于n比特长的散列值共有2n个,所以对于给定m 的变形mi和M的变形Mj,mi与Mj不碰撞的概率是 1-1/2n。由于M共有R个变形,所以M的全部变形 都不与mi碰撞的概率是:
1 2 k 1 1 1 ...1 . 365 365 365
k人中至少有2人生日相同的概率为: 1 2 k 1 P(365, k ) 1 1 1 ...1 . 365 365 365
有P(365,23)=0.5073。即在23个人中,至少有两 个人生日相同的概率大于0.5,这个数字比人们 直观猜测的结果小得多,因而称为生日悖论。
Hash函数的安全性
生日攻击法 生日悖论原理可以用于构造对Hash函数 的攻击
设Hash函数值有n个比特,m是真消息,M 是伪造的假消息,分别把消息m和M表示成r 和R个变形的消息。消息与其变形消息具有 不同的形式,但有相同的含义。将消息表示 成变形消息的方法很多,例如增加空格、使 用缩写、使用意义相同的单词、去掉不必要 的单词等。
第8章 Hash 函数
Hash函数定义
数据安全 机密性 完整性 认证性 密码技术主要保证数据的机密性 Hash函数能保证数据的完整性和认证性
Hash函数定义
Hash函数常用来构造数据的短“指纹”:消息的 发送者使用所有的消息产生一个附件也就是短 “指纹”,并将该短“指纹”与消息一起传输给 接收者。 即使数据存储在不安全的地方,接收者重新计算 数据的指纹,并验证指纹是否改变,就能够检测 数据的完整性。这是因为一旦数据在中途被破坏, 或改变,短指纹就不再正确。

c语言hash用法

c语言hash用法

C语言Hash用法什么是Hash函数在计算机科学中,Hash函数是一种将数据映射到固定大小值的函数。

Hash函数将输入数据(也称为键)映射到一个较小的固定大小的值(也称为哈希值或散列值)。

这个哈希值通常用于快速查找数据结构中的键,例如哈希表。

Hash函数的输出被称为哈希码或散列码。

Hash函数的设计要求是保证输入数据相同,输出的哈希值也相同,而输入数据不同,输出的哈希值也不同。

此外,好的Hash函数应该尽量避免碰撞,即不同的输入数据映射到相同的哈希值。

C语言中的Hash函数在C语言中,没有内置的Hash函数,但我们可以使用一些常见的算法来实现自己的Hash函数。

以下是一些常用的Hash函数算法:1. 直接寻址法直接寻址法是最简单的Hash函数实现方法之一。

它将键直接用作哈希值,即哈希值等于键本身。

这种方法适用于键与哈希表大小相等的情况,但在键的范围很大时不太实用。

unsigned int direct_addressing_hash(int key) {return key;}2. 数字分析法数字分析法是一种根据键的某些特定数字特征来计算哈希值的方法。

例如,如果键是一个电话号码,我们可以用电话号码的前几位数字作为哈希值。

unsigned int digit_analysis_hash(int key) {// 获取键的前几位数字unsigned int hash = 0;while (key > 0) {hash = key % 10;key /= 10;}return hash;}3. 除留余数法除留余数法是一种常用的Hash函数实现方法。

它将键除以哈希表的大小,然后取余数作为哈希值。

unsigned int division_remainder_hash(int key, unsigned int table_size) { return key % table_size;}4. 平方取中法平方取中法是一种将键的平方值的中间几位作为哈希值的方法。

武汉大学《密码学》课件第十三讲 HASH函数

武汉大学《密码学》课件第十三讲 HASH函数
z 目的:
与AES配套 增强安全性
z 与SHA-1比较:
结构相同 逻辑函数相同 摸算术相同
27
三、SHA-2 HASH函数
1、 SHA-2的概况
SHA参数比较
Hash码长度 消息长度 分组长度 字长度 迭代步骤数 安全性
SHA-1 160 <264 512 32 80 80
SHA-256 256 <264 512 32 64 128
SHA-384 384 <2128 1024 64 80 192
SHA-512 512 <2128 1024 64 80 256
注:1、所有的长度以比特为单位。
2、安全性是指对输出长度为n比特hash函数的生日攻击产生碰撞的工作量大约为2n/2

28
三、SHA-2 HASH函数
2、 SHA-512
注意:在① 、②步后,数据长度为1024的N倍。 将数据分成N块,每块1024位,进行迭代处理。
30
三、SHA-2 HASH函数
L位 消息
N×1024位
L 10…0 消息长度
1024位 M1
1024位 M2
1024位 MN
512位 IV F
+ H1 F
+ H2
z F块处理 z +为摸264加
⑹压缩函数
z 每轮对A,B,C,D,E进行20次迭代,四轮共80次迭代。 t为迭代次数编号,所以 0≤t≤79 。
z 其中,ft(B,C,D) = 第t步使用的基本逻辑函数; <<s 表示 32位的变量循环左移s位 W t表示从当前分组BLK导出的32位的字 K t表示加法常量,共使用4个不同的加法常量 +为 模232加法

Hash函数

Hash函数

第3轮 以 [ABCD k s i]表示如下操作 A = B + ((A + H(B,C,D) + X[k] + T[i]) <<< s). Do the following 16 operations. [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
3、强无碰撞hash函数是单向的。 总之,Hash函数应该满足 1)由自变量求函数是容易的,反之是困难的。 2)寻找碰撞是困难的
四、Hash函数实例 MD5
MD:Merkle-Damgard结构 输入:任意长度的消息 输出:128位消息摘要 处理:以512位输入数据块为单位
L×512 bits=N ×32bits × K bits 报文
填充 (1 to 448 bits)
100…0
报文长度 (K mod 264)
512 bits
512 bits
512 bits
512 bits
Y0
512
Y1
512
Yq
512
YL-1
512
128
128 128 128
HMD5
IV CV1
HMD5
CVq
HMD5
CVL-1

哈希函数名词解释

哈希函数名词解释

哈希函数名词解释哈希函数(hash function)是解决密码学上的一个很有用的函数,它能将很多不同的信息结合成一个特征向量。

分组密码体制是数据加密和解密所采用的主要方法,是指把需要加密的文件分为若干组,每组给定一个加密密钥,对这些文件进行加密,其余部分对外宣称是无密文件。

这种方法安全性较高,但效率低下,因此,只在少数场合使用。

哈希函数也可用于对任意长度的数据块进行加密,例如,使用一个512位的字符数组,即可将信息长度扩展至32766位(1K字节),因而使用计算机中的哈希函数对任意大小的信息块都可以进行加密,不再受限于密码长度。

哈希函数的基本原理是:根据文件或数据块的特征,生成一个32位的特征向量(公钥),对该特征向量计算,得到两个32位的特征向量(私钥)。

这两个向量相减就是文件或数据块的密文,如果两个特征向量之和等于所要求的密文,那么这个文件或数据块就是被加密了的;否则就是未加密的。

当然,如果特征向量相减后的值不等于所要求的密文,则说明这个文件或数据块还没有被加密。

1.数据预处理方法。

一般分为三步进行:首先,计算数据的安全哈希值,称作SHA1(sha-1)值;其次,对哈希值和文件加密密钥进行比较,以确认哈希值的正确性;最后,用哈希值来加密数据,哈希值就是加密数据的公钥。

2.数据加密方法。

一般包括数据分组、密钥预处理、哈希函数三步:首先对分组数据进行加密;其次是对加密后的数据进行分组;第三步是选取一个具有足够密钥长度并且具有适当排列顺序的哈希函数对数据进行加密。

2.1.1.1.数据分组方法。

分组时,按哈希函数值的大小对分组后的数据块逐个编号,并且使用固定的哈希函数值,作为下一轮分组和计算哈希值的依据。

这样做,可以保证数据被加密的安全性和实现简单。

2.1.2.1.密钥预处理方法。

密钥预处理时,要按哈希函数值从大到小的顺序进行,先对大的密钥执行密钥变换,再将小密钥插入到大的密钥中去。

同时,由于密钥预处理使用了小密钥,为提高哈希值计算速度,要尽量降低小密钥长度,常用的密钥变换有“距离变换”和“数据变换”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

密码学(第十三讲)HASH函数张焕国武汉大学计算机学院目录密码学的基本概念1、密码学2、古典、古典密码3、数据加密标准()DES)、数据加密标准(DES4、高级)AES)数据加密标准(AES高级数据加密标准(5、中国商用密码()SMS4)、中国商用密码(SMS46、分组密码的应用技术7、序列密码8、习题课:复习对称密码、公开密钥密码(11)9、公开密钥密码(目录公开密钥密码(22)1010、11、数字签名(1)12、数字签名(2)13、、HASH函数131414、15、15PKI技术1616、、PKI17、习题课:复习公钥密码18、总复习一、HASH 函数函数的概念的概念1、Hash Hash的作用的作用•Hash Hash码也称报文摘要码也称报文摘要。

•它具有极强的错误检测能力错误检测能力。

•用Hash Hash码作码作MAC ,可用于认证认证。

•用Hash Hash码辅助码辅助数字签名数字签名。

•Hash Hash函数可用于函数可用于保密保密。

一、HASH 函数的概念2、Hash Hash函数的定义函数的定义①Hash Hash函数将任意长的数据函数将任意长的数据M 变换为定长的码h ,记为记为::h=HASH(M)h=HASH(M)或或h=H(M)h=H(M)。

②实用性:对于给定的数据对于给定的数据M M ,计算,计算h=HASH(M)h=HASH(M)是是高效的。

③安全性安全性::•单向性:对给定的对给定的Hash Hash值值h ,找到满足H(x)H(x)==h 的x 在计算上是不可行的计算上是不可行的。

否则否则,,设传送数据为设传送数据为C=C=<<M ,H(M||K )>,K 是密钥。

攻击者可以截获攻击者可以截获C,C,求出求出Hash 函数的逆函数的逆,,从而得出M||S =H -1(C),然后从M 和M ||K即可即可得出得出K。

一、HASH 函数的概念2、Hash Hash函数的定义函数的定义③安全性安全性::•抗弱碰撞性:对任何给定的对任何给定的x x ,找到满足找到满足y≠x y≠x且H(x)=H(y)H(x)=H(y)的的y 在计算上是不可行的在计算上是不可行的。

否则否则,,攻击者可以截获报文M 及其Hash 函数值H(M),并找出另一报文M ′使得H(M ′)=H(M)。

这样攻击者可用M ′去冒充M ,而收方不能发现而收方不能发现。

•抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的在计算上是不可行的。

一、HASH 函数的概念3、安全安全Hash Hash函数的一般结构函数的一般结构•Merkle Merkle提出了安全提出了安全Hash Hash函数主处理的一般结构函数主处理的一般结构•对数据压缩对数据压缩,,产生产生Hash Hash码码。

b 位分组位分组,,f 为压缩函数,L 轮链接迭代,n 位输出位输出。

f f f M 0M L -1M 1b 位b 位b 位n 位n 位n 位n 位IV=CV 0CV 1CV L -1HASH 值CV L一、HASH 函数的概念3、安全安全Hash Hash函数的一般结构函数的一般结构•分组:将输入分为L -1个大小为b 位的分组位的分组。

•填充:若第L -1个分组不足b 位,则将其填充为b 位。

•附加:再附加上一个表示输入的总长度分组。

•共L 个大小为b 位的分组位的分组。

•由于输入中包含长度由于输入中包含长度,,所以攻击者必须找出具有相同Hash 值且长度相等的两条报文值且长度相等的两条报文,,或者找出两条长度不等但加入报文长度后Hash 值相同的报文的报文,,从而增加了攻击的难度。

•目前大多数Hash 函数均采用这种结构。

二、SHA SHA--1 HASH 函数1、SHA 系列系列Hash Hash函数函数•SHA 系列系列Hash Hash函数函数是由美国标准与技术研究所(NIST)设计的设计的。

•1993年公布了SHA SHA--0(FIPS PUB 180180)),后来发现它不安全安全。

•1995年又公布了SHA SHA--1(FIPS PUB 180180--1)。

•2002年又公布了SHA SHA--2(FIPS PUB 180180--2)。

SHA SHA--2包括3个Hash Hash函数:函数:SHA SHA--256,SHA SHA--384,SHA SHA--512•2005年王小云给出一种攻击SHA SHA--1的方法的方法,,用269操作找到一个碰撞找到一个碰撞,,以前认为是280。

•NIST 打算2010年废弃SHA SHA--1。

二、SHA SHA--1 HASH 函数1、SHA 系列系列Hash Hash函数函数•SHA SHA--1是在MD MD55的基础上发展起来的的基础上发展起来的。

它采用Merkle Merkle提出了安全提出了安全Hash Hash结构结构。

已被美国政府和许多国际组织采纳作为标准。

•SHA SHA--1的输入为长度小于264位的报文,输出为160位的报文摘要,该算法对输入按512位进行分组位进行分组,,并以分组为单位进行处理处理。

2、SHA SHA--1的结构•采用采用Merkle Merkle提出了安全提出了安全Hash Hash结构结构输入填充初始化缓冲区主处理160位HASH 值二、SHA SHA--1 HASH 函数输出报文长度< 2643、运算算法⑴输入输入填充填充•目的是使填充后的报文长度满足目的是使填充后的报文长度满足::长度=448mod 512。

①填充方法是在报文后附加一个一个11和若干个和若干个00。

②然后附上表示填充前报文长度的64位数据(最高有效位在前)。

•若报文本身已经满足上述长度要求若报文本身已经满足上述长度要求,,仍然需要进行填充(例如例如,,若报文长度为若报文长度为448448位位,则仍需要填充则仍需要填充512512位位使其长度为使其长度为960960位位),因此填充位数在因此填充位数在11到512512之间之间。

二、SHA SHA--1 HASH 函数3、运算算法⑵初始化缓冲区•缓冲区由5个32位的寄存器(A ,B ,C ,D ,E )组成组成,,用于保存160位的中间结果和最终结果位的中间结果和最终结果。

•将寄存器初始化为下列32位的整数:A :67452301B :EFCDAB EFCDAB8989C :9898BADCFE BADCFE D :10325476E :C 3D 2E 1F 0注意:高有效位存于低地址注意:高有效位存于低地址。

二、SHA SHA--1 HASH 函数3、运算算法⑶主处理•主处理是SHA SHA--1HASH 函数的核心函数的核心。

•每次处理一个512位的分组,循环次数为填充后报文的分组数L 。

二、SHA SHA--1 HASH 函数3、运算算法⑶主处理•主处理的结构:f 为SHA SHA--1的压缩函数的压缩函数。

f ffBLK 0BLK L -1BLK 1512位512位512位160位160位160位160位IV=CV 0CV 1CV L -1HASH 值二、SHA SHA--1 HASH 函数CV L3、运算算法⑶主处理•压缩函数是主处理的核心压缩函数是主处理的核心。

•它由四层运算它由四层运算((每层20步迭代步迭代))组成组成,,四层的运算结构相同构相同。

•每轮的输入是当前要处理的512位的分组BLK 和160位缓冲区ABCDE 的内容的内容,,每层都对ABCDE 的内容更新的内容更新,,而且每轮使用的逻辑函数不同而且每轮使用的逻辑函数不同,,分别为f 1,f 2,f 3和f 4。

•第四层的输出与第一层的输入相加得到压缩函数的输出。

二、SHA SHA--1 HASH 函数二、SHA SHA--1 HASH 函数第一轮使用函数f 1第二轮使用函数f 2第三轮使用函数f 3第四轮使用函数f 4A B CD E A B CD E A B CD E A B CD E +++++CV i 160位BLK i 160位512位Cv i+1Cv i20步迭代20步迭代20步迭代20步迭代3、运算算法⑷输出•所有的L 个512位的分组处理完后,第L 个分组的输出即是160位的报文摘要位的报文摘要。

二、SHA SHA--1 HASH 函数3、运算算法⑸归纳•CV 0=IV (ABCDE 的初值的初值))•CV i+i+11=CV i0≤i ≤L -1CV i+i+11(0)=CV i (0)+A iCV i+i+11(1)=CV i (1)+B iCV i+i+11(2)=CV i (2)+C i CV i+i+11(3)=CV i (3)+D i CV i+i+11(4)=CV i (4)+E iz h =CV L二、SHA SHA--1 HASH 函数+ 为模232加法3、运算算法⑹压缩函数缺点:输出B=输入A输出D=输入C 输出E=输入DA 、C 、D 没有运算二、SHA SHA--1 HASH 函数ABC DE A B C D E++++f t <<5<<30W t K t3、运算算法⑹压缩函数•每步具有下述形式:A,B,C,D,E ←(E+f t (B,C,D)+(A<<(B,C,D)+(A<<55)+W t +K t ),A,(B<<),A,(B<<3030),C,D ),C,D •每轮对A,B,C,D,E 进行20次迭代次迭代,,四轮共80次迭代次迭代。

t 为迭代次数编号为迭代次数编号,,所以0≤t ≤79。

•其中其中,,f t (B,C,D)=第t 步使用的基本逻辑函数;<<s =32位的变量循环左移s 位W t =从当前分组BLK 导出的32位的字K t =加法常量加法常量,,共使用4个不同的加法常量个不同的加法常量。

+为模232加法二、SHA SHA--1 HASH 函数3、运算算法⑹压缩函数•逻辑函数f t每层使用一个逻辑函数每层使用一个逻辑函数,,其输入均为B,C,D(每个32位),输出为一个32位的字位的字。

定义分别为:第一层0≤t ≤19f 1=f t (B,C,D)=(B ∧C)∨(¬B ∧D)第二层20≤t ≤39f 2=f t (B,C,D)=B ⊕C ⊕D第三层40≤t ≤59f 3=f t (B,C,D)=(B ∧C)∨(B ∧D) ∨(C ∧D)第三层60≤t ≤79f 4=f t (B,C,D)=B ⊕C ⊕D•缺点:f 2和f 4都是线性函数。

二、SHA SHA--1 HASH 函数3、运算算法⑹压缩函数•加法常量K t每层使用一个加法常量每层使用一个加法常量。

相关文档
最新文档