写点什么

如何简化去中心化应用运行程序?

借助渐进式安全概念与几种特定解决方案,就可为用户提供如 Web2 一样的简单入门途径。

  • 2019-11-12
  • 本文字数:3497 字

    阅读完需:约 11 分钟

如何简化去中心化应用运行程序?


现代世界中的可扩展区块链,就如同沙漠中的一片体育场:配置豪华、容纳能力可观,但就是没人坐。


设想一下,如果我们想在区块链项目中试试水——比如想养只虚拟小猫或者是搞点卡片收藏,就目前来看,准备过程其实相当复杂,我们需要:


  1. 安装 Metamask;

  2. 创建密钥对,安全存储私钥;如果之后需要通过其他设备进行访问,还需要了解如何将密钥传输到新设备当中;

  3. 在 Coinbase 上完成注册;

  4. 填写“了解你的客户”调查表单,包括向 Coinbase 提交信息文档;

  5. 等上好几天;

  6. 购买以太币。没错,如果不买币,连个游戏都玩不上!

  7. 从 Coinbase 处提取以太币;

  8. 最后,买下你的小猫!虽然游戏中的每一项操作都需要付费,但响应时间仍然长达恐怖的 20 秒以上。


在整个流程当中,将有 95%到 97%的用户选择放弃。这意味着每 100 个有意使用这些所谓现代游戏或者应用程序的用户,能够熬过准备阶段的只有 5 个甚至更少。


整个流程,大致可以分为以下三个子问题:


  1. 必须安装浏览器插件(或者钱包应用程序)以安全实现对链交互;

  2. 必须具备并理解公/私钥安全机制;

  3. 必须为每一项交易付费。


第 1 条和第 2 条很好理解,毕竟与区块链交互过程中的安全保障极为重要,用户当然不希望自己的资金或者资产随随便便就消失不见。而最后一项除了向矿工提供财务激励外,同时也给区块链自身提供安全支持——如果交易全部免费执行,那么一定会出现发送大量无用交易的 DDoS 攻击活动。


要想参与到以太坊或者 NEAR 之类的特定区块链生态系统当中,安装浏览器插件或钱包、在账户上购买部分资产,并在所有设备上设置正确的密钥对是必须完成的三项前提操作。对大部分用户来说,Web3 应用程序运行速度缓慢,所以可能相对较易上手。但是,截至目前,大多数互联网用户还没有接触到区块链。如果希望进一步拓展潜在使用群体,那么第一步就是简化上手难度。


在理想情况下,在区块链上运行去中心化应用程序的过程,应该比构建 NodeJS 应用程序更简单。而且一旦应用程序部署到位,即使是从未接触过区块链的用户,也可以在浏览器中直接打开并轻松开始交互。


下面,让我们立足以上子问题,逐一考量目前区块链业界为其做出的改善性努力,以及如何在协议层面给出解决方案。

浏览器插件/钱包应用

只有在计算机上运行一系列自定义二进制文件,用户才能真正安全地同区块链交互。其背后的基本思路在于,我们在浏览器中打开的任何托管内容都由托管方全面控制,因此对方可以随意加以变更。即使托管解决方案保存有本地加密密钥,代码也可以从本地存储中获取数据并在将其解密后立即发送至远程服务器,由此完成与区块链的交互。


然而,我们想象一下最典型的例子:一个没有区块链账户的人,要如何购买加密货币?摆在面前的路只有两条:在本地设置账户并存入资金,或者将账户完全交由 Coinbase 这类集中服务托管商打理。人都怕麻烦,所以大多数用户会选择后者。


其他去中心化应用程序也存在类似的情况。当用户与区块链进行交互时,他们主要通过托管解决方案完成交互操作。虽然这种方式安全性较差,毕竟该集中实体会接管用户账户,但早期用户的损失顾虑不强,因此实际安全性至少也能与目前我们习惯使用的其他集中式服务持平。托管商掌握着大量资产与数据,所以用户基本可以信任他们。


另外需要强调一点:大多数人会在火狐或者 Chrome 的扩展目录中安装 MetaMask,并从 iTunes 或者 PlayStore 处安装钱包应用,这就意味着我们已经对 MetaMask/钱包应用开发商以及 Mozilla、苹果或者谷歌等大型企业给予了信任。而且这个世界上毕竟没有那么多强迫症,绝大多数人并不打算在检查代码之后再安装 MetaMask 的开源版本。集中实体基本上还是靠得住的,我们的生活经历已经反复证明了这一点。



