比特币及区块链浅说(三)

从一个过客的角度来理解和诠释世界。
打印 被阅读次数

五、公钥与私钥

在老张写给老王的交易文件里出现了一个新名词:公钥。什么是公钥?既然有公钥,那么有没有私钥呢?

有的。公钥(public key)和私钥(private key),正是我们即将介绍的另一组新概念。

俗话说,一把钥匙开一把锁。然而,在公钥和私钥系统中,我们却非得给一把锁配两把钥匙:被钥匙A锁上的锁只能用与之对应的钥匙B才能打开;反之亦然,被钥匙B锁上的锁也只能用钥匙A来开锁。

我可以选择这两把钥匙中的一把作为私钥,藏在一个非常安全的地方。除了自己,任何其他人都休想得到它。剩下那把钥匙则可以作为公钥,配上一千多把,满大街乱扔,谁想用谁用。

自家的钥匙满大街乱扔?万一被不怀好意的人拿了去会不会出岔子?

其实不必担心,我们说过,公钥和私钥是一对钥匙,二者必须配合起来才能起到应有的效果。让我们先举一例来说明它们的用途。

话说大唐天子唐明皇很宠爱一位名叫杨玉环的贵妃。这杨玉环生的天仙一般,不但人聪明,还懂音律,擅歌舞,甚得天子欢心。

杨贵妃平生有两大爱好,一是泡温泉,一是吃遍天下的水果。泡温泉很容易,因为他们在骊山脚下就有一处豪华行宫,闲来无事去那里住住非常方便。而吃水果就有点难了,因为好的水果大多生长在南方,从遥远的南方把水果送到长安,路上要很多人经手。这些人虽然口口声声死心塌地地效忠大唐天子,然而依然难保他们会在途中产生二心,给那鲜美的水果玩些掉包、卡油、或以次充好、以小充大的勾当。

为了让最疼爱的妃子吃到可口的原装水果,唐明皇想出了一个绝妙的计策:让工匠制作了数千个水果专用匣,每个匣上配有皇家御用锁。所有匣子上的锁都使用两把钥匙,一把公钥,一把私钥。私钥只有一把,由唐明皇亲自保管。公钥随锁附在匣子上,一起被分发给全国各地的大小官员。唐明皇传出圣喻:今后各地官员凡欲向朕进贡水果者,必先以此御匣小心盛之,再以所附公钥封之,不得有误—―钦此。

从此之后,唐明皇每天都会收到很多从全国各地送来的水果匣。每当收到这些匣子时,他总要拿出贴身藏着的私钥,亲自动手打开上面的将军锁。每当看到那将军锁“咔嚓”一声被打开,唐明皇的脸上就会露出得意的笑容。他知道:这匣水果的确是原装的,中间没有人动过手脚,自己今天又能讨得爱妃的欢心了。

这便是公钥和私钥的一种用法。在过去,这样的设计也许只对极为尊贵的贵族才有意义,因为普通人连饭都吃不饱,若是有人给你送东西,你早就乐得屁颠屁颠的,哪管它是不是原装?可社会发展到了今天,普通草民也要讲究起来了。比如说,我今天买房,中介要从网上给我寄一份含有敏感信息的文件,我不希望文件在网上流动时内容被别人看见,又不想亲自跑一趟去拿。怎么办?很简单,我可以产生一对电子钥匙,就像前面那样,一个公钥,一个私钥。私钥我自己留着,公钥我送给中介。中介用公钥把文件加密后寄给我,我用私钥打开,非常安全。请注意,公钥被别人偷了去一点儿关系也没有,因为它只能用来加密,不能用来解密。

公钥和私钥还有另外一种用途,那就是防伪,还是举一个容易被理解的例子加以说明。

据说现在市面上伪造的茅台酒特别多,很多茅台酒的忠实客户也开始抱怨,说自己的利益受损,希望茅台酒厂严格把关。

茅台酒厂领导在听到群众的呼声之后,召开了一个扩大座谈会议,严肃地讨论了这个问题。在会上,他们一致认为:群众的疾苦就是我们的疾苦,群众的困难就是我们的困难。我们一定要开动脑筋,群策群力,想出一个好办法来保障消费者的权益。

会议最后得出的结论是,他们将为每一瓶茅台酒的瓶口加一把锁。这些锁一律配有两把钥匙,一把是私钥,由茅台酒厂保管,出厂前用此钥匙把瓶口锁住。另一把是公钥,它的设计图纸及制作流程将公布于天下。

