哈希函数的学习

  1. Hash函数是不对称加密(输入的长度和密文长度不一样,输入任意长度根据不同的算法输出算法特定的长度)

  2. 密码学层面一个好的hash函数要求没有比枚举法更加有效的攻击方法同时无法根据对应的hash值反推回加密的密文(单向性);也不能存在两个数据块具有相同的哈希值。所以哈希函数经常被用于判断是否篡改

  3. 针对于二,普遍存在的MD5并不是一个好的hash函数 查阅资料发现MD5加密时候对于一些特定的值会出现相同的hash值(对于这篇文章的数据,很不幸在我进行实地加密测试的时候发现MD5出现的值并不一样)在这里插入图片描述

  4. 消息认证:就是根据hash函数的不可伪造性来实现的,当消息发出时发送者会生成一个hash值,接收者收到文件后将文件进行hash看是否和发送的hash值一致,一致就是没有被篡改。然而如果遇到了中间人把文件和hash值一起改了,这样就不能保证文件传输的正确性。这里给出了几个可行性方案:1.用一种对称密码算法,加密信息和hash值,这样被截获了,中间人也无法获取信息和hash值,也就不能篡改了,发送者和接收者才有可以解密的密钥 2.在1的基础上其实只要加密hash值就可以了,然后进行验证文件完整性就可。3.信息通信双方共同约定一个秘密值S,将文件和S一起hash从而获得hash这样文件哪怕更改了,也可以发现问题。4.考虑到3方案的隐私性,将文件和hash进行加密后再发送

  5. MAC信息认证码:再hash时候加上一个密钥,密钥只有通信双方知道,这样就可以知道是否发生了篡改

  6. HASH函数还可以用于数字签名,大致含义就是数字签名时候用了用户的私钥来进行产生信息的hash值,如果要进行篡改这个私钥就要获取,这是十分困难的

  7. HASH函数的加密方法理解:
    1.将需要加密的密文转化为二进制,如果需要转化为128位(举例),就按照128位一次进行切片
    2.进行切片后比如存在3组半,根据不同的算法会补齐(不同算法补的不一样),最后是4组
    3.从第一组的每一位与第二组的每一位进行异或运算(不用为1 相同为0),然后得出的结果继续与第三组异或 循环往复直到最后
    4.最初的设想到这里就结束了,但是很快就会发现一个问题,普遍的很多数据的前几位都是0或者说都是固定数(比如很多文件有文件头,这些都是固定的),这样进行异或会有一定的规律性,所以每一次两组的异或需要进行一次移位
    5.同时还要考虑到一个点,如果固定输出的位数很小比如每一个加密后都是4位长度的hash值,那么最多能表示2的4次方个数字能表示的太少了,同时肯定会有很多的碰撞产生(两个不同的消息产生了相同的hash值)

  8. 在这里插入图片描述
    在这里插入图片描述
    9.枚举攻击:针对于hash函数的攻击主要有两种一种是枚举,一种是原理分析,这里首先讲解枚举(顾名思义,一个个试过去),平均来说只要尝试一半的可能就能得到需要找到的Y符合Y经过加密后为密文。如果hash加密的过程中使用了密钥(加密了hash值 并且贴在最后 只要破解密钥就可以破解所有了,因为密钥知道了,就可以实现篡改,连同前面的hash和后面的加密文一起改),就可以采用枚举攻击下的一种形式:碰撞攻击:
    在了解碰撞攻击之前,首先了解一下生日悖论:大致意思就是如果有2个人不能那么就是1/365 如果是3人不能同一天生日就是364/365 * 363/365 这里举例为三个人,那么就是一个人随便取,第二个人只有365分支364的几率,第三个人只有365分支363的几率,因为那几个被人取走了,这个应该是概率论与数理统计的知识 根据这里我们可以得到如果要在23个人当中找到没有相同生日的概率是约等于百分之50 在100个人中找没有相同生日的概率约为百分之0 将这个用于碰撞,如果要找两个相同的生日(如果是密码学上的相同的机密后的密文,只要找根号下N次,N是所有的次数)ps:这里有点晕,给一个总结性的结论,枚举时候,就是一个个遍历,要找2/n 次,在概率上是刚好找到,但是在碰撞的时候,一对一对的找,就是两个一起找,那么只要根号下N的次数就可以了。证明就是上面的生日悖论 在这里插入图片描述接下来开始讲解碰撞攻击,碰撞攻击是
    在这里插入图片描述
    大致意思就是先对A发送的文字进行获取,因为是明文发送的(发送者认为私钥不会泄露,所以不会被篡改),中间人获取到了A的明文,然后对A进行合法的改造类似于(添加空格 回车之类的)不改变意思但是改变其内容。产生2的m/2次方 种,为什么要m/2次在之前的讲解就说过,只要2的m/2次方种的组合理论上就可以找到了,理论上那么多的就不需要了

  9. 密码分析:利用算法的某种特性,而不是用枚举来进行破译。没有什么现实中实际攻破的案例,这里就一带而过

  10. SHA512的计算:以加密abc为例:
    1.在这里插入图片描述

如上图所示:abc的二进制为0110 0001 0110 0010 0110 0011 要补齐到896位,所以要(896-24=872)872位的数字,第一位为0,后871为0
也就是0110 0001 0110 0010 0110 0011 1000 (省略868个0)
2. 在这里插入图片描述
如上图所示,需要在最后加入表示其长度的附加长度(全0+0001 1000)括号内一共128位,同时衍生出SHA512最多的输入长度是((2的128次方)-1)所以在经过1 2 两个步骤后输入的内容分割成16块如下图所示(16进制 一位=4位二进制):在这里插入图片描述
3. 如图没有多的需要讲的在这里插入图片描述
4.在这里插入图片描述

在这里插入图片描述
Wt就是经过信息扩展算法得到的具体算法如下:
W1-16就是等于M的1-16 (M是1024按照每个64位切了16块产生的)
W16-79就是有一定的算法
在这里插入图片描述

在这里插入图片描述

Kt这里取前80个素数的立方根的前64位
在这里插入图片描述

经过上面的计算第一次的abcdefgh的结果是:在这里插入图片描述
循环80次的结果就是:在这里插入图片描述
最后执行a(a为最初的值6a09e667f3bcc908)+73a54f399fa4b1b2 = ddaf35a193617aba
在这里插入图片描述
binggo对上了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值