密码学基础知识(六)Hash函数与消息认证
来源:互联网 发布:美工使用的软件 编辑:程序博客网 时间:2024/06/10 19:25
Hash函数和消息认证
先说Hash
哈希函数,可以将任意长度的消息压缩为某一固定长度的消息摘要函数。一句话,Hash简直了。
当然有逆天的一面就有大缺点,过程不可逆。傻了吧,哈哈。
Hash的性质:
1. (逆天特性)应用于任意长的消息,产生固定长的输出(散列值,消息摘要,数字指纹随便你叫什么了);
2. (单向性)对于给定消息x,H(x)很容易得出。但是对于给定z,寻找H(x)=z是不可行的;
3. (安全特性)抗弱碰撞性:有x,找一个y,使得H(x)=H(y)计算不可行;抗强碰撞性:寻找(x,y),使得使得H(x)=H(y)计算不可行。
4. (雪崩性)雪崩效应,散列值的每一位都与消息的每一位有关,相近的消息,输出很大差别。
Hash:
带密钥的Hash和不带密钥的Hash。区别在于前者一个输入,后者两个:消息+密钥。后者一般用于产生消息认证码MAC。
Hash应用:
1.数据完整性验证:由于雪崩性,稍有改动一对比就发现了;2.产生数字签名:计算H(m),然后私钥加密;3.密钥推导:天生单向性;4.伪随机数生成。
简单说下Hash函数的攻击方法:
第一类生日攻击:
就是说,n个输入,其中有一个输出H(x),那我要多少个y才能使H(y)=H(x)的概率达到0.5?
答案是2/n个。假如输出为m位长,那么就有2m个输出。引出了第二类生日攻击
第二类生日攻击:
k~=2m/2,说明了散列值不能小于128位啊。
模差分攻击:
最有效的方法,也叫比特追踪法。这个假期研究研究。
再额外提下基于分组密码的Hash函数:
可以用CBC和CFB。
由于这种基于加密体制的Hash函数经不起攻击,所以大多都用另一类,即构造复杂的非线性关系实现单向性。这就产生了那些著名的算法和那些著名的事。
MD5算法:
输入消息:长度小于264,以512位一组。
输出消息:128位
过程:
1.消息填充:将消息长度填充至差64位就是512的倍数。那64位是表示填充长度的,是先从低位表示填充长度的。
2.填充后的消息是512的倍数,然后按512分组,每组又是16个32位长的字。
3.初始化中间结果:128位的缓存区来存储中间结果,对其初始化4个32位长的寄存器分别存放四个固定的整数。
4.迭代压缩:每个分组经压缩函数HMD5处理。
那就说说这个压缩函数,HMD5有四轮处理,四个轮函数结构相同但是逻辑函数不同。
5. 输出:最后一个HMD5的输出即为消息摘要。
HMD5:
四轮处理过程,每轮都对缓冲区16轮迭代运算。
SHA:
与MD5一脉相承,来自MD4,真名SHA-1。
输入消息:长度小于264,以512位一组。
输出消息:160位
过程:
1.消息填充:(跟MD5一样)将消息长度填充至差64位就是512的倍数。那64位是表示填充长度的,是先从高位表示填充长度的。
2.填充后的消息是512的倍数,然后按512分组,每组又是16个32位长的字。
3.初始化中间结果:160位的缓存区来存储中间结果,对其初始化5个32位长的寄存器分别存放五个固定的整数。
4.迭代压缩:四轮处理,每轮20迭代,也是逻辑函数不同
5. 输出:最后一个分组的输出即为160位的消息摘要。
在压缩函数上看两者区别:
MD5直接用分组的16个字作为迭代,SHA则将16字扩展为80字。
MD5和SHA算法必然相似,哥俩嘛,
消息认证码MAC:
验证信息来源的真实性;验证消息的完整性。
很显然,Hash函数很适合设计MAC。所以有了HMAC:
累了,休息一会。
- 密码学基础知识(六)Hash函数与消息认证
- 密码学之一(Hash函数)
- Lauren与密码学8,消息认证码MAC
- 信息安全与密码学3-数字摘要和Hash函数(哈希函数)
- 密码学基础知识(一)信息安全与密码学
- 信息安全与密码学1-加密与认证(验证)
- 一些网上密码学资源(5)-消息认证
- 一些网上密码学资源(5)-消息认证
- 《程序员密码学》之消息认证码算法
- C++基础知识(六)函数
- HASH 密码学
- 浅谈密码学(一)基础知识
- 密码学基础知识
- 密码学基础知识
- 密码学基础知识
- 密码学基础知识
- 密码学基础知识
- 密码学基础知识(二)密码体制
- Python快速教程 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起
- 如何在Linux下实现设备的配置(上)
- select、poll、epoll之间的区别总结
- 自己练习写的Procedure,两种方法遍历cursor,代码已验证
- C++实现设计模式之 —— 单例模式 Singleton
- 密码学基础知识(六)Hash函数与消息认证
- Binary Search Tree Iterator
- Qt读取ini配置文件
- Wildcard Matching
- 第4章 更多的 bash shell命令 - df、du、sort、grep、zip、tar等
- 针对TCP连接异常断开的分析
- leetCode 27.Remove Element (删除元素) 解题思路和方法
- JAWR【一个java项目的javascript和CSS集成和压缩工具】
- MYSQY数据库类型与Java类型的对比图(收藏使用)