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

哈希函数是怎么构成的?

Merkle–Damgård结构

  • 哈希函数需要能够处理任意长度的输入。
  • 许多散列函数,例如MD5、SHA-1、SHA-2,都是由构建块(称为压缩函数)组成的,这些构建块可以处理特定的块大小,并提供较短的输出,例如SHA-256:768位到256位
  • 输入被分解成块,并用1000…0填充,连接64位的输入长度
  • 如果h是抗冲突的,则哈希函数是抗冲突

如果压缩函数本身是抗碰撞的,那么我们可以证明Merkle–Damgård结构是抗碰撞的。这样一来,输入长度不固定的哈希函数的安全性就简化为输入长度固定的压缩函数的安全性。

Davies–Meyer结构

  • 给定一个分组密码,构造一个压缩函数
  • 消息块作为分组密码密钥
  • 以前的散列块作为分组密码输入
  • 从分组密码的密钥+分组长度到分组密码的分组长度的压缩
  • 如果分组密码是“理想”的分组密码,则该结构是抗冲突的
  • 用于MD5(损坏)、SHA-1(E=SHACAL-1)、SHA-2(E=SHACAL-2)

这个压缩函数的第一个输入块作为分组密码的密钥;第二个输入块作为分组密码的输入进行加密。然后,用第二个输入快与分组密码的输出进行异或操作。

Sponge Construction - 海绵结构

  • 最近的散列函数,比如SHA-3(Keccak),是基于一个叫做Sponge的构造。
  • 安全级别由容量c决定,r表示速率。
  • 与Merkle–Damgård不同,Sponge的输出大小是灵活的。

注:这三个构造只是简单介绍了一下,并没有详细的解释原理。以后有时间会把每个构造单独写一篇博客。

SHA-3 竞赛

  • 目标:替代SHA-2
  • 2007年:NIST宣布竞争
  • 2008年:提交截止日期,宣布了51名第一轮候选人
  • 2009年:宣布了14名第二轮候选人
  • 2010年:宣布了5名决赛选手:BLAKE、Grøstl、JH、Keccak、Skein
  • 2012年:Keccak宣布成为SHA-3冠军

Z

https://csrc.nist.gov/projects/hash-functions/sha-3-project
https://ehash.iaik.tugraz.at/wiki/The_SHA-3_Zoo

一个好的哈希函数能带来多强的安全性

Preimage Security - 第一原像性安全

  • 如果我们有一个完美的散列函数,比如说256位输出…
  • 执行图像前攻击(即给定输出,找到输入)的唯一方法是尝试逐一对不同输入进行彻底搜索(也称为暴力搜索 - brute-force)。
  • 我们很有可能通过尝试大约2256个输入来找到预图像(为什么?)。所以我们说它提供了256位的预映像安全性。
  • 具有d位输出的哈希函数可能提供的最大预映像安全级别是d位。

