概述:
认证是个过程,通过这个过程一个实体向另一个实体证明某种声称的属性
认证参数:
“口令”相当于平时登录系统时输入的密码。
“密钥”相当于公钥密码体制中的私钥,可用于数字签名
“智能卡”相当于校园一卡通
“指纹”比如指纹识别手机
Hash函数:
散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。Hash函数可以将任意长的消息m映射为较短的,固定长度的一个值,记为H(m)。最常用的Hash函数有两大系列:
MD(MD5,128bit)和SHA(SHA—3)
不可逆映射:
给定输入M,通过函数H可以很容易计算出输出h;但如果给定h,则找到M在计算上不可行。
错误检测能力:
输入数据M中任何1个bit发生变化,都将导致输出M发生很大的变化。
注:Hash并不能防止伪造。如果攻击者将A发送的东西截取了,反手将(y,H(y))发送给接收者B,B也觉得消息完整。有时候要结合密钥使用。
对于Hash函数有以下要求:
1能够接受任意长度的消息作为输入。
2能够生成较短的,固定长度的输出。
3对任何消息输入都应该能够容易和快速地计算出哈希值。
4应该具有单向性,也就是说,给定H(m),恢复消息m在计算上是不可行的;
5应该能抵抗弱碰撞,即给定消息m和H(m),找到另外一个消息m!=n使得H(m)=H(n)是不可能的。给定一个人,找到另外一个和他指纹相同的人。
6应该能够抵抗强碰撞,既可以有两个消息m和n使得H(m)和H(n)几乎是不可能的。这个世界找到两个指纹相同的人。
MD迭代结构:
Hash函数输入消息m,并将其分为L个固定长度的分组,若最后一个数据块不满足输入分组长度要求,按照一定规则填充。重复使用的b bit分组,并生成一个n bit输出。
f函数:输入n+b比特,输出n比特
SHA:
SHA-1算法:
- 输入:任意长的消息,分为 512 比特长的分组。首先在消息右侧补比特 1,然后再补若干个比特 0,直到消息的比特长度满足对 512 取模后余数是 448,使其与 448 模 512 同余。
- 输出:160 比特的消息摘要。
- 每个512bit块重复使用分块处理函数,以32字为处理单位进行压缩,压缩包含4回合运算,每一回合走20步。
-
SHA-2:
SHA-384 SHA-512算法与SHA-1不同都是以1024bit分块为基本处理单位。
SHA-256与SHA-1算法一样以512bit作为基本处理单位。
SHA-3:
keccak算法作为SHA-3的标准。
Keccak基于海绵体,区别于多数Hash函数所采用的经典MD结构
f函数的输入输出都是1600bit,这1600bit要说是一个一维数组,但是本算法中将该一维数组转换为三位数组。
MD5:
能接受任意长度的值作为输入,并生成128bit哈希值。
Hash算法的攻击现状分析:
1原像攻击:
攻击者对给定的Hash值h,试图找到满足H(y) = h的y。最难
2第二原像攻击:(弱碰撞
给定固定消息m1,找到另一个消息m2,使hash(m2)= hash(m1)。
3碰撞攻击:
找到任意两消息M和n使得H(M)=H(n)最容易
生日攻击:
碰撞攻击中最重要的一种攻击方法 ,对hash函数提出了一个必要的安全条件,即hash值必须足够长。
已知在1~n之间均匀分布的整数型随机变量,随机取k个,至少有两个取值相同的概率大于0.5,k至少有多大?
其他方法:密码分析学的办法,即利用算法逻辑上的缺陷,降低破译算法的代价(王小云破译MD5
消息认证:
消息认证是一个过程,用以验证接受消息的真实性和完整性,同时还运用于验证消息的顺序性和时间性。可用消息认证码对消息做认证。
消息认证码:
消息被一密钥控制的公开函数作用后产生的,用作认证符的固定长度的算数值,也称为密码校验或者MAC值。
消息认证码在输入包括任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为MAC值。但是与Hash函数不同的是计算MAC必须持有共享的密钥。因此消息认证码也可以理解为是一种与密钥相关联的单向Hash函数。
消息认证码主要包括
基于分组密码的CBC-MAC(大多数
先将密文等分成多个分组数据块,从第一块数据块开始先与一个随机生成的初始化向量IV进行异或运算,运算结果再和密钥进行加密运算,得到第一块分组密文。第二块数据块把前一块数据块的分组密文当作IV,先与其进行异或运算,再和密钥进行加密得到第二块分组密文,这样下去,第n个分组数据块会与第n-1个密文分组进行异或运算,然后和密钥进行加密,得到第n个分组密文,最后将所有分组密文按顺序组合在一起,得到完整的密文。CBC-MAC算法就是将最后一个密文分组的值作为MAC值。
消息认证使用方法:
发送者与接收者事先共享密钥,发送者根据消息计算MAC值(使用共享密钥),发送者将消息和MAC发送给接收者,接收者根据收到的消息计算MAC(使用共享密钥),接收者将自己计算出的MAC与从发送者收到的MAC比对,如果MAC一致,接收者可以判定消息的确来自接收者(认证成功);如果不一致,可判断消息不是来自发送方(认证失败),实现以下功能:
接收方相信发送方发来的消息未被篡改,攻击者不知道密钥,无法篡改mac值。
接收方相信发送方不是冒充的,因为密钥无其他人知道。
但是发送方可能会与接受方产生分歧,发送方对自己的MAC不承认,说是接收方伪造的。
基于hash的HMAC:
HMAC所能提供的消息认证包括两方面:
1消息完整性认证,2信源身份认证。
设计目标:
1不必修改而且使用现有的Hash函数。
2如果找到或者需要更安全的Hash函数,应该很容易地替代原来嵌入的Hash函数
3如果已知嵌入的Hash函数的强度,易于分析HMAC用于认证时的密码强度。
描述:
HMAC使用Hash算法做加密基元,加密基元就是指一些基础的加密算法,如Hash,一些复杂的加密算法是根据基础的Hash算法构建出来的,如最上面例子中,对称加密里,使用口令pass和salt加Hash运算得到密钥,Hash算法作为加密基元,每次salt都不同,保证相同的口令可以生成不同的密钥。与HMAC配合使用的散列函数有SHA-1,SHA256和SHA512等,通过Hash函数和密钥得到MAC值,将其与密文一起发送给接收方,待接收方进行验证。