上一篇文章中,比较了区块链与银行系统,介绍了大纬度的不同,今天我们来看看更具体的方面:账户。
我们先想象一下,如果你要搭建一个银行的账户系统,你需要做一些什么准备呢?
如果你是一家有野心的银行,初始搭建一个几万、几十万、几百万、几千万人的账户系统是必不可少的,如果业务发展顺利,尤其按照国内的人口规模,可能用户数量会增加到亿级别。
我们默认已经拥有了这种完美解决方案,且这种解决方案在任何情况下都不会出现问题;但此规模的数据势必占用大量的存储空间,同时由于银行账户与个人信息一一绑定,银行需要具备相应的操作人员及处理紧急情况的客服人员。
想想是不是头都大了?
账户系统真的需要这么麻烦吗?
比特币是怎么处理这个问题的呢?
比特币在采用了非常巧妙的方法,构建了能给地球上60亿人都能使用的账户系统,同时避免了存储成本。
那它是怎么做到的呢?
想明白这个问题,首先我们要理解一个概念:即公钥与私钥。
公钥与私钥
公钥与私钥,它是一个成对的字符串;公私钥并不是区块链首创,这一技术早已存在,但中本聪将它很好的嵌入到了区块链技术当中。
简单来讲,私钥是留给自己的,公钥是留给全网的;公钥加密的一段信息只能用私钥来解密,而私钥加密的一段信息只能用公钥来解密,也就是非堆成加密。
公私钥要解决的问题是,在匿名的网络环境中,“我”该如何证明“我”就是“我”呢?
“我”用私钥加密一段数据过去,而这一段只能用提前公布的公钥才能解析,虽然我没有给其他人展示私钥,但是通过整个验证过程,大家便能相信“我”就是“我”。
总结:公钥与私钥是成对的,公钥公布给大家,私钥自己留着。
公钥加密的信息、私钥解密;私钥加密的信息、公钥解密。
通过这种加密解密过程证明一个地址的所有权。
比特币的公私钥、地址
- 首先使用随机生成一个数字,该数字为256bits,也就是最大值为1.15792 * 10∧77,给60亿人分发,每个人也能领到很多很多个,这一随机数字将成为私钥,因此必须要保护起来。
- 私钥经过椭圆曲线算法SECP256K1处理生成公钥,也就是私钥可以得出公钥,但公钥无法倒推出私钥,该特性保证过程的不可逆性。
- 将该公钥进行SHA256、RIPEMD160哈希算法,得到公钥哈希。
- 在该公钥哈希头部加上版本号(例如0x00),而后进行两次SHA256哈希,将结果前四位作为校验值加到公钥哈希尾部。
- 将上步结果进行BASE58编码(比特币定制版本),得到最终的钱包地址。
每个用户最终需要知道的是自己的钱包地址(用于接收其他人的转账,也就是输入),以及解锁账户的私钥(用于花费自己的余额,也就是输出),而公私钥体系保证这一过程不会出现任何问题。
对于输入跟输出的具体概念,后面会有详解,现在粗浅分解交易过程即为:
用户使用私钥签名一笔交易丢到交易池,再由网络节点使用公钥验证交易,验证成功后选择性地打包,并生成区块,该交易就会在区块链上正式生效。
长处与短处
现在我们想像一个中心化系统,可能是一个电商网站、一家银行、一个学校主页;最常见的方法是该组织创建一个数据库,然后用账户密码及个人信息来管理所有账户。
这种场景下,账户系统就会变成用户名+密码的模式,并且与你的个人信息深度绑定。
而比特币通过非对称加密系统带来了两个显而易见的好处;
- 避免了管理庞大用户数据库的成本;
- 所有账户均为匿名账户;
可以说,比特币从设计之初就包含了宏大的野心,它的账户设计即避免了储存大量的用户数据,又保证了其匿名性,它生下来就是为了改变世界。
那么这种管理方式有没有什么缺点呢?
严格来讲,逻辑上是没有任何缺点的,但在实际使用中确实存在问题。
相信很多人都使用过“找回密码”的功能;人不是一个完美的生物,人会失误,人会犯错,我们必须要由一个机制来弥补我们的错误;现实世界里很多机构的客服人员就是满足该需求。
在比特币的世界里,一个失误将导致永久的失去;假如用户的私钥丢失了,或者被别人获得了,那么财产会100%流失。
这也是很多网站跟App会一遍又一遍地强调“一定要保管好私钥”的原因。
以上是作为基础的账户系统,接下来的篇章里我们来看看区块链是怎么处理记账这个行为的。