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