风险提示:防范以虚拟货币/区块链名义进行的非法集资风险。 ——银保监会等五部门

聊聊钱包、私钥、公钥和地址

白话区块链 2017-12-17 22:01:07
微信分享

扫码分享

近来区块链技术相关的话题热度持续上升,其中大家最熟悉的应用恐怕就是比特币了。网上关于这种数字货币到底有没有价值的争论早已经吵翻了天,正反两派各有很多拥趸。不过我不打算谈价值,只想从比特币对应的一款具体的应用软件入手,聊一些相关的专业名词和背后的逻辑。

作者:历史文章 / 来源:白话区块链

2017-07-20 万精油虫师 白话区块链

白话区块链,从入门到精通,看我就够了!

 

 

近来区块链技术相关的话题热度持续上升,其中大家最熟悉的应用恐怕就是比特币了。网上关于这种数字货币到底有没有价值的争论早已经吵翻了天,正反两派各有很多拥趸。

 

不过我不打算谈价值,只想从比特币对应的一款具体的应用软件入手,聊一些相关的专业名词和背后的逻辑。

 

如果你是比特币的持有者,还凑巧有windows或者mac电脑,那你应该用过一款叫Bitcoin-qt的软件。这个软件就是号称比特币钱包的工具,与此相关的还有私钥、公钥、地址等名词概念。那么这四个概念之间是什么样的关系呢?尽管网上有很多资料解释的很详细很技术,但我也费了好大功夫才大概弄明白,可能是我的理解能力差吧。


接下来我就把自己在理解这些问题时产生的疑问列出来,并一一回答。

 

第一,这些名词的关系是什么样的?

如果用一句话说明这几个名词的关系,那就是:钱包生成私钥→私钥生成公钥公钥生成公钥哈希公钥哈希生成地址地址用来接受比特币,简单吧,能听懂吧。

 

第二,这几个名词究竟是什么东西?

还是一句话概括,除了钱包是软件以外,剩下的四个都是长度不一的字符串,比如私钥是52位的字符串,地址是34位的字符串。

 

第三,这四个字符串分别从哪里来的?

私钥由钱包软件随机生成,随后用密码算法生成公钥和地址,如果用等式表示的话,可写成如下形式:

公钥=算法1(私钥)

公钥哈希=算法2(公钥)

地址=算法3(公钥哈希)

所以,地址=算法3(算法2(算法1(私钥)))

其中,算法1,算法2,算法3都是公开的算法。

 

第四,这几个字符串哪个必须保密,哪个可以公开?

私钥绝对不能公开,因为有了它本质上就取得了对应比特币的所有权。


地址可以公开,因为它是用来接受比特币的,公钥和公钥哈希也可以公开,不过一般情况下你看不到。

 

第五,为什么地址和公钥可以公开?

因为即使被别人知道了地址和公钥,对方也推算不出你的私钥,也就掌握不了你的比特币

 

为什么推算不出呢?

因为问题三中的等式,除了算法3,算法1和算法2的计算都是不可逆推的

地址=算法3(算法2(算法1(私钥)))

 

什么叫做计算不可逆?

先举个简单的例子。


有等式y=4x²+5x+17,这是我们中学都学过的抛物线方程,在这个简单方程里,已知x的情况下,可以快速求出y。但是在知道y的情况下,要反求x,就会发现可能的答案x有两个,但实际只有一个才是正确的。


当然真实的密码算法要比这个复杂的多,以至于,在已知y的情况下,x的可能解多达10的77次方个,所以若有台超级强大的计算机,进行暴力搜索求解,还是可以算出私钥的。不过据说宇宙所有原子的总和是10的80次方,所以暴力搜索法应该很花时间吧。


再举个例子。电影《模仿游戏》中,英军即使在得到了engima密码机(算法)后仍然无法破解德军的密码,原因就是德军每次发信息都会用一个新的口令(私钥)作为起始点。在不知道口令的前提下,进行反向暴力破解大概需要几千万年,不过最后因为刻板的德国人每次都用同一个口令作为起点,而这个口令还是自然语言,导致密码被破解。


所以,每次交易的时候才会要求生成一个新的私钥,然后得到一个新的地址,这样你的交易安全性就有了很大的保障。

 

第六,私钥的本质是什么

从上面的描述我们可以推出,私钥的本质是一个复杂数学问题的解,当有人向公开地址发送比特币时,其实是在向全网所有比特币客户端发出了一道数学题,而这道题目的正确解,就是你的私钥。因为那道题是用你的私钥生成的呀,所以只有你能在第一时间回答出答案,于是比特币就归你了,因此私钥千万不能告诉别人。

 

如何找到私钥并妥善保管?

在bitcoin-qt软件中,进入windows debug或者调试窗口,在命令行下输入getaddressbyaccount命令可以查看所有已经生成的钱包地址。选取其中一个地址,然后用dumpprivkey “地址”命令就能看到私钥了(54位字符串)。

 

下图是用getaddressbyaccount “”命令查看地址列表,用dumpprivkey查看私钥的截图,注意第一张图中由于钱包是加密的,所以直接打dumpprivkey命令是看不到私钥的。



输入钱包密码后才能用dumpprivkey命令看到私钥。



刚已经说了私钥非常的重要,它是真正决定比特币归谁的证明。私钥在bitcoin-qt客户端里,实际上是存在于一个叫wallet.dat的文件里的,而且刚安装的bitcoin-qt客户端是不设密码的。万一电脑落入不法分子手中或被黑客攻击,导致私钥丢失,就狠尴尬了,所以一定要设置密码,且密码一定要遵守随机复杂大小写字符数字都有的规则。建议用专门的密码生成软件生成,关于密码软件,找机会专门说一下。

 

特别注意,千万千万千万记住了,一定不要把密码给忘了!因为你忘了密码就打不开钱包wallet.dat文件了,也就找不到私钥了,然后,就没有然后了。


我就发生过刚开始倒腾钱包把密码搞错了,然后打不开钱包的尴尬,最后只好怒删wallet.dat文件,让系统再自己生成一个,这时候的感觉大约相当于把一笔钱埋在了宇宙某刻星球上,然后把坐标图搞丢了,因为比特世界只认私钥不认身份证,你掉了就是掉了,再也找不回来了。

 

不过正因为比特币的所有权是依靠私钥确认的,也就有个最狠的保存办法,老猫也提过,那就是,找到私钥后记在纸上,然后把纸锁在保险柜里,或者干脆记在脑子里,不过54位的字符串谁特么能记住?然后把电脑上的客户端连同钱包文件一起删除。

 

好了,关于钱包客户端,大概就说这些吧,相关知识我也是刚开始了解,随着了解信息的增加,可能会有更新的认识,到时候会再写出来。

 

  Kindly Reminder                                 

 

千万注意,千万注意,千万注意不要搞丢了私钥。

 

 | 万精油虫师     

公众号 | 肉摩陀     

整编 | WangMe

 

 

白话区块链

区块链世界入口第一站,人人都能看懂的区块链;24 小时热点实时追踪。