在区块链中,我们经常听到这样的词汇——公钥和私钥。很多小白在学习区块链知识时,还是容易被这些术语搞得一脸懵逼。此文谨献给币圈新朋友,希望能够用Emoji帮助大家理解比特币公钥和私钥的基本常识。
研究密码学的人们经常使用“爱丽丝”和“鲍勃”作为解释概念的角色。今天,我将用他们来帮助解释公钥密码学的基本逻辑。
首先,什么是对称加密。举个例子,爱丽丝想交给鲍勃一个装有秘密文件的公文包。如果爱丽丝和鲍勃有互相匹配的钥匙,事情很简单:她可以将公文包上锁,并用钥匙把它锁起来,然后将它给鲍勃。
当鲍勃收到公文包时,他会用自己的钥匙解锁,因为这两把钥匙相同,于是鲍勃会得到包中的秘密文件。这个过程被称为对称加密。
但是通常而言,人们互相之间少有“同时拥有一把锁的钥匙”这种情况,因为要安全地传递钥匙并不容易。或者说,如果爱丽丝有给鲍勃发送钥匙的私人且安全的方式,她同样也可以用其来传输文件本身。
所以,比较常见的方式为,爱丽丝和鲍勃不需要同时拥有一个锁的钥匙,而是他们彼此都有自己的钥匙和自己的锁,这意味着他们不需要考虑传递钥匙的事情。
具体是这么运作的:
爱丽丝用钥匙锁起了带有挂锁的公文包,并将其传递给鲍勃。当鲍勃收到爱丽丝的公文包时,他无法解开爱丽丝的挂锁。但是,他将其添上了自己的挂锁。
然后将其返还给爱丽丝:
然后爱丽丝用她的钥匙将挂锁从公文包上摘下来:
公文包上现在只有一个挂锁:鲍勃的。爱丽丝再将公文包寄回给鲍勃:
最后鲍勃可以打开他自己上锁的公文包,并顺利拿出里面的文件。
现在,爱丽丝和鲍勃不需要再分享同一把钥匙。他们只需要拥有自己的挂锁和自己的钥匙。
但是如果对方不是你认为的那个人呢?万一发生了什么奇怪的事,比如鲍勃被一头牛所取代了呢?
那么接下来,将发生这样的事情:
1. 爱丽丝把带有挂锁的公文包寄了出去。她以为寄给的是鲍勃,但是却寄给了一头奶牛。
2. 这头牛,以惊人的灵巧度,将它的挂锁锁在了公文包上,然后将其寄回给爱丽丝。
3. 爱丽丝很高兴看到公文包带着“鲍勃”(实际上是奶牛的)挂锁回来了,她打开自己的挂锁并将其寄送回去。
4. 这头奶牛拿回公文包,打开了自己的锁。
5. 牛把秘密文件吃掉了。
鉴于没有人希望他们的秘密被一头牛消化掉,所以我们需要采取一个步骤来保护机密数据:鲍勃确保爱丽丝知道他的挂锁是什么样子,所以当她重新拿回公文包时,能够验证这个新锁是否属于鲍勃。
事实上,鲍勃能够复制他的挂锁的模样,并将其公开。每个人都知道鲍勃的挂锁是什么样子其实并不重要,毕竟他是唯一可以用钥匙解锁的人。同时,这能让爱丽丝认出鲍勃的锁。她可以在打开自己的锁之前,检查第二个挂锁是否真的属于鲍勃。
如果我们需要处理的仅仅是物理挂锁和密钥,那是很难做到复制挂锁和钥匙的。但是当我们以数字化方式进行处理的时候,我们使用的是数字密码和数字锁,即数值。
在上面的例子中,挂锁代表的数字是公开的,也可以叫做公钥。钥匙代表的数字是私有的。这个被称为“私钥”的私人数字可以用来“打开”公共锁。这种非对称加密算法,公钥与私钥是成对的,他们互相解密,因为加密和解密使用的密钥不一样,被称为非对称加密算法。他们的关系如下:这即是比特币所采用的公钥密码学。
人们保护私钥,是因为私钥可以解锁任何相对应的公锁。(在密码学中,这种解锁过程被称为签名)人们会公开他们的公钥,这样其他人就知道什么被锁住了。
在比特币系统中,公共密码学被用来证明所有权。用Emoji来表示具体的操作流程如下:
在比特币的世界里,爱丽丝需要传递给鲍勃的并不是一个挂锁公文包,而是一个放着挂锁和比特币的“玻璃盒子”。
为了将比特币传递给鲍勃,爱丽丝必须做两件事:
1. 爱丽丝必须把鲍勃的挂锁(公钥)放在自己的箱子里。这很简单,因为鲍勃的挂锁实际上是一个公开数值。这样,鲍勃可以通过解锁自己的挂锁来证明自己的所有权。
2. 爱丽丝必须证明这个盒子放置的挂锁是她的,而不是别人的。她需要用钥匙(私钥)打开自己的挂锁。
然后,当鲍勃决定将这些比特币传递给另一个人(我们暂且称他为卡洛斯)时,他会做同样的事情:将卡洛斯的公钥放置其中,然后用自己的私钥签署交易。
让我们回到区块链,私钥本质上是32个byte组成的数组,由256个0或者1随机组成。一般我们看到的私钥是下面这样的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
公钥是一个65个byte数组,一个未压缩的公钥长这样:
04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235
地址是由公钥产生的,公钥经过多种加密算法转换成公钥哈希,公钥哈希经过Base58编码生成地址。就如同爱丽丝把鲍勃的挂锁放在盒子里一样。实际上,单个公钥可以生成无限多个地址。因此,如果鲍勃希望每次都使用不同的地址,他也可以这么做。
总的来说,私钥,公钥,地址的关系如下:
(图片来自微信公众号: 槿小喵)
让我们回到比特币是如何交易的。我把它发送到你的比特币地址上,你的比特币地址以数字化的方式与你的私钥相连,那么你将在这个地址中获取比特币。
为了花掉这5美元,你需要进行一个新的交易,包括一个属于收件人的地址,然后用你的私钥签署。这相当于把收件人的挂锁挂在公文包上,然后打开你的挂锁。
总结:私钥公钥是成对出现,公钥可以生成对应的唯一地址,这样就能确认了该地址发送的交易是否使用了对应的私钥。这种做法有一个副作用,那就是,比特币几乎是匿名的。因为地址上使用的是“假名”。比特币与你的名字无关,其所需要的是你的私钥。换句话说,谁掌握了私钥,就掌握了你地址上的财产,这也是为什么进入区块链行业一定会被提醒:私钥一定要保管好。