当前位置:文档之家› 921281-信息系统安全与对抗实践-14. 现代密码与散列函数

921281-信息系统安全与对抗实践-14. 现代密码与散列函数

信息系统安全与对抗实践

现代密码与散列函数

内容提要

现代密码体系

?古典密码:数据的安全基于算法的保密

?现代密码:数据的安全基于密钥,算法公开

?“加密算法应建立在算法公开不影响明文和密钥安全的基础上”

——Kerchoffs

3

现代密码-散列(HASH)函数

?Hash函数又成为散列函数,不特指某一个算法,而是一种将任意长度的消息压缩到某一固定长度的消息摘要算法的总称。

?缺点:

?Hash函数实质是一种压缩映射(多对一映射),散列值的空间(密文空间)远小于输入的空间(明文空间),不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。

?优点:

?1.散列函数对于源数据的更改具有极高的敏感性-雪崩效应,即使是1bit的更改都会对最终的散列值造成很大的改变。

?2.散列函数逆向计算的难度远大于正向计算的难度,具有较高的安全性。

4

现代密码-散列(HASH)函数

?MD(Message Digest)算法家族

?MD算法家族由罗纳德·李维斯特(Ronald L.Rivest)设计,有MD2(1989)、MD4(1990)和MD5(1991)三个版本,前两个版本由于存在严重的安全漏洞现在已经被弃用。

?MD5目前主要的用途:

-1.一致性验证

-2.数字签名

-3.安全访问认证

-……

5

现代密码-散列(HASH)函数

?一致性验证

?MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。

?比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

?MD5 (test.tar.gz)= 38b8c2c1093dd0fec383a9d9ac940515

6

现代密码-散列(HASH)函数

?数字签名

?MD5以及其他散列算法在数字签名中的应用常伴随着非对称加密算法。

?简单来说数字签名就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

7

现代密码-散列(HASH)函数

?安全访问认证

?MD5广泛用于操作系统的登陆认证,如Unix、各类BSD系统的登陆密码。?创建密码流程:

-输入密码->对密码进行MD5->储存密码的MD5值

?验证密码流程:

-输入密码->对密码进行MD5->对比储存的MD5值

?为什么要“多此一举”?

8

现代密码-散列(HASH)函数

?通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。

?目前互联网上几乎所有的密码都采取类似的散列值储存方法,通过这种方法可以防止密码泄露。攻击者拿到储存有散列值的密码数据库,也需要遍历出哈希值对应的原密码(计算量很大)。

?例子:网站点选忘记密码,通过验证后一般是重设密码而不是将原密码给出来,原因是该网站只存有密码的散列值

9

现代密码-散列(HASH)函数

?SHA(Secure Hash Algorithm)家族,是一个密码散列函数家族,类似于MD5能够计算出一个数字消息所对应的,长度固定的字符串(又称消息摘要)的算法。

?SHA家族算法,由美国国家安全局(NSA)设计,并且由美国国家标准与技术研究院(NIST)发布,是美国国家哈希函数标准。

10

现代密码-散列(HASH)函数

?SHA-0:1993年发布,当时称做安全散列标准(Secure Hash Standard),由于存在设计缺陷,发布之后很快就被NSA撤回,是SHA-1的前身。

?SHA-1:1995年发布,SHA-1在许多安全协议中广为使用,曾被视为是MD5的后继者。但SHA-1的安全性在2000年以后已经不被大多数的加密场景所接受。2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1。

11

现代密码-散列(HASH)函数

?SHA函数家族的应用领域:

?主要用于SSL\TTL等证书数字签名,用于可信第三方签发身份验证信息

?目前SHA-1已经停止使用,包括Facebook、Google等主流互联网服务提供商均在2017年前全部停止签发SHA-1证书。主流为SHA-2,SHA-3尚未推广使用

12

现代密码-散列(HASH)函数

?中国国家标准密码体系:

?SM1为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

?SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC256位(SM2采用的就是ECC256位的一种)安全强度比RSA2048位高,但运算速度快于RSA。

?SM3消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。

?SM4无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。该算法已公开。

13

单向散列函数算法Hash算法

