第二十个知识点:Merkle-Damgaard hash函数如何构造

这里讲的是MD变换,MD变换的全称为Merkle-Damgaard变换.我们平时接触的hash函数都是先构造出一个防碰撞的压缩函数.然后先证明这个小的,固定长度的压缩函数是安全的,然后再用它构造一个任意长度的哈希算法.虽然存在很多其它的构造方法,MD是迄今为止最常用的(至少是被用到最多的),例如MD5,SHA1,SHA2.因此是时候来了解一下它了.

安全的哈希函数?

一般来说,一个安全的哈希函数\(h\)应该是:

  • 抗原象攻击(Pre-image Resistant).给定\(h(x)\)很难计算出\(x\)
  • 第二抗原象攻击(Second Pre-image Resistant).给定\(x\),很难找出\(y\),使得\(h(x) = h(y)\).
  • 抗碰撞:很难找出\(x,y\)使得\(h(x) = h(y)\)

如果一个哈希函数是防碰撞的.它一定是第二抗原象攻击的.因此,这就是我们集中的碰撞一致性.

压缩函数

一个压缩函数\(f:\{0,1\}^n * \{0,1\}^r \rightarrow \{0,1\}^n\)是函数.就像名字一样"压缩",它会将\(n+r\)bit宽的输入压缩成\(n\)bit的输出.正如您可能期望的那样,抗冲突压缩函数是一种抗冲突的压缩函数.因此它可能是一个固定长度的hash函数,但是如果我们想让这个函数变成长度可变的,我们应该怎么办.

MD哈希函数的构造

MD构造函数提供一个方法扩展一个固定长度的压缩函数变成一个可变长度的压缩函数.使用一个压缩函数\(f\),我们会用\(n\)bit的值作为我们的内部状态,同时每次迭代给定\(r\)bit的值.为了做这件事,我们首先使用一个初始的值(IV),然后分割消息\(M\)成每块\(r\)bit,\(M= M_0M_1...M_m\).然后简单的迭代构造:

\[S_0 := IV,i = 0,...,m-1:S_{i+1} = f(S_i,M_i),h(M) := S_m
\]

MD构造方法中最重要的就是如果压缩函数抗碰撞的,因此整个构造就是抗碰撞的(已经被Merkle证明了).这给了我们一个安全的方法从一个小的简单的密钥原语构造hash函数.

长度扩展

你可能注意到这个图有一个我没有描述的阶段:这个Finalisation阶段.这就是组织长度扩展攻击.例如,如果\(N\)是一个单一的块(ie,\(N \in \{0,1\}^r\)).如果攻击者知道\(h(M) = x\),然后我们很容易计算\(h(M||N)\).因为\(h(M||N) = f(M,N)\).因此一些finalisation函数能被用于打破这个关系.

实际上这里说的啥我没懂,但是我翻看了别的书

look!这里就是真正的过程,如果它的倍数不对,就是用PB,即padding.

padding的格式是:

\[PB = 100...000||<s>
\]

s是块的数量,s是64bit长,也就是说最多有\(2^{64}\)个块.如果不够s那么就在后面再补一个块.

安全证明可以搜一搜,网上都能搜到.

第二十个知识点:Merkle-Damgaard hash函数如何构造的更多相关文章

  1. 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度

    来源:http://my.oschina.net/pathenon/blog/65210 1.概述     跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.Mi ...

  2. hash算法和常见的hash函数 [转]

       Hash,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值. 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能 会散列成相同的输出,而不 ...

  3. 第五十个知识点:什么是BLS基于对的签名方案?

    第五十个知识点:什么是BLS基于对的签名方案? BLS签名方案使用了椭圆曲线上了Weil对,本质上是一个在曲线上除n划分的双线性形式,使用 \(n^{th}\) 个单位根. 假设我们有一个椭圆曲线\( ...

  4. Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取,考虑到这点,就要确保用户一些敏感数据(例如密码)的安全性.今天,我们要学的是 hash 背后的基础知识,以及如何用它来保护你的 web 应用的密码. 申明 密码学 ...

  5. 理解php Hash函数,增强密码安全

    1.声明 密码学是一个复杂的话题,我也不是这方面的专家.许多高校和研究机构在这方面都有长期的研究.在这篇文章里,我希望尽量使用简单易懂的方式向你展示一种安全存储Web程序密码的方法. 2.“Hash” ...

  6. 密码学Hash函数

    定义: Hash函数H将可变长度的数据块M作为输入,产生固定长度的Hash值h = H(M). 称M是h的原像.因为H是多对一的映射,所以对于任意给定的Hash值h,对应有多个原像.如果满足x≠y且H ...

  7. 28.密码学知识-hash函数-5——2019年12月19日

    5. 单向散列函数 "单向散列函数 --- 获取消息的指纹" 在刑事侦查中,侦查员会用到指纹.通过将某个特定人物的指纹与犯罪现场遗留的指纹进行对比,就能够知道该人物与案件是否存在关 ...

  8. 使用模拟退火算法优化 Hash 函数

    背景 现有个处理股票行情消息的系统,其架构如下: 由于数据量巨大,系统中启动了 15 个线程来消费行情消息.消息分配的策略较为简单:对 symbol 的 hashCode 取模,将消息分配给其中一个线 ...

  9. 第十个知识点:RSA和强RSA问题有什么区别?

    第十个知识点:RSA和强RSA问题有什么区别 这个密码学52件事数学知识的第一篇,也是整个系列的第10篇.这篇介绍了RSA问题和Strong-RSA问题,指出了这两种问题的不同之处. 密码学严重依赖于 ...

随机推荐

  1. mysql报错max_connections错误

    SELECT @@MAX_CONNECTIONS AS 'Max Connections';set GLOBAL max_connections=10000; show status like '%t ...

  2. sql技巧(增册改查)

    1 select * from wyl.t; 2 --将数据从t1导入t2 3 insert into t2(c1,c2) select c1,c2 from t1 where c1= xx and ...

  3. 删除button中除label之外的View

    因为button中的UIButtonLabel判断class类型时,会被认为是view,所以想删除view类型的子控件时,会将label也删掉,从而无法显示title,此时,可以给指定的View添加t ...

  4. vue-cli 如何配置assetsPublicPath; vue.config.js如何更改assetsPublicPath配置;

    问题: vue项目完成打包上线的时候遇到静态资源找不到的问题,网上很多解决办法都是基于vue-cli 2.x 来解决的,但从vue-cli 3.0以后,便舍弃了配置文件夹(便没有了config这个文件 ...

  5. UIImageView总结

    UIImageView UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITa ...

  6. 【Linux】【Services】【MessageQueue】搭建高可用rabbitMQ

    1. 简介 1.1. 官方网站: https://www.rabbitmq.com/ 1.2. 配置文档:https://docs.openstack.org/ha-guide/shared-mess ...

  7. shell脚本下载网页图片

    和大家分享一个shell脚本写的图片抓取器.使用方法:img_downloader.sh.使用时在shell下输入:./img_downloader.sh www.baidu.com -d image ...

  8. i++ 和 ++i 探究原理

    先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...

  9. 【前端】关于DOM节点

    参考这个: https://juejin.cn/post/6844903849614901261 DOM树的根节点是document对象 DOM节点类型:HTML元素节点(element nodes) ...

  10. 索引以及Mysql中的索引

    一.什么是索引 索引是表的目录,会保存在额外的文件中,针对表中的指定列建立,专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取 ...