密(研)11-密码学Hash函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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)
Hash函数特点
• Hash值 H(M) 是消息中所有 比特的函数,因此提供了一 种错误检测能力,即改变消 息中任何一个比特或几个比 特都会使杂凑码发生改变。
Hash函数的应用
(1)消息认证 (2)数字签名 (3)其它一些应用
Hash函数应用之一:消息认证
• 消息认证是用来验证消息完整性的一种机制或服务 完整性 • 当Hash函数用于提供消息认证功能时,Hash函数 值通常称为消息摘要(message digest)
• 一般地,消息认证是通过使用消息认证码(MAC) 实现的,即带密钥的Hash函数。
广泛应用于文件传输(如网络文件下载)
Hash 函 数 用 于 消 息 认 证 的 几 种 方 式
/debian-cd/5.0.6/i386/iso-cd/
Hash函数应用之二:数字签名
•提高签名的速度
9先计算消息摘要 z=H(m),再计算签名 y=Sig k(z)
•可以不泄露签名所对应的消息
9签名y应当公开,消息摘要z可以公开以便验证签名,而消息m则可以保密
•可以将对消息的签名和加密分开处理
9可以在不同层次提供消息的完整性和机密性
Hash函数用于数字签名的几种方式
Windows中的文件签名验证功能
Hash函数应用之三:其它应用
比如:
•创建单向(one-way)口令文件
¾存储密码的hash函数值,而非存储原始密码
¾大多数操作系统都采用了这种口令保护机制
•用于入侵检测和病毒检测
¾在系统中保持并检测重要文件的hash值
•可用于伪随机函数(PRF)或伪随机数生成器(PRNG)
11.2 两个简单的Hash函数
两个简单的不安全的Hash函数
•所有的Hash函数一般都按下面的一般原理进行运算:
¾输入(消息、文件等)都可视为一个n为分组的序列,其输出是n位的Hash值
¾Hash函数每处理一个分组,重复该过程直至处理完所
有的输入分组
•为了展示密码学Hash函数应考虑到的安全性,下面给出两个简单的、不够安全的Hash函数例子。
两个简单的不安全的Hash函数(1)
•将每个分组相应位异或(XOR),即:
C i = b i1xor b i2xor . . . xor b im
¾其中:C i为Hash码的第i位,b ij为第j个分组的第i位,m 为输入分组的个数
•对每一位产生一个简单的奇偶校验,称之为经度冗余检验(longitudinal redundancy check)
¾对于随机数的数据完整性检查比较有效
两个简单的不安全的Hash函数(1)
C i = b i1xor b i2xor . . . xor b im
•安全性分析:
¾如果每个n位hash值出现概率相同,那么数据出错而不
引起hash值改变的概率为2-n;
¾若数据格式不是随机的,则会降低函数的有效性。例
如,通常大多数文本文件中每个8位字节的高位总为0,若使用128位的hash值,则对于这类数据,hash函数
的有效性是2-112,而不是2-128。
两个简单的不安全的Hash函数(2)•对于上述方法,一种简单的改进方法:每处理完一个分组后,将hash值平移一位或循环移位一次
(1)设n位hash值初值为0
(2)如下处理每个n位的分组:
(a)将当前的Hash值循环左移一位
(b)将该分组与Hash值异或
•这样可以使输入更加完全地“随机”,从而消除输入数据的规则性。
•仍有方法可以做到:改变消息而hash无法检测攻击
11.3 需求和安全性、安全Hash函数结构
几个术语
•对于hash函数h=H(x),称x是h的原像。
¾因为H是多对一映射,所以对于任意给定的hash值h,
对应有多个原像
•如果 x≠y 且 H(x)=H(y),则称出现碰撞。
•注意:若hash码长度n位,输入消息长度b位,则平均每个hash值对应 2b/2n = 2b/n个原像;若输入长度不限,则每个hash值对应原像个数将更大。•问:那hash函数的安全性风险?