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

作者:何岩,由 recreating.org发行。

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)实现余额。(具体获取余额的逻辑见下图)

图片 1.png

获取余额的两种方式对比

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

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

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

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

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

2.对称加密 #

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

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

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

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

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

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

图片 1.png

加密的悄悄话

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

密钥最初在服务端生成,在Alice第一次登陆时,将其分配给Alice,Alice收到密钥后将其存储在浏览器里。服务端还需要存储Alice和此密钥的对映关系。之后,Alice每次发送的消息,都是经过加密后的密文。服务端接受到Alice发送的密文消息,就可以用相同的密钥进行解密。(见下图)

图片 1.png

对称加密

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

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

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

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

图片 1.png

用密钥替代密码

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

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

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

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

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

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

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

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

3.非对称加密 #

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

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

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

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

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

图片 1.png

公钥和私钥

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

图片 1.png

对称加密VS非对称加密

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

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

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

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

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

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

图片 1.png

非对称加密在Bitcoin交易中的使用

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

相关链接 #

重新创造比特币:前言

Part One : 交易
重新创造比特币1:从一个简单的web交易系统开始
重新创造比特币2:第一个版本上线啦
重新创造比特币3:舍弃账户模型
重新创造比特币4:数字签名
重新创造比特币5:公钥和私钥
重新创造比特币6:第二个版本上线啦
重新创造比特币7:UTXO
重新创造比特币8:基于UTXO的系统重构
重新创造比特币9:万物皆交易
重新创造比特币10:交易脚本

Part Two : 群系统
重新创造比特币11:群系统(上)
重新创造比特币12:群系统(下)
重新创造比特币13:P2P网络
重新创造比特币14:交易的同步
重新创造比特币15:账本的同步
重新创造比特币16:Block Chain
重新创造比特币17:网络的弹性
重新创造比特币18:工作量证明(上)
重新创造比特币19:工作量证明(下)
重新创造比特币20:分叉之重组与分裂

书面设计矢量图_36.png

英文版Amazon.com在售 : Recreating Bitcoin

BSV打赏:
1Djc4TdVBi8urzmSXKHwg8cpEAYKcRQxgY

©2019 - Recreating.org all rights reserved

 
1
Kudos
 
1
Kudos

Now read this

Recreating Bitcoin 1:Start over with a Simple Web Transaction System

Prologue # For great creation, recreating is worship. Welcome to the world of Bitcoin !!! WHAT is the book really about? Position, concept position, concept position of Bitcoin. WHY position? Because the position is clear, understanding... Continue →