# 比特币白皮书解读（2）——数字签名

By [Untitled](https://paragraph.com/@0xf3b3998615f7a0fad13ded9e68bafc332882533c) · 2021-11-13

---

今天主要解读的概念：数字签名。

比特币的目标是构建不需依赖于第三方金融机构的点对点（我们俗称的P2P）的电子支付系统。

“本文提出了一种完全通过点对点技术实现的电子现金系统，它使得在线支付能够直接由一方发起并支付给另外一方，中间不需要通过任何的金融机构。虽然**数字签名**（Digital signatures）部分解决了这个问题，但是如果仍然需要第三方的支持才能防止双重支付（double-spending）的话，那么这种系统也就失去了存在的价值”。

我们来设想一下，如果张三转账给我们一笔费用100万元，我们是如何确定他到底有没支付？大家一定知道，看我们卡上有没有到账（100万元），如果有，就说明已经支付。

这背后其实是银行这个第三方金融机构，在给我们双方做了信用担保，我们相信它（银行），它在张三的账户扣减100万，在我们的账户上加上100万，在背后默默地记录着每一个人的每一笔交易。

但比特币的目标就是要革它（银行等传统金融第三方金融机构）命的，如果抛弃它了，直接进行对点对支付，谁来记账？我已经转了100万给李四，如果李四赖账说没收到，或者他说只收到80万，怎么办？

中本聪给出的解决方案是数字签名。什么是数字签名？

**数字签名**（Digital Signature），是类似于我们手写的签名，采用了**非对称加密技术**，用于鉴别数字信息的方法。

为了理解数字签名，先简单解释非对称加密。

密码学中有两种加密技术，对称加密与非对称加密。

对称加密，加密、解密都使用同一种规则。非对称加密，加密、解密不是使用同一种规则，加密采用一种规则，解密采用另一种规则。

比如，甲同学想发送数字520给乙同学，但是担心泄露，于是每位数加1，把631发给乙，甲只要把解密规则——每位数减1发给乙就可以了，即便别人截获631也无法得知你发送的真正内容。

当然实际加密要复杂的多，不太可能简单的加1，比如，每位数加153@76！54Adue78……。

这上面这个例子中，加密和解密都采用同一个规则——数字3，是典型的采用对称加密。

**非对称加密**（asymmetric cryptography），它可以生成唯一的匹配的密钥对，一个公钥，另一个私钥，两者一一对应。公钥可以向全网发送，也就是所有人都可以知道公钥，但是私钥必须只有自己知道，否则就容易造成泄密。

公钥用作加密，私钥用于解密。使用公钥加密的密文，只能用配对的私钥才能解密。比如用A的公钥加密，只能使用A密钥解密，不能用B的密钥或其他人的密钥来解密。

另外，公钥还可以用于签名（相当于你手写的签名），私钥用于验证签名。同样如果用A的私钥签名，只能用A的公钥验证，不能用B的或其他人的公钥验证。

甲发送一份情报给乙，首先要求甲乙双方都有各自的公钥和私钥。流程是这样的：

1.乙先把自己的**公钥**公之于众；

2.甲用**乙**的**公钥**对情报进行加密，同时再用**自己**的**私钥**进行**签章**，将加密过的情报和签章一起打包发给乙；

3.乙收到情报后，用**他**的**私钥**进行**解密**，同时用**甲**的**公钥**进行**验章**。

这个过程涉及两个问题：

一是如何确保乙收到的情报，内容未被被泄露、更改和动过手脚？

二是乙收到的情报如何确定是甲发送的，而不是其他人（敌方）发送的假情报？

这2个问题也是加密技术必须解决的问题：保密（内容不泄露、篡改）、发送者无法否认。

第一个问题，因为公钥加密的文件，必须要其配对的私钥才能解密。甲发送的文件，用了乙的公钥来加密，只有乙才能解密，这就使得即便情报被其他人截获，其他人因为没有乙的私钥，也就无法打开，只有乙可以解密、打开。

第二个问题，甲用自己的私钥进行了签章，乙收到甲签章过的情报后，用甲的公钥进行验章，验证通过，说明这个情报一定是甲发送的。

打个比方，甲把自己印章一分为二，印章1（公钥）和印章2（私钥），印章1公之于众，印章2自己留着。甲用印章1签章，发送给乙，乙收到后跟印章2比对，能对的上，说明就是甲发送的，不可能是其他人发送的。

这样，我们开头提到的问题，就迎刃而解了。

但是，中本聪又提出另一个问题，数字签名没法解决双重支付的问题。这个难题怎么破解，我们下一期介绍双重支付。

---

*Originally published on [Untitled](https://paragraph.com/@0xf3b3998615f7a0fad13ded9e68bafc332882533c/2)*