一时间,各大企业、商家、小商贩纷纷开始复制茅台酒厂的公钥,将其卖给喜爱茅台酒的人。茅台酒厂的领导并不去追究这种山寨自己公钥的行为,因为他们知道,得到公钥的人越多,假酒就越没有市场,自己的利益反而会得到保护。果不其然,当酒厂开始发售被上了锁的茅台酒之后,人们喝酒前总会拿出公钥去开那酒瓶子。假如打不开,那肯定是假酒。渐渐地,茅台假酒从市场上销声匿迹了,酒厂的效益也随之直线上升。茅台酒厂甚至将自己的广告词换成了:“只有用这把钥匙打得开的酒,才是真正的茅台酒。”

在这里,公钥和私钥发挥了防伪的作用。

当然,在互联网世界里我们同样可以用公钥和私钥实现上述功能,只不过,这里的钥匙并非金属所制,而是由普通的数字所组成。

任何一对数字,只要它具有下述特性,就可以作为公钥和私钥使用:如果用其中一把钥匙给信息加密,那么就只能用另外一把来解密,反之亦然。

数字的确可以起到钥匙的作用,具体例子请见下节。现在假定我们已经找到符合上述要求的一对数字,并且愿将其中的一个作为公钥,另一个作为私钥。

有了公钥,我们可以像唐明皇那样,将它遍洒于天下,让所有人向我们进贡极品。有了私钥,我们就可以向世人证明:我就是我,如假包换。

这其实正是银行之类的大机构为我们提供的基本服务。在去银行开账号的时候,我们需要提交身份证明,银行在验明正身后会给我们一串数字作为账号,还要求我们想出一个只有自己才知道的密码。这样,当我们走到这家银行的任何一个提款机前时,就可以用此密码从自己的账号里提取现金。在这里,银行起到的作用是什么呢?很简单,把我们的密码和银行账号这两个数字联系起来。

再想想公钥和私钥吧,不需要社会安全号,不需要驾照或其他身份证明,它们本身就可以通过数学算法联系在一起。既然我们能通过算法和把两个数字安全地联系起来,那还需要银行做什么!

事实上,私钥和公钥正是比特币这座摩天大厦的坚固基石。我们所申请到的比特币账号,实际上就是一对数字:私钥和公钥。为了保证自己的财富不至流失,我们应该妥善地保管私钥,把它放在最安全的地方。但公钥则是知道的人越多越好:我们可以用邮件把它发给陌生人,把它印在名片上,制成二维码随便让人扫描等等。谁不希望天下的人都往自己的账号里打钱呢?

让我们再次回到区块链里存储的比特币交易记录:

……

区块100

交易1:承接区块99之交易2,自账号Q转10元钱进账号Z。

交易2:承接区块99之交易3,自账号Q转10元钱金账号M。

交易3:承接区块99之交易3,自账号Q转10元钱金账号W。

……

这里的Q、Z、M、W分别相当于老钱、老张、老马和老王比特币账号的公钥。

再看老张为从老王那里购买烧饼而产生的交易文件:

吾,公钥Z持有者,特授权将区块100第一笔交易所得金额之陆元整转入账号W,余下四元整转入账号Z (签名)

这个交易文件中出现了两个公钥,一个Z,一个W。从区块100的第一笔交易记录看,Z的确从Q那里得到过十元钱。那么怎么保证产生这个交易文件的主人是不是公钥Z的持有者呢?这就是文件末尾(签名)的重要性所在。这个签名就像茅台酒瓶子上的那把锁,只有用相应的公钥才能打开。换个角度来阐述这个问题:你现在要从账号Z往外转钱,而你声称自己是账号Z的主人并且留下了用私钥Z签好的签名,那我现在就用公钥Z来验证这个签名。如果验证通过,证明你的确拥有和Z相对应的私钥,也就证明了你是账号Z的主人。否则,这个文件的真实性就非常可疑。

这个文件被传到网上后,所有人都可以根据签名来验证文件的真实性。在真实性得到确定之后,这笔交易就会被写到区块链中,成为永久性记录:

……

区块101

交易1:承接区块100之交易1,自账号Z转6元钱进账号W。

交易2:承接区块100之交易1,自账号Z转4元钱进账号Z。

……

至此,老张账号下的6元钱便转到了老王的账号里。而余下的4元钱,依然保存在老张的名下,虽然它在区块链里的位置改变了。

(待续)

登录后才可评论.