首页 数字签名
文章
取消

数字签名

上一篇文章讲了密码学领域的非对称加密技术,这篇就来讲讲它的另一个重要应用,数字签名。

1.

什么是数字签名?

提起签名,你肯定不会感到陌生。签名就是在文件上手写下自己的名字。这是一种历史悠久的证明自己身份的方式。在古代,就有把“签字画押”作为某个人看过某个文件,并对该文件的内容表示认可的证明。签字在今天仍是很多正式文件的必备,像去银行等机构办理业务、签订合同等,都少不了最后需要我们签字。究其原因,则是因为我们每个人的字迹是不一样的,因此我们的签字可以证明我们的身份。

可见,从古至今,签名是证明我们自己身份,以及对某些内容表示同意的一种极为重要的方式。

那么在数字化时代,很多时候是没有纸质文件的,这样又该如何证明我们的身份呢?

就是使用数字签名技术。

我在上一篇文章中讲了非对称加密技术有一对密钥,公钥和私钥。公钥是公开的,所有人都可以知道。而私钥是不公开的,只有我们自己知道。我还说公钥用于加密,而私钥用于解密。这样别人可以用我们的公钥对内容进行加密,然后把加密结果发送给我们。我们再用私钥去解密,这样就可以达到加密通信的目的了。

但其实私钥也可以对数据进行加密,而加密的结果也只有公钥能去解开,这就是数字签名技术。

2.

数字签名的过程

数字签名的关键步骤分为签名(私钥加密)和验证(公钥解密)两部分,如下图所示:

数字签名原理

首先是签名,对一个文件进行签名的步骤如下:

  1. 对原文内容进行哈希计算,得到一个固定长度的哈希值,即该信息的摘要(关于哈希见之前的文章)
  2. 签名者用自己的私钥对哈希值进行加密,得到密文,这个密文即数字签名
  3. 签名者将原文和密文(数字签名)一同发送给接收者

然后接收者在收到签名者发送的原文和密文之后,进行验证,步骤如下:

  1. 用签名者的公钥对签名进行解密,得到原文内容的哈希值h1
  2. 接收者自己再对收到的原文内容进行一遍哈希计算,得到哈希值h2
  3. 比较h1和h2,如果 h1 = h2,则说明签名者确实对该文件进行了签名;否则验证不通过,签名无效。

3.

数字签名在比特币中的应用

交易

从上图可以看到,数字签名技术在比特币的交易过程中是非常重要的。

因为比特币中记录的是交易双方的公钥地址,因此你必须拿出你的私钥才能证明其中的公钥确实是你的,而不是别人的。这就可以保证你不能花别人的钱。

当你需要把自己的比特币转给下一个人时,你需要将上一笔交易(即你获得该比特币的交易记录,该交易记录可以证明你确实拥有要交易的比特币)和你的转账接收者的公钥进行哈希计算,并对得到的哈希值进行数字签名,然后把这些信息发送给你的转账接收者。

你可以把发的这个信息理解为一张付款证明。证明中写了你(假如你叫李四)要向我(李五十)转一个比特币,然后在证明最后签上了自己的名字。如下图所示:

付款证明

你的转账接收者在收到消息后,可以用你的公钥对你的签名结果验证,这样就可以明确信息的真假。

本文由作者按照 CC BY 4.0 进行授权

非对称加密

货币的三种基本职能