密码学-课堂笔记3-哈希函数Hashes

目录

  • 哈希函数Hashes
    • 数据完整性保护
      • 加密哈希函数
      • 哈希函数的安全要求
    • 生日攻击Birthday attack
      • 碰撞的概率
      • 生日攻击碰撞概率
    • 从块密码散列
      • MD5哈希
      • SHA
      • SHA - 1
      • SHA-1哈希函数族
    • 存储密码
      • 用于存储密码的哈希函数
    • 保护消息的完整性
      • 保护消息的完整性和真实性
      • 消息验证码- MAC
      • 来自Block cipher的mac: CBC-MAC
      • MAC属性
      • 哈希消息认证码(HMAC)
      • HMAC实现
    • 结论/总结

哈希函数Hashes

数据完整性保护

  • 场景与问题
  • Alice通过一个不安全的通道向Bob发送消息M。
  • 消息M的完整性可能由于以下原因被破坏:
    • a. 由于噪声或错误而损坏,
    • b. 被攻击者篡改(内容修改),
    • c. 其他原因
  • 假设Bob接收到的消息为M’,那么Bob要如何确定M’的完整性,保证它与原M相同呢?
  • 方法:
    • 校验和,循环冗余码(CRC)
    • 消息摘要-密码哈希函数的输出

加密哈希函数

  • 可以使用加密哈希函数h(·)来保护数据完整性
  • 密码哈希函数h(·)的属性:
    • 给定任意x,很容易计算,y = h(x)
    • 固定长度输出y从任意长度输入x
    • 雪崩效应- x的微小变化会引起y的巨大变化
  • 安全需求
    • 原象阻力(单向,不可逆)-不能找到x给定y
    • 抗碰撞- 2种:弱、强

哈希函数的安全要求

  • 原像电阻(单向)
    给定哈希函数h(·),且z = h(x),不能得到x = h−1(z)
  • 第二预像(弱碰撞)抗
    给定x1,求出x2是不可行的,其中x2 = x1使h(x1) = h(x2)
  • 抗碰撞(或强抗碰撞):
    不能找到任意一对x1和x2使h(x1) = h(x2)
  • 常用的哈希函数:MD5, SHA-1, SHA-256, RIPEMD

生日攻击Birthday attack

  • 在一个可以取N个可能值的总体中,总是有可能在t个成员大小的样本中找到至少一对具有相同值的成员。

例子:
考虑一个人的生日,只包括日和月,不包括年,只有N = 365个可能的值。
可以看出,在t =23人的样本容量下,找到2个人生日相同的概率≈50%。

  • 对于n位哈希,对于任意输入x,可能的输出数是2n。总是有可能找到x的t个样本,使它们中的一对具有相同的哈希输出。这就是所谓的生日袭击。

碰撞的概率

•从N个样本中选取t个样本,发现无碰撞的概率PnoCollision
密码学-课堂笔记3-哈希函数Hashes_第1张图片

•因此在t个样本中发现碰撞/s的概率为
密码学-课堂笔记3-哈希函数Hashes_第2张图片

生日攻击碰撞概率

•从N个可能的值中取的样本t的数目,其碰撞的概率为λ,如下所示:
在这里插入图片描述
•如果N = 365, λ = 0.5,则t≈p2 × 365 ln(2) = 22.5≈23
•生日攻击(也被称为生日悖论):在一组23人中,有50%的几率找到两个人在同一天和同一天(同一天生日)出生。
•对于n位哈希,如果n很大,发现50%概率碰撞的哈希数为
在这里插入图片描述

从块密码散列

  • 几种方法,如戴维斯-迈耶法
  • AES用于构建哈希函数
    Hi = Hi−1 ⊕ ex1 (Hi−1)
    密码学-课堂笔记3-哈希函数Hashes_第3张图片

MD5哈希

•输入是任何文本或任意长度的二进制文件
•输出文件长度为128位
•作为简单的二进制操作的复杂序列进行操作,如XORs、旋转等。
•的例子:
x =“hello”,h (x) = b1946ac92492d2347c6235b4d2611184
x =“hello”。,h (x) = 8563 c2a9b1b1593b4b576bf7e1e32366
•广泛应用于互联网安全协议、校验和、存储密码。
•安全性:现在被认为较弱。
只有128位,已经被破坏了。
抗碰撞能力是264。

SHA

哈希计算

  • 4个阶段,每20轮压缩
    密码学-课堂笔记3-哈希函数Hashes_第4张图片
    密码学-课堂笔记3-哈希函数Hashes_第5张图片

SHA - 1