单向散列函数算法(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=7654321H 4、数据处理..首先进行分组,以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^Z I(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,由此完成一次循环。(这个循环式对4个变量值进行计算还是对数据进行变换??) For i=0 to N/16 do For j=0 to 15 do Set X[i] to M[i*16+j] End AA = A BB=B CC=C DD=D //第一轮,令[ABCD K S I]表示下面的操作: //A=B+((A+F(B,C,D)+X[K]+T[I])<<

哈希算法散列

计算机算法领域 基本知识 Hash,一般翻译做“散列”,也有直接音译为”哈希“的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系 基本概念 * 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。 * 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。 * 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。 常用的构造散列函数的方法 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位ǐ 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a?key + b,其中a和b为常数(这种散列函数叫做自身函数) 2. 数字分析法 3. 平方取中法 4. 折叠法 5. 随机数法 6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。 处理冲突的方法 1. 开放寻址法;Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法: 1. di=1,2,3,…, m-1,称线性探测再散列; 2. di=1^2, (-1)^2, 2^2,(-2)^2, (3)^2, …, ±(k)^2,(k<=m/2)称二次探测再散列;

单向杂凑函数解读

第 6 章單向雜湊函數 密碼學上的雜湊函數(Cryptographic Hash Function),為一種可以將任意長本文由【中文word文档库】https://www.doczj.com/doc/d910436541.html,搜集整理。中文word文档库免费提供海量教学资料、行业资料、范文模板、应用文书、考试学习和社会 经济等word文档 度的輸入訊息加以濃縮、轉換,成為一相當短的固定長度輸出訊息的函數,此一輸出訊息一般稱為文件摘要(Message Digest)或雜湊值(Hash Value)。 設計或使用雜湊函數於密碼學系統上的主因是因為利用公開金鑰密碼系統簽章時,因其運算速度較慢,若對整份文件加以簽章則效率不彰。因此加以變通,使用由該文件經過雜湊函數運算所產生之長度較短,但足以區別該文件的文件摘要(Message Digest),或稱文件的數位指紋(Digital Fingerprint),來加以簽章,取代原先對整份文件簽章的方式,以加速數位簽章的應用。 雜湊函數與加密演算法一樣,均是將訊息加以隱藏。但其不同點在於加密演算法的結果可以藉由適當的方式加以還原,而雜湊函數則必須具單向與不可逆(One-Way)的特性。因此使得給定文件時,順向計算該文件的雜湊值相單簡單快速,但經過雜湊函數濃縮、運算後的文件摘要,無法反向還原成先前的訊息。 密碼學中所使用的單向雜湊函數(One-Way Hash Function)必須具備以下兩個特性: 1.當給定一特定的雜湊輸出值後,欲找出任何文件可以輸出此一特定 的雜湊值,為計算上的不可行,此為抗拒事先描繪的特性(Preimage Resistance)。 2.即使給定一份文件及其雜湊值後,找出第二份文件可以輸出此一特

习题题5-1Hash函数答案说明

题5.1 a.分离链接法:将散列到同一个值的所有元素保留到一个链表中。 1)首先插入4371,h(4371)=4371(mod 10)=1,故插入1位置。 2)插入1323,h(1323)=1323(mod 10)=3,故插入3位置。 3)插入6173,h(6173)=6173(mod 10)=3,故插入3位置,此时发生冲突(与1323 插入同一位置),故添加一个链表并保存到此链表中。 4)插入4199,h(4199)=4199(mod 10)=9,故插入9位置。 5)插入4344,h(4344)=4344(mod 10)=4,故插入4位置。 6)插入9679,h(9679)=9679(mod 10)=9,故插入9位置,此时发生冲突(与4199 插入同一位置),故添加一个链表并保存到此链表中。 7)插入1989,h(1989)=1989(mod 10)=9,故插入9位置,此时发生冲突(与4199, 9679插入同一位置),故添加一个链表并保存到此链表中。 b.线性探测:hi(x)=(hash(x)+f(i))mod TableSize,其中f(i)=i,i为发 生冲突的次数,f(0)=0。相当于逐个探测散列表,最后将值散列

到最接近的一个空单元中(可以理解为,若发生冲突,则插入到下一个空单元中)。 1)首先插入4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插入1位置。 2)插入1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插入3位置。 3)插入6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插入3位置,此时发 生冲突(与1323插入同一位置)。 发生第一次冲突,计算h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插入4位置。 4)插入4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插入9位置。 5)插入4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插入4位置,此时发 生冲突(与6173。插入同一位置)。 发生第一次冲突计算h1(4344)=(4344(mod 10)+f(1))mod 10=5,故插入5位置。 6)插入9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插入9位置,此时发 生冲突(与4199插入同一位置)。 发生第一次冲突计算h1(9679)=(9679(mod 10)+f(1))mod 10=0,故插入0位置。 7)插入1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插入9位置,此时发

