怎样的执行环境值得信赖?Polkadot来解答
来自超级计算系统公司的SubstraTEE团队的问候!在本文中,我们将介绍可信的链下计算的关键概念。今天,我们将向您展示可以使用SubstraTEE工具来做什么以及我们对未来应用程序的愿景。
SubstraTEE是一个将受信任的执行环境(TEE)与基于Substrate构建的区块链集成在一起的框架,换句话说,就是使用Polkadot本身构建工具所构建的链,以及最容易与Polkadot网络连接的链。SubstraTEE旨在通过将卸载状态更新到TEE中来改善区块链的隐私性,可扩展性和互操作性。
什么是TEE?
我们已经习惯于必须信任我们的IT管理员这一事实。这些管理员曾经是我们公司的内部员工,但如今,我们经常在租用的云平台上工作。
这些管理员可以读取和修改管理权限内任何计算机上处理的所有数据。不幸的是,此功能不仅扩展到我们信任的已知管理员,而且扩展到可以获取管理员特权的黑客。任何公司,无论多么有资格,都不能幸免于此类攻击。
您可以将TEE想象成一个管理自己的加密密钥协同处理器,并且仅执行哈希或指纹算法源代码相对应的程序。处理器的制造商通过其硬件设计保证,没有人可以访问TEE的内部密钥或可以读取其内存。而且,制造商可以对每个TEE进行身份验证,并向用户提供远程证明,以确认其未受篡改的程序实际上是在正版TEE上运行的,即使机器实际上位于异地数据中心中也是如此。
简而言之,TEE保证了(远程)计算的完整性和机密性。但是,您应该意识到可能的安全威胁。
假设我们相信TEE制造商的完整性和设计能力,TEE允许我们执行任何状态更新,而无需与区块链验证程序或其他用户共享数据。因此,私人代币转让,私人智能合约和私人状态通道成为可能,并且相对便宜。
在区块链上实现隐私
区块链本质上是透明的。他们必须确保权力下放。您可以轻松实现假名,但是许多用例需要保密。企业不想泄露商业机密,他们必须遵守欧洲的数据隐私法(GDPR)。后者意味着任何个人数据都不得接触未经许可的区块链。在无法读取已处理数据的同时验证计算完整性提出了另一个挑战。在这里,TEE提供了一个完美的解决方案:计算的完整性和机密性。
TEE与零知识证明
零知识证明(ZKP)使ZCash可以实现私人代币的传输。尽管ZKP在不需要可信的硬件制造商的情况下就保证了隐私,但它们具有计算量大和交易量大的特点。此外,ZKP是研究的前沿领域,了解它们需要专业知识。
另一方面,TEE已进入主流并提供合理的易用性。纯粹主义者可能会抱怨,如今的制造商没有与公众分享他们的设计,从而避免了科学的同行评审。 Keystone已经启动了一个开放源代码的TEE项目,该项目可能有一天会产生经过良好审计的TEE。但是,我们仍然需要信任Keystone ASIC的制造商,后者必须提供远程证明。
使用SubstraTEE来做私人交易
超级计算系统一直在努力完成其产品SubstraTEE的有效概念证明。私人代币交易是第一个用例的核心。
让我们来看一个如何处理私人代币交易的示例。Alice想不告诉其他人将100个代币转移给Bob,但只有Bob知道转账的情况。她创建了屏蔽的SubstraTEE交易:
let call = TrustedCall :: balance_transfer(alice_incognito.public(),bob_incognito.public(),100);
Alice使用SubstraTEE工人的屏蔽密钥对该命令进行加密,并作为常规的Substrate外部对象发送到SubstraTeeRegistry运行时模块。因为有效负载是加密的,除了SubstraTEE工人TEE,其他任何人都不能对其解密并查看此命令的详细信息。SubstraTeeRegistry充当代理并调度包括不透明有效负载的事件。
SubstraTEE工人侦听此类调用事件,并将有效负载转发到其TEE中。然后,TEE对有效负载进行解密并检索原始命令,该原始命令由状态转换功能(STF)处理。对于此演示,STF与Substrate的Balances运行时模块是完全相同的编码。
STF在加密的链下状态上运行并执行状态更新。在这种情况下,它将100个代币从帐户alice_incognito转移到bob_incognito。结果状态被加密并存储在IPFS中。然后,工作人员会向链发送外部确认信息,包括指令的哈希值和更新状态的哈希值。
现在,Alice可以通过任何私人通信渠道向Bob发送原始指令,从而使Bob确信转移已经发生。现在,Bob可以在链上确认中扫描该命令的哈希值。Bob还可以通过直接通过websocket界面查询工作人员来查看其更新后的余额。
您可以在YouTube上观看此SubstraTEE现场演示。
https://www.youtube.com/watch?v=UQysB3MpOuk&feature=youtu.be
远程认证
Alice和Bob如何才能保证SubstraTEE工人确实在真正的TEE上运行预期的代码?
远程证明是要求TEE制造商对TEE进行身份验证并签署一份报告的过程,该报告确认TEE的真实性以及TEE正在执行的二进制哈希。这样的报告还包括TEE的公共签名密钥,因此我们可以放心,通过验证其签名,我们正在与正确的TEE进行真正的交谈。
SubstraTEE为用户简化了将远程证明链上存储在SubstraTeeRegistry中的过程。因此我们用户不需要再向制造商证明服务进行注册。
冗余
如果SubstraTEE工人下线会怎样?如果只有一个工人,则整个状态可能永远消失。为了实现冗余,我们需要几个工人在同一状态下进行操作。他们都需要知道状态加密密钥。
我们将SubstraTEE设计为未经许可的,并通过定期向我们的SubstraTeeRegistry提供远程证明来允许任何人加入工作组。新加入的工人将向老员工索要钥匙。两名工人将进行相互的远程认证,并提供已配置好的密钥。新工人将从IPFS获取最新状态,并立即开始与所有其他工人并行处理请求。现在我们可以杀死除一名工人之外的所有工人,并且网络还可以保持活动状态和反应能力。
前景
我们已经展示了SubstraTEE如何增强隐私性。接下来是对链状态的不信任访问。我们正在努力提供带有ink的通用私有计算合同并建立链桥。
不久,我们可能会实现直接调用,从而提高可伸缩性。虽然我们当前的解决方案每个请求都需要1 + N个链上交易(N是工人数),但是直接调用意味着将请求直接发送给工人,并在链上进行批量确认,每秒允许1000个请求。直接调用带来了GDPR的另一个好处:删除权。由于没有任何个人数据接触过区块链,因此删除权可以实现为STF的功能。
这项工作得到了Web3 基金会的资助。
关于PolkaBase