•基于Merkle-Damgard建筑
•Padding -消息填充到512位的倍数
•分成512位块并压缩
•压缩功能由80个轮组成
•每轮有4个阶段,每个阶段20轮。

SHA-1哈希函数族

  • SHA-1,输出160位长度。
    抗碰撞能力为280
  • SHA-256, SHA-384, SHA-512输出256,384,512位长度。
  • 比较见下图(来源:Christopher Paar, page 305)
    密码学-课堂笔记3-哈希函数Hashes_第6张图片
  • 安全性考虑非常强,建议当前使用。

存储密码

  • 问题:用户对服务器的访问,比如由存储在服务器上的密码控制,如何防止入侵者(甚至管理员)查看存储的密码?
  • 解决方法:用户注册时,提供明文密码P。
    • 服务器生成一个salt s,计算Pe = h(s k P)
    • 存储用户名,salt s,“加密”密码Pe,丢弃P
  • salt s,一个随机字符串:
    • 防止2个用户的明文密码相同,加密密码相同
    • 密码文件被盗时更难破解
  • 键拉伸(key stretching):在实践中,要进行多次哈希。

用于存储密码的哈希函数

密码学-课堂笔记3-哈希函数Hashes_第7张图片

  • 示例:使用MD5在Apache web服务器存储密码

akbar: a p r 1 apr1 apr1FNuDwy1Q$EINqkasXFg00vPdzAG5aA.

每行的格式:

userID:method:Salt:Hashed password

apr1方法是apache专用的算法,使用1000次迭代的MD5摘要的salt和密码。

保护消息的完整性

  • 场景:Alice将消息x和h(x)发送给Bob。Bob接收到的消息为x '。
  • 他检查:如果h(x ') = h(x),那么x ’ = x,即消息是完整的。
    这用于检查下载的文件:
    密码学-课堂笔记3-哈希函数Hashes_第8张图片
    在这里插入图片描述

保护消息的完整性和真实性

  • 问题:即使Bob可以验证接收到的声称来自Alice的消息是完整的,Bob怎么能确定它确实来自Alice而不是某个冒名顶替者呢?
  • 答:需要合并身份验证机制。
    • 认证机制:
      • 你所知道的-共享密钥,密码等,
      • 您拥有什么-令牌、证书、公钥等。
      • 你是什么-外表、声音、指纹等。
    • 使用共享密码或密钥进行消息认证

消息验证码- MAC

  • Bob有一条给Alice的明文消息x
  • 消息使用AES或DES加密,使用CBC或CFB模式
  • MAC=m,最后一个输出块
  • Bob将hx, mi发送给Alice
  • Alice从x中计算m’检查,如果m = m’则消息是完整的和真实的。
    密码学-课堂笔记3-哈希函数Hashes_第9张图片

来自Block cipher的mac: CBC-MAC

密码学-课堂笔记3-哈希函数Hashes_第10张图片

  • MAC是最后一个块的输出。它的值取决于之前所有其他块和共享密钥。

MAC属性

  1. 密码校验和是认证标签
  2. 使用共享密钥的对称密钥加密算法
  3. 任意消息大小
  4. 定长认证标签
  5. 提供消息完整性
  6. 提供消息的真实性
  7. 不能提供不可抵赖性,因为密钥是共享的
  8. 消息本身没有加密。

哈希消息认证码(HMAC)

  • 使用一个散列函数来处理添加(或挂起)共享密钥的消息,ks基本思想:
    - HMAC = h(x k Ks) or
    - HMAC = h(Ks k x)
  • 在实践中,两者都有不足之处,不能直接使用。
    密码学-课堂笔记3-哈希函数Hashes_第11张图片

HMAC实现

  • 更安全的实现,由Bellare, Canetti和Krawczyk提出:
    HMAC = h[(Ks+⊕opad) k h[(Ks+⊕ipad) k x]]
    其中,
  • ipad = 00110110,··,00110110
  • opad = 01011100,···,01011100
  • Ks+是扩展的对称密钥Ks,其左边填充0,长度为b位。
    密码学-课堂笔记3-哈希函数Hashes_第12张图片

结论/总结

  • 使用散列函数生成的消息摘要来保护消息的完整性
  • 哈希函数-任意长度输入,固定长度输出,不可逆,抗碰撞,雪崩效应。
  • 用于存储密码的散列,通常带有salt。
  • 消息的真实性保护需要共享密钥:使用MAC, HMAC
  • MAC使用对称分组密码和共享密钥。
  • HMAC使用hash函数和共享密钥
  • MAC和HMAC不提供不可否认性

你可能感兴趣的:(Information,Security)