区块链 - 公钥加密
公钥加密(Public Key Cryptography),简称 PKI,也称为非对称加密。它使用一对密钥——公钥和私钥。密钥是一串很长的二进制数字。公钥在全球范围内分发,正如其名称所示,它是真正公开的。私钥必须严格保密,绝不能丢失。
以 Bitcoin 为例,如果你丢失了 Bitcoin 钱包的私钥,你的整个钱包内容将立即面临被盗的风险,而且在你反应过来之前,所有资金(钱包内容)就会消失,系统中没有任何机制可以追踪是谁偷了它——这就是我之前提到的系统匿名性。
PKI 实现两个功能——认证和通过加密/解密机制保障消息隐私。现在我将解释这两个功能——
认证
当两方交换消息时,建立发送者和接收者之间的信任非常重要。特别是,接收者必须信任消息来源。回到我们之前的场景(图 1 所示),Bob 向 Lisa 发送钱购买她的商品,让我们看看 PKI 如何在 Bob 和 Lisa 之间建立这种信任。请看下图——
首先,如果 Bob 想向 Lisa 发送钱,他必须创建自己的私钥/公钥对。请注意,这两个密钥始终成对使用,不能混用不同个人或不同实例的私钥和公钥。
现在,Bob 声明他要向 Lisa 发送 $10。于是他创建一个消息(明文消息),包含 Bob(发送者)的公钥、Lisa(接收者)的公钥以及金额($10)。
汇款的目的,例如“我想从你那里买南瓜”,也会添加到消息中。整个消息现在使用 Bob 的私钥进行签名。当 Lisa 收到此消息时,她将使用 PKI 的签名验证算法和 Bob 的公钥来确保消息确实来自 Bob。PKI 的工作原理超出本教程范围,有兴趣的读者可以参考此网站了解更详细的讨论。这确立了消息发起者的真实性。现在,让我们看看消息隐私。
消息隐私
现在,Lisa 已收到付款,她想发送 ebook 链接给 Bob(Bob 想要购买)。因此 Lisa 会创建一个消息并发送给 Bob,如图所示——
Lisa 创建一个消息,例如“这是你请求的我的 ebook 链接”,用她在 Bob 请求消息中收到的 Bob 的公钥对其签名,并使用两人在 HTTPS 握手期间共享的某个密钥对消息进行加密。
现在,Lisa 确信只有 Bob 能使用他独有的私钥解码该消息。而且,拦截消息的人无法恢复其内容,因为内容使用只有 Bob 和 Lisa 拥有的密钥加密。这向 Lisa 保证,只有 Bob 能访问她的 ebook。
了解了 PKI 隐含的两个特性——认证和消息隐私后,让我们继续看看 Bitcoin 如何利用 PKI 来保护我在“What is Bitcoin?”章节中提到的公共账本。
供参考——最流行的 PKI 算法是 RSA 和 ECDSA,Bitcoin 使用后者。