哈希表 哈希函数 时间

安全从业人员的功能表中有一个工具可以帮助每个人理解,无论他们对计算机进行什么操作:加密哈希函数。 这听起来听起来像是神秘的,技术性的,甚至可能很无聊,但是我对什么是哈希以及它们为什么对您很重要有一个简洁的解释。

诸如SHA-256或MD5之类的加密散列函数将一组二进制数据(通常以字节为单位)作为输入,并希望输出对于每组可能的输入都是唯一的。 对于任何特定的哈希函数,输出的长度(“哈希”)对于任何输入模式通常都是相同的(对于SHA-256,它的长度为32字节或256位-线索就是名称)。 重要的是:从输出哈希到输入反向工作应该在计算上难以置信(密码学家讨厌“ 不可能”这个词)。 这就是为什么有时将它们称为单向哈希函数的原因。

但是哈希函数有什么用? 为什么独特的特性如此重要?

独特的输出

下载的是下载的文件的逐字节副本。 当您从Linux系统信息库下载Linux ISO或软件时,您会看到此验证过程正在起作用。 没有唯一性,该技术将无用,至少出于您通常拥有的目的。

如果两个输入产生相同的输出,则哈希称为“冲突”。 实际上,MD5已过时,因为现在可以轻松找到与市售的硬件和软件系统之间的冲突。

另一个重要的特性是,消息中的微小更改(甚至更改单个位)都有望对输出产生明显的更改(这就是“雪崩效应”)。

验证二进制数据

哈希函数的典型用法是确保当有人将您的二进制数据交给您时,它就是您所期望的。 可以用二进制格式描述计算领域中的所有数据,无论是文本,可执行文件,视频,图像还是完整的数据数据库,因此至少可以说哈希广泛地适用。 直接比较二进制数据在计算上很慢且很费力,但是哈希函数设计得非常快。 给定两个文件,大小为几兆字节或几千兆字节,您可以提前产生它们的哈希值,并将比较结果推迟到需要它们时使用。

通常,对数据的哈希值进行数字签名也比对大量数据本身进行签名更容易。 这是一个非常重要的功能,以至于哈希在密码学中最常见的用途之一就是生成“数字”签名。

考虑到容易产生数据散列的事实,通常不需要同时拥有两组数据。 假设您要在计算机上运行可执行文件。 但是,在执行此操作之前,您需要检查它是否确实是您认为的文件,并且没有恶意行为者对其进行篡改。 您可以非常快速,轻松地对文件进行哈希处理,并且只要您具有哈希表的外观副本,就可以确定您拥有所需的文件。

这是一个简单的例子:

$ shasum -a256 ~ / bin / fop
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c  / home / bob / bin / fop

如果我知道由其供应商(本例中为Apache Foundation)提供的fop可执行文件的SHA-256总和为:

 87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c 

那么我可以确信驱动器上的可执行文件的确与Apache Foundation在其网站上分发的可执行文件相同。 这就是哈希函数缺乏冲突(或至少难于计算冲突 )属性如此重要的地方。 如果恶意行为者可以制作与真实文件共享相同哈希值的替换文件,则验证过程实质上是无用的。

实际上,各种属性还有更多的技术名称,而我上面所描述的将三个重要的属性融合在一起。 更准确地说,这些技术名称是:

  1. 图像前抵抗力:给定哈希值,即使您知道所使用的哈希函数,也很难找到创建它的消息。
  2. 第二种图像前抗性:给定一条消息,应该很难找到另一条消息,该消息经过散列后会生成相同的散列。
  3. 防冲突性:很难找到任何两个生成相同哈希值的消息。

耐碰撞性第二次成像前的抗性听起来像是相同的属性,但它们之间(且显着)不同。 镜像前抵抗力表示,如果您已经有一条消息,则将无法找到具有匹配哈希值的另一条消息。 抗冲突性使您很难发明两条将生成相同哈希值的消息,而这是在哈希函数中要实现的难得多的属性。

请允许我回到一种恶意行为者试图与另一个交换文件(带有哈希,可以检查)的情况。 现在,要在“野外”使用加密哈希(在现实世界中),除了由独角兽填充并充满无脂甜甜圈的完美安全,无错误的实现方式之外,还有一些重要而困难的条款需要遇见。 非常偏执的读者可能已经发现了其中的一些内容。 特别是:

  1. 您必须确保自己所拥有的哈希副本也不会受到篡改。
  2. 您必须确保执行哈希的实体能够正确执行并报告。
  3. 您必须确保比较两个哈希的实体确实确实报告了该比较的结果。

