当前位置:  首页 →热点 →正文

如何为DApp构建信任机制

2019-01-08 10:22:09 华尔街之狼

在点对点支付领域,比特币提供了一套低成本构建信任的机制,其成功表明了区块链技术的价值。以太坊试图将这种信任机制,从点对点支付领域扩展到更为广泛的通用业务场景,于是提出了智能合约,并由此衍生出了DApp的应用新形态。以太坊的理想宏大而美好,”Code is Law“一时间成为金科玉律。但当我们死磕目前主流平台上DApp的信任基础时却发现,从以太坊到EOS,DApp的信任级别对比数字货币点对点支付的信任级别都相去甚远!!!

如何为DApp构建信任机制

目前各平台最典型的DApp结构便是前端静态html页面加上后端链上智能合约,其中,对于同一个DApp,后端很可能是由多个彼此交互的智能合约共同组成。如何为DApp构建信任机制,以太坊和EOS向我们展示了两种截然不同的方案。

 

以太坊 - Code is Law,代码即法律

以太坊上智能合约一旦被部署,代码将无法被更改。代码即法律,这是以太坊赋予其平台上DApp的信任基础。但基于此,审视DApp的安全级别,我们会发现漏洞百出。

首先,前端逻辑随时可篡改,安全性毫无保障。目前我们没有办法将前端页面也放置到智能合约中,导致前端页面可以被随意篡改,可能被开发者修改,也可能被DNS劫持。更糟糕的是,前端页面如果被篡改,大多数以太坊用户在授权时,依靠小狐狸MetaMask里的信息,面对专业的参数信息以及一长串智能合约地址,将会很难察觉陷阱。所以即使后端智能合约做了很好的安全审计,前端的巨大风险缺口,也可能导致某个DApp的信任基础瞬间崩塌。

其次,后端逻辑后门众多,难以保障整体安全。对于一个DApp,后端极可能被拆分为多个智能合约,一方面模块化更好管理维护,另一方面借助合约间调用可以实现部分模块的升级。但这为DApp的安全生态建设带来了不小的麻烦,

1. 为了保障DApp后端的安全,安全审计需要将某个DApp对应的智能合约集合当做一个整体来审核,并公布报告获取用户的信任,其审核报告的主体是DApp对应的智能合约集合。但用户在实际使用过程中,其调用的主体却依旧是集合中一个个单一的智能合约,而且这些单个智能合约和DApp的对应关系并不在链上。两者主体的差异导致我们向用户解释”某个智能合约是可以放心调用的“变得非常困难,我们既要确保合约和DApp的对应关系是安全的,还要确保DApp的智能合约集合整体逻辑是安全的。

2. 由于合约间调用的功能中,可以允许被调用的合约地址不是一个常量,如果在做安全审计时逻辑是安全的,但之后DApp的开发者通过预留的接口变更了合约中被调用合约的地址,后台逻辑将会被修改,而这种陷阱对于DApp用户而言,几乎是难以防范的,MetaMask给出的信息都没有变化,但有可能后台逻辑已经发生变化了。

可见,即使在“Code is Law”的强约束情况下,以太坊上DApp的安全性依旧难以保障,其构建的DApp信任级别远远达不到比特币构建的点对点支付信任级别。

 

EOS - The Intent of Code is Law,代码意图即法律

EOS几乎完全抛弃了“Code is Law”的信条,所有账号可以随时随地修改其名下的合约代码,无需受到任何限制。虽然这让DApp再无升级困难的困扰,但却可能释放了灾难的种子。相较于以太坊的DApp的安全隐患,EOS几乎无一幸免,前端依旧随时可篡改,后端仍然后门众多。但是客观地讲,EOS对比于以太坊有一个巨大的优势,即其便于记忆和识别的账号命名系统。用户在调用合约时,稍加注意,便能清楚地判断自己是否在调用官方的合约,可以轻松避免前端被DNS劫持和钓鱼的风险。

 

为了让DApp更容易构建信任,综合来看,有如下几个方向可以改进,

- 前后端一体。理想状况下,当然是前端逻辑也可以上链得到安全保障。通过区块链浏览器,而不是互联网浏览器,直接从链上获取前端页面展示,并整合钱包插件向链发起后端请求,实现一体的交互体验。从这个角度出发,对于区块链平台,使用支持JS的智能合约引擎是个不错的选择,可以方便的实现安全级别超高的DApp全栈式开发。

- 引入命名系统。容易记忆和辨识的命名系统就和HTTPS证书一样,将让用户拥有一定辨别诈骗的能力。

- 上增加DApp实体。某个DApp涉及的合约、数据和资产都应处于这个DApp的命名空间下管理,所有的请求不再发往单个的合约,而是直接发往链上的DApp实体。这样可以明确限定DApp安全审计的边界,并且统一安全审计的对象和用户调用的对象,用户在授权调用信息时,相关DApp的安全审计信息将更加清晰而且便于理解。

- 提供DApp整体升级方案。DApp是一个整体,就像我们发布移动App一样,作为一个完整产品,DApp应该整体升级,而不是一个合约一个合约的升级。而且既然可以整体升级,就也可以整体回滚,让产品发布更加灵活而且便于管理。而且DApp被逻辑上变为一个整体后,我们还有机会为DApp构建通用的管理后台。

- 消除后门。合约间调用功能应该使用常量地址,而不应该支持动态地址,这将会导致安全审计失效,致使用户坠入开发者留下的陷阱。

BB财经|BBcaijing.com原创,作者华尔街之狼,转载请注明出处:http://www.bbcaijing.cn/news/44084.html