Coco Framework白皮书

1.执行概要

在过去的几年里,企业已经意识到区块链技术(例如比特币和以太这样为公共网络提供动力的技术)是如何被用来简化他们自己的业务流程的。但是,他们还发现,大多数现有的区块链协议都不能满足以下几个关键的企业需求——包括可接受的交易吞吐量和延迟、机密性、有效治理和计算效率(例如挖矿/POW的消耗)。为了适应现有的公链协议或创建新的协议以满足这些需求,通常会牺牲一个必需的企业需求与另一个进行交换——比如以更高的复杂性或更低的性能为代价改进机密性。

Coco Framework是一个开放源码系统,它支持高规模、机密的区块链网络,满足所有企业的关键性需求——提供一种方法来使企业更快采用区块链技术。Coco实现这一点是通过在一个保密联盟的环境中重新评估公共区块链协议的现有假设完成的,在这个联盟中,节点node和行动者actor(包括有投票权的成员和其他无投票权的参与者)被明确声明和控制。基于这一新的需求集,Coco将现有区块链协议、可信执行环境、分布式系统和加密的功能集成在一起,以支持企业级的区块链网络,从而完成:

  • 接近数据库速度的吞吐量和延迟。

  • 更丰富、更灵活、针对业务的保密模型。

  • 通过分布式治理进行网络策略管理。

  • 支持不确定性交易。

  • 减少能源消耗。

值得注意的是,Coco不是一个独立的区块链协议;相反,它提供了一个可信的基础,现有的区块链协议(如Ethereum、Quorum、Corda或Hyperledger Sawtooth)都可以集成到这个交付完整的、企业适用的分类解决方案中。Coco设计开放,与任何区块链协议兼容。

本文在机密联盟的背景下重新检查了区块链网络的需求。然后介绍了Coco Framework,包括网络拓扑和系统架构、网络创建和治理、交易流和架构变体。它还研究如何实现可扩展性、保密性和分布式治理,以及如何降低安全性风险。最后,讨论了Coco的当前工作实现,包括初始性能的发现。

2.促进企业应用区块链

区块链技术即将成为下一个转型计算范式。它打破了现有的业务流程,减少了业务操作的摩擦,并释放了新的业务模型——特别是跨组织的共享流程。Gartner表示,“到2025年,区块链的商业增加值将略高于1760亿美元,到2030年将超过3.1万亿美元。”考虑到这些好处,在我们快速发展的数字经济中,区块链技术将很快成为分布式企业和消费者应用程序的关键基础。

框架问题

几乎所有行业都对区块链产生了浓厚的兴趣。然而,当企业希望应用区块链技术来满足其业务需求时,他们已经认识到,在性能、机密性、治理和所需的处理能力等方面,大多数现有的区块链协议都不能满足企业的关键需求。这是因为它们是为功能而设计的,并需要在一个潜在的充满敌意的环境中实现共识,在这种环境中,匿名的、不受信任的参与者可以执行事务或提议块的提交。因此,为了防止恶意行为的发生,事务对所有人都是“一目了然”的,网络中的每个节点都会执行每一个事务,并且必须使用拜占庭容错协商算法。所有这些“保障”,虽然对于确保公共区块链网络的完整性是必要的,但都需要在关键的企业需求(如可扩展性和保密性)方面进行权衡。

例如,以太坊网络的处理速度平均为每秒20个交易,典型的交易延迟约为10-20秒。相比之下,Visa信用卡处理系统平均每秒处理2000笔交易。此外,所有的以太坊交易、智能合约代码和状态都对连接网络的任何人都清晰可见。

公链网络所需的处理能力以及相关的能源成本,对于企业场景也是不可行的。Digiconomist的数据显示,比特币网络的年能耗为14.96太瓦时(TWh),估计年挖矿(交易处理)成本超过7.47亿美元。换句话说,比特币网络消耗的能源足以为130多万美国家庭供电。

为了满足企业的需要,已经有许多调整公链网络协议或创建新协议的努力。但是,到目前为止,这些方法还没有满足所有的企业需求,大多数都需要在复杂性或性能方面采取不合需要的权衡措施。例如,虽然存在利用零知识证明或其他高级密码学来隐藏交易细节的方法,但它们十分复杂,计算空间和时间的权衡使它们不适合大容量应用程序,或者它们需要依赖可信的源来引导加密材料。

其他方案引入了刚性,因为机密通道需要对代币化的资源作出“承诺”,使它们在通道处于活动状态时无法在通道外访问。

可信联盟方案

使现有的公链技术适应企业的需要(或者更准确地说,适应企业联盟)首先要重新检查区块链运行的环境。在一个公链网络中,任何人都可以在网络上进行交易,网络上的参与者都是伪匿名和不受信任的,任何人都可以在网络中添加节点——完全访问该分类账,并具有参与协商一致的能力。

相比之下,在联盟链中,成员身份和节点是已知的和受控制的。角色通常是同样成熟的,具有健壮和高度控制的IT环境、安全策略和其他企业特性。

