重新创造比特币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

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

作者:何岩,由 recreating.org发行。 0.前言 # 前篇说到了对称加密,并且我们发现没必要将交易的消息全部加密,因为交易数据不怕见光。只需要加密一小部分即可,究竟应该加密哪部分呢? 1.签名 # 既然我们的根本目的并不是防止别人看到交易数据的明文,而只是要用密文证明“我是我”。那么我的要求就是尽量加密更少的文字,即,加密付款者的名字。 这是为什么呢? 启发往往来自于现实生活的例子: 赵四想买台拖拉机,但是钱不够,向刘能借了1万块钱,刘能要求赵四写个借条。... Continue →