数据认证
如果我们假设去中心化应用查询的数据源既具有权威性又值得信赖,那么一个悬而未决的问题仍然存在:假设oracle和查询/响应机制可能由不同的实体操作,我们如何才能信任这种机制?数据在传输过程中可能会被篡改,因此脱链方法能够证明返回数据的完整性至关重要。数据认证的两种常用方法是真实性证明和可信执行环境(TEE)。
真实性证明是加密保证,证明数据未被篡改。基于各种证明技术(例如,数字签名证明),它们有效地将信任从数据载体转移到证明者,即证明方法的提供者。通过在链上验证真实性,智能合约能够在对其进行操作之前验证数据的完整性。Oraclize[1]是利用各种真实性证明的oracle服务的一个例子。目前可用于以太坊主网络的数据查询是TLSNotary Proof [2]。TLSNotary Proofs允许客户端向第三方提供客户端和服务器之间发生HTTPS Web流量的证据。虽然HTTPS本身是安全的,但它不支持数据签名。结果是,TLSNotary证明依赖于TLSNotary(通过PageSigner [3])签名。TLSNotary Proofs利用传输层安全性(TLS)协议,使得在访问数据后对数据进行签名的TLS主密钥在三方之间分配:服务器(oracle),受审核方(Oraclize)和核数师。Oraclize使用Amazon Web Services(AWS)虚拟机实例作为审核员,可以证明自它实例化以来未经修改[4]。此AWS实例存储TLSNotary机密,允许其提供诚实证明。虽然它提供了比纯信任查询/响应机制更高的数据篡改保证,但这种方法确实需要假设亚马逊本身不会篡改VM实例。
TownCrier [5,6]是基于可信执行环境的经过身份验证的数据馈送oracle系统; 这些方法采用不同的机制,利用基于硬件的安全区域来验证数据的完整性。TownCrier使用英特尔的SGX(Software Guard eXtensions)来确保HTTPS查询的响应可以被验证为可靠。SGX提供完整性保证,确保在安全区内运行的应用程序受到CPU的保护,防止任何其他进程被篡改。它还提供机密性,确保在安全区内运行时应用程序的状态对其他进程不透明。最后,SGX允许证明,通过生成数字签名的证据,证明应用程序 - 通过其构建的哈希安全地识别 - 实际上是在安全区内运行。通过验证此数字签名,去中心化式应用程序可以证明TownCrier实例在SGX安全区内安全运行。反过来,这证明实例没有被篡改,因此TownCrier发出的数据是真实的。机密性属性还允许TownCrier通过允许使用TownCrier实例的公钥加密数据查询来处理私有数据。通过在诸如SGX的安全区内运行oracle的查询/响应机制,可以有效地将其视为在受信任的第三方硬件上安全运行,确保所请求的数据被返回到未被禁用的状态(假设我们信任Intel/SGX)。