μ译林——【NIST区块链技术综述】系列连载04

in #cn5 years ago

翻译:子轩 校对:Neo MA

2018年8月,美国国家标准与技术研究院(NIST)发布了"Blockchain Technology Overview"一文,较为全面、客观地梳理了区块链技术。文章颇具价值,μNEST将其译成中文,以飨读者,并用十期进行系列连载。本期为系列连载的第四期,接上期继续介绍区块链技术的重要组成部分:地址和地址生成、账本、区块以及区块成链。

3.4地址和地址生成

一些区块链将用户的公钥进行哈希运算,得出的结果连同一些附加数据(如版本号、校验和等),由此形成一个由字母和数字组成的字符串作为地址。绝大多数区块链在交易中用“to”和“from”标识地址的起止。地址的长度比公钥短且无需保密。生成地址的一种办法是,创建一个公钥并对其进行哈希处理,然后将哈希值转成文本格式。

Public key → cryptographic hash function → address

不同的区块链都可能采取不同的方法生成地址。对允许匿名账户创建的公链网络而言,用户可以随意生成任意多组公私钥对,继而生成任意多的地址,而这可以带来一定程度匿名性的好处。对用户而言,地址在区块链中扮演着公共ID的角色,地址常常会被转换成二维码以便移动端设备的使用。

4.1.png
图2 一个比特币地址1EuLQCvqeoAUeqTkX74tGxVcEL9ABBNsMG的二维码

在区块链网络中用户不是唯一的地址来源。智能合约在被部署到区块链上的时候需要有一个调用的方法。在以太坊中,智能合约是通过一个叫合约账户的特殊地址被调用的。合约地址在智能合约被部署时自动创建(合约地址是算法通过合约创建人的地址确定性地计算出来的)。一旦合约账户接收到交易,合约立即被执行,当然它也可以创建别的智能合约。

3.4.1私钥储存

在一些区块链网络(尤其是公链网络)中,用户必须妥善保管自己的私钥。他们通常使用软件进行私钥的安全存储而非人工记录,这样的软件通常被称为“钱包”。钱包可以存储私钥、公钥以及相对应的地址。另外,钱包也可能有其他功能,例如可以统计用户持有数字资产的总额。

由于重新生成相同的私钥几乎是不可能的,因此如果用户弄丢了私钥,那就意味着任何与该私钥相关联的数字资产也消失了。如果私钥失窃,攻击者将获得所有由该私钥控制的数字资产的权限。私钥的安全如此之重要,以至于许多用户使用特殊的安全硬件存放私钥。另外,用户也可以利用新兴的私钥第三方托管服务。此类托管服务满足KYC的监管要求,用户创建账户以储存私钥时必须提供身份证明。

私钥储存是区块链技术中一个极为重要的部分。当看到类似“加密货币XYZ失窃”的新闻时,几乎可以肯定的是私钥被窃后用作交易签名,导致财产被转移到新的账户中,而非区块链自身被攻破了。需要注意的是,非但链上数据无法更改,私钥一旦被窃取并公开地用于把资产转移到其他账户,这个交易也是不可逆的。

3.5账本

账本是交易的汇总。历史上,用纸笔记录的账本也被用来作为记录商品交易和服务的载体。在现代社会中,账本则用数字化的方式保存在大型数据库中,并由中心化的第三方信任主体(账本的所有者)代表社区的用户运维。而这些中心化属性的账本可以用中心化或者分布式的方式实现。

如今,越来越多的人对分布式账本感兴趣。区块链技术用账本所有权的分布式,以及物理架构的分布式来提供一个分布式账本。区块链网络的分布式物理架构通常需要比中心化架构更多的计算机的支持。相比于中心化的账本,分布式账本的优势在于可信任、安全、可靠:

中心化账本可能丢失或损坏,用户必须相信账本的所有者会妥善备份系统。

区块链网络的分布式设计保证了用户可以多备份地同步更新账本数据,最大的好处就是每个用户可以自己保存账本的备份。无论新的全节点何时加入网络,都可以查找其他全节点并请求备份全节点上的区块链账本数据,这大大降低了账本丢失或损坏的可能性。需要注意的是,有些区块链支持隐私交易或隐私渠道。隐私交易的信息通常只会在那些参与交易的节点间传递,而非整个区块链网络上。

