【钱包科普】公钥、私钥、助记词、地址是什么?
刚开始接触数字货币钱包的朋友可能会对一些名词感到:公钥、私钥、地址、助记词等等,今天我们尝试用通俗易懂的方式为大家讲解一部分钱包常用的专业名词。
首先我们来谈谈公钥、私钥和地址是分别是什么或者说分别有什么作用。先说结论,公钥=银行账户、地址=银行卡号、私钥=银行卡+密码。
打开度娘搜索“公钥”或“私钥”,我们能得到如下解释:
公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是独一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。
百度百科再次给出“劝退”警告⚠️
如果我们撇开“非对称加密、公钥是怎么生成的、私钥是怎么生成的、两者间如何相互作用的”这些稍微深入的、本质的问题,单纯地将区块链体系与银行体系进行类比,公钥和私钥是很好理解的。
公钥相当于现实世界中的银行账户。公钥是可以对外随意公开的,没有任何风险。现实生活中,别人问你银行账户往往是想向你打钱的,你要对ta好一点。同样的,如果有人没事问你公钥,你也要......哎,不对,每次转账不都是要地址吗,谁会要公钥。
没错,尽管公钥相当于银行账户,但在实际操作中,我们使用的都是地址,这个地址就相当于现实世界中的银行卡号。因为公钥还要负责签名、验证之类的事情,怕它忙不过来,所以我们把公钥丢到固定的算法里算出一个它的小弟——地址。地址小弟只负责收款,其他一概不知。
私钥相当于现实世界中的银行卡+密码。现实世界中,人们是怎么操作银行账户的?找一台ATM,插入银行卡,输入密码。同样道理,在区块链世界中,只要输入私钥,就可以对相应账户“为所欲为”。因此,如果你的私钥不慎泄漏,任何人都可以操作你的资产。
此外,不同于银行体系可以帮助用户找回密码,在区块链系统中,私钥一旦丢失就永远无法找回,对应的资产也会随之“失踪”。
虽然私钥忘不得,但还是会有很多人忘记私钥,因为私钥很复杂。复杂到什么程度呢?私钥是一个64位的十六进制字符串,大概长这样:
998dfc4e06c5f6a5927ca8996d53094f528948eadf3458ed12fb76ae3a532bfe
或者这样
da03cebffdd50a29fe9fdf643265823431280ee38eecd448b652df63ae9448d3
别试了,上面两串都是我瞎敲的,但是私钥真的长这幅德行,为了方便记忆及备份,开发人员决定给私钥做一个“整容”,通过算法将私钥转换成若干个常见的英文单词或中文,这些英文单词或中文就叫做助记词。助记词一般由 12 - 24 个单词构成,这些单词都取自一个固定词库,其生成顺序也是按照一定算法而来。
我们可以简单的将助记词看作私钥的快捷方式,助记词 = 私钥 = 银行卡+密码。只要按照顺序在钱包中输入助记词,就能恢复钱包并进行任意操作。同样的,如果助记词泄漏,就相当于私钥泄漏,任何人都可以操作你的数字资产。
大致明白公钥、私钥、签名的定义后,我们就可以开始尝试解释一笔数字资产交易究竟是怎样完成的。
首先,我们认真地解释一下公钥和私钥。公钥和私钥是一对用于非对称加密的密钥,那什么是非对称加密呢?
在现实生活中,人们所熟知的密码大部分几乎都是对称加密的。比如大名鼎鼎的摩斯密码,就是用点和横的不同排列组合来对应26个英文字母。比如下面这段密码:
-... .. - -.-. --- .. -. -....- - --- -....- - .... . -....- -- --- --- -.
任何拿到摩斯密码加密方式的人都可以轻易地翻译出来:BITCOIN TO THE MOON
而非对称加密则不然,简单的说就是公钥加密过的内容需要用私钥才能解密,私钥加密过的内容要用公钥才能解密。
举个例子,假设《无间道》的世界里可以运用非对称加密技术,那电影就应该这么拍。
韩琛有一对密钥,私钥只有他各自知道,公钥则全世界都知道。
某一天,韩琛策划一笔交易,交易即将开始时刘健明发现异常,为了避免被警察知道信息内容,他选择用韩琛的公钥对内容进行加密并且发布。警察虽然截获密文,但是只有公钥的他们无法解密内容。韩琛收到密文后用只有自己知道的私钥进行解密,轻松获取信息内容“有内鬼,终止交易——刘健明”。
韩琛收到信息后需要给刘健明回复收到,为了避免警察冒充自己,这时韩琛会用自己的私钥加密,如果刘健明可以用韩琛的公钥解密,就证明这句话是韩琛发出,消息确实收到了。
在区块链世界里,上面一段刘健明给韩琛发信息的使用频率不高,反而是下面一段韩琛给刘健明回复意义重大,因为这就是所谓的数字签名。
插入一个知识点,数字签名就是只有信息的发送者才能产生的、别人无法伪造的一段字符串。
数字签名顾名思义就是数字化的签名。在现实世界中,每个人的签名和指纹都是独一无二的,我们由此来判断各类合约是否由本人签署、是否真实有效。而区块链仅存在于网络中,我们需要通过数字签名来判断交易信息来源以及交易信息真实性和完整性。
现在让我们回到数字资产交易。
假设张三想通过区块链发起一笔交易,他需要用自己的私钥加密身份信息并把这段密文和交易信息“我要转账100万给李四”一起广播出去。大家收到广播内容后用“张三之公钥”破译密文成功:我是张三。
由于“张三之私钥”是张三独有的,因此大家确认这条身份信息或者说数字签名是张三本人发出来的,也没有被篡改,就认可了这笔交易确实由张三发起。
确认交易信息的来源及完整性后,区块链上的节点们就可以把这笔交易记录在区块链上,待到交易确认后,这笔交易就算是正式完成了。