企业选型的区块链底层技术
Hyperledger Fabric 概念
2015年,Linux基金会启动了Hyperledger项目,目标是发展跨行业的区块链技术。
Hyperledger Fabric是Hyperledger中的一个区块链项目,包含一个账本,使用智能合约并且是一个通过所有参与者管理交易的系统。
Hyperledger Fabric 是分布式账本解决方案的平台,以模块化架构为基础,支持不同组件的可插拔。
区块链
共享的、通过智能合约更新的多副本交易系统,并通过协作共识机制保持账本副本一致同步。
当前记录系统 | 区块链 |
---|---|
无法统一管理参与者身份,确认源头费力 | 各参与者都有账本副本 |
明确交易耗时长 | 共享账本、共享更新账本流程 |
手工签订合约 | 减少与私人信息及处理的时间、成本和风险 |
数据独立,易单点故障 | 可见性高,信任度高 |
一个分布式账本(A Distributed Ledger)
区块链网络的核心是一个分布式账本,它记录了网络上发生的所有交易。
- 去中心化
- 网络中每个参与者都保存账本的副本
- 网络中每个参与者共同维护账本(协作)
- 信息只能以“附加”的方式记录在区块链中
- 使用加密技术保障交易一旦被添加进账本中,无法被篡改
智能合约(Smart Contracts)
为了持续的进行信息的更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制。
智能合约不仅仅可用于在区块链网络中打包信息,它们也可以被用于自动的执行由参与者定义的特定交易操作。
共识
保持网络中所有账本交易的同步流程,就是共识。确保账本仅在交易被适当的参与者批准时更新,并且当账本更新时,它们以相同的顺序更新相同的交易。
Hyperledger Fabric 模型
- 资产(Assets) :资产是可以通过网络交换的几乎所有具有价值的东西,从食品到古董车、货币期货。
- 链码(Chaincode):链码执行与交易排序分离,限制了跨节点类型所需的信任和验证级别,并优化了网络可扩展性和性能。
- 账本特性(Ledger Features):不可变的共享账本为每个通道编码整个交易历史记录,并包括类似 SQL 的查询功能,以便高效审计和解决争议。
- 隐私(Privacy) :通道和私有数据集合实现了隐私且机密的多边交易,这些交易通常是在共同网络上交换资产的竞争企业和受监管行业所要求的。
- 安全和成员服务(Security & Membership Services ):许可成员资格提供可信的区块链网络,参与者知道所有交易都可以由授权的监管机构和审计员检测和跟踪。
- 共识(Consensus): 达成共识的独特方法可实现企业所需的灵活性和可扩展性。
资产
资产的范围可以从有形(房地产和硬件)到无形资产(合同和知识产权)。Hyperledger Fabric 提供使用链码交易来修改资产的功能。
资产在 Hyperledger Fabric 中表示为键值对的集合,状态更改记录为 Channel 账本上的交易。资产可以用二进制或 JSON 格式表示。
链码
链码是定义单项或多项资产的软件,和能修改资产的交易指令;换句话说,它是业务逻辑。链码强制执行读取或更改键值对或其他状态数据库信息的规则。链码函数针对账本的当前状态数据库执行,并通过交易提案启动。链码执行会产生一组用于写入的键值对(写集),可以被提交到网络并应用于所有节点的账本。
账本特性
账本是 Fabirc 中所有状态转换的有序的防篡改的记录。状态转换是参与方提交的链码调用(“交易”)的结果。每个交易都会生成一组资产键值对,这些键值对以创建、更新或删除形式提交到账本。
账本由区块链(“链”)组成,用于以区块的形式存储不可变的顺序记录,以及用于维护当前 Fabirc 状态的状态数据库。每个通道有一个账本。每个节点为其所属的每个通道维护一个账本的副本。
Fabric 账本的一些特点:
- 使用基于键的查找、范围查询和组合键查询来查询和更新账本
- 使用富查询语言进行只读查询(如果使用 CouchDB 作为状态数据库)
- 只读历史记录查询(查询一个键的账本历史记录)用于支持数据溯源场景
- 交易包括链码读取键/值(读集)的版本以及链码写入键/值(写集)的版本
- 交易包含每个背书节点的签名,并被提交给排序服务
- 交易按顺序打包到区块,并被排序服务“分发”到通道上的节点
- 节点根据背书策略验证交易并执行策略
- 在附加一个区块之前,会执行一次版本检查,以确保被读取的资产的状态自链码执行以来未发生更改
- 一旦交易被验证并提交,就具有不变性
- 一个通道的账本包含一个配置区块,用于定义策略、访问控制列表和其他相关信息
- 通道包含 Membership Service Provider 的实例,允许从不同的证书颁发机构(CA)生成加密材料
隐私
Hyperledger Fabric 在每个通道上使用不可变的账本,以及可操纵和修改资产当前状态(即更新键值对)的链码。账本存在于通道范围内,它可以在整个网络中共享(假设每个参与者都在同一个公共通道上),也可以被私有化,仅包括一组特定的参与者。
在后一种情况下,这些参与者将创建一个单独的通道,从而隔离他们的交易和账本。为了想在完全透明和隐私之间获得平衡的场景,可以仅在需要访问资产状态以执行读取和写入的节点上安装链码(换句话说,如果未在节点上安装链码,它将无法与账本正确连接)。
当该通道上的组织子集需要对其交易数据保密时,私有数据集合用于将此数据隔离在私有数据库中,在逻辑上与通道账本分开,只有经授权的组织子集才能访问。
因此,通道在更广泛的网络上保持交易的私密性,而集合则在通道上的组织子集之间保持数据的私密性。
为了进一步模糊数据,在将交易发送到排序服务并将区块附加到账本之前,可以使用诸如 AES 之类的通用加密算法对链码内的值进行加密(部分或全部)。一旦加密数据被写入账本,它就只能由拥有用于生成密文的相应密钥的用户解密。
安全和成员服务
Hyperledger Fabric 支持一个交易网络,在这个网络中,所有参与者都拥有已知的身份。公钥基础设施用于生成与组织、网络组件以及终端用户或客户端应用程序相关联的加密证书。因此,可以在更广泛的网络和通道级别上操纵和管理数据访问控制。Hyperledger Fabric 的这种“许可”概念,加上通道的存在和功能,有助于解决隐私和机密性要求较高的场景。
共识
最近,在分布式账本技术中,共识已成为单个函数内特定算法的同义词。然而,共识不仅包括简单地就交易顺序达成一致,Hyperledger Fabric 通过其在整个交易流程中的基本角色,从提案和背书到排序、验证和提交,突出了这种区别。简而言之,共识被定义为组成区块的一组交易的正确性的闭环验证。
当区块中交易的顺序和结果满足明确的策略标准检查时,最终会达成共识。这些制衡措施是在交易的生命周期内进行的,包括使用背书策略来规定哪些特定成员必须背书某个交易类别,以及使用系统链码来确保这些策略得到执行和维护。在提交之前,节点将使用这些系统链码来确保存在足够的背书,并且它们来自适当的实体。此外,在将包含交易的任何区块附加到账本之前,将进行版本检查,以确保在此期间,账本的当前状态是能与交易中的信息达成共识的。该最终检查可防止双重花费操作和可能危及数据完整性的其他威胁,并允许针对非静态变量执行功能。
除了众多的背书、验证和版本检查外,交易流的各个方向上还会发生持续的身份验证。访问控制列表是在网络的分层上实现的(排序服务到通道),并且当一个交易提议通过不同的架构组件时,有效负载会被反复签名、验证和认证。总而言之,共识并不仅仅局限于一批交易的商定顺序;相反,它的首要特征是交易从提案到提交的过程中不断进行核查而附带实现的。
PKI 公钥基础设施
是一组互联网技术,可在网络中提供安全通信。如果在 Web 浏览器上打开的是https的链接,可能正在使用 PKI 来确保它来自经过验证的来源。
公钥基础设施 (PKI) 的元素。PKI 由向各方(例如,服务的用户、服务提供商)颁发数字证书的证书颁发机构组成,然后他们使用它们在与环境交换的消息中对自己进行身份验证。
CA 的证书撤销列表 (CRL) 构成不再有效证书的参考。证书的吊销可能有多种原因。例如,证书可能会因为与证书相关联的加密私有材料已经暴露而被撤销。
区块链网络不仅仅是一个通信网络,它依赖于 PKI 标准来确保各种网络参与者之间的安全通信,并确保发布在区块链上的消息得到正确的身份验证。
PKI 四个关键要素
- 数字证书 (Digital Certificates)
- 公钥和私钥 (Public and Private Keys)
- 证书颁发机构 (Certificate Authorities)
- 证书吊销列表 (Certificate Revocation Lists)
数字证书(Digital Certificates)
数字证书是一种文档,其中包含与证书持有者相关的一组属性。最常见的证书类型是符合X.509 标准的证书,它允许在其结构中对一方的识别细节进行编码。
如Mary身份信息
- Subject包含了若干属性,另X.509 证书中还有其他属性。
- Mary 是SUBJECT证书的主人,突出显示的SUBJECT文本显示了关于 Mary 的关键事实。
- Mary的公钥在证书上显示,私钥没显示,私钥必须保密。
所有属性都可以使用称为密码学的数学技术记录下来,这样篡改就会使证书失效 - Mary 的 X.509 证书可看成一张无法更改的数字身份证。
身份验证、公钥和私钥 (Authentication, Public keys, and Private Keys)
身份验证和消息完整性是安全通信中的重要概念。
- 身份验证要求交换消息的各方确信创建特定消息的身份。
- 消息具有“完整性”意味着在其传输过程中不能被修改。
传统的身份验证机制依赖于数字签名,顾名思义,数字签名允许一方对其消息进行数字签名。数字签名还为签名消息的完整性提供了保证。
从技术上讲,数字签名机制要求每一方持有两个加密连接的密钥:
- 一个广泛可用并充当身份验证锚的公钥,
- 一个用于在消息上生成数字签名的私钥 。
数字签名消息的接收者可以通过检查附加签名在预期发送者的公钥下是否有效,来验证接收消息的来源和完整性。
私钥和各自的公钥之间的独特关系是使安全通信成为可能的加密魔法。密钥之间独特的数学关系使得私钥可用于在消息上生成签名,只有相应的公钥才能匹配,并且只能在同一消息上。
Mary 使用她的私钥对消息进行签名。任何看到签名消息的人都可以使用她的公钥来验证签名。
证书颁发机构(Certificate Authorities)
通常数字身份 digital identity(或简称身份)具有符合 X.509 标准并由证书颁发机构 (CA) 颁发的经过加密验证的数字证书的形式。
常见安全协议:Symantec(最初是 Verisign)、GeoTrust、DigiCert、GoDaddy 和 Comodo 等。
证书颁发机构将证书分发给不同的参与者。这些证书由 CA 进行数字签名,并将参与者与参与者的公钥绑定在一起(以及可选的完整属性列表)。因此,如果一个人信任 CA(并且知道它的公钥),它可以相信特定参与者绑定到证书中包含的公钥,并拥有包含的属性,通过验证参与者证书上的 CA 签名。
证书可以广泛传播,因为它们既不包括参与者的私钥,也不包括 CA 的私钥。因此,它们可以用作信任锚,以验证来自不同参与者的消息。
CA 也有一个证书,它们可以广泛使用。这允许给定 CA 颁发的身份的消费者通过检查证书是否只能由相应私钥的持有者 (CA) 生成来验证他们。
在区块链环境中,每个希望与网络交互的参与者都需要一个身份。在这种情况下,您可能会说一个或多个 CA可用于从数字角度定义组织的成员。
根 CA、中间 CA 和信任链(Root CAs, Intermediate CAs and Chains of Trust)
CA 有两种形式:根CA和中间CA。
由于根 CA(Symantec, Geotrust 等)必须将数亿个证书安全地分发给互联网用户,因此将这个过程分散到所谓的中间 CA上是有意义的。
这些中间 CA 的证书由根 CA 或其他中间机构颁发,允许为链中任何 CA 颁发的任何证书建立“信任链”。
这种追溯根 CA 的能力不仅允许 CA 的功能扩展,同时仍然提供安全性——允许使用证书的组织放心地使用中间 CA——它限制了根 CA 的暴露,如果受到损害,将危及整个信任链。另一方面,如果中间 CA 受到损害,则风险会小得多。
只要每个中间 CA 的证书的颁发 CA 是根 CA 本身或对根 CA 有信任链,就在根 CA 和一组中间 CA 之间建立信任链