那么,我们如何利用这些差异来满足企业的需求呢?从根本上说,联盟成员之间的信任关系不需要改变。但是,如果我们可以创建一个可信的物理节点网络,而不需要控制这些节点的参与者相互信任,那么我们就可以控制正在运行的代码并保证其输出的正确性——从而简化共识,减少重复验证。这是微软在开发Coco框架时采用的方法,本文的其余部分将对此进行描述。

3.Coco Framework

Coco Framework是一个开放源码系统,支持大规模、加密的区块链网络。它满足了所有关键的企业需求,提供了一种方法加速生产区块链技术的应用。Coco通过使用可信执行环境TEEs(trusted execution environments)来实现这一点,例如Intel的SGX和Windows虚拟安全模式VSM,从而创建一个可信任的物理节点网络,在该网络上运行分布式分类帐。

有了Coco,企业可以获得如下优势:

  • 接近数据库速度的吞吐量和延迟。通过使用TEEs, Coco创建了一个可信节点网络,减少了从拜占庭式容错到崩溃容错的问题。这简化了共识,从而提高了交易速度和延迟——所有这些都不影响安全性或假定信任。

  • 更丰富、更灵活的保密模式。Coco使用授权行业标准和身份验证来保护数据访问。交易、智能合约代码和智能合约状态可以以透明的方式处理,但只能向授权方披露,不需要复杂的保密方案。

  • 通过分布式治理进行网络策略管理。Coco提供一个网络结构来表达和管理联盟的政策。可以对网络策略的表达进行编码,可以通过标准的类账本的交易管理策略。

  • 不确定的交易。使用Coco,由于代码执行的结果是可信的,所以智能合约代码只需由网络中的单个节点执行。当以这种方式配置网络时,交易可以有不确定性的结果(例如通过在计算中加入随机性),甚至可以直接与受信任的外部系统交互。

  • 减少能源使用。Coco通过消除计算密集型的共识算法(例如工作证明)来改善能源消耗。

概念概述

值得注意的是,Coco不是一个独立的区块链协议;相反,如图1所示,它提供了一个可信的基础,提供了高效的一致算法和灵活的机密性方案——一个可以集成现有区块链协议(如Ethereum、Quorum、Corda或Hyperledger Sawtooth)的框架,以交付完整的、企业级的账本解决方案。

图1 Coco Framework概观

Coco设计用于提供任何区块链协议都可以使用的安全、可靠的基础组件。图2展示了Coco和区块链协议之间的分离和重叠情况,其中Coco组件用绿色阴影表示。在它的核心部分,Coco:

  • 通过TEEs的复制实现一致的、分布式的、持久的存储(比如键值存储),包含应用程序(业务交易)分类账和用于网络策略管理的Coco管理分类账。虽然逻辑上有两个总账,但它们都记录在一个存储中,以便在网络中的所有交易中保持相对的顺序。

  • 提供安全的节点到节点的通信和应用程序到节点的通信。

  • 使用易于使用的原语保证任意保密模型。

  • 提供一个编码化的治理模型来支持任意的、分布式的策略管理。

Coco对分布式账本模型、核心中的交易以及智能合约代码处理使用特定的区块链协议。

图2 区块链协议的逻辑组件(Coco组件用绿色表示)

高级体系结构

Coco系统是可信验证节点validating nodes(VNs)*的分布式网络,每个节点都运行Coco Framework和集成的区块链协议。VNs接受交易并参与网络的协商一致算法。根据所选择的协商一致算法,一个或几个VNs处理交易并执行智能合约代码。

粗略地说,Coco网络中的VNs在功能上与公链网络中的挖矿节点相似——尽管在Coco网络中“挖矿”和通信的行为非常不同。与公共区块链网络不同,Coco网络中的每个VN都是完全可信的,因为VNs可以验证所有其他VNs的身份,并验证它们在运行时通过TEE认证的代码。

如图3所示,VN可以分解为几个逻辑子组件。它们在host(潜在不受信任的管理程序和节点的操作系统)和enclave (TEE中受保护的安全容器)之间进行划分。系统的所有敏感组件都在enclave内部运行,并负责维护分类帐的完整性、机密性和安全性。

  • Coco interface(host)——实现客户端和其他VNs连接的传输层接口的主进程。此主进程还与操作系统和代表enclave的其他外部服务连接。(虽然host本身被要求保持VN的可用性和存储在帐本中的数据的持久性,但它没有责任维护账本的完整性、机密性或安全性。)

  • Coco core(enclave)——在enclave内的host和所有其他功能之间的接口。

  • 持久存储(enclave)——应用账本和Coco管理账本的单个、全局有序、磁盘上的表示。(有一个内存中的副本,用于快速访问;持久性是通过持久性存储实现的。)

  • Coco配置状态(enclave)——支持创建网络构造和所有后续更新的Coco状态机实现。

  • 区块链核心和适配器(enclave)——处理交易和执行智能合约代码的逻辑,以及将区块链协议集成到其他Coco系统的粘合剂。

图3 Coco体系结构

4.行动者和身份