确保您可以满足这样的保证不一定是一件容易的事。 这是受信任的平台模块(TPM)是许多计算系统的一部分的原因之一。 它们充当了硬件的信任根,具有提供有关加密工具的保证,以验证重要二进制数据的真实性。 TPM是用于实际系统的有用且重要的工具,我计划将来写一篇有关它们的文章。


本文最初发表于爱丽丝,夏娃和鲍勃 ,经作者许可改编和转载。

翻译自: https://opensource.com/article/20/7/hash-functions

哈希表 哈希函数 时间

哈希表 哈希函数 时间_您需要了解的哈希函数相关推荐

  1. 哈希表的基本概念详解以及具体实现(哈希函数、哈希冲突、负载因子)

    一.哈希表 哈希表是一个典型的用空间换时间的操作,利用数组随机访问的特性,最大化查找效率.哈希过程就是将数组元素与下标建立关系的过程. 二.哈希函数 1.哈希函数的意义: 哈希表是希望将元素与下标建立 ...

  2. JS哈希表算法——空间换时间

    题目来源力扣: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素 ...

  3. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  4. python函数助手_转jmeter(十五)函数助手

    由于时间和版本问题,其中有些内容和排版我做了修改和重新整理,使其更符合最新的jmeter版本. 一.使用jmeter函数助手 启动jmeter后,可以在JMeter的选项菜单中找到函数助手对话框(快捷 ...

  5. string类有可以调换方向的函数吗_深度剖析C++中的inline函数

    点蓝色字关注"CurryCoder" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.inline函数的爱恨两难 内联函数比宏优点好很多,详细原 ...

  6. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

    在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...

  7. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间的方法

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊 ...

  8. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做timeout,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊情况 ...

  9. access month函数用法_【Access文章】日期常用函数详解

    时 间:2015-08-20 09:46:13 作 者:摘 要: weekday 函数,WeekdayName函数(VBA),DateSerial 函数,DatePart函数 ,DateAdd 函数  ...

最新文章

  1. AngularJs学习笔记(3)--$scope中的$apply和$digest方法
  2. python顺序结构有一个入口_高楼万丈平地起,基础要打牢!Python获取类的层次结构和继承顺序...
  3. JSP自定义标签学习笔记
  4. 20个非常好用的正则表达式
  5. 使用ActiveMQ Artemis在两个WildFly服务器之间构建水平JMS桥
  6. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍
  7. 分析citibike数据eda
  8. leetcode322 零钱兑换
  9. LCS-最大公共子序列(DP问题)
  10. jQuery:无限循环两个或者多个事件 click / toggle between two functions
  11. HTML学习笔记:iframe框架演示
  12. c# image转换为bitmap,C# - 转换WPF Image.source到System.Drawing.Bitmap
  13. 大文件表空间+创建大文件表空间+查询数据库表空间类型信息+查询数据库表空间类型信息...
  14. Vue2.0七——生命周期
  15. oracle实施过程中误区,oracle 开发误区探索《二》
  16. Linux(一)之Ubuntu上安装nginx、nginx-rtmp-modeule、libx264、FFmpeg(巨详细)
  17. mysql性能分析工具_MySQL性能分析、及调优工具使用详解
  18. Vue提示 , Vue指令提示, Vue代码提示 Pycharm中引用vue不显示提示
  19. 2022-2028全球与中国消防无人机市场现状及未来发展趋势
  20. flutter 数据存储 SharedPreferences

热门文章

  1. 树的几种遍历方式(递归/非递归)
  2. 基于jedis的Redis工具类
  3. javascript中的常见事件
  4. Android SharedPreferences最佳实践
  5. vmware 克隆 LVM 分区的系统
  6. 详解MathType中如何插入特殊符号
  7. asp.net 中RadioButtonList的选项改变事件处理(采用jquery操作)
  8. 【平面设计】扁平化设计(Ⅲ)——原则
  9. Path Sum leetcode java
  10. ubuntu 网络设置mark