HMAC >把HASH值和一个Key结合起来 ·没有使用加密算法 目标 既能用当前的HASH函数,又易升级为新的 HASH函数,并能保持和散列函数一样安全性 ·简单,并易进行密码学分析 标准 ·RFc2104 >HMAC: Keyed-Hashing for Message Authentication ·F|PS198 >The Keyed-Hash Message Authentication Code(HMAc) 17
17 HMAC ➢把HASH值和一个Key结合起来 • 没有使用加密算法 ➢目标 • 既能用当前的HASH函数,又易升级为新的 HASH函数,并能保持和散列函数一样安全性 • 简单,并易进行密码学分析 ➢标准 • RFC 2104 ➢HMAC:Keyed-Hashing for Message Authentication • FIPS 198 ➢The Keyed-Hash Message Authentication Code(HMAC)
散列函数h=H(x) >函数参数 输入:可以任意长度 输出:必须固定长度n比特,一般n=128、16 8函数特性 单向性质:给定h,要找x使H(x)=h是困难的 弱抗碰撞特性: 对于给定的y,找x,使H(x)=H(y)是困难的 强抗碰撞特性(生日攻击) 找x和y,使H(x)=Hy)是困难的 *如果碰撞则意味着数字签名容易被伪造/欺骗
18 散列函数 h=H(x) ➢函数参数 – 输入:可以任意长度 – 输出:必须固定长度n比特,一般n=128、160 ➢函数特性 – 单向性质:给定h,要找x使H(x)=h是困难的 – 弱抗碰撞特性: 对于给定的y,找x,使H(x)=H(y)是困难的 – 强抗碰撞特性(生日攻击): 找x和y,使H(x)=H(y)是困难的 * 如果碰撞则意味着数字签名容易被伪造/欺骗
生日悖论 1、要使k个人中有两个人的生日相同,k至少应 该是多少? 366 2、要使k个人中有两个人的生日相同的概 率大于0.5,k至少应该是多少? (23) 3、100个人中有两个人的生日相同的概率 约为0999997!! 19
19 1、要使k个人中有两个人的生日相同,k至少应 该是多少? 366 2、要使k个人中有两个人的生日相同的概 率大于0.5,k至少应该是多少? (23) 3、100个人中有两个人的生日相同的概率 约为0.9999997!!! 生日悖论
计算方法 k个人中没有两个人的生日相同的概率为: 365×364×…×(365-k+1) 365! 365′ (365-k)!365 k个人中至少有两个人的生日相同的概率为 365 (365-k)!365k 经计算k=23时:1-9=0.5073
20 k个人中没有两个人的生日相同的概率为: k个人中至少有两个人的生日相同的概率为: 经计算k=23时:1-p=0.5073 k k k k p (365 )!365 365! 365 365 364 (365 1) − = − + = k k p (365 )!365 365! 1 1 − − = − 计算方法
单向散列函数(One- way Hash function) 单向散列函数(单向+散列) 有的散列函数并不满足单向(抗冲突)性质 密码学上用的散列函数都是指单向散列 函数 抗冲突性质 给定h,找m满足H(m)h很难 给定m,找m:满足H(m)=H(m)很难 找m和m2满足Hm1)=H(m2)很难 举例 MD5、SHA1
21 单向散列函数(One-way Hash Function) • 单向散列函数(单向+散列) h = H(m) – 有的散列函数并不满足单向(抗冲突)性质 – 密码学上用的散列函数都是指单向散列 函数 • 抗冲突性质 – 给定h,找m满足H(m)=h很难 – 给定m,找m’满足H(m’)=H(m)很难 – 找m1和m2满足H(m1)=H(m2)很难 • 举例 – MD5、SHA1