单向散列函数的性质

2023-11-20

一 根据任意长度计算出固定长度的散列值

首先,单向散列函数的输入必须能够是任意长度的消息。其次,无论输入多长的消息,单向散列函数必须都能够生成长度很短的散列值,如果消息越长生成的散列值越长的话就不好用了。从使用方便的角度,散列值的长度最好是短且固定的。

二 能够快速计算出散列值

计算散列值花费的时间必须要短。尽管消息越长,计算散列值的时间也会越长,但如果不能在现实的时间内完成计算就没有意义了。

三 消息不同,散列值也不同

为了能够确认完整性,消息中哪怕只有1比特的改变,也必须有很高的概率产生不同的散列值。如下图所示:

如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数就无法用于完整性的检查。两个不同的消息产生同一个散列值的情况称为碰撞。如果要将单向散列函数用于完整性的检查,则需要确认在事实上不可能被人为地发现碰撞。

难以发现碰撞的性质为抗碰撞性。密钥技术中所使用的单向散列函数,都需要具备抗碰撞性。

下面以Alice用单向散列函数来检查文件完整性的场景为例,说明什么是抗碰撞性。

假设Alice所使用的单向散列函数不具备抗碰撞性。

Alice在回家之前得到下面的散列值:

Alice在睡觉的时候,主动攻击者Mallory入侵了Alice的计算机,并改写了Alice的文件。

由于我们假设Alice的单向散列函数不具备抗碰撞性,因此Mallory能够找到一种改写文件的方法,使得改写后文件的散列值不发生变化。于是,虽然Mallory改写了文件,但散列值没有发生变化。

第二天早上,Alice重新计算散列值,得到下面的结果。

这个结果和昨晚散列值一致,Alice松了一口气。但是,实际上Mallory已经改写了文件,Alice将Mallory改写的文件复制出来制成了母盘。

这里所说的抗碰撞性,指的是难以找出另外一条具备特定散列值的消息。当给定某条消息的散列值时,单向散列函数必要确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的。这一性质称为弱抗碰撞性。单向散列函数都具备弱抗碰撞性。

和弱抗碰撞性相对的,还有强抗碰撞性。所谓强抗碰撞性,是指要找到散列值相同的两条不同的消息时非常困难的这一性质。在这里,散列值可以是任意的。

密码技术中所使用的单向散列函数,不仅要具备弱抗碰撞性,还必须具备强抗碰撞性。

四 具备单向性

单向散列函数必须具备单向性,单向性指的是无法通过散列值反向算出消息的性质。根据消息计算散列值可以很容易,但这条单行路是无法反过来走的。

根据消息计算出散列值很容易,但根据散列值却无法反算出消息。

尽管单向散列函数所产生的散列值是和原来的消息完全不同的比特序列,但是单向散列函数并不是一种加密,因此无法通过解密将散列值还原成原来的消息。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单向散列函数的性质 的相关文章

  • win10 系统锁屏壁纸的目录

    路径 C Users 你自己的用户名 AppData Local Packages Microsoft Windows ContentDeliveryManager cw5n1h2txyewy LocalState Assets 查看 需要
  • 使用php简单网页抓取和内容分析,PHP抓取及分析网页的方法详解

    本文实例讲述了PHP抓取及分析网页的方法 分享给大家供大家参考 具体如下 抓取和分析一个文件是非常简单的事 这个教程将通过一个例子带领你一步一步地去实现它 让我们开始吧 首先 我首必须决定我们将抓取的URL地址 可以通过在脚本中设定或通过
  • python 去除所有的中文 英文标点符号

    去除英文标点符号 python的string模块下的 punctuation 包含所有的英文标点符号 所以用replace 一下就可以去除 代码示例 import string stri today is friday so happy p
  • MacOS中清除原有ssh公钥方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 用ssh的跳转登录服务器后 ssh会把你每个你访问过计算机的公钥 public key 都记录在 ssh known hosts 当下次访问相同计算机时 SSH会核对公钥
  • smbms 获取角色操作,角色管理实现

    为了我们职责统一 可以把角色的操作单独放在一个包中 和pojo中的对应 RoleDao 接口 package com Li dao role import com Li pojo Role import java sql Connectio

