判断一个人是否真的了解区块链,可以先问一句:“我转 Token 给你,你的钱包地址是什么呢?”这个试金石可以轻松地区分很多人。在区块链世界,没有自己的钱包地址就是一个旁观者。
要创建一个钱包,需要先获得自己的钱包地址。比如,这就是一个合法的比特币地址:
1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm
就像银行账户一样,有了它,任何人都可以给你转账。其实,任何人都可以独立地、不联网地生成自己的钱包。这是怎么做到的呢?
公钥和私钥
这涉及到一个密码学上的一个基本概念:公钥加密技术。
公钥加密技术中,公钥和私钥成对出现,公钥加密的东西可以拿私钥解开,私钥加密的东西可以用公钥解开。两者的关系,大家可以想象成一个带锁的盒子和一把钥匙之间的关系。这个特性用来加密和签名。
加密的过程,就像是把要寄的信放到盒子里,锁上并写上地址,然后寄出去。寄件人和收件人都很放心,因为其他人无法打开盒子。
签名的过程,类似于对外展示钥匙的过程。锁上的盒子只有你可以打开,如果有人拿着你发的钥匙打开了盒子,那盒子里的东西一定是你发的。
你手里面握着私钥,无论如何都不能泄露;你的钱包地址,是满世皆知的转换后的公钥。钥匙信息可以被公钥打开,则说明是知道私钥的人加密的。所以,任何的交易一旦用你的私钥加密了,收到的人用你的公钥可以解密,那就认为是你授权的操作。
钱包地址的生成
比特币世界几个关键的信息是按照这个顺序生成的:先生成私钥,再由私钥算出公钥,再由公钥经过一系列哈希算出钱包地址。
私钥 → 公钥 → 钱包地址
上面的推导次序是单向的,反向不可能。也就是说,从钱包地址无法得到公钥,从公钥无法得到私钥。比特币的公钥变形出来的钱包地址,可以想象成用户名,这全世界都可以知道;私钥可以想象成密码,这个只有自己知道。
私钥是一切的开端。私钥是一个大于零、小于 2 的 256 次方的任意数字,比如下面这个私钥:
00000000000000000000000000000001(也就是数字 1)
需要注意的是,不是随机生成的私钥,风险非常大!
然后,私钥通过椭圆曲线函数,生成对应的公钥,比如下面这个:
0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
经过一系列哈希加密之后,最终形成比特币地址,比如下面这个:1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm
私钥就像《阿里巴巴和四十大盗》故事里面的“芝麻开门”。世界上任何人只要知道“芝麻开门”这个咒语,就可以在那座大山里面找到那个山洞并且打开大门。一个人是否拥有账户,只看他知不知道那个咒语。四十大盗知道咒语后可以取走宝贝,阿里巴巴知道后也可以取走,至于那个山洞里面有没有金银财宝,则是另外一件事情了。
看这篇文章的你,在知道了本文举例中的比特币私钥(即数字 1),这意味着我们对这个地址里面的“钱”都拥有控制权。
在比特币的世界,虽然无法知道地址背后的人是谁,但这个地址历史上所有的交易都是公开的,可以通过区块链浏览器查询。