网站推广的方法枫子,四川seo哪里有,工程建设合同模板,南通市城乡建设局网站一、哈希函数
1.安全性质
1#xff09;抗第一原像攻击#xff08;Preimage Resistance#xff09;
给定哈希后的值#xff0c;很难找到哈希前的原消息。这很好理解#xff0c;需要哈希函数具有单向性。
一个简单的例子就是密码存储系统#xff0c;用户登录服务器需要…一、哈希函数
1.安全性质
1抗第一原像攻击Preimage Resistance
给定哈希后的值很难找到哈希前的原消息。这很好理解需要哈希函数具有单向性。
一个简单的例子就是密码存储系统用户登录服务器需要密码匹配服务器出于安全考虑不会存储用户密码会存储用户密码的哈希值这样每次用户发来密码进行哈希来看是否一致。这样的话即使黑客获得了用户密码的哈希值也没办法登录系统。
2抗第二原像攻击Second Preimage Resistance
给定消息m和哈希后的值很难找到另一个消息n使得n哈希后的值和m哈希后的值一样。
一个简单的例子是软件下载时使用哈希来校验文件的integrity用户下载软件后使用哈希函数得到值来和开发者提供的哈希值对比如果一致就认为下载的文件没有被篡改。这里如果黑客可以通过开发者提供的哈希值和文件找到一个哈希值一样的文件那么他就可以替换掉这个文件。
3碰撞避免Collision Resistance
对于一个哈希函数对于找到两个具有相同哈希值的消息mn是计算上不可能的。尽管哈希是理论上无限的域向固定域的映射总会碰撞但是要保证计算上找不到这个碰撞。
一个简单的例子是发送信息的人本来就是黑客。例如b找到了两个相同哈希值的文件他让a签署文件1只需要a付出很小的代价而文件2需要a付出很大的代价。那么b就将文件1发给a签签完之后说a签的是文件2。
2.SHA-1
任意长比特串--160bits哈希值
1padding
先在后面补1然后补0直到长度L%512512-64因为sha-1每次对512bit做处理所以整体长度一定是512的倍数那么为什么要512-64呢因为最后64位要留着指示消息的长度注意这里消息的长度指的是padding前的初始长度。 2然后就是计算了取第一个512bit和初始值做计算计算结果160bit作为初始值和下一512bit做计算这样一直下去最后产生160bit的哈希值。 看看每512bit这个计算具体是如何做的。 首先512bit下来了将他扩展成80个w每个w是32bit。前16个w直接照抄原来的512bit之后每个wt都通过以下式子计算得出s几就是循环左移几位。 得到80个w之后开始计算先拿初始值填充abcde然后每个w进行一轮计算。 这是前20个w进行的前20轮计算的例子总共的80轮只有f和w不一样f是每20轮有一个f而80轮的w对应先前生成的80个w。
这个计算就是把先前的abcde分别做一些移位、置换之类的操作生成新的abcde。
80轮之后把最后生成的abcde和一开始的初始值分别相加生成这一阶段的最终的160bit值如果还有下一阶段那么这160bit值就是下一阶段的初始值。
注意这里所有的都是模2的32次方加。
3.SHA们
不同版本的sha的参数的对比 4.生日攻击
根据生日悖论一个群体中有两个人生日是同一天的概率比直觉要大。
对于一个大小为2的n次方的哈希输出空间找到两个同样哈希值的输入在尝试2的n/2次方次时概率为50%。
那么这里有一个攻击的例子a产生消息给b签字。
a产生2的n/2次方种同一正常消息的变种就类似于我是老师/老师是我这样的变种就对应2的n/2次方个哈希值。然后再产生2的n/2次方种个诈骗q消息。这样正常消息和诈骗消息中有很大概率有相同哈希值的这样他就找到了一组相同哈希值的消息只用了2的n/21次方次尝试这比正常的暴力破解平均2的n-1次方要快了不少。 二、消息摘要Message Digest
很多时候消息并不在意confidentiality比如一些广播包亦或者刚才提到的软件下载。只需要保证消息的integrity就好了那么如果还是对消息加密的话尽管可以保证integrity因为加密之后别人没法篡改篡改了解密出来就是乱码了但会有很大的不必要的开销相当于做了额外的工作那么这个时候可以采用一种简单的模式那就是把消息哈希之后把哈希值附在消息后面传。收包的收到之后对消息哈希然后比对自己哈希出来的和对方传来的一致就认为没问题。
但是如果有人在途中同时改了消息和消息摘要就不行了。 三、MACMessage Authentication Code消息认证码
双方共享一个秘密一串数一个密钥发送方将这个秘密和消息m链接然后哈希将哈希附在消息后面一起发送接收方收到之后将秘密和消息m链接然后哈希发现得到的值和发送方发来的一致那么就认为消息未被篡改。
这里就是通过双方共享密钥来做了认证。 但是这里还有一个问题他不能抗否认就是这个key是双方都有的他会耍赖说这个消息不是我发的是你发的。要做抗否认Non-repudiation就需要下面讲的数字签名技术。
这里再介绍一个MAC算法HMAC。这个的设计理念就很OCP他想直接套现有的哈希函数并且让以后的哈希函数亦可以直接套进来。 首先把密钥用0padding成哈希的分组长度然后在和ipad做异或作为进入哈希的第一个块然后进哈希函数出来哈希函数对应的n比特哈希值。
然后还要走第二轮第一个块还是密钥用0padding成哈希的分组长度异或上另一个op第二块就是刚才生成的n比特哈希这里注意sha是有自己的padding机制的所以这里不用padding。这两个块再过一遍哈希得到的就是消息认证码。 四、数字签名
要做抗否认Non-repudiation那就不能使用双方的共同秘密就要用到只有一个人有的且别人都不知道的那就是公钥技术。
所以这样就可以先把消息哈希然后用自己的私钥签名然后再把这个结果附在消息后面传输。对面收到后对消息哈希得到哈希值然后再拿你的公钥解你附在后面的签名后的哈希值这样匹配了就达到了integrity且这是拿你的私钥签名的没法抵赖Non-repudiation。