如今的开发人员已经能够将现有解决方案集成至去中心化应用程序当中,从而在无需安装浏览器插件及钱包应用(例如 Portis)的前提下完成区块链交互。但此类服务的问题在于,一旦人们放心将自己的私钥对交给这类服务,那么账户安全将受到永久性损害。换言之,如果日后希望拿回账户资产的完全所有权,用户必须创建新账户并将资产全部转移过去。而一旦某些应用程序不提供便捷的资产转移功能,那么用户可能就彻底失去了对资产的完全控制能力。


一种解决方案是建立一个基于合约的账户,用户可以随时根据意愿替换并控制账户所使用的密钥。但要实现这一功能,用户必须在刚刚使用时就选定账户的基于合约属性。除了 Portis 等少数服务默认提供此类账户之外,大多数用户其实享受不到这项功能。此外,基于合约的账户无法像常规私钥保护账户那样执行所有操作,这一点也需要注意。


在 NEAR 当中,每个账户都默认基于合约创建,且 NEAR 提供对应的托管钱包。最终,用户可以利用托管的钱包与区块链进行交互,并随时通过本地创建的新密钥对完成账户更新,从而保障账户的安全性水平。


最近,社区中出现了我们非常赞赏的新表述:渐进式安全。随着时间的推移,用户对区块链的参与度与投资额日渐增长,用户完全可以从高可用性/低安全性逐步过渡至高安全性/低可用性。

了解私钥/公钥对

如果渐进式安全最终能够得到广泛认可,同时托管钱包成为人们的首选,那么密钥对机制也将随之消失。简单来讲,托管钱包会将所有用户的私钥存储在自己的托管数据库当中,并直接向用户提供身份验证层。这一验证层允许用户使用 Facebook 账户登录、Google 账户登录或者是更为传统的电子邮件地址加密码登录方式。只有在用户希望由托管钱包转换为本地钱包时,才需要正确设置私钥,并一步步学习如何将密钥转移到其他设备当中。


有趣的是,通过基于合约的账户,我们既能够轻松完成转移,又可保持全面的安全控制能力。相较于本地钱包通过非安全通道进行私钥转移的方法,基于合约的账户管理方案可提供以下两种方案选项:“proposeNewSk”与“approveSk”。


第一种方法可供任何人调用,用于向账户的私钥列表当中中添加新的私钥。第二种则必须利用账户中的某一现有私钥进行调用,并在验证通过后批准为账户添加新的私钥。如此一来,用户就可以在新设备设置全新的密钥对,从该设备上提出出新的私钥,再在原始设备上加以批准。


手续费区块链上执行的任何交易都会消耗大量资源。为了安全执行状态变更,参与区块链的众多节点都需要在应用状态变化之前对其进行验证。与大量资源相对应,交易的执行自然是有成本的。


将 Web3 与 Web2 进行比较,很多人会认定 Web2 服务在本质上是免费的,毕竟我们在 Facebook 上执行操作时并不需要缴费,但实际情况并非如此。如果用户的长期预期价值达不到响应其操作请求以及存储其发布数据所耗费的资源成本,那么 Facebook 方面根本不可能为用户提供免费服务。


在使用 Facebook 时,用户实际上是在用自己的个人数据付费,而且对 Facebook 的滥用行为无可奈何。以下截屏来自 Facebook,其中包含的所有额外信息都由广告商发布:



(x 的值是 2)


对区块链来说,如果应用程序开发商认为用户的生命周期总价值高于交易手续费,那么当然也可以提供免费服务。这正是 EOS 项目提出的几个极具现实意义的倡议之一。


同样的,如果托管钱包能够从用户身上获得一定收益,那么他们当然也可以负担这部分常规支出。例如,NEAR 可能会为每位用户承担一部分 Gas 交易手续费,并借此提高自身协议的普及度。CryptoKitties 可以承担合约交互执行成本,毕竟 CryptoKitties 的用户拥有相当高的购买积极性,转化率也确实可观。


但这并没能彻底解决问题:虽然用户看起来不必为交易直接付费,但免费交易机制将导致垃圾操作的数量大量增加,并导致钱包托管商或者应用程序开发商不得不设置免费限额以避免交易执行成本的快速膨胀。


面对同样的问题,Facebook 用户会注册多个账户反复利用免费限额。这类挑战并非区块链所特有,好在目前已经出现了不少解决方案。托管钱包可以选择一种来预防潜在的 DDoS 攻击,同时继续为用户提供免费的交易服务。