散列函数

散列函数 又称hash函数,Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,密钥加密等. 一个安全的杂凑函数应该至少满足以下几个条件: ①输入长度是任意的; ②输出长度是固定的,根据目前的计算技术应至少取128bits长,以便抵抗生日攻击; ③对每一个给定的输入,计算输出即杂凑值是很容易的 ④给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值是计算上不可行的。 Hash函数主要用于完整性校验和提高数字签名的有效性,目前已有很多方案。这些算法都是伪随机函数,任何杂凑值都是等可能的。输出并不以可辨别的方式依赖于输入;在任何输入串中单个比特的变化,将会导致输出比特串中大约一半的比特发生变化。 常见散列函数(Hash函数) ·MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个12 8位的数值; ·SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值; ·MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。 ·CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。 讨论几种散列函数。在以下的讨论中,我们假设处理的是值为整型的关键码,否则我们总可以建立一种关键码与正整数之间的一一对应关系,从而把该关键码的检索转化为对与其对应的正整数的检索;同时,进一步假定散列函数的值落在0到M-1之间。散列函数的选取原则是:运算尽可能简单;函数的值域必须在散列表的范围内;尽可能使得结点均匀分布,也就是尽量让不同的关键码具有不同的散列函数值。需要考虑各种因素:关键码长度、散列表大小、关键码分布情况、记录的检索频率等等。下面我们介绍几种常用的散列函数。 1、除余法

什么是哈希函数

