区块链第一课 如何在没有central authority的小型网络上维护可行的交易清单

in blockchain •  7 years ago 

原文 http://johnmathews.eu/blockchain-introduction.html

使用从苹果交换橘子开始的场景,了解块链的基本概念和优点。

如何在没有central authority的小型网络上维护可行的交易清单

第一部分主要介绍广义上区块链的关键特性。因为数字货币只是一种区块链技术的应用,所以在这里不会提及比特币或任何特定数字货币或其区块链实现的引用。

创建不能被伪造或争议的财务文件

让我们想象一下,存在这么一个村庄,居民的贸易仍然通过以物易物进行。John有一些苹果,而Lizzie有一些橙子。John想要一个橘子,给Lizzie一个苹果作为交换。她接受了,并给John写了一张收据。

Date: 1234
From: Lizzie
To: John    
What: 1 Orange  
Price: 1 Apple

到目前为止还不错。收据作为了交易的证据。第二天,John想要一个橘子,但没有任何东西可以交换。他还提议给Lizzie写个便条,说他欠Lizzie1个桔子(一个借条)。他们认为John应该在便条上签字,这样Lizzie就能证明John欠她1个橘子。

Date: 1234
From: John
To: Lizzie
What: 1 Orange
Signed: John's signature, Lizzie's signature

这张借条是一个不错的交易凭据,但它很容易伪造。Lizzie只有借条的副本,一旦Lizzie看到John的签名,她可以轻松地复制它并创建更多的借条。她也可以将这个借条从1个橘子变成11个橘子(打个比方),而John不能证明原来的数量是多少。如果Lizzie和John对John所欠的内容双方各执一词,那就不可能知道谁在说实话。因为双方的话是矛盾的。

Lizzie意识到这一点,并提议改进——他们会找到一名见证人,并制作3份借条。每份副本将由Lizzie、John和证人签署。让我们称这个见证人为“Walter”。

Date: 1234
From: John
To: Lizzie
What: 1 Orange
Witness: Walter
Signed: "John's signature", "Lizzie's signature", "Walter's signature"

这是一份更有说服力的文件,更难伪造。如果Lizzie把“What:”里面的内容改成“11个橙子”,John和Walter都会有自己签名的原件。这将是对Lizzie 那一份伪造借条的两份证据。Lizzie 将被从法庭上笑着轰出来。嘿嘿。

三方交易运作得很好,这就是今天大多数交易的记录。但这有一个缺漏:如果Lizzie能贿赂Walter,那么交易就会被篡改!John将依靠Walter来验证他对交易的看法,但他会因为Walter缺乏诚信而失望。Lizzie和Walter可以把一个橙子变成11个橙子,如果Lizzie给了Walter一些额外的橙子,这将给他们一个伪造文件的动力。如果Walter喜欢橙子,他可能并不关心他作为证人的职业生涯会被毁掉。

这是现代金融体系的一个问题,大量的时间、金钱和监管都致力于确保第三方是值得信赖的。如果我买一辆车,而我的银行与汽车经销商勾结,我就会被骗。若要将这种风险降低到可接受的低水平,那将使得金融服务比原本所需要的更慢、更昂贵。

解决方案是公共密钥基础设施(在之前的帖子中介绍过)。在这个系统中,每个个体生成他们自己的一对公私密钥。他们将私人密钥保密,并将其公钥免费提供。对公钥加密的详细描述超出了本文的范围,但简短地说:

公钥由私钥派生,这对密钥都具有独特的数学特性。两个密钥都可以用来加密消息,但只有另一个密钥可以用来解密它。不能使用相同的密钥对消息进行加密和解密。如果私钥用于加密,那么任何人都可以解密(因为公钥是公开可用的),而这显然是一个很糟糕的保密方法,但这是一个很好的验证谁加密了这条消息的方法,因为只有一个人有私钥。正因如此,使用私钥加密消息是有效地创建一个数字签名,不能伪造。(如果公钥用于加密消息,则只能使用私钥来解密,此方法用于安全地传输机密数据。)

再次回到水果问题上来。如果Lizzie想要接受John的借条,她可以使用公共密钥加密,没有人需要担心沃尔特。这项交易有3个步骤。

  1. 制作一张借条说John欠Lizzie一个1橙子。
Date: 1234 From: John To: Lizzie What: 1 Orange
  1. John创建一个公私密钥对和添加一行文本的借据,他使用他的私钥对其内容进行加密。
Date: 1234, From: John, To: Lizzie, What: 1 Orange
"Signed by John" <- John 用自己的私钥加密了这一行
  1. John公开他的公钥免费提供给任何想要的人。

这将会有效用,因为任何人(不仅仅是Lizzie)都可以检查John是否签了借条。可以通过查看该事务的“From”部分来验证该事务,注意到该事务是John的,然后使用John的公钥解密编码的“签名”行。

如果这是由John本人的私钥加密的,那么这段签名只能使用John的公钥解密,。因为John是唯一一个拥有私钥的人,这证明了交易是有效的,而Lizzie并不是不诚实地为John创造了债务。

显然,如果John公开他的私钥(或它的被盗),那么他会使这套体系不安全,但这是John和他的安全协议的问题,而不是使用了公共密钥的问题。

创建并维护一个准确的交易清单

到目前为止,我们已经看到了如何安全创建、签名和验证一张借条(为了一个橙子)。这个过程可以扩展到更多的人来交换更多的水果。例如
原始便条:

