数字签名(Digital Signature):保障你的交易安全

 2023-10-02 21:25:53发布 2023-10-02 21:26:01更新

数字签名(Digital Signature)是用于验证数字和数据真实性和完整性的加密机制,可以将其视为传统手写签名方式的数字化版本,并且相比于签字具有更高的复杂性和安全性。简而言之,我们可以将数字签名理解为附加到消息或文档中的代码,在生成数字签名之后,其可以作为证明消息从发送方到接收方的传输过程中没有被篡改的证据。

数字签名和传统签名的区别

数字签名技术和传统签名技术有许多不同之处,主要体现在:

首先,传统的手写签名与对应文件通过物理(例如纸张)绑定,而数字信息没有确定的物理载体,所以需要使用算法将签名与消息绑定在一起,可认证。

其次,在签名验证的方法上,传统的手写签名是由消息接收者用眼分辨签名的特征是否相符,结果受验证者主观思想影响,而数字信息通常由电子设备处理,故而签名验证结果依赖于数学算法,较客观。

最后,传统手写签名复制(字体模仿)相对数字信息的复制(粘贴)来说较为困难,因此数字签名需要有更好的方法实现签名的不可重用,防伪造。

简单来说,数字签名,一般是附加在某一电子文档中的一组特定的符号或代码,用于表示签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。

数字签名的构成

散列函数

哈希是数字签名中的核心要素之一。哈希值的运算过程是指将任意长度的数据转换为固定长度。这是通过称为散列函数的特殊运算实现的。经过散列函数运算而生成的值称为哈希值或消息摘要。

当哈希值与加密算法相结合,即使用加密散列函数的方法来生成散列值(摘要),该值可作为唯一的数字指纹。这意味着对于输入数据(消息)的任何更改都会导致有完全不同的输出值(散列值)。这就是加密散列函数被广泛用于验证数字和数据真实性的原因。

公钥加密(PKC)

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

作为一种加密工具,PKC相比于对称加密具有更高的安全性。对称加密系统依赖于相同的密钥进行加密和解密信息,但PKC则使用公钥进行数据加密,并使用相应的私钥进行数据解密。

除此之外,PKC还可以应用于生成数字签名。本质上,该过程发送方使用自己的私钥对消息(数据)的哈希值进行加密。接下来,消息的接收者可以使用签名者提供的公钥来检查该数字签名是否有效。

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

数字签名的原理

在加密货币的背景下,数字签名系统通常包含三个基本流程:散列、签名和验证。

数字签名的原理

数字签名的原理

对数据进行散列

第一步是对消息或数据进行散列。通过散列算法对数据进行运算,生成哈希值(即消息摘要)来完成的。如上所述,消息的长度可能会有很大差异,但是当消息被散列后,它们的哈希值都具有相同的长度。这是散列函数的最基本属性。

但是,仅仅将消息进行散列并不是生成数字签名的必要条件,因为也可以使用私钥对没有进行过散列的消息进行加密。但对于加密货币,消息是需要经过散列函数处理的,因为处理固定长度的哈希值有助于加密货币的程序运行。

签名

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

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

需要注意的是,数字签名与每条消息的内容相关联。因此,与手写签名所不同,每条消息的数字签名都是不同的。

验证

让我们举一个例子说明下整个过程,包括从开始直到最后一步的验证。我们假设Alice向Bob发送一条消息、并将该消息进行散列得到哈希值,然后将哈希值与她的私钥结合起来生成数字签名。数字签名将作为该消息的唯一数字指纹。

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

因此,Alice需要保管好私钥至关重要。如果另一个人拿到了Alice的私钥,他们就同样可以创建数字签名并伪装成Alice。在比特币的背景下,这意味着有人可以使用Alice的私钥,并可在未经她知晓的情况下转移或使用她的比特币。

数字签名的优势和局限性

优势

数字签名通常有以下三方面优势。

数据完整性

Bob可以验证Alice的消息是否发生了篡改。消息中的任何变动都会产生完全不同的数字签名。

真实性

只要Alice将其私钥保管好,Bob就可以使用她的公钥来确认数字签名是由Alice本人所创建的,而非其他人所为。

不可否认性

生成签名后,Alice将来无法否认签名该签名,除非她的私钥以某种方式泄露出去。

局限性

数字签名方案面临的主要挑战主要局限于以下三方面因素:

算法

数字签名方案中使用的算法对质量要求很高。其中包括可靠的散列函数和加密系统的选择。

实施

如果算法很完备,但却没有一个良好的实施方案,数字签名系统也可能会出现隐患。

私钥

如果私钥丢失或以某种方式泄露,则真实性和不可否认性将得不到保证。对于加密货币用户而言,丢失私钥可能会导致重大的财产损失。

推荐阅读