随机推荐

  • 数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

    树的概念 首先 树是一种常用的非线性数据结构 是以边 Edge 相连的节点 Node 的集合 每个节点存储对应的值 当存在子节点时与之相连 根节点 是树的首个节点 边 所有节点都由边相连 用于标识节点间的关系 叶子结点 树的末端节点 它们没
  • 10讲学会C语言之第五讲:函数

    文章目录 前言 一 计算圆柱体积 二 数字金字塔 三 结构化程序设计 四 复数运算 五 作业 前言 大家好 我是卷卷 本节课是第五讲 函数 本节课主要有这五个部分 计算圆柱体积 数字金字塔 结构化程序设计 复数运算 作业 文末附课程资源和讨
  • ajax.beginform json,javascript - How to use Ajax.BeginForm MVC helper with JSON result? - Stack Over...

    I m trying to use the ASP NET MVC Ajax BeginForm helper but don t want to use the existing content insertion options whe
  • Kotlin与Java互操作要注意的问题

    个人使用Kotlin开发也有一年了 一直想总结一下Kotlin和Java互相操作要注意的问题 偶然看到一篇总结不错的文章就直接搬运过来了 前言 目前kotlin是谷歌首推的开发Android的语言 但由于历史原因 我们绝大部分项目依旧还是以
  • 04 Linux Shell 文件描述符 及 stdin stdout stderr 重定向

    Abstract 1 Linux Shell 命令的标准输入 标准输出 标准错误 及其重定位 2 Linux Shell 操作自定义文件描述符 文件描述符是与文件相关联的一些整数 他们保持与已打开文件的关联 众所周知的文件描述符是标准输入s
  • 数据结构双链表之(三)按值插入&&寻找&&求长度

    文章目录 1 思路 1 1 按值插入 1 2 寻找 1 3 求长度 2 代码 2 1 DList h 2 2 DList cpp 2 3 main cpp 3 结果 3 1 按值插入 3 2 寻找 3 3 求长度 1 思路 1 1 按值插入
  • Java中的List接口

    文章目录 前言 一 什么是List 二 List常见接口介绍 三 List的使用 总结 前言 以实践为线索 逐步深入数据结构和算法 提升编程能力和思维能力 一 什么是List 在集合框架中 List是一个接口 继承自Collection C
  • git 新添加一个项目

    如何将一个新的项目放到制定的git地址上 1 创建一个项目 2 在githup上添加一个仓库 3 在命令行模式下 在指定的目录下 git init 此处需要修改一下ignore文件 git remote add origin https g
  • jvm之栈、堆

    1 Java Virtual Machine 人群当中 一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌 就在此时 c老头和c 老头缓步走来 看着被众人围住的java c老头感叹地对着身旁的c 说道 原以为你就可以挑起我的梁
  • 反斜杠“\”与斜杠“/” 的区别

    与 的区别为 用途不同 系统不同 网址不同 一 用途不同 1 只能用来表示目录 2 技能作为除法符号或者间隔符号使用 也能用来表示目录 二 系统不同 1 用作目录时 适用于windows系统 2 用作目录时 适用于unix系统 也可用于wi
  • Kali安装配置中的一些小细节

    整理文档时 找到了一年前的一些文档 零零散散 在其中看到了一篇在初学kali时写的注意点 我根据更新做了一些修改 都适用于kali最新版 希望能帮助一些自学 初学者比当年的我更快弄懂 Ubuntu系统学习 主机名 kali name rid
  • Tcl-10. 字符串比较,匹配,替换,类别,映射,string 相关

    一 字符串比较 string compare string equal 我们在 expr 和控制语句如 if while 中可用比较运算符 等来进行字符串比较 但是如不注意的话就会产生问题 首先必须用双引号来将字符串值括起来 这样表达式语法
  • ant-design-vue 全局和局部引入组件

    1 全局引入 在main js里面引入 import Vue from vue import ant design vue dist antd css import Antd from ant design vue Vue use Antd
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • Error:(3, 32) java: 程序包org.springframework.boot不存在

    1 Error 3 32 java 程序包org springframework boot不存在 近期使用IDEA2020 1版本创建springboot项目的时候 运行主启动类后 突然就报错 错误如下 找了很多解决办法 刷新了很多遍Mav
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • RT-Thread记录(七、IPC机制之邮箱、消息队列)

    讲完了线程同步的机制 我们要开始线程通讯的学习 线程通讯中的邮箱消息队列也属于 RT Thread 的IPC机制 目录 前言 一 邮箱 1 1 邮箱控制块 1 2 邮箱操作 1 2 1 创建和删除 1 2 2 初始化和脱离 1 2 3 发送
  • 骑马与砍杀服务器修复,《骑马与砍杀2》新热修补丁:联机社交系统更新、修复单机崩溃...

    目前 骑马与砍杀中文站官博公开了 骑马与砍杀2 7月1日Beta e1 4 1测试版公共版热修补丁 此次热修补丁会更新联机社交系统 同时还会修复单机崩溃问题 以下为官方原文 官博截图 公共版 版本 Native e1 4 1 Sandbox
  • qt 获取父类指针

    QWidget QWidget parentWidget const Returns the parent of this widget or 0 if it does not have any parent widget
  • 单向散列函数的性质

    一 根据任意长度计算出固定长度的散列值 首先 单向散列函数的输入必须能够是任意长度的消息 其次 无论输入多长的消息 单向散列函数必须都能够生成长度很短的散列值 如果消息越长生成的散列值越长的话就不好用了 从使用方便的角度 散列值的长度最好是