Hash函数

2023-11-06

概述

Hash函数(散列函数):是一种将任意长度的数据映射到有限长度的域上。通俗来讲,就是将一串任意长度的数据进行打乱混合,转换为一段固定长度的数据输出,这段数据便成为输入数据的一个“指纹”(特征)。Hash函数的首要目标是保证数据的完整性。而不是安全性。

Hash函数的安全性

Hash函数的安全需求

需求 描述
输入长度可变 Hash函数可以应用于任意长度的数据块
输出长度固定 Hash的输出长度是固定的
效率 对任意的x,计算H(x)在计算上是较容易的
抗原像攻击(单向性) 对任意给定的H(n),计算n在计算上是不可行的。
抗第二原像攻击(抗弱碰撞性) 对任意给定的x,找到一个y(y≠x)使得H(x)=H(y)在计算上不可行
抗碰撞攻击(抗强碰撞性) 对任意的Hash函数,找到满足的H(x)=H(y)在计算上不可行。
伪随机性 输入相同,H的输出也一定相同

Hash函数的安全属性

1. Collsion-free 无冲突

根据Hash的安全需求,Hash函数的输入长度InputLength是任意的,但是,其输出长度的OutputLength是固定的。从理论上而言,Input的组合是无穷多种,而OutPut的组合是有限的,那么应该是存在两个不同的数据会生成同样的哈希值。但是,对于SHA256而言,尝试2256+1次数据会有1次数据冲突。尝试2130次数据会有99%的可能性找到冲突。

应用: 信息摘要(Message digest),因为冲突的几率很小,那么我们可以利用记住大信息的哈希值来进行信息比对,以减少数据比对的运算。也就是将哈希值作为信息的识别“指纹”。

2.Hiding 隐藏性

Hash函数的单项函数,是不可逆的,Hash值不能转换为原来的数据值,能够很好的隐藏原数据。对于一个大的数据库而言,如身份认证,一个公司存储的用户账号密码,一般存储其登录账号和密码的Hash值,避免数据泄露后,攻击者能够轻松的使用用户账户。但是,如果数据是由简单的数字组成,那么也很容易遭受到暴力破解,这也是为什么在密码设定中会要求用户加入字母,符号等。为了达到隐藏元数据的目的,元数据需要选自范围特别广的集(highmin-entropy)

应用: Commitment,即只公布哈希值,而在之后再公布哈希前的原数据。后期所有用户都可以通过比对哈希值来验证“信封”中的内容是否更改。

3.Puzzle-friendly 谜题友好性

Hash函数中一个字节的变动就能导致生成完全不同的哈希值(雪崩效应),且哈希值的改变没有任何的规律可循。
对于每一个用k来加密x得到的结果H(k | x) = y,在知道y、k和H(k|x)的条件下,不存在比随机遍历更好的方法。

Hash函数的应用

消息认证

消息认证是用来验证消息完整性的一种机制或服务。消息认证确保收到的数据和发送时是一致的(消息没有被篡改)。

消息认证的本质是:利用Hash函数对发送者即将发送的消息计算一组Hash值,然后将消息与Hash值一同发送。接收者在收到消息后利用相同的Hash函数对消息进行计算,并将结果与发送过来的Hash值进行比对,若不匹配,则推断出消息在传送的过程中受到了篡改。

消息认证共有一下几种不同的方法:

1.使用对称加密消息和Hash码。
2.使用堆成密码算法支队Hash码进行加密。
3.不使用加密算法,即假设通信双方之前已经共享了一个秘密值,将该秘密值和消息串联起来再进行Hash,再将Hash过后的值与消息进行拼接发送。
4.在步骤3的基础之上,将消息和拼接Hash过后的Hash值一起对称加密发送。

数字签名

数字签名实质上也是利用Hash函数对消息进行杂糅,但不同于消息认证的是,他将这串数据或者数据的一部分进行密码变换。数字签名能够在保证数据的完整性的同时,还能够保证数据发送方的不可抵赖性。

基于公钥密码体制和私钥密码体制都能够得到数字签名,但主要是基于公钥密码体制的数字签名(这句话源自百度)。个人理解是在对称秘钥的情境下,这种签名又叫消息认证码。常用的数字签名的算法有:RSA、ElGamal、Des/DSA,椭圆曲线数字签名算法。

Hash码用于数字签名的方案:

  1. 使用用户的私钥,利用公钥密码算法对Hash值进行加密。
  2. 上一种方法没有提供保密性,所以可以在上述的过程之后,利用对称密码进行加密。

