重新创造比特币3:舍弃账户模型

0.前言 #

Bitcoin的第一个版本已经上线,它的意义在于,展现了系统的使用场景。

1.舍弃账户模型 #

自从Bitcoin第一个版本(v0.0.1)上线,咖啡店的生意越来越好,老板Bob显然做了一个明智的决策。

中本聪却越来越烦恼:“这么多人来找我注册账号和兑换Bitcoin,都没时间编程了,我得想想办法。把兑换工作交给老板Bob吧。”

中本聪说:“我说,老板,现在越来越多的人来找我兑换Bitcoin,我都成了人肉交易所啦,没时间升级系统了,要不兑换的工作你来做吧。”

Bob说:“好啊,正合我意,不过我可以调整汇率吗?”

中本聪说:“当然可以,这符合自由市场经济学理论。”

Bob高兴的答应了,中本聪将自己的账号密码告诉了Bob,咖啡馆就正式成为了Bitcoin的线下交易所。

中本聪感到轻松了很多:“那么,就还剩下用户注册的功能。”

中本聪一边思考着,一遍拿出笔记本准备开始编码。

忽然,有个大胆的想法在中本聪的脑子里闪过:“能不能彻底的去掉用户注册呢?”

之所以要有用户注册功能,是因为每个用户都要在user.txt中创建一条账号记录。

每个用户的账号信息只包括三个字段:用户名、密码、余额。

如果能用其他的方式来替代这三个字段,那么就可以舍弃“账户模型”了。

首先是用户名,可以用账本替代。因为每笔交易记录都包含着付款方和收款方的用户名,所以账本(transaction.txt)可以代替账户(user.txt)定位出用户名。

其次是余额,账本也可以替代。因为账本就是交易流水,累计交易流水可以得出用户的余额。所以账本(transaction.txt)可以替代账户(user.txt)实现余额。(具体获取余额的逻辑见下图)

获取余额的两种方式对比

解决了用户名和余额之后,最难的部分是如何去掉密码。

密码的作用是向服务端证明Alice是真正的Alice,而不是一个叫Calor的家伙的冒充,除非Calor知道了Alice的账号密码。

所以密码的本质是一把钥匙。

那么除了密码,有没有其他方式呢?

“用对称加密的方式可以吗?”中本聪思考着。

2.对称加密 #

对称加密是一种很常见的加密方式。

举个例子:赵四在网上发送了一段消息给谢大脚:“今天晚上11点小河边见”。但是这个消息在网上是明文,一旦被别人截获,他俩不可告人的秘密就暴露了。

对称加密就可以解决他们的担忧:赵四将消息用一种通用的加密算法加密后,明文会变成密文,密文长成这个样子:“U2FsdGVkX18tGXt20Jb/muCW7ipyKF5fTbNV9gUkJZxRIVNGk6ziokkrOXyZ8qkh”。即便被人截获,也看不懂是啥意思。

将明文和密钥作为参数,传入加密算法,计算后得到密文。

用伪公式表达为:Function加密算法(明文,密钥) = 密文

加密算法是公开的,但是密钥是保密的。赵四和谢大脚拥有内容相同的密钥,别人由于不知道密钥,就无法解密。(见下图:加密的悄悄话)

3-2.png

如果将赵四换成Alice,将谢大脚换成Bitcoin的服务端,Bitcoin的就拥有了通信加密的能力。

密钥最初在服务端生成,在Alice第一次登陆时,将其分配给Alice,Alice收到密钥后将其存储在浏览器里。

服务端还需要存储Alice和此密钥的对映关系。

之后,Alice每次发送的消息,都是经过加密后的密文。

服务端接受到Alice发送的密文消息,就可以用相同的密钥进行解密。(见下图:对称加密)

3-3.png

但是选择加密来替代密码,能解决我们的根本问题吗?

我们的最初的目的还记得是什么吗?

我们的根本目的不是舍弃密码字段,而是要舍弃账户模型,如果舍弃了密码,确引入了密钥,等于换汤不换药,账户模型还是必须存在,没有本质变化。只不过用户的“钥匙”由密码换成了密钥。

用户注册则可以看作是服务端预先给用户分配“钥匙”。(见下图:用密钥替代密码)

3-4.png

“可不可以让用户独立创建出‘钥匙’呢?”

中本聪再次陷入了思考之中……

“可以用非对称加密。”对面座位的‘大胡子’一字一顿的说道。

中本聪看着大胡子,他面前也放着一台笔记本:“你也是程序员吗?”