在Coco网络中有两种类型的角色,成员Members和参与者Participants。在一个高级别上:

  • 成员是一个联盟的管理机构,对谁可以在网络上可以交易及其治理拥有集体控制权——治理包括网络成员资格、在TEEs中运行的代码,以及网络策略的定义。成员运行VNs并可以在网络上进行交易。成员还定义Coco网络的初始配置和设置,在网络的整个生命周期中,可以对其配置提出更改,并对其他成员提出的更改进行投票。此外,每个成员都接收到一份网络密钥的共享(稍后将对此进行描述),这允许成员的仲裁在发生灾难性故障时协同恢复网络。在银行联盟中,成员可以是大型、全球性、具有系统重要性的金融机构(GSIFIs)。

  • 参与者与成员不同,不能投票,因此对谁可以直接访问网络或其治理没有操作控制。参与者是由网络成员决定的,和成员一样,参与者可以在网络上进行交易。他们也可以,而且很可能会运行自己的VNs。在一个银行联盟中,参与者可能是一群国内具有系统重要性的银行(D-SIBs),它们在自己和GSIFIs之间进行交易。

值得注意的是,根据该联盟的目的和政策,Coco网络并不一定需要两种类型的行动者。例如,一个联盟可以决定其内部的所有各方都是成员,具有同等的责任和权限。类似地,每个参与者都可以拥有成员和参与者标识,作为分离业务和管理事务的手段。

每个成员和参与者都有一个私有/公共密钥对(PrivKey_{M_i}, PubKey_{M_i}PrivKey_{P_i},PubKey_{P_i}),并且在Coco网络中使用组织范围内的X.509证书进行标识。可以使用中间证书来惟一地标识组织和组织内的所有用户,这是抽象的特定于代理的证书策略并可以从Coco系统中回购。在组织内部,为了保持细粒度的控制,不同的部门(以及不同的Coco网络)可以使用不同的证书来最小化跨网络访问。这允许与现有的公司系统和公钥基础设施(PKIs)轻松集成。

终端用户,比如银行的客户,在Coco网络中没有身份,不能直接在网络上进行交易。相反,他们通过成员或参与者的前端系统与它交互。

在典型的场景中,如图4所示,使用现有的企业标识管理机制,如Active Directory (AD)或Azure Active Directory (AAD)对终端用户进行身份验证和授权。终端用户向前端系统提交交易,之后前端系统使用成员或参与者的Coco标识(PrivKey_{M_i}PrivKey_{P_i})将事务提交给Coco网络,标识存储在本地或基于云的密钥管理系统中,例如硬件安全模块(HSM)。

图4 终端用户交易流程

5.网络的创建和管理

Coco通过网络章程(下面描述)和分布式投票过程来描述和管理网络策略。这允许联盟规则和协议在系统中进行编码,类似于智能合约代码中编码的方式。

任何成员都可以通过引导第一个VN启动一个网络。在此之后,任何成员都可以提交修改Coco网络章程(例如添加或删除成员)的建议,进行投票表决。与应用程序交易一样,此类Coco管理任务作为交易提交给Coco网络。

网络章程

在Coco网络中,网络章程是网络政策的完整表达。这些至少包括成员列表、VN列表、代码清单、TEE清单和投票策略。

  • 成员列表membership list是网络中所有已批准的行动者(成员和参与者)的列表。成员M_1由其私钥/公钥对(PrivKey_{M_1}, PubKey_{M_1})表示。如果M_1M_i是联盟的成员,那么成员列表将由公钥集\{PubKey_{M_1},…,PubKey_{M_i}\}表示。只有每个成员的公钥证书被上传到Coco网络,私钥都保留在原始密钥管理系统中,该系统可以在本地或上传到云中。参与者的处理方式与成员相同。

  • 代码清单Code manifest是所有可在Coco网络中运行的已批准代码的规范——包括但不限于Coco框架版本、区块链协议和特定的区块链协议版本。任何一个代码标识都表示为单个度量。

  • TEE清单TEE manifest是所有已批准的可信执行环境(硬件或软件)的规范。Coco网络中的VNs可以运行不同的TEEs,前提是所有使用的TEEs都在清单中被接受。在这种混合的TEE环境中,网络安全性仅与所使用的最弱的TEE机制相同。

  • VN列表VN list是网络中所有已批准的验证节点的列表。在Coco网络中,VN由一个签名元组表示,该元组包含成员的ID、物理节点的地址(DNS名称或IP地址),以及与在enclave中生成的私钥相对应的公钥,以惟一地标识VN/secure enclave对。对于第一个成员的第一个VN, VN_{M1\_1}=\{PubKey_{M_1}, Add VN_{M1\_1},PubKeyVN_{M1\_1}\}S_{PrivKey\_M1}.

  • 对网络章程的任何更改,如对成员或VN列表的添加或删除,都必须通过投票过程完成(稍后将介绍)。可接受的投票标准称为投票政策voting policy,也在网络章程中表达。投票政策的选项可以包括一致投票、M/N1/N等。同样,投票是否能够提交的政策会根据是否符合标准自动进行。例如,投票提交可以是自动的,这样每个成员都可以添加指定数量的VNs,前提是VNs正在运行多数支持的代码。

