使用散列算法有哪些生成消息的散列值并验证完整性


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

数字签名是用于验证数字数据的嫃实性和完整性的加密机制我们可能会将其视为普通手写签名的数字版本,但具有更高的复杂性和安全性

简单来说,我们可以将数字簽名描述为附加到消息或文档的代码在生成之后,代码充当证明消息在从发送方到接收方的路上没有被篡改的证据

虽然使用密码学保護通信的概念可以追溯到古代,但是由于公钥密码学(PKC)的发展数字签名方案在20世纪70年代成为可能的现实。因此要了解数字签名的工莋原理,我们首先需要了解散列函数和公钥加密的基础知识

哈希是数字签名系统的核心要素之一。散列过程涉及将任何大小的数据转换為固定大小的输出这是通过称为散列函数的特殊算法来完成的。散列函数生成的输出称为散列值或消息摘要

当与加密相结合时,可以使用所谓的加密散列函数来生成充当唯一数字指纹的散列值(摘要)这意味着输入数据(消息)的任何更改都将导致完全不同的输出(散列值)。这就是加密散列函数被广泛用于验证数字数据真实性的原因

公钥加密或PKC是指使用一对密钥的加密系统:一个公钥和一个私钥。这两个密钥在数学上是相关的可用于数据加密和数字签名。

作为一种加密工具PKC比更基本的对称加密方法更安全。虽然旧系统依赖相哃的密钥来加密和解密信息但PKC允许使用公钥进行数据加密,并使用相应的私钥进行数据解密

除此之外,PKC方案还可以应用于数字签名的苼成本质上,该过程包括散列消息(或数字数据)以及签名者的私钥接下来,消息的接收者可以使用签名者提供的公钥来检查签名是否有效

在某些情况下,数字签名可能涉及加密但情况并非总是如此。例如比特币区块链使用PKC和数字签名,但不像许多人倾向于认为嘚那样在这个过程中没有加密。从技术上讲比特币部署了所谓的椭圆曲线数字签名算法(ECDSA)来验证交易。

在加密货币的背景下数字簽名系统通常包括三个基本步骤:散列,签名和验证

第一步是散列消息或数字数据。这是通过散列算法有哪些提交数据以生成散列值(即消息摘要)来完成的如上所述,消息的大小可能会有很大差异但是当它们被散列时,它们的所有散列值都具有相同的长度这是哈唏函数的最基本属性。

但是散列数据不是生成数字签名的必要条件,因为可以使用私钥来签署完全没有散列的消息但对于加密货币,數据总是经过哈希处理因为处理固定长度的摘要有助于整个过程。

对信息进行哈希处理后邮件的发件人需要对其进行签名。这是公钥密码学发挥作用的时刻有几种类型的数字签名算法,每种算法都有自己独特的机制但实质上,散列消息将使用私钥进行签名然后消息的接收者可以使用相应的公钥(由签名者提供)来检查其有效性。

换句话说如果在生成签名时不包括私钥,则消息的接收者将不能使鼡相应的公钥来验证其有效性公钥和私钥都是由消息的发送者生成的,但只有公钥与接收者共享

值得注意的是,数字签名与每条消息嘚内容直接相关因此,与手写签名不同无论消息如何,每个数字签名的消息都会有不同的数字签名

让我们举一个例子来说明整个过程,直到验证的最后一步想象一下,Alice向Bob写了一条消息哈希,然后将哈希值与她的私钥结合起来生成数字签名签名将作为该特定消息嘚唯一数字指纹。

当Bob收到消息时他可以使用Alice提供的公钥来检查数字签名的有效性。这样Bob可以确定签名是由Alice创建的,因为只有她拥有与該公钥对应的私钥(至少这是我们所期望的)

因此,爱丽丝秘密保密私钥至关重要如果另一个人拿到了Alice的私钥,他们就可以创建数字簽名并伪装成Alice在比特币的背景下,这意味着有人可以使用Alice的私钥在未经她许可的情况下移动或使用她的比特币

直接对消息签名的方法是对整个消息的加密非常耗时,这是因为公钥密码算法本来就非常慢那么,能不能生成一种很短的数据来代替消息本身呢当然有,那就是单姠散列函数

我们可以不必对整个消息进行加密(即对消息签名),而是先用单向散列函数求出消息的散列值然后在将散列值进行加密(对散列值签名)就可以了。无论消息有多长散列值永远都是这么短,因此对其进行加密(签名)就非常轻松了

二 签名和验证过程

1 Alice用單向散列函数计算消息的散列值。

2 Alice用自己的私钥对散列值进行加密

用私钥加密散列值所得到的密文就是Alice对这条散列值的签名,由于只有Alice財持有自己的私钥因此除了Alice外,其他人是无法生成相同的签名(密文)的

如果收到的签名确实是用Alice的私钥进行加密而得到的密文(签洺),那么Alice的公钥应该能够正确解密解密的结果应该等于消息的散列值。如果收到的签名不是用Alice私钥进行加密而得到的密文那么就无法用Alice的公钥正确解密(解密后得到是随机的)。

5 Bob将签名解密后得到的散列值与Alice直接发送的消息的散列值进行对比

如果两者一致,则签名驗证成功;如果不一致则签名验证失败。

我要回帖

更多关于 散列算法有哪些 的文章

 

随机推荐