哈希函数及其应用 您所在的位置:网站首页 散列函数的主要应用领域是什么 哈希函数及其应用

哈希函数及其应用

2024-07-08 03:09| 来源: 网络整理| 查看: 265

目录

哈希算法简介及其特点

1、简介

2、特征

3、工作原理

4、哈希值的生成模式

哈希函数在区块链中的应用

2-1 非对称加密

 1.对称加密

2.非对称加密

2-2 算法

哈希函数的应用——数字签名

1、数字签名基本概念

2、数字签名使用流程

3、数字签名的功能及特点

四大功能

特点

哈希函数的其他方面应用

1.数据校验

哈希算法简介及其特点 1、简介

SHA(哈希算法),全称Secure Hash Algorithm,是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

2、特征

 1.能够为任意类型的数据快速创建哈希值

这个特征事实上包括了两个特征。首先,哈希算法能够为任意类型的数据创建哈希值。其次,哈希算法的计算过程非常快。

2.确定性

“确定性”意味着哈希算法为相同的输入数据总能产生相同的哈希值。这意味着不同哈希值的差异必须仅由输入数据的差异引起,而不是由哈希算法的内部算法所引起。

3.伪随机

输入数据被改变则返回的哈希值的变化是不可预测的,即不可能根据输入预测哈希值。

4.单向函数

单向函数不提供任何方式来通过输出值推导输入值。因此,成为一个单向函数就意味着无法以其他方式使用。换句话说,不可能基于哈希值恢复原始数据。这意味着哈希值不会像输入数据的内容那样告诉你任何关于输入数据的信息,这就像孤立地指纹不会告诉你任何指纹拥有者的信息一样。单向函数也被认为是不可逆的。

5.防碰撞

如果我们很难找到两个或更多个不同的数据块来产生相同的哈希值,则这个哈希算法就是防碰撞的。换句话说,如果不同的数据块产生相同哈希值的机会很小,则哈希算法是防碰撞的。在这种情况下,你可以将由哈希算法创建的哈希值视为唯一的,因此其可用于标识数据。如果你用不同的数据块获得了相同的哈希值,则是遇到了哈希冲突。哈希冲突相当于出现了具有相同指纹的两个人。哈希算法的防碰撞特性是其能够成为数字指纹的必要条件。

3、工作原理

  哈希算法可以作为一个很小的计算机程序来看待,无论输入数据的大小及类型如何,它都能将输入数据转换成固定长度的输出。哈希算法在任何时候都只能接受单条数据的输入,并依靠输入数据创建哈希值。根据最终产生的哈希值的长度不同,计算机专家们创建了多种哈希算法。其中一类重要的哈希算法被称为加密哈希算法,它能够为任何类型的数据创建数字指纹。

4、哈希值的生成模式

1.独立哈希

独立哈希指的是将哈希算法单独应用在每一个数据块上。

2.重复哈希

你已经知道哈希算法可以将任意数据块转换成哈希值。哈希值本身也可以被认为是一个数据块,因此也就可以将哈希值输入哈希函数来获得这个哈希值的哈希值。而这其实是有效的!重复哈希是将哈希算法重复应用于其自身的结果。

3.组合哈希

组合哈希的目标是尝试一次为多个数据块生成单个哈希值。将所有独立的数据块组合成一个总数据块,并计算哈希值就是其实现方法。它在为给定时间才有效的数据块的集合创建一个单独的哈希值时特别有用。由于组合哈希需要消耗计算能力、时间和存储空间,所以组合哈希只能在单个数据块较小时使用。组合哈希的另一个缺点是单个数据片段的哈希值不可用,因为只有组合后的数据才会被交给哈希函数。

4.顺序哈希

顺序哈希是随着新数据的产生,对哈希值进行更新的一种哈希值计算方法,可以通过同时使用组合哈希和重复哈希这两种方法来实现。将现有哈希值与新数据组合,然后将其再次输入给哈希算法,以获得更新后数据的哈希值。如果你希望随着时间的推移,保持一个单独的哈希值,并且一旦新的数据到达就更新它,那么顺序哈希特别有用。这种哈希算法的优点是,在任何给定的时间点,你都有一个哈希值,通过它即可追溯到与其对应的新数据。

5.分层哈希

将分层哈希应用于一对哈希值可以形成一个哈希值组成的树状结构,其顶部将产生一个新的哈希值。类似于组合哈希,分层哈希可为数据集合创建一个单独的哈希值。分层哈希效率更高,因为它组合的总是固定大小的哈希值,而不是可能包含任意大小的数据块。另外,分层哈希只在每个步骤中组合两个哈希值。

哈希函数在区块链中的应用 2-1 非对称加密  1.对称加密

如图,e在这个过程中的角色就是密钥,密钥如果一旦泄露了,通信过程就不安全了。 所以对称加密存在一个问题:密钥不一定能够安全传递给对方

工作过程: Alice 传递一个信息给 Bob 。比如信息是一个数字 m ,Alice 不能把这个数字直接传递给 Bob ,因为互联网是一个公开透明的环境,很容易被窃听。所以她通过一个加密算法传递。通过给 m 加上一个数字 e ,得到一个数字 c ,这个 c 就叫做密文。这样 Bob 拿到密文 c ,再减去 e 就可以得到信息 m 了

2.非对称加密

概念:用一对密钥(即公钥和私钥)进行加密和解密     加密:用公钥 解密:用私钥

