区块链应用程序生活在自己的数字领域中,该领域与“物质世界”(也称为Real World™)完全正交。无论是分布式应用程序还是智能合约,它们的影响范围都限于它们可以控制的空间。我们现实中的任何用例投影到现实中最终都会面临以下难题:区块链应用程序如何与物理世界高效安全地交互?
Oracle是签署有关世界状况声明的受信任实体。我们需要网关与现实世界(物理世界)进行输入/输出,这也称为“Oracle”。取决于我们究竟所谓的“物理世界”,取决于是否存在关于我们需要评估的状态的共识,oracle的实现方式有所不同。
软件Oracle
原产地证明(TLSNotary)
当您可以在线获取所需信息时,基于简单软件的Oracle可以提供有效的解决方案。他们可以回答一些简单的问题,例如:“ BTC的欧元价值是多少?”,“这架飞机延迟了30分钟以上吗?”或“昨天在这个城市下雨吗?”。数据可以在Internet上在线获得,也可以从可信任的来源中提取,例如公司航空公司,财务数据汇总商或气象机构。
oracle可以通过密码证明数据的来源(TLSNotary)并将信息推送到智能合约。oracle正在公开声明安全网页的内容,并为分布式的应用程序提供了可行的网关。例如,Oraclize是一个提供“Oracle即服务”的平台。
但是这种实现有一些技术利弊,主要的问题是您需要信任信息源。对于来自信誉良好的网站的天气数据,这是可以接受的,但是诸如事实或事件之类的更复杂的问题呢?我们应该信任维基百科吗?版本战争可能会严重操纵oracle,而oracle的主张将毫无价值。
始终可以从不同的可信赖来源(金融行情,天气数据,体育成绩…)对事实进行核对,但对于更复杂的问题却不起作用。
基于共识的oracle
诸如Augur之类的分布式预测市场在很大程度上依靠Oracle解决事件的结果。但是,为避免市场操纵,这些Oracle不能基于一个实体(例如Google或Wikipedia)的信任。解决方案是使用基于声誉的相当复杂的共识机制,最终构建去中心化的oracle。
对于可以通过共识确定的事实,所有先前的oracle实施都效果最佳。
但是关于实时,非公开,以用户为中心的事实呢?
有些事实无法通过共识或公共数据证明来确定。举些例子:
· 这个容器现在在哪里?
· 这扇门上锁了吗?
· 最近60分钟内此引擎的碳排放量是多少?
· 这辆车的当前速度是多少?
· 我的心跳是什么?
硬件oracle
本地和私有数据源
一些应用程序需要从物理世界中获取信息或读取数据,其中数据仅存在于目标对象(或人)中。测量必须在本地进行,并且通常是实时的。由于数据是私有数据,因此既不能通过公开确认也不能通过共识来断言信息的准确性。
这些设置涉及的一些应用程序和用例是:
· 工业:供应链,可追溯性,能源…
· 共享经济:点对点汽车/公寓租赁,智能物品…
· 保险:汽车安全保费,个人健康…
例如,以智能合约保险为例,驾驶员将支付保费,以期因其在道路上的良好行为而获得奖励。犯有超速驾驶行为的驾驶员将失去保费,而保费将归所有“守法公民”共享。从而为良好驾驶带来更大的激励。
这种方法的困难在于找到一种安全且不可篡改的方式来监视车辆的速度:如果一个人能够模拟完美的驾驶或将跟踪器连接到另一辆汽车,则保险系统将会完全崩溃。
可加密证明的防篡改传感器
为了能够安全地报告读数(来自任何类型的传感器),必须结合以下各项:
· 传感器读数的加密证明,验证测量的源头:每个设备都有一个私钥,用于对传出的有效数据进行签名(使用随机数以避免重复测量)
· 阅读器设备的防篡改安装,在尝试进行篡改操作(连接到另一个对象,注入错误刺激等)的情况下,使设备无法工作(通过擦除私钥)。
这些安全的读取设备称为硬件Pythias,是从物理工作到区块链领域的网关。
这些Oracle的部署需要配置系统(主证明密钥和设备标识密钥),并建立策略来监督它们正确的初始安装(以确保它们正在测量我们希望它们测量的东西)。防篡改功能和通过安全元素保护私钥可确保长期信任。
硬件Oracle内部传感器数据的加密证明
从设计上讲,这种方法既非不信任也不完全分布式。以汽车的智能合约保险为例,跟踪器必须具有正确的证明密钥(因此必须从特定供应商处购买),并且必须制定审计策略以随机验证其正确安装(因此需要一些外部受信方/审计员)。
但是,由于大多数硬件Pythias的用例都需要某种集中化或权威性,因此该设计是完美的选择。
没有可靠的硬件Pythia技术,就不会有用于工业,保险和共享经济的去中心化应用程序。我们预计,从长远来看,这些设备将得到大规模部署。
reference:
https://medium.com/ledger-on-security-and-blockchain/hardware-oracles-bridging-the-real-world-to-the-blockchain-ca97c2fc3e6c