“是的”那人依旧面无表情。

中本聪热情的伸手过去:“哈,能在中途镇遇到开发者太不容易啦,你好,我叫Satoshi,你叫?“。

“Gilfoyle",这次他眨了一下眼睛,还微微的点了一下头,估计那就是在示好吧。(见下图)

3-5.png

这一历史性的时刻真应该被拍成照片,中途镇的两位天才程序员终于相遇了,Bitcoin在他俩的长期合作中,远远超出了同时代程序员的认知水平,最终达到了无法想象的完美高度。

3.非对称加密 #

中本聪:“你刚才说非对称加密可以解决我的问题?”

“是的”,Gifoyle微微点头,然后向中本聪解释起来:“你需要的并不是明文的加密,明文不怕见光,你需要的只是创建一个独特的标识来证明‘我是我’,非对称加密可以搞定。”

Gifoyle继续解释细节,中本聪听完兴奋的叫到:“就是它!”

非对称加密很神奇,它源自一个神奇的数学原理(椭圆曲线加密算法),它不像之前的对称加密,Alice和服务端需要使用同一把密钥。

这次,Alice可以靠自己,独自生成一对钥匙,一把是公开的,称为公钥(谁都可以知道)。另一把是私密的,称为私钥(只有自己知道,不能告诉别人)。(见下图:公钥和私钥)

3-6.png

非对称加密就好比一个神奇的箱子,手里拿着一把钥匙(私钥),可以上锁,但是却无法解锁。如果想要解锁,只能用另一把钥匙(公钥)。很反直觉吧,所以才叫“非对称”。(见下图)

3-7.png

对称加密VS非对称加密

正是由于这种“非对称”的特性,Alice可以用私钥将交易数据(“Alice to Bob 30")加密,得到密文("e2edeae7a01d226367ccb0220447d8f1dfcf14f6defb9bf"),然后将密文和公钥(明文)作为参数放入消息中,通过网络,发送给Bitcoin服务端。(消息=密文+公钥)

Bitcoin服务端收到消息,解析后得到两个部分数据:一部分为密文,另一部分为公钥(明文)。用公钥解密密文,得到明文“Alice to Bob 30”。

根据非对称加密的特性,公钥如果可以解开的密文,此密文一定是用对应的私钥加密,所以可以确定这段密文的生成者,一定就是拥有唯一私钥的Alice。

服务端将交易数据的明文写入到交易账本中,交易即刻生效!

另外,不只是Bitcoin服务端,任何人都可以用Alice发出的公钥来进行密文的解密,都可以得到相同的明文。

所以说,在Bitcoin的使用场景中,选择使用非对称加密技术,并不是为了保护明文不见光,而是为了证明“只有我可以生成这样的密文”,即,“证明我是我”。(见下图::非对称加密在Bitcoin交易中的使用)

3-8.png

参考: #

码农翻身

下一篇:重新创造比特币4:数字签名

相关文章: #

重新创造比特币1:从一个简单的web交易系统开始

重新创造比特币2:第一个版本上线啦

重新创造比特币3:舍弃账户模型,让交易更自由

重新创造比特币4:数字签名

重新创造比特币5:公钥和私钥

重新创造比特币6:第二个版本上线啦

重新创造比特币7:UTXO

重新创造比特币8:基于UTXO的系统重构

重新创造比特币9:万物皆交易

重新创造比特币10:交易脚本

重新创造比特币11:群系统(上)

重新创造比特币12:群系统(下)

重新创造比特币13:P2P网络

重新创造比特币14:交易的同步

重新创造比特币15:账本的同步

重新创造比特币16:Block Chain(付费)

重新创造比特币17:网络的弹性(付费)

重新创造比特币18:工作量证明(上)(付费)

重新创造比特币19:工作量证明(下)(付费)

重新创造比特币20:分叉之重组与分裂(付费)

比特币SV(Bitcoin satoshi vision,BSV)是目前唯一一个遵循中本聪原始白皮书,遵循中本聪原始协议和设计的比特币。BSV是唯一的公共区块链,维持比特币的原始愿景,并将大规模扩容成为企业级区块链和世界新货币。

 
0
Kudos
 
0
Kudos

Now read this

第二章.测试和debug(2.Testing and debugging)[完成]

翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术) 第二章 测试和debug(Testing and debugging) 本章重点: 1.测试工具 2.测试技术 3.构建一个测试框架 4.如何测试异步代码 目录链接:http://yannhe.com/secrets-of-the-javascript-ninja-javascript 本文链接:... Continue →