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

简介: ​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值。 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消息的完整性。​  常用的单向散列算法有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讲解和测试示例

​ <未完待续>

目录
相关文章
|
6月前
|
存储 安全 算法
密钥密码学(一)(4)
密钥密码学(一)
107 2
|
6月前
|
存储 安全 算法
密钥密码学(一)(1)
密钥密码学(一)
78 1
|
6月前
|
存储 算法 安全
密钥密码学(一)(2)
密钥密码学(一)
69 1
|
6月前
|
存储 人工智能 安全
密钥密码学(一)(3)
密钥密码学(一)
108 1
|
6月前
|
开发框架 算法 .NET
密钥密码学(三)(4)
密钥密码学(三)
41 0
|
6月前
|
人工智能 分布式计算 安全
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
407 0
|
算法 数据安全/隐私保护
【密码学】密码学概述
每个人都有自己的秘密,如果不加密,在网上传输很容易被监听。如果涉及到金钱相关,密码泄露以后很容易造成损失。所以都会利用加密 cryptography 技术,保证信息的机密性 confidentiality。信息被加密以后变成了密文在网上传播,接收者拿到密文进行解密 cryptanalysis,解密以后就可以看到明文。对称密码 (symmetric cryptography)是指在加密和解密时使用同一密钥的方式。对应的加密方式是对称加密。目前广泛使用 AES。对称密码有多种别名,公共密钥密码(common-k
192 0
【密码学】密码学概述
|
算法 网络安全 数据安全/隐私保护
白话解释 对称加密算法 VS 非对称加密算法
对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(encryption)中的两种解密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息从一种形式转变成另一种形式,不懂没关系,继续往下看。
203 0
|
算法 Serverless 数据安全/隐私保护
【密码学】一文读懂基于散列函数的伪随机数生成器
上回说到,小明制作了一个特殊的日记本,在每次输入正确的密码之后,都会随机的生成下一个密码,但是呢,由于小明设计随机数算法选的不太好,这让小红给钻了空子,这时候小明心里别提多伤感了,这。。。这我的日记不就相当于直接公开了吗,这是要社死的节奏啊,不行不行,我要换一个新的方法,这时候,小明刚好学完了密码学当中的散列函数,心想,这我要是直接用散列函数的输出作为随机密码的生成,这不就成了,哈哈,这时候小明心里别提有多美了,于是乎,小明设计出了如下的随机数生成算法。
【密码学】一文读懂基于散列函数的伪随机数生成器
|
算法 安全 数据安全/隐私保护
密码学系列之:blowfish对称密钥分组算法
密码学系列之:blowfish对称密钥分组算法
密码学系列之:blowfish对称密钥分组算法