这是Coco网络实施的基本政策;随着时间的推移,我们计划支持更多的政策。

启动网络

任何成员都可以通过引导第一个VN并上传创世网络章程来启动网络。启动网络的成员与加入网络的后续成员相比没有额外的特权。

引导VN

成员或参与者执行以下步骤来引导一个VN:

  1. 使用TEE设置服务器或虚拟机,并安装Coco Framework支持的操作系统。

  2. 安装Coco Framework和所需的区块链协议。该软件安装在服务器上,服务器在TEE中创建一个enclave,以运行敏感的Coco和区块链功能。TEE生成其硬件/软件机制的认证和运行在enclave内部的代码,参与者使用这些代码来验证一切都符合预期。私钥/公钥对在enclave内生成,公钥作为代表enclave身份的认证的一部分包含在enclave中。

  3. 将网络章程上载到VN。

  4. 在每个前端应用程序和VN之间建立一个安全的通信通道。

  5. 上传它的私有/公钥份额,用于数据完整性和机密性(稍后将介绍)。

无论是网络中的第一个VN,还是后续的VN,引导VN的上述过程都是相同的。后续的VNs将使用VN列表发现网络中的其他VNs,并尝试与它们建立安全的节点到节点的连接。只有在VN列表中的VN才可以与其他VNs建立安全连接,并且每个VN的TEE都可以提供有效的认证。

成员、参与者和节点管理

在网络上线运行后,任何现有成员都可以提议投票加入新成员或参与者;添加一个属于已有成员或参与者的VN;或删除一个成员、参与者或VN。

添加新成员或参与者

可以在创世网络章程中定义多个成员和/或参与者,在这种情况下,在网络启动并运行之后不需要添加它们。现有成员可以在创世网络章程中添加新成员或参与者。