SHA

SHA其实只是Secure Hash Algorithm(安全Hash算法)的缩写。事实上,其余被广泛使用的Hash函数被先后显现存在安全性问题。如:2004年的国际密码讨论年会(CRYPTO)尾声,王小云及其研究同事展示了MD5、SHA-0及其他相关散列函数的散列冲撞。也就是说,他们找到了一种方法,能够让x≠y的情况下MD5(x)=MD5(y),并且这种方法代价远小于随机暴力破解。其实,SHA-1也已经被找到了方法能够散列冲撞。

所以我们主要讨论SHA-2,而SHA-2中一共有多种版本,其Hash值得长度依次为224、256、384和512位,人们一般将其称为:SHA-224、SHA-256、SHA-384和SHA-512。SHA-2其实和SHA-1类似,都采用的是相同得迭代与二元逻辑操作,SHA-1和SHA-2之间的主要区别在于哈希的长度。SHA-1的散列是更基础的版本,提供了较短的代码,唯一组合的可能性较小,而SHA-2或SHA-256创建的散列则更长,因此更为复杂。

SHA参数对比

SHA-1 SHA-224 SHA-256 SHA-384 SHA-512
消息摘要长度 160 224 256 384 512
消息长度 <264 <264 <264 <2128 <2128
分组长度 512 512 512 1024 1024
字长度 32 32 32 64 64
步骤数 80 64 64 80 80

SHA-512

Input: m(m<2128)
Output: 512bit
处理单元:1024bit

  1. 附件填充位: 填充m,使得填充后的 length(message)≡ 896 (mod 1024 )。

    填充要求:即便已经满足 length(message)≡ 896 (mod 1024 ),也要对消息进行填充一次。
    填充方式:填充由一个1,后全由0补充。

  2. 附加长度:在消息后附加一个128位的块。在message 后面加128位的数据块, 他表示了m的长度。

由①②可知,填充后的信息M已经是1024整数倍了,将M分为一个个的函数处理单元,M1,M2,…,MN

  1. 初始化Hash。Hash的中间结果与最中结果都存在寄存器中。缓冲区由8个64位寄存器组成(a,b,c,d,e,f,g,h)。这8个寄存器的初始值为:前8个个素数取平方根,取小数部分前64位。(以高位存储)
  2. 以1024位为分组处理数据,SHA-512需要经过80轮运算模块(SHA-256经过64轮)
  3. 输出
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hash函数 的相关文章

  • 渗透初识之DVWA靶场搭建及使用(详细图文)

    目录 环境搭建 一 下载DVWA 二 安装DVWA 三 DVWA 使用 环境搭建 我将环境搭在win7 漏洞环境建议还是在虚拟机上搭建 一 下载DVWA 下载地址 Buy Steroids Online UK Anabolic Steroi
  • shell 学习记录(一)-Orange Pi Linux 5.4 SDK启动脚本build.sh

    前言 完全shell菜鸟 以Orange Pi Linux 5 4 SDK编译启动脚本build sh学习shell 对不懂的语法 命令记录 一 获取当前文件夹绝对路径 SRC dirname realpath BASH SOURCE 0
  • 带你玩转Visual Studio

    带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念 解决方案与工程 解决方案 Solution 一个大型项目的整体的工作环境 工程 Project 一个解决方案下的一个子工程