中心化账本通常基于同质性网络,有相同的软硬件和网络基础设施。正因如此,一旦网络中的局部受到攻击将会影响整个网络。

区块链网络是异质性网络,软硬件和网络基础设施各异。区块链网络中的各节点差别显著,对一个节点的攻击方式大概率不会在其他节点复用。

中心化账本对地理空间有要求(例如,都在某一国家)。如果该地区发生网络瘫痪,账本和服务就无法正常运行。

区块链网络中的节点分布在世界各地,区块链网络是由点对点的协议实现的,某一节点甚至一个区域节点的失灵并不会造成全局性影响。

基于中心化账本是不透明的,而这很难保证交易的有效性。用户必须相信账本所有者会对交易进行有效性确认。

区块链必须确认所有交易的有效性。如果恶意节点正在传递无效交易,其他节点可以检测出来并选择无视它,从而防止无效交易扩散到整个网络中。

基于中心化账本的交易清单有可能不完整。用户必须相信账本所有者记录了所有接收到的有效交易。

区块链网络在它的分布式账本中记录下了所有有效的交易。新块必须在区块头引用之前的区块。如果发布中的区块没有包含对前一个块的引用,其他节点可以拒绝承认这个新块。

中心化账本上的交易数据可被篡改。用户必须相信账本所有者没有改动历史交易数据。

区块链网络使用了数字签名和哈希算法这些密码学机制,保证了账本防篡改和防干扰。

中心化系统存在安全隐患。用户必须相信计算机系统和网络始终进行重要补丁的修复和采取必要的安全保护措施。系统有可能受到攻击而导致个人数据失窃。

区块链网络的分布式特性使得它不存在一个可被攻击的中心化节点。通常区块链上的信息通常公开可见,没什么数据好偷。如果试图攻击区块链用户,需要对网络上的用户逐一下手。而如果选择的目标是整个区块链,系统中的诚实节点会共同抵御攻击行为。如果单个节点没有做安全升级,那影响仅限于该节点,而不会影响整个系统。

3.6区块

用户通过软件(桌面应用、手机应用、数字钱包、网页服务等)向区块链网络提交交易申请,软件随即向一个或多个节点发送交易信息。被选中的节点有可能是没有出块功能的全节点或者可以出块的节点。已提交的交易在网络中扩散,但这并不等于交易上链。在许多区块链中,悬置的交易一旦被扩散到各节点就必须排队等候,直到交易被出块节点打包记录到链上。

当节点发布一个区块时,交易记录即上链。一个区块包含了区块头和区块数据。块头包含了该区块的元数据,区块数据则包含了一系列被验证且已提交至区块链网络的真实交易记录。通过两方面的检查确保了交易的有效性和真实性,即交易记录格式是否正确,以及是否每笔数字资产的交易上均附有加密数字签。这说明了交易中数字资产的发起方可以获取私钥对数字资产进行签字移交。其他全节点会验证已发布区块中所有交易的真实性和有效性,如果出现无效交易便拒绝接收该区块。

需要注意的是,每个区块链可以自行定义数据字段。但通常大部分区块链都采用以下的数据字段:

区块头;

区块号,有些区块链也称为区块高度;

前一区块头的哈希值;

区块数据的哈希值(可以用很多方式实现,例如生成一个用默克尔树,存放一个根哈希值或者对整个区块经行哈希计算);

时间戳;

区块大小;

随机数(nonce),对于PoW挖矿的区块链,nonce是出块节点用来解哈希难题的;其他链可能没有nonce或者用它做别的用途;

区块数据;

区块内的交易列表和账本事件;

其他可能用到的数据。

3.7区块成链

每个区块均包含前一区块头的哈希值,区块依次上链从而形成区块链。如果之前的区块发生变化,将会得到一个不同的哈希值。相应地,此区块往后序列中所有区块的哈希值均会发生变化,这就很容易识别并拒绝发生改动的区块。

4.2.png
图3 链在一起的区块

联系我们

homepage.png
Homepage:iotee.io

facebook.png
Facebook:NESTchain

twitter.png
Twitter:@miuNEST

telegram.png
Telegram:@miuNEST

reddit.png
Reddit:r/miuNEST

medium.png
Medium:r/miuNEST

steemit.png
Steemit:μNEST

公众号二维码.png
微信公众号二维码

小助手二维码.gif

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 61219.98
ETH 2927.64
USDT 1.00
SBD 3.66