单向散列函数简介

概论

​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值。 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消息的完整性。

​  常用的单向散列算法有MD4/5系列和SHA系列等。由于MD4、MD5算法都已被攻破,渐渐退出历史舞台,而SHA系列算法在物联网安全领域比较常见,特别是SHA256算法。

​  额外提一点,提到单向散列函数的特性,很多人一下子想到,我们经常使用到的CRC校验,例如将一段可变长度的数据经过CRC校验后,生成2个字节的校验值,那这个算不算是单向散列函数? 单从这个特性上看,CRC也算是单向单列函数,但是由于CRC不是完全单向性,从CRC值反推出满足要求的消息并不困难,所以CRC通常只用来对数据的完整性校验,而不能用来检查数据是否被恶意篡改。

单向散列函数性质

​  单向散列函数为消息产生了一个指纹,能够实现对消息的完整性检测,单向散列函数需要满足的性质如下:

  1. 输入长度可变: 输入为任意长度的消息

  2. 输出长度固定 输出的消息摘要长度固定

  3. 高效率 尽管长的消息计算时间相对会长一些,但整体计算速度还是很快的

  4. 单向性 给定消息可以算出摘要值,但根据摘要值反推出消息是不可行的

  5. 抗碰撞性 找到两个消息他们的摘要是相同的,在计算上是不可行的

单向散列函数使用方法

  1. A准备好消息数据
  2. A使用单向散列函数计算消息摘要
  3. A将消息和消息摘要一起发送给B
  4. B接收到消息和消息摘要后,使用单向散列函数计算消息的摘要。
  5. 对比接收到的消息摘要和自己计算出来的消息摘要是否一致。
  6. 如果一致则说明消息未被损坏或篡改,如果不一致则说明消息被损坏或恶意篡改。

单向散列函数应用

​ 基于单向散列函数的性质,单向散列函数可以应用在消息认证码、数字签名、随机数生成器和一次性口令等密码技术中。也可以作为普通散列函数独立使用。下面分别介绍单向散列函数的具体应用。

  1. 消息完整性检测

      单向散列函数的一个重要应用就是对消息的完整性进行检测,例如可以通过比较传输消息或文件的摘要值来判断消息是否发生了篡改,验证消息摘要的真实性就等同于验证消息本身的真实性。

  2. 伪随机数生成器

    ​  单向散列函数可以用来构造伪随机数生成算法,它可以用于由单个秘钥派生出多个新的秘钥。

  3. 消息认证码

    ​   消息认证码可以用于检测消息传输过程中的错误、篡改和伪装,其实现过程依赖于单向散列函数。消息认证码中除了单向散列函数外还加入了共享秘钥,该秘钥由发送者和接收者共享,因此消息认证码不但可以检测消息在传输过程中是否发生了错误或者篡改,还可以对发送者的身份进行认证。

  4. 数字签名

    ​   由于数字签名的计算过程比较耗时,在对消息计算签名之前,通常会使用单向散列函数对消息计算消息摘要,然后对消息摘要进行签名。

  5. 一次性口令

    ​ 单向散列函数可以构造一次性口令,服务器通常使用一次性口令来验证客户端的合法性,客户端使用单向散列函数计算出令牌和同步资源的消息摘要,客户端再把消息摘要发送给服务器进行认证。

单向散列函数无法解决的问题

  散列函数能够辨别出“篡改”,但是无法辨别出“伪装”。对于一条消息不仅需要确认消息的完整性,还需要确认这个消息发自与谁。这仅仅靠完整性检查是不够的,还需要进行消息认证。认证的技术包括消息验证码和数字签名。

  消息验证码能够向通信对象保证消息没有被篡改。数字签名不仅能够向通信对象保证消息没有篡改,还能够向所有第三方做出这样的保证。

SHA256 算法实现详解

​   由于MD4/5已经被攻破,渐渐退出历史舞台,SHA0、SHA1算法由于存在缺陷已不再使用。而SHA256在物联网中有这个较为广泛的应用。

​ <未完待续>

SHA256算法在mbedtls中的API讲解和测试示例

​ <未完待续>

物联网安全-单向散列算法相关推荐

  1. MD5单向散列算法详解

    历史: MD5 叫信息-摘要算法,是一种密码的算法,它可以对任何文件产生一个唯一的MD5验证码,每个文件的MD5码就如同每个人的指纹一样,都是不同的,这样,一旦这个文件在传输过程中,其内容被损坏或者被 ...

  2. MD5(单向散列算法)原理分析

    注:本文章转载于网络. MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. ...

  3. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)...

    2019独角兽企业重金招聘Python工程师标准>>> 数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊-- ...

  4. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)

    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们--帕蒂.道格.苏珊--每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4 ...

  5. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)——Web网络系列学习笔记

    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们--帕蒂.道格.苏珊--每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4 ...

  6. 密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介

    背景 密码,最初的目的就是用于对信息的加密,计算机领域的密码技术种类繁多,但随着密码学的运用,密码还用于身份认证,防止否认等功能上.最基本的,是信息加密解密分为对称加密和非对称加密,这两者的区别在于是 ...

  7. 散列算法(也叫:摘要算法)

    散列算法(也叫:摘要算法): 特点: ① 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的. ② 消息摘要看起来是"随机的".这些比特看上去是胡乱的杂凑在一起的. ③ 一般 ...

  8. 【什么是散列算法?】

    什么是散列算法? 在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它可以对不同长度的输入数据,然后产生一个固定的长度的输出值,该输出值就是散列值. 所以应用的时候,就可 ...

  9. C++中实现HMAC单向散列类

    HMAC的维基百科解释是:hash-based message authentication code,其实就是加了盐的单向散列算法.而HMAC的重点就是如何给要散列的数据加盐. 加盐公式如下: 解释 ...

最新文章

  1. 计算机术语的英文全称,计算机英文名词缩写
  2. 使用Spring JDBC框架连接并操作数据库
  3. windows phone (23) ScrollViewer元素
  4. 初学spring(一)
  5. 【整理】SAP 看板简介
  6. python sklearn.svm.SVC() 使用方法
  7. Java案例:汉诺塔问题
  8. React与前端:React家族介绍
  9. UVA 299 - Train Swapping(冒泡排序)
  10. MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新
  11. nginx学习.第一部分
  12. 微型计算机机房湿度不宜过大,全国计算机一级考试选择题试题与详细答案(免费)...
  13. windows上编译,使用libtorrent
  14. VLAN Trunk
  15. java做手机短信验证码平台_java实现短信验证码功能
  16. IT管理到底是做什么
  17. Redis HyperLogLog 是什么?这些场景使用它,让我枪出如龙,一笑破苍穹
  18. 利用Cytoscape进行生物相互作用网络可视化及拓扑分析
  19. 中小企业网站优化推广思路方法技巧
  20. fastreport 横向分栏_fastreport分栏分组显示问题(急贴盼解决)

热门文章

  1. DeepFusionMOT 基于相机和激光雷达融合3d实时跟踪
  2. win10引导安卓x86_微软确认Win10手机支持X86架构 iOS/Android震撼了!
  3. 性能指标-qps、tps、tp99、并发用户数、响应时间理解
  4. VM虚拟机-三种网络连接方式(桥接、NAT、仅主机模式
  5. 表单元素——下拉列表
  6. Jmeter压力测试-Web代理本地接口测试【教学篇】
  7. 调用后台接口返回报错前端隐藏提示_从零开始的Android新项目9 - 前端用后台接口设计...
  8. Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句...
  9. sqlplus连接数据库的几种方式
  10. jvm 参数 -verbose:gc 和 -XX:+PrintGC 的区别?