随机推荐

  • 小程序中如何将页面生成图片?

    记一次开发一款小程序遇到的需求 根据用户填写的商品信息 生成一张可分享的购买海报 简单的看了一下小程序的canvas组件 是可以满足这个需求的实现 所以就开始规划 组织代码了 1 小程序组件 canvas 是可以实现的 这里我就不多说了 但
  • 英语怎么学

    我是怎么从零开始学英语的 哈哈哈 在很多人眼里 英语难 和我以前的认为一样 其实英语是最好学的一个语言 很有规则 远比我们的母语中文好学 多数不要一年 就能够过关了 但要友技巧 很多人一定会认为我晕了头 不要急 等我说完了 你再说这话也不迟
  • MySQL 利用UDF执行命令

    UDF即User Defined Functions lib mysqludf sys 在github的介绍 A UDF library with functions to interact with the operating syste
  • Openwrt-搭建一个Git服务器

    简介 对于Git文件的管理 一直是一个比较困扰的问题 目前是流行的Github是一个不错的选择 但是默认是开源的 如果是一些不愿共享出来的文件代码 我们最好是搭建一个自己的服务器 在git官方网站有git服务器的搭建方法 今天 我要说的是在
  • PYQT5表格及样式设置方法

    PYQT5遇到的问题和解决 1 给table添加样式 table 透明度设置 构造一个含图片的label 再用setCellWidget把label插入单元格 1 给table添加样式 1 qApp setStyleSheet font s
  • 《因果学习周刊》第6期:因果推荐系统

    No 06 智源社区 因果学习组 因 果 学 习 研究 观点 资源 活动 关于周刊 因果学习作为人工智能领域研究热点之一 其研究进展与成果也引发了众多关注 为帮助研究与工程人员了解该领域的相关进展和资讯 智源社区结合领域内容 撰写了第6期
  • 【GeekUninstaller】卸载程序

    软件介绍 删除不了的文件 或者软件可以下载试试不需要安装 文章目录 前言 一 如何下载 二 使用步骤 1 安装完之后自动打开 前言 GeekUninstallers是一款高效 快速 小巧 免费的软件卸载与清理工具 旨在帮助用户删除系统上安装
  • caffe源码追踪--syncedmem

    首先来看看caffe include caffe syncedmem hpp ifndef CAFFE SYNCEDMEM HPP define CAFFE SYNCEDMEM HPP include
  • 深度学习之 python pandas

    在数据科学领域 pandas是非常有用的工具 在数据科学细分领域大数据 通常和深度学习有关 这部分 本篇博客从pandas重要函数开始 到数据变换以及数据分析 pandas提供了数据变换 数据清理 数据可视化以及数据提取等主要数据处理功能
  • tar -xf_linux 解压缩命令tar

    linux环境下常见的压缩文件格式 tar tar gz tar bz2 tar xz 参数 c create create a new archive 创建文件 x extract get extract files from an ar
  • 静态资源上传七牛云

    一 七牛云SDK function 请参考demo的index js中的initQiniu 方法 若在使用处对options进行了赋值 则此处config不需要赋默认值 init options 即updateConfigWithOptio
  • Python爬虫实战(五) :下载百度贴吧帖子里的所有图片

    准备工作 目标网址 https tieba baidu com p 5113603072 目的 下载该页面上的所有楼层里的照片 第一步 分析网页源码 火狐浏览器 gt 在该页面上右击 查看页面源代码 会打开一个新的标签页 第二步 查找图片源
  • ue4蓝图中的customevent和function的细微差别。

    在调用第三方库时 我用customEvent时 可以调用LowEntryHttpRequest中的 Executes the request This blueprint can NOT execute several HTTP Reque
  • 记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

    直接问AI它们之间的区别的话 是这么回答的 浏览器缩放和移动端缩放是两种不同的概念 它们涉及到用户在不同设备上改变网页内容大小的方式 以下是它们的主要区别 浏览器缩放 Desktop Browser Zoom 浏览器缩放是指在桌面计算机浏览
  • 以太坊学习计划1

    1 如果链接远程链 需要上链才可以 打开服务才可以 2 开启本地geth 服务 下载https geth ethereum org downloads 默认启动geth服务 不启动rpc服务 手动用命令行启动 geth rpc 代码端调用
  • C++的使用小教程8——多态与接口

    C 的使用小教程8 多态与接口 1 什么是多态与接口 2 实现方式 3 应用实例 学习好幸苦 1 什么是多态与接口 C 多态意味着调用成员函数时 会根据调用函数的对象的类型来执行不同的函数 接口描述了类的行为和功能 而不需要完成类的特定实现
  • Qgis国际化

    参考文章 QT实现多国语言 几点需要注意的 1 pro文件生成方法 2 ts文件生成方法 输入命令 lupdate f code QT Code QtApplication2 QtApplication2 QtApplication pro
  • Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介

    Vit 最基础的 就是将transformer的encoder取出来 输入图像大小维度 B C H W 将图片不重叠地划分为H patch height w patch weight个patch 每个patch为patch height p
  • Spark相关问题

    Spark相关问题 Hadoop FileFormat接口问题 Hadoop FileOutputFormat在写入数据的时候先写到临时目录 最后写入最终目录 临时目录到最终目录的过程中需要做文件树合并 合并过程中有大量Rename操作 F
  • Hash函数

    概述 Hash函数 散列函数 是一种将任意长度的数据映射到有限长度的域上 通俗来讲 就是将一串任意长度的数据进行打乱混合 转换为一段固定长度的数据输出 这段数据便成为输入数据的一个 指纹 特征 Hash函数的首要目标是保证数据的完整性 而不