Collision Security - 碰撞性安全

  • 让我们在具有256位输出的哈希函数中强制执行冲突
  • •当我们尝试例如第i个输入时x_{i}, 我们可以检查一下𝐻(x_{i}) 与之前的任何一个相同,比如𝐻(x_{0}),𝐻(x_{1}),...,𝐻(x_{i-1}
  • 因此,在第i步中,我们有成功的概率𝑖/2^{256}
  • 所以总的概率是:

  • 这意味着,通过大约2^{128}次尝试,我们可以很有可能发现碰撞
  • 具有d位输出的哈希函数可能提供的最大冲突安全级别为d/2位

Birthday Bound - 生日边界

  • 对于很多人来说,找到一对生日相同的情侣的概率是多少?
  • 只有23人,约50%的机会
  • 一般来说,如果有𝑛个可能性,随机选择将有50%的机会碰撞后大致\sqrt{n}尝试。

Merkle哈希树

  • 哈希可以排列在一个称为Merkle哈希树的二叉树中。
  • 只有最高级哈希(根哈希)才需要保持安全,以检测记录中的任何更改。
  • 用于例如BitTorrent、Git、比特币

Membership Proof

  • 为了证明记录在数据库中具有给定的根哈希,只需要给定与路由到根哈希相邻的哈希。
  • 其余数据不需要,可以保持隐私。

HMAC

  • 修改Merkle–Damgård结构,从压缩函数h构建安全的MAC
  • ipad和opad是固定常数
  • 如果h具有抗碰撞性,则HMAC为UF-CMA
  • 比CBC-MAC快得多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13546.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos环境Access denied for user ‘root‘@‘%to database ‘xxx‘

Centos7解决数据库出现Access denied for user ‘root‘‘%to database ‘xxx‘ 问题 原因: root%表示 root用户 通过任意其他端访问操作 被拒绝! 授权即可: 1:进入数据库 mysql -u root -p 2.输入 mysql>grant all privileges on *.* to root% with grant o…

pdf转为ppt的超简单方法,就用这几个!

在我们的工作和生活中,PDF文件是不可或缺的文件格式之一。它以高准确性、整齐的页面排版和流畅的翻页而闻名,为我们处理文档提供了很大的帮助。然而,PDF文件的一个缺点是无法进行修改。当我们不小心输入错误数据或需要进行编辑时,…

SQL Server中如何将累积数值拆解

概要 本文通过一个计算汽车每日里程数的例子,展现如何通过汽车每日的总里程数,来计算汽车每日的里程数。 代码及实现 每辆汽车中都有一个里程数表,记录汽车从出场到当前行驶的里程数,下表是一样汽车的里程数表,该表…

Jetpack compose——深入了解Diffing

Diffing是什么 "Diffing" 是 Jetpack Compose 中用于优化性能的一种技术。它的工作原理是比较新旧 UI 树,并只更新实际发生变化的部分。这意味着即使你的应用有大量的 UI,Compose 也能保持高效的性能。 当 Composable 函数被重新调用&#x…

MybatisX插件自动生成sql失效问题的详细分析

mybatis框架提供了非常好用的逆向工程插件,但是根据数据库驱动版本的不同会出现一些问题。 在使用mybatisX插件的时候使用Generate mybatis sql无法实现自动生成sql 解决方案: 1.首先检查自己的数据库中表是否有主键,如果没有主键是不会生…

Jetpack Compose与Accompanist:改变Android UI开发的方式

在Android开发中,UI开发一直是一个重要的部分。Google推出的Jetpack Compose库为开发者提供了一种全新的声明式UI工具,使得UI开发变得更加简单和直观。而Accompanist库则为Jetpack Compose提供了一系列有用的扩展,进一步提升了开发效率。 Jet…

考研的尽头是考公?

2022年12月23日,作为中国诞生于互联网的职业考试培训行业市场领导者的粉笔有限公司(“粉笔”或“公司”) ,早前通过港交所上次聆讯后开始招股。 据悉,粉笔计划发售20,000,000股股份(…

English Learning - L3 综合练习 10 口语语法串讲与思维回顾 2023.07.5 周三

English Learning - L3 综合练习 10 口语语法串讲与思维回顾 2023.07.5 周三 [知识点 1] 名词性从句问题:到底什么是名词笥从句?例 1:我的东西你都可以随便用例 2:不管是谁,放你鸽子就是混蛋例 3:说那种话的…

flutter:数据持久化

简单的数据持久化 保存数据到本地磁盘是应用程序常用功能之一,比如保存用户登录信息、用户配置信息等。而保存这些信息通常使用 shared_preferences,它保存数据的形式为 Key-Value(键值对),支持 Android 和 iOS。shar…

安装git工具

下载安装地址: Git - Downloading Package (git-scm.com) 命令安装:创建文件夹下载路径 启动powershell 输入命令:winget install --id Git.Git -e --source winget 等待下载安装

查询子节点 postgresql

数据库为postgresql WITH RECURSIVE cte AS (SELECTn. ID,n. com_name,n."parentId" AS pidFROMcompany AS nWHEREn. ID = 2UNION ALLSELECTr. ID,r. com_name,cte. ID AS pidFROMcteJOIN company AS r ON r.

Linux命令之nc命令

一、命令简介 nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat。nc命令的主要作用如下: 实现任意TCP/UDP端口的侦听,nc可以作为server以T…