什么是哈希函数 哈希(Hash)函数在中文中有很多译名,有些人根据Hash的英文原意译为“散列函数”或“杂凑函数”,有些人干脆把它音译为“哈希函数”,还有些人根据Hash函数的功能译为“压缩函数”、“消息摘要函数”、“指纹函数”、“单向散列函数”等等。 1、Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值。哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等。Hash函数具备以下的性质: 2、给定输入数据,很容易计算出它的哈希值; 3、反过来,给定哈希值,倒推出输入数据则很难,计算上不可行。这就是哈希函数的单向性,在技术上称为抗原像攻击性; 4、给定哈希值,想要找出能够产生同样的哈希值的两个不同的输入数据,(这种情况称为碰撞,Collision),这很难,计算上不可行,在技术上称为抗碰撞攻击性; 5、哈希值不表达任何关于输入数据的信息。 哈希函数在实际中有多种应用,在信息安全领域中更受到重视。从哈希函数的特性,我们不难想象,我们可以在某些场合下,让哈希值来“代表”信息本身。例如,检验哈希值是否发生改变,借以判断信息本身是否发生了改变。` 怎样构建数字签名 好了,有了Hash函数,我们可以来构建真正实用的数字签名了。 发信者在发信前使用哈希算法求出待发信息的数字摘要,然后用私钥对这个数字摘要,而不是待发信息本身,进行加密而形成一段信息,这段信息称为数字签名。发信时将这个数字签名信息附在待发信息后面,一起发送过去。收信者收到信息后,一方面用发信者的公钥对数字签名解密,得到一个摘要H;另一方面把收到的信息本身用哈希算法求出另一个摘要H’,再把H和H’相比较,看看两者是否相同。根据哈希函数的特性,我们可以让简短的摘要来“代表”信息本身,如果两个摘要H和H’完全符合,证明信息是完整的;如果不符合,就说明信息被人篡改了。 数字签名也可以用在非通信,即离线的场合,同样具有以上功能和特性。 由于摘要一般只有128位或160位比特,比信息本身要短许多倍,USB Key或IC卡中的微处理器对摘要进行加密就变得很容易,数字签名的过程一般在一秒钟内即可完成。

SHA-1(安全哈希算法实现)

SHA-1(安全哈希算法实现) 如题,不知道sha-1的自己百度吧。 1 #include 2 #include //定义vector数组 3 #include //记录消息 4usingnamespace std; 5 6constint NUM = 8; //一个字由32比特(或者8个16进制数) 7constint BIT = 512; //消息认证码要以512比特一组 8 9//字常量 10string H0 = "67452301"; 11string H1 = "EFCDAB89"; 12string H2 = "98BADCFE"; 13string H3 = "10325476"; 14string H4 = "C3D2E1F0"; 15 16//定义SHA1(安全哈希算法)类 17class SHA1 18 { 19public: 20//将一个字符串形式的字转化为vector数组 21 vector hex_into_dec(string word); 22 23//将vector转化为string字符串形式 24string num_into_message(vector A); 25 26//两个字X和Y的逻辑"和" 27 vector word_AND(vector A,vector B); 28 29//两个字X和Y的逻辑"或" 30 vector word_OR(vector A,vector B); 31 32//两个字X和Y的逻辑"异或" 33 vector word_XOR(vector A,vector B); 34 35//两个字X和Y的逻辑"补" 36 vector word_COMPLEMENT(vector A); 37 38//两个字X和Y的摸2^32整数加 39 vector word_ADD(vector A,vector B); 40

密码学作业CH11

201013210141 徐鹏志密码学作业11 1.消息认证是为了对付哪些类型的攻击? 答:伪装(假冒)篡改内容修改顺序修改时间(包括重放) 2.消息认证或数字签名方法有哪两层功能? 答:任何消息认证或数字签名机制基本分两步: 产生认证符(是一个用来认证消息的值)的函数; 将该函数作为原语使接收方可以验证消息真实性的认证协议。 3.产生消息认证有哪些方法? 答:用于消息认证的最常见的密码技术是消息认证码和安全散列函数 MAC是一种需要使用秘密钥的算法,以可变长度的消息和秘密钥作为输入,产生一个认证码。拥有秘密钥的接受方产生一个认证码来验证消息的完整性。 哈西函数将可变长度的消息映射为固定长度的哈西值,或叫消息摘要。对于消息认证来说,安全散列函数还必须以某种方式和秘密钥捆绑起来。 4.对称加密和错误控制码一起用于消息认证时,这两个函数必须以何种顺序执行? 答:先错误控制码后对称加密。

5.什么是消息认证码? 答:消息认证码,是用来保证数据完整性的一种工具,可以防止数据未经授权被篡改,用数学语言描述,是一个让双方共享的密钥k和消 (m),这个函数值就是一个息m作为输入函数,如果将函数记为mac k 认证标记。 6.消息认证码和散列函数之间的区别是什么? 答:消息认证码(MAC)依赖公开函数,密钥控制下对消息处理,生成定长认证标识,并加以认证。 散列函数:将任意长度的消息换为定长的消息摘要,并加以认证。 7.为提供消息认证,应以何种方式保证散列值的安全? 答:a.用对称密码对消息及附加在其后的散列码加密。 b.用对称密码仅对散列加密。 c.用公钥密码和发送方的密钥仅对散列加密。 d.若寄希望保证保密性有希望有数字签名,则先用发送方的密钥对散列码加密 e.该方法使用散列函数但不使用加密函数来进行消息认证。 f.如果对整个消息和散列码加密,则(e)中的方法可提供保密性。 8.为了攻击MAC算法必须要恢复密钥吗?

HASH函数

密码学 (第十三讲) HASH函数 张焕国 武汉大学计算机学院

目录 密码学的基本概念 1、密码学 2、古典 、古典密码 3、数据加密标准( ) DES) 、数据加密标准(DES 4、高级 ) AES) 数据加密标准(AES 高级数据加密标准( 5、中国商用密码( ) SMS4) 、中国商用密码(SMS4 6、分组密码的应用技术 7、序列密码 8、习题课:复习对称密码 、公开密钥密码(11) 9、公开密钥密码(

目录 公开密钥密码(22) 10 10、 11、数字签名(1) 12、数字签名(2) 13、 、HASH函数 13 14 14、 15、 15 PKI技术 16 16、 、PKI 17、习题课:复习公钥密码 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,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 二、性质 基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。但反过来不同的原始输入不一定能得到相同的散列值,即发生了碰撞。哈希函数的定义域无限,而值域有限,因此理论上来讲每个哈希函数都可以找到碰撞。 一个“优良”的hash函数f 应当满足以下三个条件: 任意y,找x,使得f(x)=y,非常困难。此为哈希函数的单向性,或抗原像性(preimage resistant)。 给定x1,找x2,使得f(x1)=f(x2),非常困难。弱抗碰撞性,或抗第二原像性(second preimage resistant)。 找x1,x2,使得f(x1)=f(x2),非常困难。强抗碰撞性(Collision Resistant)。 三、分类 哈希函数有字符串哈希函数,一般用于数据存储;安全哈希函数 安全哈希函数的分类: 根据安全水平: 弱抗碰撞哈希函数和强抗碰撞哈希函数,后者是包含前者的。 在保护口令的应用中,只需弱抗碰撞性就够了,但在数字签名中,必须有强抗碰撞性。

根据是否使用密钥: 带密钥的哈希函数:消息的散列值由只有通信双方知道的秘密密钥K来控制,此时散列值称作MAC(Message Authentication Code) 不带密钥的哈希函数:消息的散列值的产生无需使用密钥,此时散列值称作MDC(Message Detection Code 四、哈希函数的用途 数字签名 哈希函数可以提高签名的速度,减少运算,又可以不泄露签名所对应的消息,还可以将消息的签名与加密变换分开处理。 校验 可以校验数据是否被篡改。传输消息之前对消息进行哈希变换,接收者也进行相同的哈希变换,若两个哈希值相同,可以认为消息在传输过程中没有被篡改。 快速访问 散列表的寻址时间复杂度为O(1),在数据存储中运用较多,这里不作详述。 安全访问认证 MD5广泛用于操作系统的登陆认证上,如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。 伪随机数生成

密码学作业ch11

1.消息认证是为了对付哪些类型的攻击? 答:伪装(假冒)篡改内容修改顺序修改时间(包括重放) 2.消息认证或数字签名方法有哪两层功能? 答:任何消息认证或数字签名机制基本分两步: 产生认证符(是一个用来认证消息的值)的函数; 将该函数作为原语使接收方可以验证消息真实性的认证协议。 3.产生消息认证有哪些方法? 答:用于消息认证的最常见的密码技术是消息认证码和安全散列函数 MAC是一种需要使用秘密钥的算法,以可变长度的消息和秘密钥作为输入,产生一个认证码。拥有秘密钥的接受方产生一个认证码来验证消息的完整性。 哈西函数将可变长度的消息映射为固定长度的哈西值,或叫消息摘要。对于消息认证来说,安全散列函数还必须以某种方式和秘密钥捆绑起来。 4.对称加密和错误控制码一起用于消息认证时,这两个函数必须以何种顺序执行? 答:先错误控制码后对称加密。

5.什么是消息认证码? 答:消息认证码,是用来保证数据完整性的一种工具,可以防止数据未经授权被篡改,用数学语言描述,是一个让双方共享的密钥k和消 (m),这个函数值就是一个息m作为输入函数,如果将函数记为mac k 认证标记。 6.消息认证码和散列函数之间的区别是什么? 答:消息认证码(MAC)依赖公开函数,密钥控制下对消息处理,生成定长认证标识,并加以认证。 散列函数:将任意长度的消息换为定长的消息摘要,并加以认证。 7.为提供消息认证,应以何种方式保证散列值的安全? 答:a.用对称密码对消息及附加在其后的散列码加密。 b.用对称密码仅对散列加密。 c.用公钥密码和发送方的密钥仅对散列加密。 d.若寄希望保证保密性有希望有数字签名,则先用发送方的密钥对散列码加密 e.该方法使用散列函数但不使用加密函数来进行消息认证。 f.如果对整个消息和散列码加密,则(e)中的方法可提供保密性。 8.为了攻击MAC算法必须要恢复密钥吗? 答:不需要。

单向散列函数的原理_实现和在密码学中的应用

收稿日期:2001204228 基金项目:国家重点科技项目(攻关)计划资助课题(20002A312 01205) 单向散列函数的原理、实现和在密码学中的应用3 辛运帏,廖大春,卢桂章 (南开大学信息技术科学学院,天津300071) 摘 要:简要介绍了单向散列函数的有关理论及实现情况,并且以密码学中广泛应用的单向散列函数M D5 为例,详细介绍了它的原理和实现过程。最后简要介绍了单向散列函数在当前的应用,并且提出了一种利用单向散列函数实现的新的用户密钥管理方案。 关键词:单向散列函数;密码学;邮摘散列算法;M D5中图法分类号:TP309.3 文献标识码:A 文章编号:100123695(2002)022*******  The Principle and Implement of One 2way Hash Functions and Their Cryptographic Application XI 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 D5 1 单向散列函数简介 密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。单向散列函数又称为单向Hash 函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。它的模型为:h =H (M )。 其中,M 是待处理的明文,可以为任意长度;H 是单向散列函数,h 是生成的报文摘要,它具有固定的长度,并且和M 的长度无关。其中H 具有以下的单向性质:①给定H 和M ,很容易计算h ;②给定h 和H ,很难计算M ,甚至得不到M 的任何消息;③给定H ,要找两个不同的M 1和M 2,使得H (M 1)=H (M 2)在计算上是不可行的。 根据单向散列函数的安全水平,可以将单向散列函数分成两类:强碰撞自由的单向散列函数和弱碰撞自由的单向散列函数。上面描述的是强碰撞自由的单向散列函数的性质。如果将第③条改为:给定h 和一个已知的消息M ,找另外一个不同的消息M 1,使得h (M )=h (M 1)在计算上是不可行的,就叫做弱碰撞自由的单向散列函数。 显然强碰撞自由的单向散列函数比弱碰撞自由的单向散列函数安全性要高。因为弱碰撞自由的单向散列函数随着重复使用次数的增加安全性逐渐降低,强碰撞自由的单向散列函数则不会因其重复使用而降低安全性。因此在实际中要求使用强碰撞自由的单向散列函数。除此之外,在实际应用中还要求单向散列函数具有如下特点: (1)单向散列函数能够处理任意长度的明文(至少是在实际应用中可能碰到的长度的明文),其生成的消息摘要数据块长度具有固定的大小,而且,对同一个消息反复执行该函数总是得到相同的信息摘要。 (2)单向散列函数生成的信息摘要是不可预见的,消息摘要看起来和原始的数据没有任何的关系。而且,原始数据的任何微小变化都会对生成的信息摘要产生很大的影响。 (3)具有不可逆性,即通过生成的报文摘要得到原始数据的任何信息在计算上是完全不可行的。 单向散列函数在密码学中有着非常广泛的应用,它被广泛地应用于数字签名、消息的完整性鉴别、消息的起源认证等,另外也和各种密码算法一起构成混合密码系统。 2 实现综述 实现一个安全的单向散列函数并不是一件容易的事 ? 52?第2期辛运帏等:单向散列函数的原理、实现和在密码学中的应用

Hash函数在信息安全中的重要运用

封面

作者:PanHongliang 仅供个人学习 Hash函数在信息安全中的重要运用 学号:09008010124姓名:罗杨 摘要:随着计算机和Internet在各行各业的广泛应用,信息高速化的交互

传递过程中,信息安全问题备受关注。而基于hash函数的各种算法的产生和运用,为信息上一把牢固的安全之锁,md5、sha-1文件校验,加密存储,数字签名,PKI建设等对各种信息有充分的安全保障,能有效地防止攻击,保证真实信息不被修改或者泄露。 关键词:哈希 hash md5 数字签名 PKI 散列校验公钥私钥 一、定义 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做Hash值。 二、算法举例 1、MD4 MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32 位操作数的位操作来实现的。 MD4散列的例子: MD4 ("") = 31d6cfe0d16ae931b73c59d7e0c089c0 MD4 ("a") = bde52cb31de33e46245e05fbdbd6fb24 MD4 ("abc") = a448017aaf21d8525fc10ae87aa6729d MD4 ("message digest") = d9130a8164549fe818874806e1c7014b 2、MD5

密(研)11-密码学Hash函数

第11章 密码学Hash函数
Crytographic Hash Functions

课程内容大纲
1. 引言
第一部分:对称密码
2. 传统加密技术
第三部分:密码学数据完整性算法
11.密码学Hash函数
3. 分组密码与数据加密标准(DES) 12.消息认证码(MAC) 4. 数论与有限域的基本概念 13.数字签名 5. 高级加密标准(AES) 6. 分组密码的工作模式 7. 伪随机数的产生和流密码
第四部分:相互信任
14.密钥管理与分发 15.用户认证
第二部分:公钥密码
8. 数论入门 9. 公钥密码学与RSA 10. 密钥管理和其他公钥密码体制

讲课内容
11.1 密码学Hash函数的应用 11.2 两个简单的Hash函数 11.3 需求和安全性、安全Hash函数结构 11.4 基于分组密码链接的Hash函数 11.5 安全Hash算法(SHA) 补充:Hash函数MD5

11.1 密码学Hash函数的应用

Hash函数定义
? (单词"hash"的翻译:哈希、杂凑、散列、… ) ? Hash函数H是一公开函数,用于将任意长的消息 M映射为较短的、固定长度的一个值H(M)。称函 值H(M)为杂凑值、杂凑码或消息摘要 M → h = H(M)
? 在安全应用中使用的Hash函数称为密码学Hash 函数(cryptographic hash function)

实验散列函数实验

实验九散列函数实验 【实验思考】 参照实验原理,根据算法跟踪实验画出各个算法函数的主要流程图 思考各个散列算法的安全性和优缺点 【实验原理】 散列函数是一种单向密码,即是一个从明文到密文的不可逆映射,只有加密过程,不可解密;同时散列函数可以将任意长度的输入经过变换以后得到固定长度的输出。散列函数在完整性认证和数字签名等领域有广泛应用。 散列函数应满足以下要求: (1)算法公开,不需要密钥。 (2)具有数据压缩功能,可将任意长度的输入转换为固定长度的输出。 (3)已知m,容易计算出H(m)。 (4)给定消息散列值H(m),要计算出m在计算上是不可行的。 (5)对任意不同的输入m和n,它们的散列值是不能相同的。 一、MD5算法 MD5(Message-Digest Algorithm 5)即信息-摘要算法,是MD4算法的改进;算法的输入为任意长度的消息,分为512比特长的分组,输出为128比特的消息摘要。处理过程如下: (1)对消息进行填充,使其比特长度为n512+448(n为正整数),填充方式是固定的:第一 位为1,其后各位为0。 (2)附加消息长度,使用上一步骤留出的64比特以小端(最低有效字节/位存储于低地址字节 /位)方式来表示消息被填充前的长度,若消息长度大于264,则以264为模数取模。 (3)对消息摘要缓冲区初始化,算法使用128比特长的缓冲区来存储中间结果和最终散列值, 将缓冲区表示成4个32比特长的寄存器A、B、C、D,每个寄存器以小端方式存储数 据,初始值为(十六进制,低位字节在前)A=01234567,B=89ABCDEF,C=FEDCBA98, D=76543210。 (4)以分组为单位对消息进行处理,每一个分组都经过压缩函数HMD5处理;HMD5有4 轮处理过程,每轮有16步迭代,4轮处理过程的处理结构一样,所用逻辑函数不同,分 别表示为F、G、H、I;每轮的输入为当前处理的消息分组和缓冲区当前的值,输出仍 存放在缓冲区中。最后第四轮的输出与第一轮输入的缓冲区值V相加,相加时将V看 做4个32比特的字,每个字与第四轮输出的对应的字按模232相加,相加结果为HMD5 的输出。 (5)消息的所有分组均被处理完后,最后一个HMD5的输出即为产生的128位消息摘要。 二、SHA-1/256算法 SHA的全称为Secure Hash Algorithm(安全杂凑算法),SHA 家族的五个算法分别是SHA-1、SHA-224、SHA-256、SHA-384和SHA-512,由美国国家安全局(NSA) 所设计,

基于混沌映射的单向Hash函数构造_刘军宁

ISSN 1000-0054CN 11-2223/N 清华大学学报(自然科学版)J Tsingh ua Univ (Sci &Tech ),2000年第40卷第7期 2000,V o l.40,N o.715/33 5558   基于混沌映射的单向Hash 函数构造 刘军宁, 谢杰成, 王 普 (清华大学自动化系,宽带网络信息研究中心,北京100084) 收稿日期:1999-04-05 作者简介:刘军宁(1973-),男(汉),湖南,硕士研究生 文 摘:为提高Hash 函数性能,尝试新的H a sh 函数构造方法,提出一种基于混沌映射的H a sh 函数构造思想,给出利用两个不同的混沌模型构造的单向H a sh 函数,并初步分析了其作为单向H a sh 函数的不可逆性,防伪造性,初值敏感性和混沌映射应用于单向Hash 函数构造的优点与潜力。实现了任意长原始文本单向ha sh 为128bit H a sh 值的算法。实验结果表明,这种构造方法实现简单,对初值有高度敏感性,具有很好的单向H a sh 性能。同时,该方法也易于改造为并行实现,并且迭代的步数与原始文本成正比,有成为一种快速实用的单向Hash 算法的潜力。 关键词:电子商务;数字签名;H a sh 函数;混沌映射中图分类号: T P 309;T P 393 文献标识码: A 文章编号:1000-0054(2000)07-0055-04 随着以Internet 为基础的电子商务技术的迅猛发展,以公钥密码术,数字签名等为代表的加密安全技术已成为研究的热点[1~3]。单向Hash 函数是数字签名中的一个关键环节,可以大大缩短签名时间,在消息完整性检测,内存的散布分配,操作系统中帐号口令的安全存储中也有重要应用。传统的单向Hash 方法有M D2,M D5,SHA 等标准[2~ 4] ,多是 采用基于异或等逻辑运算的复杂方法或是用DES 等分组加密方法多次迭代[1]得到Hash 结果,后种方法运算量很大,难以找到快速同时可靠的加密方法,而前种方法中由于异或运算中固有的缺陷,虽然每步运算简单,但计算轮数即使在被处理的文本很短情况下也很大。 针对以上问题,提出了一种基于混沌映射模型的单向Hash 算法,该算法表达简单,很好地达到了单向Hash 函数的各项性能,迭代轮数与原始文本长度成正比,且很容易改造为并行实现的算法。 1 混沌映射用于Hash 函数的可行性 单向函数的定义:如映射f :X →Y 对所有的x ∈X ,f (x )都容易计算,但对任意的y ∈f (X )=Y 找到x ∈X 使f (x )=y 却是计算上困难的。则该函数称为单向函数。 单向H ash 函数是一种特殊的单向函数,它满足以下3个条件[1]并有|Y | |X | :1)不可逆性 已知c =Hash (m )求m 计算困难,即除穷举外没有好办法; 2)防伪造性 已知c =Hash (m ),求n 使Hash (n )=c 计算困难; 3)初值敏感性 c =H ash(m )中c 的每一比特都与m 的每一比特相关,并有高度的敏感性,即每改变m 的一比特,都将对c 产生明显影响。 从数学上看,报文空间可以是无限的,而Hash 结果总是一段定长字节的数字,会有无数的报文具有同样的H ash 函数值,但在Hash 结果达到一定长度,比如结果为固定的128bit 长时,结果空间已有2128 ≈3.4028×1028 个,现有的计算环境下在这样大的空间穷举计算是困难的。 Hash 函数把任意信息集合提炼为一个大数。被处理的文字信息即使只相差一个字符,它们的Hash 结果也会完全不同,这就使要想通过已知的一对x ,y (y =Hash (x ))找到x ′,H ash(x ′)=y ,除穷举外没有什么好的办法。 这些出色的性质使单向Hash 函数广泛应用于各种数据保护场合。用来以较小的计算和存储代价来保护数据的完整性和正确性。同时单向Hash 函数可以将原始的长信息压缩,这在电子商务应用中对于数字签名的快速实时实现有重要意义,可以对压缩后的信息进行签名,大大缩短签名时间。混沌理论在80年代末开始得到密码学界的注意,混沌运动是非线性确定性系统内在随机性的表

现代密码学-第5章Hash函数与消息认证习题与解答-20091202

第5章 Hash 函数与消息认证 习题及参考答案 1. 指出强抗碰撞H ash 函数与弱抗碰撞H ash 函数之间的区别。 答:弱抗碰撞H ash 函数是任给一个消息x,寻找另一个不同的消息x , 使得他们的H ash 函数值相等是不可行;强抗碰撞Hash 函数是同时寻找两个不同的消息使得他们的Hash 函数值相等是计算上不看行的,可以看出强抗碰撞Hash 函数一定是弱抗碰撞的。 2. 考虑Gibson Hash 函数h 。设p 、q 是两个素数,N =p ?q ,g 是(Z N )*的生成元。N 作为公钥,p 与q 作为签名者的私钥。对任意消息m ,其摘要定义为: h (m )= g m mod N 。 (1) 令N =4897,g =2231。分别计算消息m =132748,m '=75676的摘要。 (2) 证明:如果得到了两个碰撞的消息,那么就可以求出N 的分解。 (3) 证明:如果得到了N 的分解,那么就可以找到碰撞的消息。 解:(1)由h (m )= g m mod N 。 所以h (132748)=2231 132748 mod4897=2611 h(75676)=2611 (2)证明:若h (m)= h (m ')则有g m mod N= g m ' mod N 假设 N 的分解为 N=p*q 所以代入 然后根据中国剩余定理可以解得 p ,q 。 3. 设p 是一个素数,g 1、g 2是(Z p )* 的两个生成元,使得离散对数 p g g mod log 21 的计算是困难的。对任意消息m =(m 1, m 2),定义H ash 函数h 的摘要为: p g g m m h m m mod ),(2 1 2 1 21?=。 (1) 设p =65867,g 1=11638,g 2=22770。分别计算消息m =(33123, 11789),m '=(55781, 9871)的摘要。 (2) 证明:求解H ash 函数h 的碰撞等价于计算离散对数p g g mod log 21 。 解:(1)由p g g m m h m m mod ),(2 1 2121?=并把题中数据代入公式中 得 h(33123,11789)=56381 h (55781,9871)=15899 (2)证明:求解Hash 函数h 的碰撞,即寻找m 和m ',使得)'()(m H m H =,也即

相关主题
文本预览
相关文档 最新文档