写点什么

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

借助渐进式安全概念与几种特定解决方案,就可为用户提供如 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:281675

评论

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

全球区块链专利排行榜中国52家企业上榜

CECBC

Rust多线程之数据共享

编号94530

rust 多线程 数据共享 什么是多线程

Flask-Restful 中 fileds.DateTime 不支持 strftime 格式

Leetao

Python flask web开发 Python框架 flask-restful

尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...

程序猿DD

Spring Boot

计算机网络基础(五)---网络层-IP地址的子网划分

书旅

laravel 计算机网络 网络协议 计算机基础

【写作群星榜】7.11~7.17 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

字节跳动的ToB生意经

ToB行业头条

腾讯员工每天在岗不足 8 小时被辞?背后原因可能不止你看到的这些!

程序员生活志

腾讯 辞退

阿里巴巴取消周报?别高兴太早,也不见得是一件好事

非著名程序员

阿里巴巴 程序员 职场成长 职场误区

定义@WeClub

WeClub

WeClub

YAPI接口管理平台使用基础入门(一)

Man

DevOps 最佳实践 YAPI API接口管理

推荐一些学习MySQL的资源

Simon

MySQL

犯罪黑客线上拉人入伙,流窜多地网吧植马,仅为盗取游戏账号

360安全卫士

智算中心开启智慧时代,浪潮信息迎来新发展

Geek_116789

细数2020上半年PC端十大“黑恶势力”,一起康康是谁在“兴风作浪”

360安全卫士

信创舆情一线--台积电宣布9月14日断供华为

统小信uos

华为 芯片 半导体

小白教程——基于阿里云快速搭建自己的网站

诸葛小猿

阿里云 视频 网站搭建 小白

我成功转行做了java程序猿!

诸葛小猿

Java 程序员 转行

编程核心能力之复用

顿晓

编程 复用 编程日课 技术思维

高价值干货:这可能是你见过最全的网络爬虫总结

华为云开发者联盟

Python Web 爬虫 python 爬虫 内存数据库

从IT建设模式变化看客户中心发展

环信

OOP面向对象编程(Object-Oriented Programming)概述

奈学教育

面向对象编程

分布式事务解决方案Seata源码解析

Chank

Java 分布式 分布式事务

案例研究之聊聊 Mybatis 源码 (三)

小诚信驿站

学习 开源 刘晓成 源码解析 小诚信驿站

项目管理:如何显性管理并提升Story分解能力

华为云开发者联盟

项目管理 DevOps 故事 用户研究 华为云

调薪

池建强

团队管理 薪酬

2020技能排名:Python增速爆炸,SQL和Java老当益壮,AWS大吃一惊

程序猿黑哥

Java Python sql

【DevCloud·敏捷智库】如何利用用户故事了解需求

华为云开发者联盟

敏捷开发 需求管理 需求 故事 华为云

OOP面向对象编程(Object-Oriented Programming)概述

古月木易

面向对象 oop

为什么编译原理被称为龙书?

苹果看辽宁体育

编译原理 编译优化

分析师的进阶与升华:努力把自己做“没”

松子(李博源)

方法论 数据模型 数据分析师 指标体系 商业模型

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