无论添加的是新成员还是参与者,过程都是相同的。以下是新成员的工作流程:

  1. 新成员M_j使用上面描述的过程创建VN。要做到这一点,新成员必须从现有成员接收当前网络章程的副本,以便在引导期间使用。这发生在今天的Coco系统之外,通过任何安全手段完成成员之间的通信。(虽然拥有网络章程的副本并不意味着流氓实体可以加入网络,但网络章程确实包含敏感信息,这意味着在与他人共享时要小心。

  2. 在新成员的VN准备加入网络之后,现有的成员M_i提议投票,提供M_j的身份和M_j的第一个VN加入网络:\{PubKey_{M_j}, VN_{Mj\_1}\}。如果投票成功,则将成员M_j添加到成员列表,并将其节点VN_{Mj\_1}添加到VN列表。

  3. 在成员进入网络后,将从另一个成员VN接收当前的网络章程和区块链状态,并确保网络章程与自己的版本相匹配。

为了简化上述过程,在引导过程(上面的第1步)中,新成员的VN可以从网络本身接收当前的网络章程,以避免将其传递到系统之外。在这种情况下,在步骤3中,在VN下载数据或处理事务之前M_j必须有机会在VN安装之后批准网络章程,以避免M_jM_j准入时没有批准网络章程的情况。

从技术上讲,如果新行动者(成员或参与者)想在第一个VN准备好之前添加到成员列表中,那么添加行动者和第一个VN可以被解耦;然而,在这种情况下,必须通过另一个成员基础结构进行第二次投票,以将新参与者的第一个VN添加到VN列表。

类似地,如果新参与者过早地引导第一个VN,那么在启动与网络中现有VNs的连接时,该VN将被拒绝,因为新参与者的VN还没有出现在VN列表中。在投票完成并将新的参与者的VN添加到VN列表之后,将需要重新启动查找和连接尝试。

为现有的行动者添加新的VNs

类似于添加新成员,成员可以提议对添加一个新的VN进行投票,该VN属于现有的行动者。提案可以由任何行动者提出,而不仅仅是VN的所有者。投票过程是相同的,新的VN在投票成功之前不能加入网络。

移除参与者或VNs

删除一个行动者或VN的过程也是类似的。行动者或VN在投票完成并生效之前不会正式从成员列表或VN列表中删除,这意味着行动者或VN在此期间仍然可以访问网络。

投票

任何成员都可以提议对网络章程中指定的任何策略进行修改,以便进行投票,其方式与通过投票添加或删除成员和VNs的方式类似。成员还可以为创世网络章程中未指定的策略提出建议,前提是该策略由Coco系统支持。类似地,成员可以建议从网络结构中删除策略。还建议对Coco Framework代码和区块链协议代码进行更新并投票。甚至连投票政策本身也可以通过这个过程来改变。(投票改变投票政策将使用旧的投票政策;如果投票成功,下次投票将采用新的投票政策。)

当提交修改网络章程的建议时,将通知所有现有成员,并必须进行投票。每个成员都得到一票,不管它在网络中有多少VNs。每个成员的投票都是一个Coco管理交易,因此提交、处理并最终记录在Coco管理账本中。

在达到法定投票人数后,Coco系统根据指定的投票政策判定投票结果。成员可以随时投票,这意味着投票结果的延迟完全取决于成员投票的速度以及网络章程中规定的投票政策。对任何网络政策的变更,直到法定人数完成投票和批准变更后才生效。

6.交易工作流

Coco网络建立后,它可以接受成员或参与者的交易。交易有两种类型:

  • 应用程序交易,通过网络进行的业务交易的主要集合。
  • Coco管理交易,例如添加一个成员。

Coco Framework使用类似的工作流来接收和处理这两种类型的交易,包括如何达成一致。(回想一下,虽然逻辑上有两个总账,但它们都记录在一个存储中,以便在网络中的所有交易中保持相对的顺序。)

不管交易类型如何,Coco都对所有应用程序到节点的通信通道和节点到节点的通信通道使用安全通信通道来保护机密性。Coco还支持应用程序层的加密和身份验证,而不是传输层。

应用程序交易工作流

图5展示了应用程序交易的工作流:

  1. 在发送交易之前,应用程序(例如Ethereum DApp)在网络中建立了一个经过身份验证的、加密的VN连接。应用程序可以直接与VN或通过一个中间前端系统建立连接,这取决于DApp和前端的安全性和关键管理设计目标。

  2. 当Coco Framework接收到一个交易时,它会解密它,然后将其路由到相应的区块链适配器。(host接受连接,但在enclave内部解密和处理。通过这种方法,VN在网络和host操作系统层进行交互时,对数据有效负载不可见,也无法进行篡改。)

  3. 适配器启动交易集,并与区块链协议子系统(如块生成逻辑和以太坊虚拟机,或EVM)的组件进行交互,以处理交易。

  4. 适配器通过分布式存储提交交易集,该存储保存并使用配置的协商一致算法在网络上复制所有状态更改。对单个交易的处理可能导致多个状态更改。

Coco框架支持对应用程序交易进行批处理,但这降低了更高的吞吐量以提高延迟。当适配器处理一组批处理的交易时,它将收集交易集中的所有更新,然后将它们提交到分布式存储中。

图5 应用程序交易工作流

Coco管理交易工作流

处理Coco管理交易的工作流程与上述类似;唯一的区别是,交易是由Coco掌控管理的部分处理而不是由区块链核心的Coco。

达成共识

在Coco网络中,需要对分布式存储的所有更新达成一致,包括应用程序交易、智能合约状态和管理交易。尽管协商一致是任何分布式网络的基本方面,但与公链网络相比,Coco网络的独特之处在于每个VN都完全信任网络中的其他VN。

正因为如此,不需要防范恶意消息,并且可以毫不含糊地接受不与VN维护的现有状态冲突的区块链更新。最终的结果是:Coco不需要浪费能源计算密集型的工作证明算法、可能有潜在不公平的权益证明算法或引起延迟的时间限制算法。本文档后面将介绍深入防御的措施,以降低TEE故障或执行中的硬件错误风险。

Coco Framework的设计目的是支持可插拔式协商一致算法——计划最初集成类似paxos的协商一致算法和Caesar协商一致算法(一种来自微软研究院的算法)。Coco网络可由其他协商一致的算法构建;为了实现高效的协议和最大吞吐量,理想的实现应该利用通过受信任的VN的安全通道接收的消息本身是受信任的这一事实。

无论采用何种协商一致算法,只要算法的持久性和可串行性要求得到满足,协商一致都可以很快实现。在整个网络中分布事务可以使用多播、广播树或任何其他被认为对物理Coco网络的大小和拓扑有效的协议来执行。

Paxos共识

在Paxos共识下,一个VN当选为领导人。所有其他VNs都是跟随者,它们只是接受事务并将其转发给leader进行处理。在leader处理事务之后,由于Coco使用了TEEs,所以follower可以简单地接受leader的事务结果。

Paxos共识(以及类似于Paxos的算法,如Raft)对于较少的节点来说是非常高效的,并且受到传统节点之间的中值延迟的限制。因此,类似paxos的一致性算法对于Coco网络的适用性取决于VNs的数量,而VNs的数量又取决于联盟中的行动者数量和每个行动者的节点数量。

在Coco的未来版本中,可以通过采用分布式系统研究(如灵活的paxos)来解决节点的可伸缩性问题,这是一个简单的观察,即不需要Paxos中的所有法定成员都进行交叉。这足以要求领导人选举阶段使用的法定人数与以前复制阶段使用的法定成员重叠。这使Coco以更慢的速度进行领导选举(一个不常见的事件),以便更快的复制(一个常见的事件)。

还可以通过分布式事务支持来解决节点的可伸缩性,使用诸如乐观提交和依赖于follower的方法。这允许所有节点(不仅仅是领导者)处理事务,将计算负载分散到整个Coco网络中。

更多关于Paxos的信息可以在这里找到,更多关于Raft的信息可以在这里找到。

Caesar共识

Caesar 共识是一种构建安全、高效的区块链联盟网络的新的协商一致算法。它利用区块链的密码属性使区块链网络中的节点能够在有效的账本上达成一致。Caesar共识支持灵活的网络节点容错模型——包括崩溃、拜占庭式、两者的混合,或者近乎完全的妥协(除一个节点外全部崩溃的妥协)。

在Coco网络中,Caesar 共识可以与传统的容错算法(如Paxos)一起使用,以帮助提供额外的安全性和故障检测,比如在TEE故障的情况下。在这种结合的方法下,follower节点不是明确地接受来自leader节点的事务,而是在分布式帐本中存储少量的加密信息(称为心跳交易),以启用分布式协商一致,这也可以跟踪进展并使leader负责。如果检测到不当行为,那么follower节点就可以聚集在一起,从网络中驱逐出领导者,而另一个领导者重新被选举出来。(回想一下,在Coco网络中,领导者只有在TEE被破坏的情况下才能做出恶意的行为。Caesar共识检测到这种危害并启动故障转移协议来启动新的领导人,这反过来又解决了这种危害。)

更多关于Caesar共识的信息可以在文章第3.4节中找到。

安全通信

Coco强制执行安全的应用程序到节点和节点到节点的通信通道,这两个通道都使用相互验证的TLS连接,这些连接终止于enclave。(技术上,有两个应用程序到节点的通信通道——一个用于应用程序交易,另一个用于Coco管理交易。)

这确保只有有效的成员和参与者可以提交、处理和查看网络交易,并且只有有效的VNs才能加入网络。类似地,由于数据是跨所有连接加密的,并且只在enclave内部是透明的,所以主机级对VN的访问不允许检查网络流量。

7.机密性和完整性

Coco网络的持久状态(即写入持久存储的状态)包括三种类型的数据:应用程序交易、智能合约状态和管理交易。所有这些都受到保护,以确保网络机密性和数据完整性,也就是时确保只有Coco网络上的有效参与者才能访问数据,并且数据不会被修改。Coco还支持细粒度的数据访问控制,这是为了适应业务需求以实现更细粒度的机密性——比如2+ party机密性。

网络机密性和数据完整性

至少,Coco保护账本条目,以确保网络之外的任何实体都不能查看或操纵持久状态。通过使用门限加密(如下所述),Coco可以实现网络机密性和数据完整性,而无需授予任何单个参与者完全控制权。

在VN上的一个enclave内,数据可以明文处理,以简化计算并提高性能。但是,考虑到TEE具有有限的安全内存,写入持久存储的数据在最终写入磁盘之前必须经过不受信任的host。Coco通过使用经过验证的加密以加密和完整性保护的形式从enclave中编写所有数据来解决这个问题。这确保数据只能通过Coco Framework访问,从而确保正确的访问控制,防止对主机或磁盘的未经授权的直接访问,并确保检测篡改数据。

为了确保高可用性和防止恶意(或非故意)数据删除,可以将磁盘上的加密数据备份到其他场所或云存储中。

加密持久状态

为了加密持久状态,Coco为在协商一致算法中指定为leader的VN的enclave内生成一个对称会话密钥Key_{session}。密钥是在一个定义的纪元(网络章程中成员设置的固定时间)上生成的,纪元的具体持续时间由联盟成员确定,需要权衡安全性的增加和更频繁的密钥生成操作开销。其他对网络状态的改变,如行动者添加或删除,也将迫使一个纪元的转变。

对称会话密钥本身是加密的,并被写入Coco管理帐本以实现持久性。对称会话密钥也在内存中保持一段固定的时间(在网络章程中可配置);如果不在内存中,则根据需要检索和解密密钥。

Coco用于加密和持久化会话密钥的过程利用了一个完全独立的非对称门限加密系统。在这种方法下,N个参与者交换材料,建立\frac{M}{N}的门限加密方案如下:

  1. 每个参与者生成一个私钥份额(PrivKeyShare_{M_i}PrivKeyShare_{P_i}),创建一个相应的公钥份额(PubKeyShare_{M_i}PubKeyShare_{P_i}),并将两者都上传到其VN。如果需要,为了避免在系统之间移动私钥/公钥份额,这一步可以在VN上的Coco系统中完成。

  2. VNs与其他VNs共享其行动者的公钥份额(PubKeyShare_{M_i}PubKeyShare_{P_i})。私有密钥共享(PrivKeyShare_{M_i}PrivKeyShare_{P_i})仅保留在每个行动者的节点上。

  3. 然后,每个VN使用共享的公钥份额材料(PubKeyShare_{M_i}PubKeyShare_{P_i}i)来形成一个单纪元公钥——即公共共享网络密钥public shared network key——来加密对称会话密钥Key_{session}。一个\frac{N}{N}计划可以简单把所有公钥份额相乘:\prod_{i=0}^nPubKeyShare Z_i。复杂方案可以使用可以使用\frac{M}{N},需要进行更复杂的推导。

对称会话密钥的门限加密允许:

  • 访问控制:恶意的VN无法自己解密数据;相反,它需要从网络中的其他M-1角色的VNs中获取部分解密,然后才能进行这种尝试。

  • 业务连续性和灾难恢复:在发生灾难性故障的情况下,参与者可以通过合并对称会话密钥的解密份额来共同解密Coco之外的数据。(需要一个足够大的M,足够的行动者不太可能会在其他非被担保的情况下恶意串通解密数据)。

  • 审计:审计人员可以请求解密对称会话密钥的份额,而不需要完整的私有共享网络密钥或依赖一个行动者来提供数据。

解密持久状态

对称会话密钥的解密需要N个行动者中的M个,其中M可以配置为1到N中的任意数。解密时,leader需要请求M个VN组合解密共享,形成对称会话密钥的完整解密。值得注意的是,私有密钥共享(PrivKeyShare_{M_i}PrivKeyShare_{P_i})从未在Coco网络中合并,因此永远不会显示完整的私有共享网络密钥。

值得注意的是,虽然M可以等于N,或者甚至可以是1,一个典型的Coco实现M将需要至少\frac{1}{2}N + 1,以确保机密性仍将保护提供了大多数行动者不勾结。这也确保了网络可以继续运行,只要它能够维护至少代表M+1个行动者的VNs的连接,使它能够在一个或多个行动者的VNs从网络中掉线或分区时继续运行。

2+方保密

当网络中的两个或多个参与者需要私下进行交易(例如出于监管原因)时,将交易可见性限制在网络上的有效行动者可能是不够的。为了使行动者能够将自己和一个或多个其他行动者之间的交易指定为机密,应该在集成的区块链协议中提供(或添加)对此类表达式的支持。

通过使用TEEs,这变成了一个标准的数据访问控制问题。同样,交易可以在enclave内部进行明文处理,然后以加密格式存储在enclave外部。然后VNs只允许交易中涉及的行动者看到它。同样的模型可以应用于智能合约代码和智能合约状态,而不仅仅是交易数据。在本文后面的功能原型和演示中,我们将讨论如何在以太坊中实现这一点。

对于某些类型的交易,可能需要额外的安全措施。Coco中的任何内容都不能阻止应用程序在向网络提交事务之前使用其他保密技术(如同态加密)对事务进行加密;这仅仅是在特定于Coco的网络和2+方机密性之上的另一层。

使用上面的2+方方法,数据驻留在所有VNs上,即使只对某些人可见。然而,在某些管理场景中,交易数据不能驻留在网络中的所有节点上。为了解决这个问题,除了上面描述的标准2+方机密性之外,Coco系统中还可以集成点对点模型。

8.减轻故障

Coco VNs信任它们的节点,支持高效、可伸缩和高性能的事务处理。然而,这种方法存在潜在的脆弱性。如果VN上的TEE被破坏,攻击者可能会访问私有数据并发布虚假的事务。这与传统的区块链实现不同,在传统的实现中,单个节点的故障是一个本地化失败,不会影响到更广泛的网络。考虑到这一点,可以采取一些措施,以大大减少与TEE故障有关的风险:

编译时的技巧

可以在编译时使用技巧来消除可以用于破坏TEE的bug类,如VC3中的第7节所述:使用SGX在云中进行可靠的数据分析

最小化可信代码库

最小化潜在攻击面,降低了故障的风险。这可以通过将在enclave内部运行的代码分解为两个部分来实现:

  • 管理员enclave Manager enclave。管理员enclave负责敏感操作,包括私有密钥管理、加密处理和治理逻辑。这段代码的大小是有限制的,并且不需要随着每次区块链集成而变化。此外,它可以得到正式的验证和大量的审计。

  • 工作enclave worker enclave。工作enclave托管区块链协议代码,并为敏感操作调用管理员enclave。如果工作enclave被入侵,则攻击者可以访问驻留在工作enclave内存中的任何明文数据,但不能直接访问密钥、独立地解密磁盘上的数据,或者提议或批准对网络的更改。

另外,软件故障隔离技术可以在单个enclave中使用。这种方法不仅实用、低开销,而且可以防止单个enclave密钥的泄露。微软研究院的论文A Design and Verification Methodology for Secure Isolated Regions提供了关于这种方法的更多信息。

VN租赁

此外,网络可以要求VNs获得定期更新的租约。更新过程可能需要将VN的TEE重置为原始状态,从而消除攻击者可能获得的任何立足点。没有更新租约的VNs被隔离在网络上,阻止他们访问在隔离生效后被添加到区块链的数据。

共识变化

最后,可以从其他VNs接收VNs示例事务,并在承诺之前同步验证它们。这将允许快速检测恶意VN,而无需进行重大性能权衡。类似地,单独的VN可以异步地验证所有事务。

9.功能原型和演示

为了展示其可行性和v1.0设计,微软创建了Coco Framework的功能原型,并使用它创建展示可扩展性和保密性的演示。

功能原型

Coco框架架构在逻辑上分为几个部分:具有一致算法的持久分布式存储、应用程序到节点和节点的安全通信通道、机密性加密方案和分布式治理。该功能原型具有以下实现特征:

  • 基于RAFT协商一致算法的持久、分布式键值存储。

  • 英特尔SGX的TEE硬件。

  • 通过互TLS身份验证保护应用程序到节点的通信和节点到节点的通信。(这是通过mbed TLS的修改版本实现的,一个开源的TLS实现)

  • 一个只支持成员和节点管理的简化网络结构。

  • 现有的以太坊协议对交易和智能合约实现的版本,并对与Coco的集成做了微小的修改。

微软期望在Coco Framework内的许多组件可以插拔,以支持特定于行业的需求——包括但不限于一致的算法和通信协议。

演示

使用这个原型,微软部署了一个多节点的Coco网络来评估可伸缩性和展示机密性。

可伸缩性测试

为了评估可扩展性,微软从公开的以太坊网络中选择了2000笔交易,并通过原型进行反馈。一般来说,交易速率大约是Coco不可用协议的100倍。

可伸缩性测试的具体结果包括:

  • 每秒大约1600个交易的吞吐量。(吞吐量定义为每单位时间处理和提交的交易总数。演示中的速度计显示每秒的交易总数)

  • 在几百毫秒内的延迟,用100交易批处理大小来度量——表示区块链块的平均大小。(延迟定义为从接收交易到网络中所有节点提交交易的总时间,而不是在leader上提交交易的本地时间。如果需要,可以通过减少批处理大小来减少延迟,尽管是以交易吞吐量为代价的。)

应该注意的是,吞吐量数字取决于Coco Framework及其优化、选择的一致和密码原语,以及可能的其他网络治理策略。微软希望通过对v1.0的框架优化来进一步提高吞吐量,但要注意,在启用其他安全机制时,可能会出现一些性能上的折衷。

保密

微软与合作伙伴Mojix合作,将其供应链DApp移植到基于coco的以太坊协议中。一般来说,DApps可以“提升和转移”,只需对与Coco集成的以太坊账簿进行最小的更改;惟一需要的更改是支持对Coco网络的认证,并利用Coco的机密性特性。因此,可以通过访问控制策略实现机密性,并通过特定账本的构造进行公开,而不需要复杂的加密方案。

因为以太坊没有Solidity(一个以太坊智能合约语言)的保密模型,而且由于微软不希望修改EVM,所以这个原型使用了TEE,通过在每个智能合约中编写的访问控制策略来实现机密性。为此,微软在Coco以太坊适配器中禁用了对交易和区块级信息的访问。然后,Mojix开发人员可以通过验证调用者的地址,在智能合约中实施访问控制规则。所有智能合约成员都是私有的,所有的读函数都需要有一个签名,这个签名是通过ecrecover()来检查配置的、授权的地址列表的。

对于事件,Microsoft添加了RPC方法,要求在读取事件之前使用签名检查访问。Mojix开发人员随后能够实现智能合约方法,Coco以太坊适配器调用智能合约函数来检查最终用户是否被授权。如果没有检查访问方法,则在Coco网络中将智能合约视为公开。

对许多人来说,机密性演示程序似乎是一个标准的企业应用程序。它的美丽之处就在于这个事实;看起来由集中式数据库支持的标准企业应用程序实际上是由跨组织的分布式账本支持的以太坊区块链应用程序。

观看演示

可以在这里找到两个演示的录像。

10.结论

区块链是一种转换技术,能够显著减少业务操作的摩擦,特别是在跨组织的共享业务流程方面。越来越多的企业正在调查或尝试将其作为一种安全、透明的方式,以数字跟踪跨信任边界的资产所有权,开放跨组织协作的新机遇,以及富有想象力的新商业模式。

微软致力于将区块链引入企业,并与客户、合作伙伴和区块链社区合作,继续推进其企业准备工作。我们的使命是帮助企业在这个安全多方计算的新时代蓬勃发展,通过提供开放、可扩展的平台和服务,从分类公司到政府、医疗机构和全球银行,都可以用来创造新的价值。

Coco框架是我们这一旅程的最新一步,它通过交付企业需要的关键元素,为区块链在企业中的应用提供了基础。当区块链账本实现与Coco集成时,它将处理传统的集中数据库的性能和可扩展性。Coco还为账本的内容提供任意的数据保密规则,例如基于角色的事务数据访问控制。最后,Coco提供了一个全面的分布式治理系统,而不需要外部管理机制。

正如本文中提到的,Coco不是一个独立的区块链协议;相反,它提供了一个可信的基础,可以将现有的区块链协议(如Ethereum、Quorum、Corda和Hyperledger Sawtooth)集成在一起,以交付完整的、企业级的分类解决方案。根据设计,Coco是开放的,并与任何区块链协议兼容。它甚至可以在区块链解决方案之外支持通用、安全和可解释的多方计算。

J. P. Morgan (Quorum), R3 (Corda), Intel (Hyperledger Sawtooth)已经同意将其专有的区块链分类平台与Coco集成在一起,并同意在框架和Ethereum提供支持方面进行合作。微软计划于2018年在GitHub上发布这个框架,作为一个开源项目——可以在Linux和Windows上,也可以在云上,也可以在本地。与此同时,微软将继续与客户、合作伙伴和区块链技术和商业社区合作,继续推进产品的使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容