密码学Hash函数、消息认证码、数字签名和用户认证
在安全应用中使用的Hash函数称为密码学Hash函数
密码学Hash函数要求两种状况在计算上不可行(即没有攻击方法比穷举更有效):web
- 对预先指定的Hash值找到对应的数据块(单向性)
- 找到两个不一样的数据块对应相同的Hash值(抗碰撞性)
Hash函数被用于判断数据是否被篡改过(数据完整性)
Hash函数的操做过程:
输入数据的长度首先被填充为某固定长度(如1024位)分组的整数倍,填充的内容包括原始消息的位长度信息。填充长度信息可以提升攻击者修改信息而保持Hash值不变的难度。算法
1、密码学Hash函数的应用
1.消息认证(Message Authentication)
是用来验证消息完整性的一种机制和服务安全
- 消息认证确保收到的数据确实和发送时的同样(即没有修改、插入、删除或重放)
- 还要求消息认证机制确保发送方声称的身份是真实有效的
当Hash函数用于提供消息认证功能时,Hash函数值一般称为消息摘要
消息认证中使用Hash函数的本质以下: - 发送者根据待发送的消息使用该函数计算一组Hash值,而后将Hash值和消息一块儿发送过去
- 接收者收到后对消息执行一样的Hash计算,并将结果与收到的Hash值进行对比
- 若是不匹配则接收者推断出消息(也多是Hash值)遭到了篡改
Hash函数 的运行结果必须经过安全的方式进行传输。
Hash码可以经过如下方法用于提供消息认证: - 使用对称密码算法加密消息和Hash码
- 使用对称密码算法只对Hash码进行加密
- 不使用加密算法,仅使用Hash函数也能实现消息认证
- 对整个消息和Hash值加密
b所需计算少,a、d须要加密整个消息,若是不要求提供保密性,b比a、d更有优点。框架
更通常地,消息认证是经过使用消息认证码(MAC)实现的,即带密钥的Hash函数。
一般状况下,通讯双方基于共享的同一密钥来认证彼此之间交互的信息时,就会使用MAC。
MAC函数将密钥和数据块做为输入,产生Hash值做为MAC码,而后将MAC码和受保护的消息一块儿传递或存储。
检查消息完整性的时候,使用MAC函数对消息从新计算,并将计算结果与存储的MAC码对比。
攻击者能对消息进行篡改,可是在不知道密钥的状况下不可以计算出与篡改后的消息相匹配的MAC值。
MAC是Hash函数和加密函数操做的结合,即对于函数E(K,H(M)),长度可变的消息M和密钥K是函数的输入,输出是固定长度的值。MAC提供安全保护,用于抵抗不知道密钥的攻击者的攻击,svg
2.数字签名
在数字签名时,使用发送方的私钥加密消息的Hash值,其余任何知道该发送方公钥的人都能经过数字签名来验证消息的完整性。
攻击者想要篡改消息,须要知道用户的私钥。
数字签名的应用比消息认证更普遍。
3.其余应用函数
- 用于产生单向口令文件(操做系统存储口令的Hash值而不是口令自己)
- 用于入侵检测和病毒检测
- 用于构建随机函数(PRF)或用做伪随机数发生器(PRNG),基于Hash函数的PRF课用于对称密码中的密钥产生
2、密码学Hash函数的安全需求
3、对Hash函数的攻击
- 穷举攻击:不依赖任何算法的细节,仅与算法所产生的Hash值的长度有关。
- 密码分析:依赖于具体算法的设计缺点
安全Hash码的通常结构:加密
4、安全Hash函数(SHA)
SHA算法创建在MD4算法之上,其基本框架也与MD4相似。
SHA-1产生160位Hash值
SHA-2的Hash值长度分别为256,384,512,分别称为SHA-256,SHA-384,SHA-512。
SHA-3:基本迭代结构为海绵结构,海绵结构与其余迭代Hash函数的结构类似。
在海绵函数中,输入消息被分块为固定长度的分组。
每一个分组逐次做为每轮迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生一组输出块。
海绵函数的输入、输出:
海绵函数的迭代结构:
SHA-3参数:操作系统
消息认证码
消息认证函数:
1.消息加密
消息加密自己提供了一种认证手段。对称密码和公钥密码体制中,对消息加密的分析是不一样的。设计
- 对称加密
- 公钥加密
直接使用接收方公钥加密可提供保密性,但不能提供认证
发送方私钥加密消息(数字签名),接收方用发送方的公钥对消息进行解密(验证签名),提供了认证。
既要保密又要认证:发送方私钥加密(数字签名),发送方用接收方的公钥对上述结果进行加密(保密性)。 缺点:一次通讯中要执行4次而不是两次复杂的公钥算法
2.消息认证码
又称密码校验和或MAC,也是一种认证技术。它利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息以后。
MAC算法不要求可逆性,加密算法必须可逆
对MAC的攻击:3d
- 穷举攻击:攻击密钥空间和MAC值
- 密码分析
基于Hash函数的MAC(HMAC)
基于分组密码的MAC(数据认证算法DAA、基于密码的消息认证码CMAC)
认证加密(分组密码链——消息认证码CCM、Galoid/计数器模式GCM)
基于Hash函数、基于MAC的PRNG
数字签名
1、数字签名简介
数字签名过程的通常模型:
在收发双方不能彻底信任的状况下,须要除认证以外的其余方法来解决他人伪造或当事人否定的问题。
数字签名是解决这个问题最好的方法。
数字签名必须具备的特征:
- 验证签名者、签名日期和时间(消息来源)
- 认证被签的消息内容(数据完整性)
- 签名由第三方仲裁以解决争执
数字签名具备认证功能。
攻击:
伪造:
数字签名应知足的条件:
直接数字签名:
只涉及通讯双方(发收双方)的数字签名方案
假定接收方已知发送方的公钥,用共享的密钥(对称密码)对整个消息和签名加密,则能够得到保密性
先进行签名,再执行外层的加密,在发生争执时,第三方能够查看消息及签名。
该方法的有效性依赖于发送方私钥的安全性。
2、数字签名算法(DSA)
使用安全Hash算法(SHA),最新版本还包括基于RSA和椭圆曲线密码的数字签名算法。
两种数字签名的方法:
DSA使用的是只提供数字签名功能的算法,与RSA不一样,DSA虽然是一种公钥密码方案,但不能用于加密或密钥交换。
在RSA方法中,Hash函数的输入是要签名的消息,输出是定长的Hash码,用发送方的私钥将该Hash码加密成签名,而后发送消息及其签名。接收方收到消息,计算Hash码。接收方用发送方的公钥对签名解密,若是计算出的Hash码与解密出的结果相同,则认为签名是有效的。由于只有发送方拥有私钥,因此只有发送方可以产生有效的签名。
DSA方法也使用Hash函数,它产生的Hash码和为这次签名而产生的随机数k做为签名函数的输入,签名函数依赖于发送方的私钥和一组参数,这些参数为一组通讯伙伴所共有,咱们能够认为这组参数构成全局公钥。签名由两部分组成,标记为s和r。
DSA是创建在求离散对数之困难性以及ElGamal和Schnorr最初提出的方法之上。
3、椭圆曲线数字签名算法(ECDSA)
用户认证
1、双向认证(Mutual Authentication)
使通讯双方互相认证彼此身份并交换会话密钥。
已认证的密钥交换主要关注两个问题:保密性和实效性
重放攻击的例子:
防止重放攻击的方法:
- 为每个用于认证交互的消息附上一个序列号,新的消息只有其序列号知足适当的顺序时才会被接收。
这种方法的难点是要求每一方都跟踪与其交互的通讯方最新的序列号。
考虑到开销问题,序列号基本上不会用于认证和密钥交换。 - 为每一个消息附上时间戳,要求不一样参与者之间的时钟是同步的
- 挑战/应答
2、单向认证(One-Way Authentication)
应用领域:电子邮件服务 邮件消息须要加密,而且邮件处理系统不拥有解密密钥 认证的做用是接收者须要确保消息确实来自于所谓的发送者