【密码学】单向散列函数简介

简介: ​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值。 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消息的完整性。​  常用的单向散列算法有MD4/5系列和SHA系列等。由于MD4、MD5算法都已被攻破,渐渐退出历史舞台,而SHA系列算法在物联网安全领域比较常见,特别是SHA256算法。​  额外提一点,提到单向散列函数的特性,很多人一下子想到,我们经常使用到的CRC校验,例如将一段可变长度的数据经过CRC校验后,生成2个字节的校验值

概论

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

​  常用的单向散列算法有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讲解和测试示例

​ <未完待续>

目录
相关文章
|
7月前
|
机器学习/深度学习 算法 安全
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
4157 0
|
安全 算法 Java
互联网并发与安全系列教程(12) - 信息加密技术(单向散列加密)
互联网并发与安全系列教程(12) - 信息加密技术(单向散列加密)
92 0
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1290 0
【密码学】一文读懂XTEA加密
|
Rust 算法 Go
【密码学】一文读懂FNV Hash
FNV哈希全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串比如IP地址、URL、文件名等等。目前FNV算法有三个版本,分别是: FNV-0(已废弃)、FNV-1以及FNV-1a。这三个算法的结构非常相似,因此呢,在这里就一块说了。
2833 0
【密码学】一文读懂FNV Hash
|
5月前
|
安全 算法 Java
密码学基础知识与加密算法解析
密码学基础知识与加密算法解析
|
7月前
|
存储 算法 安全
软件体系结构 - 对称加密算法
软件体系结构 - 对称加密算法
47 0
|
7月前
|
人工智能 分布式计算 安全
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
453 0
|
7月前
|
算法 安全 网络安全
一文搞懂常见的加密算法
一文搞懂常见的加密算法
909 0
|
算法 安全 数据安全/隐私保护
【密码学】 一篇文章讲透数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。数字签名可以识别消息是否被篡改, 并验证消息的可靠性, 也可以防止否认。
748 0
【密码学】 一篇文章讲透数字签名
|
算法 网络安全 数据安全/隐私保护
白话解释 对称加密算法 VS 非对称加密算法
对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(encryption)中的两种解密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息从一种形式转变成另一种形式,不懂没关系,继续往下看。
210 0