数字签名是用于验证数字数据的真实性和完整性的加密机制。我们可能会将其视为普通手写签名的数字版本,但具有更高的复杂性和安全性。
简单来说,我们可以将数字签名描述为附加到消息或文档的代码。在生成之后,代码充当证明消息在从发送方到接收方的路上没有被篡改的证据。
虽然使用密码学保护通信的概念可以追溯到古代,但是由于公钥密码学的发展,数字签名方案在20世纪70年代成为可能的现实。因此,要了解数字签名的工作原理,我们首先需要了解散列函数和公钥加密的基础知识。
散列函数
哈希是数字签名系统的核心要素之一。散列过程涉及将任何大小的数据转换为固定大小的输出。这是通过称为散列函数的特殊算法来完成的。散列函数生成的输出称为散列值或消息摘要。
当与加密相结合时,可以使用所谓的加密散列函数来生成充当唯一数字指纹的散列值。这意味着输入数据的任何更改都将导致完全不同的输出。这就是加密散列函数被广泛用于验证数字数据真实性的原因。
公钥加密
公钥加密或PKC是指使用一对密钥的加密系统:一个公钥和一个私钥。这两个密钥在数学上是相关的,可用于数据加密和数字签名。
作为一种加密工具,PKC比更基本的对称加密方法更安全。虽然旧系统依赖相同的密钥来加密和解密信息,但PKC允许使用公钥进行数据加密,并使用相应的私钥进行数据解密。
除此之外,PKC方案还可以应用于数字签名的生成。本质上,该过程包括散列消息以及签名者的私钥。接下来,消息的接收者可以使用签名者提供的公钥来检查签名是否有效。
在某些情况下,数字签名可能涉及加密,但情况并非总是如此。例如,比特币区块链使用PKC和数字签名,但不像许多人倾向于认为的那样,在这个过程中没有加密。从技术上讲,比特币部署了所谓的椭圆曲线数字签名算法来验证交易。
数字签名如何运作
在加密货币的背景下,数字签名系统通常包括三个基本步骤:散列,签名和验证。
哈希数据
第一步是散列消息或数字数据。这是通过散列算法提交数据以生成散列值来完成的。如上所述,消息的大小可能会有很大差异,但是当它们被散列时,它们的所有散列值都具有相同的长度。这是哈希函数的最基本属性。
但是,散列数据不是生成数字签名的必要条件,因为可以使用私钥来签署完全没有散列的消息。但对于加密货币,数据总是经过哈希处理,因为处理固定长度的摘要有助于整个过程。
签名
对信息进行哈希处理后,邮件的发件人需要对其进行签名。这是公钥密码学发挥作用的时刻。有几种类型的数字签名算法,每种算法都有自己独特的机制。但实质上,散列消息将使用私钥进行签名,然后消息的接收者可以使用相应的公钥来检查其有效性。
换句话说,如果在生成签名时不包括私钥,则消息的接收者将不能使用相应的公钥来验证其有效性。公钥和私钥都是由消息的发送者生成的,但只有公钥与接收者共享。
值得注意的是,数字签名与每条消息的内容直接相关。因此,与手写签名不同,无论消息如何,每个数字签名的消息都会有不同的数字签名。
验证
让我们举一个例子来说明整个过程,直到验证的最后一步。想象一下,Alice向Bob写了一条消息,哈希,然后将哈希值与她的私钥结合起来生成数字签名。签名将作为该特定消息的唯一数字指纹。
当Bob收到消息时,他可以使用Alice提供的公钥来检查数字签名的有效性。这样,Bob可以确定签名是由Alice创建的,因为只有她拥有与该公钥对应的私钥。
因此,爱丽丝秘密保密私钥至关重要。如果另一个人拿到了Alice的私钥,他们就可以创建数字签名并伪装成Alice。在比特币的背景下,这意味着有人可以使用Alice的私钥在未经她许可的情况下移动或使用她的比特币。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。