Date: 1234, From: John, To: Lizzie, What: 1 Orange //  John用他的私钥签署和加密

然后会有一些额外的交易:

Date: 1235, From: Lizzie, To: John, What: 2 Apples // Lizzie用他的私钥签署和加密
Date: 1236, From: John, To: Chris, What: 1 Banana // John用他的私钥签署和加密
Date: 1237, From: Chris, To: Lizzie, What: 2 Bananas //Chris用他的私钥签署和加密

在这四笔交易过后,John,Chris和Lizzie,这是每人所欠的:

  • John把1个橙子给了Lizzie,1个香蕉给了Chris
  • Lizzie欠John两个苹果
  • Chris欠Lizzie2个香蕉。

这令人困惑,(而且荒谬)。不可能知道谁是负债最多的人,谁是最富有的人。莉齐欠2个苹果,但同时借出去了2个香蕉和1个橙子。这意味着她的水果生意是赔钱还是赚钱?我们说不清。要知道我们需要对所有的水果使用相同的价值单位。假设橙子值2个苹果,香蕉也值2个苹果(因此1个香蕉= 1个橙子),还可以发明一种叫做“硬币”的货币,1个苹果值1枚硬币。这四项交易现在可以重写为:

Date: 1234, From: John, To: Lizzie, What: 2 coins //  John用他的私钥签署和加密
Date: 1235, From: Lizzie, To: John, What: 2 coins // Lizzie用他的私钥签署和加密
Date: 1236, From: John, To: Chris, What: 2 coins // John用他的私钥签署和加密
Date: 1237, From: Chris, To: Lizzie, What: 4 coins // Chris用他的私钥签署和加密

通过交易清单我们可以看到

  • John欠Lizzie和Chris两枚硬币,但Lizzie欠他两枚硬币。他的净额是- 2
  • Lizzie欠John翰2个硬币,但Chris欠她4个硬币。她的净额是+ 2
  • Chris欠Lizzie 4个硬币,但John 欠他2个硬币。他的净额是- 2

到目前为止,Lizzie是唯一一个有商业技能的人。

如果Lizzie想用Chris所欠的4枚硬币从John那里买些什么呢?她能不能用这个系统来转移Chris答应给她4个硬币,这样Chris就会付给John钱?是的,因为每个人都可以相信,交易记录是准确可靠的,所以债务可以作为付款。Lizzie的交易看起来是这样的:

Date: 1235, From: Lizzie, To: John, What: ba781... // Lizzie用他的私钥签署和加密

“What”部分包含了和chris原始交易的hash值,她希望将其转让给John。hash是文件或文本的签名。在本例中,它是Lizzie与Chris的事务的签名。签名在每个事务中都是唯一的,并识别哪些事务被用作支付。因为这两笔交易都是用Lizzie的私钥签署的,所以很容易确认Lizzie有权利使用之前的交易,即她欠别人的钱(或支付)一些硬币。

这显示了public-private key infrastructure 如何可以安全地记录交易,并在一定条件下实现一群人之间的交易。区块链可用于转让单位的价值,如在这个例子中,但我们可以很容易地将自有资产或所有权证书(房屋,金融工具,钻石等)放在交易的“What”部分内。如果我们进行两个其他更改 - 删除事务的“To”部分,并将事务的hash作为使用私钥签名的文本的一部分。如果我们这样做,那么一个记录将是:

Date: 2345, From: Chris, What: "A photo of me" //  "交易hash: d6f18..., Signed and encrypted by Chris using his private key"

这将创造一个可靠的记录,由Chris来定义是什么。他可以很自信地给任何人发送这条记录,如果他们有他的公钥,那么他们就可以确认是Chris本人签署了这份,并声称这张照片是他本人。如果有人更改了照片,那么事务中的数据将会改变,事务将会有一个新的hash值。新的hash值与签名中包含的hash值不匹配,签名中的文本不能更改,因为只能使用Chris的私钥加密,只有Chris拥有。因此,很容易看出除了Chris之外的其他人正在尝试更改照片。

如果Chris是一家银行的雇员,而“What”则包含有关银行提供金融服务的客户的文件,那么公共密钥加密的另一个用途就出现了。在这个场景中,Chris(代表银行)有效地确认了客户的真实身份,并记录收集到的证据,以显示银行知道他们的客户是谁。如果该事务包含一个名为“客户ID”的新部分(举个例子),那么所有身份检查已成功完成的客户的数据库就可以完成。这可以与其他部门(或别的银行)轻松且不可避免地共享。这就是KYC背后(在区块链上)的概念。

回到我们的水果贸易中:目前,参与者被允许携带净负平衡。要使这个系统在现实中运行,需要对“硬币”的产生进行控制,以维持其价值。在上面的例子中,人们可以自由地创造“硬币”,也可以携带负数的“硬币”。这将导致“硬币”的贬值。因此,他们的创造(和从果实中转化)必须以可预测的方式加以控制。

我们目前的例子只包括3个人。如果网络中有很多人,那么每次在交易列表(链)中添加新交易,坚持每个人都在场或在线,这是不可行的。如果我们允许在某些人离线时添加交易,我们会创造一个欺诈的机会。为什么,以及如何解决这个问题和其他相关问题将在第2部分中描述。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @troylee! You received a personal award!

1 Year on Steemit

Click here to view your Board

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @troylee! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!