密码学学习笔记(五):Hash Functions - 哈希函数1

简介

什么是密码学中的哈希函数?

哈希函数是一种快速算法,它接受任何长度的输入,并产生一个固定长度的随机输出,称为摘要(digest),比如:

  • MD4, MD5: 128-bit output (broken)
  • SHA-1: 160-bit output (broken)
  • SHA-2: 224, 256, 384, or 512-bit output
  • SHA-3: 224, 256, 384, 512, …-bit output

雪崩效应 - Avalanche effect:输入的微小变化导致输出的巨大变化

比如:

哈希函数的安全要求

  • 单向或Preimage Resistant - 抗第一原像性:给定H(x),很难找到x
  • Second-Preimage Resistant - 抗第二原像性:给定x,很难找到不同的y,使得H(x)=H(y)
  • 抗碰撞性 - Collision Resistant:很难找到不同的x,y,使得H(x)=H(y)
  • 随机Oracle:对H进行建模,以产生随机值作为输出
  • “hard”意味着没有(已知的)算法在合理的时间(例如一天)内以合理的概率(例如50%)成功进行攻击

密码学中的哈希函数是用来干什么的?

  • 存储密码摘要:例如哈希(nonce、challenge、password)
  • 完整性检查:例如软件下载摘要、入侵检测
  • 注册表和配置文件的快照
  • 哈希表:索引=哈希(数据库密钥)
  • MAC和数字签名:加密完整性保护
  • 承诺:安全地承诺一个价值,并在以后揭示它
  • 密钥派生功能:例如,从主密钥生成会话密钥
  • 随机数生成:例如挑战生成
  • 重复数据消除
  • 工作证明:例如证明花费的计算资源

存储密码摘要

  • 通常会存储一个加密的密码散列
  • 如果通信被截获,我们希望很难计算H(salt,pwd)
  • 如果数据库受损,我们希望很难找到pwd
  • 因此,至少我们希望散列是单向的:知道输出,应该很难找到给出该输出的输入(除非我们尝试所有可能的输入)
  • 例如,给定H(salt,pwd),很难找到salt,pwd

入侵检测

  • 系统文件是“指纹”(即散列),摘要存储在安全的保险库中,以便稍后与新摘要进行比较
  • 如果系统受损(但不是vault)并且系统文件被修改,则摘要不应匹配
  • 对手看到原始文件(原始输入),不应能够构建摘要匹配的修改文件(第二输入)
  • 因此,至少我们想要second-preimage resistance,即知道一个输入,应该很难找到另一个具有相同摘要的输入

哈希表

  • 对数据库键进行散列处理,以快速计算记录索引并加快查找速度
  • 理想情况下,我们希望将不同的键散列到不同的索引中
  • 不同的输入散列到相同的输出称为冲突
  • 因此,至少我们想要抗碰撞 - Collision Resistant:应该很难找到两个具有相同摘要的不同输入

密钥导出函数 - Key Derivation Function (KDF)

  • 用于从主密钥派生新会话密钥的KDF
  • 例如,在Intel SGX等安全元件中,或在Signal等端到端加密即时消息中
  • KDF是通过组合散列函数构建的
  • 我们需要哈希函数是单向的
  • 我们还需要散列函数来产生不可预测的随机输出
  • 因此,我们需要散列函数作为一个随机函数,称为随机预言机,即对任何输入进行建模,以产生真正的随机输出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值