不过仍有其他问题存在。这种为用户承担费用、期望后续获得更高价值的商业模式极易遭到滥用。谷歌、Facebook 以及苹果等科技巨头为此制定出不透明的隐私政策,这种对用户隐私权的践踏实际上也是防止滥用的手段。Web3 虽然希望在基本设计层面排除这种作法,但为了吸引更多用户的参与,我们仍在有意或无意地采取类似的机制。


下面来说说最本质的区别。在 Web3 中,虽然用户默认享受的是以隐私换免费的机制,但我们可以随时切换为自主交易付款模式,从而为托管钱包或者浏览器扩展程序的使用带来新的选项。如此一来,我们就能真正控制自己的隐私权益。

总结

借助渐进式安全概念与以上提到的几种特定解决方案,我们得以为用户提供如 Web2 一样的简单入门途径,同时允许使用者随时切换至完整的区块链安全性水平。


原文链接:


On usability of blockchain applications


2019-11-12 16:281926

评论

发布
暂无评论
发现更多内容

二本4年Java经验,五面阿里(定薪45K)

退休的汤姆

Java 程序员 阿里 面经 秋招

利用GCC插件实现代码分析和安全审计

科技怪咖

阿里灵杰融合智能算力,全栈AI服务为探索者铺路

阿里云大数据AI技术

人工智能 大数据 企业号九月金秋榜

大数据培训前景怎么样

小谷哥

首次公开到知乎爆火!基于SpringCloud+SpringBoot+Vue电子版项目实战教程,附完整源码

退休的汤姆

Java spring 程序员 面试题 阿里

音视频开发进阶|第六讲:色彩和色彩空间·上篇

ZEGO即构

音视频开发 色彩 色彩空间

从云计算到函数计算

Serverless Devs

云计算 阿里云 AWS

软件测试 | 测试开发 | 测试开发基础 mvn test | 利用 Maven Surefire Plugin 做测试用例基础执行管理

测吧(北京)科技有限公司

maven

LeetCode-58. 最后一个单词的长度(java)

bug菌

Leet Code 每日一题 9月月更

技术分享| 基于RTM 实现的呼叫邀请如何添加推送功能?

anyRTC开发者

音视频 IM 实时消息 呼叫邀请 推送

DevOps 团队如何防御 API 攻击

SEAL安全

DevOps DevSecOps 软件供应链安全

从零教你使用MindStudio进行Pytorch离线推理全流程

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

基于阿里云Serverless函数计算开发的疫情数据统计推送机器人

Serverless Devs

LeetCode-66. 加一(java)

bug菌

Leet Code 每日一题 9月月更

学员参加前端培训哪里比较靠谱?

小谷哥

零基础学习java培训是否适合参加

小谷哥

在java培训中心怎样才能快速学习?

小谷哥

软件测试 | 测试开发 | 构建测试平台与对应的组织架构需要哪些能力?

测吧(北京)科技有限公司

测试

跟我学Python图像处理丨何为图像的灰度非线性变换

华为云开发者联盟

Python 人工智能 图片处理 企业号九月金秋榜

零基础如何参加大数据培训

小谷哥

在线数据迁移,数字化时代的必修课 —— 京东云数据迁移实践

京东科技开发者

数据 数据迁移 上云 redis'

Substrate技术及生态8月大事记 | 波卡发布新版本,XCM协议更新

One Block Community

区块链 技术 开发者 Substrate 更新

游戏技术加速数实融合,网易伏羲挖掘机器人首次曝光

网易伏羲

人工智能 机器学习 工程实践

Dubbo 3 StateRouter:下一代微服务高效流量路由

阿里巴巴中间件

阿里云 开源 微服务 dubbo 中间件

分布式团队的高效站立会说明书 | Liga译文

LigaAI

高效工作 敏捷开发 开发团队 每日站会 企业号九月金秋榜

解锁云原生新场景 | 云原生加速云边端一体化发展

York

容器 云原生 边缘计算 边云协同 边缘云原生

51单片机定时器原理及相关器件

孤衫

C语言 单片机 9月月更

设计模式的艺术 第十七章命令设计模式练习(开发一个基于Windows平台的公告板系统。该系统提供了一个主菜单(Menu),主菜单包含一些菜单项,Menu类可以增加菜单项。菜单项主要方法是click(),每个菜单项包含一个抽象命令类)

代廉洁

设计模式的艺术

Apache DolphinScheduler PMC:开源不一定也要九死一生

白鲸开源

海豚调度 开源社区 Apache DolphinScheduler 开源文化 #开源

千锋锋友学盟分享会:程序员百万年薪进阶指

千锋IT教育

如何简化去中心化应用运行程序?_区块链_Alexander Skidanov_InfoQ精选文章