翻译 | 关于区块链的小知识

2019-11-171702

原文自国外技术社区dzone,作者为 Mayur Ingle,传送门

这篇文章是给那些对区块链感到好奇但是完全不知道是什么的人的,目的是让读者了解什么是区块链,这表明在写这篇文章的时候没有进行任何的简化。如果你在读完这篇文章之后初步了解什么是区块链技术的话,那么我的初愿就算完结了!

提示:读者不要忽视了文章里的图片,这会帮助你更好理解。想象力很重要。

什么是区块链?

可以这么说,区块链 = 块 + 链 = 成链的块。

这里,我们首先拿账户转账进行对比。请记住,区块链其实有许多应用场景,资金流转只是其中一部分。

假设,我从我的账号里去一部分钱转移到你的账号当中。

当进行账号间的交易时,必须有一个地方将这笔交易记录下来。

这个地方就是块(block)了。

在这个块当中,我们会写下如下的这些信息:

  • 谁将金钱转移给谁?
  • 这笔交易的金额
  • 一些譬如像签名等其他信息
public class Block {

  public String data;

  public String hash; 

...} 

因此,块充当着类似于银行支票的信息角色。除了信息(I)之外,块还保存着用于标识的唯一哈希(H)。哈希(H)在这里也是一个非常关键的概念。

在日常,由于有许多的交易在同时进行,所以会诞生一系列的块,而这些块都会通过链连接在一起形成区块链。

为什么块会被链在一起?

块被连接的原因其实是为了对里面的信息进行保护。

连接:当前块的哈希是取决于上一块的哈希。

让我们用下面的例子来理解这个概念吧。

想象下我们有如下三个块:

  • 块1持有I1作为信息段以及带有H1的哈希值
  • 块2持有I2作为信息段以及带有H2的哈希值
  • 块3持有I3作为信息段以及带有H3的哈希值

H2是由H1和I2的组合而成的。同样,H3是H2和I3的组合而成的,如此类推。

创建为块哈希

H2 = 某些加密函数(H1, I2)。

H3 = 某些加密函数(H2, I3)。

那么H1到底是从哪里来的呢?首先,我们需要拿到H0的默认值。

H1 = 某些加密函数(H0, I1),其中H0是一个默认值。

现在,上面的区块链是稳定的。

假设有人将块2里I2的信息更改变成了I2',并且将H2的哈希更改为H2',并且之前的块保持不变。

在这种情况下,像下图那样,区块链就变得不稳定。

变得不稳定的原因可能有下面这几个:

  • H3 = 某些加密函数(H2‘, I3),已经是不相同的值了
  • 我们需要创建新的H3',H3' = 某些加密函数(H2‘, I3)
  • 同样的,H4',H5',H6'也是如此

更改过后,区块链会重新变为稳定,像下图所示。

这样,任何更改都需要完整的端到端的修改和验证。这样就不容易通过非法手段去进行更改了。如果被黑客进行改动,整个区块链会变得不稳定并且会被所有者所捕捉。

List blockList = new ArrayList();

我们将块放到了列表当中(像上面所示),以便从当前块开始,我们可以很容易地使用 blocklist.get(position — 1) 找到前一个块。当然也有其他不同的方法来存储块。

安全性是为什么这些块连接起来的主要原因。

什么是区块链?

区块链其实是一个分布式分散分类账簿distributed and decentralized ledger),用来存储交易等数据信息,并且在其网络的所有节点中共享出来。

以上对区块链的定义看似非常难理解。没事,下面我们会逐个理解其中的含义。

分类账簿

分类账簿是保存块列表的主要记录存储者。

存储信息

块存储着数据(信息)。我们可以想象,数据可以是任何结构或者任何类型。在这里,我们将交易信息作为示例的数据来描述。

分布式分散分类账簿

通常,有一台中央机器来负责处理数据的所有内容。但在区块链中,会有多台计算机在操作(所以它不是集中化的),并且所有机器都是互相连接的。所有这些机器都有相同的账簿。因此,区块链是一个分布式分散分类账簿。

换句话说,区块链本身就是作为账簿而被开发出来的产物,并且与使用同一个区块链网络的每个人共享。每个账户都获取到整个账簿的副本并且当往某处添加内容时,也能获取到最新的更新。

在网络中的所有节点中共享

有一个网络,这当中每台计算机都在相互关联。每个节点(机器)都拥有相同副本的账簿。这意味着账簿在网络的所有节点中被共享。

区块链是怎么工作的?

下面步骤说明区块链的工作形式:

  • Mayur 想要进行一笔交易
  • Mayur 创建一个交易单
  • Mayur 提交交易单到网络当中
  • 网络中其中一台机器验证交易的合法性并且给予批准
  • 在区块链当中新的块由于 Mayur 的交易而被创建了
  • 区块链的更新被广播到网络中的所有人
  • 交易完成

如果区块链是分布式的,怎么确保它的安全?

区块链是使用加密算法来生成电子签名的。在这个过程中有一个叫做公钥和密钥的概念。

我们每一个人持有我们自己的密钥以及其他人的公钥。

私钥:该密钥只能由密钥的所有者所访问

公钥:网络中的每个人都持有其他人的公钥的访问权限

想象下如果我需要完成一笔新的交易。我使用私钥来加密信息来创建一个电子签名。

使用私钥来进行加密

然后,我提交这笔交易(包含数据信息,公钥,以及先前创建的数字签名)到网络当中用来获取批准。

在这个过程中,网络通过提供的公钥来解密数字签名,并且从签名中获取信息。

如果,和上图所示,原始信息和签名中的信息一致,那么交易就被通过验证。否则,交易将会被拒绝。

如果信息不匹配,可能是由于下面的原因:

  • 原信息在传输的过程中被改写了
  • 产生数字签名的私钥,与所提供的公钥不匹配

这样网络技能捕获改写的步骤,从而确保区块链的安全。

分享
点赞1
打赏
上一篇:Docker常用命令笔记(一)
下一篇:翻译 | 哈希,生日和密码