工作过程:Bob 作为接收信息方,首先要生成一对密钥,一个叫做公钥,它是可以公开出去的密钥。另一个叫做私钥,它是要私密保存的,注意这一对密钥有天然的数学联系,具体这个联系是什么,可以参考 RSA 算法。接下来,Bob 把自己的公钥传递给 Alice ,Alice 用 Bob 的公钥去加密信息 m 得到密文 c 。Bob 拿到密文 c 之后,用自己的私钥解密

2-2 算法

1.RSA算法: 是现今使用最广泛的公钥密码算法,也是号称地球上 最安全的加密算法

分为RSA加密算法和RSA数字签名算法 RSA加密算法在用户生成公私钥时使用,以及在加密解密信息或数据等时使用 RSA数字签名算法是迄今为止应用最为广泛的数字签名算法 RSA数字签名算法的过程,分为签名算法和验证签名算法 这里面的算法包括哈希算法里的MD2,MD4,MD5算法以及SHA-1,SHA-2,SHA-256算法等

2.DSA(Digital Signature Algorithm): 一种公开密钥算法,用于数字签名和认证

一种公开密钥算法和更高级的验证数字签名方式,基于哈希算法里的SHA-1算法 它用于接受者验证数据的完整性和数据发送者的身份,也可用于由第三方去确定签名和所签数据的真实性 DSA数字签名由于使用了非对称的密钥来保证密钥的安全,所以相比消息摘要算法(MD5算法)更安全 DSA算法和RSA算法不同之处在于它只用于数字签名,不用于加密解密,所以它比RSA要快很多, DSA和RSA都是数字签名算法中的重要组成,缺一不可;二者的安全性差不多

3.ECC(Elliptic Curves Cryptography): 是一种基于椭圆曲线数学的公开密钥加密算法 在利用私钥生成公钥时,使用该算法

哈希函数的应用——数字签名 1、数字签名基本概念

数字签名利用了非对称性密钥的特性,但是和公钥加密完全颠倒过来:仍然公布公钥,但是用你的私钥加密数据,然后把加密的数据公布出去,这就是数字签名。举个例子,像生活中大家的签名是通过在文件上签署自己的姓名或者按指纹来表明自己已经看过且同意文件的实施。

2、数字签名使用流程

数字签名体制一般由两部分组成,即签名算法和验证算法。签名算法或签名密钥是由签名者秘密保有的,而验证算法或验证密钥应当公开,以方便他人进行验证。

签名生成流程:

a)发送者对消息计算摘要值。

b)  发送者用私钥对摘要值进行签名得到签名值。

c)  发送者将原始消息和签名值一同发给接收者。

签名验证流程

a)接收者接收到消息后,拆分出消息和消息签名值A。

b)   接收者使用公钥对消息进行运算得到摘要值B。

c)   接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就是验证失败。

3、数字签名的功能及特点 四大功能

1.防范信息伪造

由于私钥由签名者秘密保管,所以由该私钥进行签名的文件可以表示该签名者的身份,任何其他人都不可能正确地伪造出该签名结果。

2.防范信息篡改

签名者对hash值签名,由于hash函数抗碰撞特点,签名与消息成为一个整体,任何改动都会导致无法通过验证。所以可以有效地防止消息的篡改。

3.防范信息重放

例如,数字签名可以利用时间戳防止重放攻击(重复的会话请求就是重放攻击。)

4.防范抵赖

任何人都可以利用签名者的公钥对签名进行验证,确认消息及签名的来源,用于身份认证。签名者便无法否认自己对消息的签名。

特点

① 签名是不可伪造的:除了合法的签名者之外,任何其他人伪造其签名是困 难的. 

② 签名是不可复制的:对一个消息的签名不能通过复制变为另一个消息的签名. 如果对一个消 息的签名是从别处复制得到的,则任何人都可以发现消息与签名之间的不一致性,从而可 以拒绝签名的消息.

③ 可信:任何人都可以验证签名的有效性. 

④不可抵赖:签名者事后不能否认自己的签名. 

⑤ 不可篡改:经签名的消息不能被篡改. 一旦签名的消息被篡改,则任何人都 可以发现消息与签名之间的不一致性

哈希函数的其他方面应用 1.数据校验

BT下载的原理是基于P2P协议的。我们从多个机器上并行下载一个2GB的电影,这个电影文件可能会被分隔成很多文件块(比如可以分成 100 块,每块大约 20MB)。等所有的文件块都下载完成之后,再组装成一个完整的电影文件就行了。 我们知道,网络传输是不安全的,下载的文件块有可能是被宿主机恶意修改过的,又或者下载过程中出现了差错,所以下载的文件块可能不是完整的。如果我们没有能力检测这种恶意修改或者文件下载出错,就会导致最终合并后的电影无法观看,甚至导致电影中电脑中毒。现在的问题是,如何来校验文件块的安全、正确、完整呢?

思路: 我们通过哈希算法,对100个文件块分布取哈希值,并且保存在种子文件中 我们知道,哈希算法有一个特点,对数据很敏感。只要文件块的内容有一丁点儿的改变,最后计算出的哈希值就会完全不同。 所以,当文件块下载完成之后,我们可以通过相同的哈希算法,对下载号的文件块逐一求哈希值,然后跟种子文件中保存的哈希值比对。如果不同,说明这个文件块不完整或者被篡改了,需要再重新从其他宿主机器上下载这个文件块。

结语:

大概到这里就结束了,如果有补充我会新增的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有